- 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
Hacker News yorumları
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.
Bu tür katmanların yerine başka bir şey koyabilmek, hesaplama maliyetini epey düşürmeye yardımcı olur.
tanh'ın da başka etkileri olacaktır. Çünkü normalizasyon bazen koşullandırma sorununu çözüyor. Yine de daha fazla alternatif olması sevindirici.
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.
y = x + f(x)biçimindedir.LNinputileLNoutputu karşılaştırırkentanh(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.