1 puan yazan GN⁺ 2025-03-16 | 1 yorum | WhatsApp'ta paylaş
  • Transformer’larda neredeyse vazgeçilmez gibi kullanılan Layer Norm/RMSNorm yerine Dynamic Tanh (DyT) konduğunda, mevcut normalleştirmeli modellere benzer ya da daha iyi performans alınabileceği gösteriliyor
  • DyT, DyT(x) = tanh(αx) biçiminde bir eleman bazlı işlem; çıkış noktası ise Layer Normalization’ın Transformer içinde sık sık tanh’a benzer S biçimli bir giriş-çıkış eşlemesi oluşturduğu gözlemi
  • Uygulaması PyTorch’ta birkaç satır düzeyinde; öğrenilebilir alpha, weight, bias ile tanh(alpha * x) çıktısına ölçek ve bias uygulanıyor
  • Değerlendirme ViT, ConvNeXt, MAE, DINO, DiT, LLaMA, wav2vec 2.0, HyenaDNA, Caduceus dahil olmak üzere görsel, dil, ses ve DNA dizisi modellemesinin geniş bir bölümünü kapsıyor
  • Ayrı bir hiperparametre ayarı yapılmadan bile birçok yapılandırmada normalleştirme tabanlı muadillerine benzer ya da daha iyi sonuçlar elde edilmesi, normalleştirme katmanlarının mutlaka gerekli olduğu varsayımını yeniden sorgulatıyor

Dynamic Tanh’ın değiştirdiği nokta

  • DyT, Transformer bloklarındaki Layer Norm veya RMSNorm’un yerini alan basit bir katmandır
  • Temel işlem, eleman bazında uygulanan DyT(x) = tanh(αx) ifadesidir
  • Normalleştirme katmanları kaldırılmış Transformer’ların da mevcut normalleştirmeli Transformer’larla benzer ya da daha yüksek performans gösterebileceğini gösteriyor
  • Fikrin çıkış noktası, Transformer içindeki Layer Normalization’ın sıkça oluşturduğu giriş-çıkış ilişkisinin scaled tanh fonksiyonuna benzemesi gözlemidir

Uygulama biçimi

  • DyT modülü PyTorch’ta kısa bir şekilde uygulanabilir
class DyT(nn.Module):
    def __init__(self, num_features, alpha_init_value=0.5):
        super().__init__()
        self.alpha = nn.Parameter(torch.ones(1) * alpha_init_value)
        self.weight = nn.Parameter(torch.ones(num_features))
        self.bias = nn.Parameter(torch.zeros(num_features))

    def forward(self, x):
        x = torch.tanh(self.alpha * x)
        return x * self.weight + self.bias
  • alpha öğrenilebilir bir parametredir ve başlangıç değeri 0.5 olarak ayarlanır
  • weight ve bias da öğrenilebilir parametrelerdir; tanh(alpha * x) çıktısına uygulanırlar

Layer Normalization’dan çıkan gözlem

  • Transformer’daki Layer Normalization (LN), scaled tanh fonksiyonuna yakın bir giriş-çıkış eşlemesi üretir
  • İlk katmanlarda bu eşleme genel olarak doğrusal olmaya yakındır
  • Daha derin katmanlara gidildikçe tanh fonksiyonunun karakteristiği olan S biçimli eğri daha belirgin hale gelir
  • Gözlem kapsamına Vision Transformer (ViT), ses Transformer modeli wav2vec 2.0 ve Diffusion Transformer (DiT) içindeki seçilmiş LN katmanları dahildir

Değerlendirme kapsamı ve sonuçlar

  • DyT, çeşitli mimariler ve görevler üzerinde değerlendirildi
    • Gözetimli öğrenme ile görsel: ViT, ConvNeXt
    • Öz-gözetimli öğrenme ile görsel: MAE, DINO
    • Difüzyon modeli: DiT
    • Büyük dil modeli: LLaMA
    • Öz-gözetimli öğrenme ile ses: wav2vec 2.0
    • DNA dizisi modellemesi: HyenaDNA, Caduceus
  • Tüm durumlarda DyT uygulanan Transformer, normalleştirme tabanlı muadillerine benzer ya da daha iyi performans gösterdi
  • Değerlendirme kapsamı algılamadan üretime, gözetimli öğrenmeden öz-gözetimli öğrenmeye, bilgisayarlı görüden dil modellerine kadar geniş bir alana yayılıyor

Referanslar

  • Download Paper: Araştırmanın tüm ayrıntılarını içeren makale
  • View on GitHub: Uygulama ayrıntılarının görülebileceği depo
  • View Summary: Araştırma sonuçlarının kısa özeti
  • Transformers without Normalization, CVPR 2025 makalesi olarak kabul edildi

1 yorum

 
GN⁺ 2025-03-16
Hacker News yorumları
  • Doğruysa oldukça iyi bir kademeli iyileştirme. Model performansını anlamlı biçimde artırıyor gibi görünmüyor, ancak günümüzdeki en gelişmiş LLM'lerin çoğunun kullandığı RMSNorm'dan daha düşük hesaplama maliyetine sahip olduğundan eğitimi daha hızlı ve ucuz hale getirebilir.
    • Ancak Transformer'ın toplam hesaplama yükü içinde RMSNorm'un payı oldukça küçük. Genelde indirgeme işlemleri, öncesindeki ve sonrasındaki işlemlerle kaynaştırılabilir.
    • Az önce kendi Transformer eğitim benchmark'ıma uyguladım; sonuç çok hayal kırıklığı yarattı. RMSNorm kullandığıma göre çok daha yavaş yakınsıyor.
      alpha ayarlamanın pek etkisi olmadı; bu yüzden kayda değer hiperparametre ayarı veya daha incelikli bir başlatma gerekebilir. Hem PyTorch'un varsayılan başlatmasını hem de ortogonal başlatmayı denedim, fark olmadı.
      Ya da kullandığım skaler optimizer iyi uymuyor olabilir. Adam'dan daha hızlı yakınsama sağlayan özel bir skaler optimizer kullanıyorum, ancak DyT katmanlarında yalnızca Adam'a benzer düzeyde göründü.
      Alternatif olarak, ancak onlarca milyar token sonra yakalayan bir yöntem de olabilir; bunu o kadar uzun test edecek bütçem yok.
  • float8 gibi düşük hassasiyetli formatlar kullanıldığında, genellikle normalizasyondan önce aktivasyon değerlerini BF16'ya yükseltmek gerekir. Bu yüzden daha düşük hassasiyetlere indikçe normalizasyon katmanlarının hesaplama içindeki payı artar.
    Bu tür katmanların yerine başka bir şey koyabilmek, hesaplama maliyetini epey düşürmeye yardımcı olur.
  • Ayrıntıları okumam gerekecek ama normalizasyonun kaldırılması büyük önem taşıyabilir. Yeni mimariler denerken ağın düzgün normalize edilmesini sağlamak her zaman zahmetlidir.
    tanh'ın da başka etkileri olacaktır. Çünkü normalizasyon bazen koşullandırma sorununu çözüyor. Yine de daha fazla alternatif olması sevindirici.
  • O zaman gradyan sönmesi artık bir sorun değil mi?
    • Katmanlar uygun şekilde başlatılırsa, derin ağlarda bile gradyan büyüklüklerinin sönmeden veya patlamadan kalması sağlanabilir. Örneğin her katman çıktısının ortalamasını 0'a, standart sapmasını 1'e ayarlarsanız gradyanlar da makul bir aralığa girer.
      Kaiming He ve arkadaşlarının orijinal ResNet makalesini ve onu izleyen makaleleri öneririm.
      RNN'lere yönelik modern bir yaklaşım için DeepMind'ın https://arxiv.org/abs/2303.06349 makalesi okunmaya değer.
      Esas nokta, en büyük özdeğerin, yani spektral yarıçapın 1'e yakın olması gerektiğidir. Bu, doğrusal dönüşümü tekrar tekrar uygulasanız bile aktivasyon değerlerinin büyümeyeceği veya küçülmeyeceği anlamına gelir.
    • ResNet'in gradyan sönmesini büyük ölçüde çözdüğünü düşünüyorum. Gradyan patlaması ise genelde iyi parametre başlatma ve normalizasyonla ele alınır. Bu makale de normalizasyona bir alternatif öneriyor sayılır.
    • İyi soru. Bu, tanh'ın aktivasyon fonksiyonu olarak kullanıldığı dönemlerin ve artık bağlantılar ile normalizasyon katmanlarından önceki zamanların sorunuydu. Başka aktivasyon fonksiyonları ve artık bağlantılar varken tanh'ı normalizasyon gibi kullanmak makul görünüyor.
    • Şekilde görüldüğü gibi Transformer artığı öğrenir. y = x + f(x) biçimindedir.
  • Sadece bana mı öyle geliyor bilmiyorum ama makaledeki grafik, LNinput ile LNoutputu karşılaştırırken tanh(a*x) sonrasına da ağırlık ve bias eklemiş gibi görünüyor.
    Benzerliği görmek için LayerNorm çıktısından ağırlık ve bias çıkarılmış sonuçla karşılaştırmak gerekmez mi diye düşünüyorum.
    Nihai sonuçlar iyi çıkıyorsa sorun değil, ama gerçekten değiştirilen kısmı ayrıca incelersek ne olup bittiğini daha iyi anlayabiliriz.
    • Uygulamaya bakınca, tanh hesaplandıktan sonra ağırlık ve bias uygulanıyor gibi görünüyor.
  • Pratikte bunun anlamı ne?
    • Özete göre, DyT eklendiğinde normalizasyonsuz Transformer'lar, çoğu zaman hiperparametre ayarı olmadan, normalize edilmiş karşılıklarıyla aynı veya daha iyi performans gösterebiliyor.