- Transformer में लगभग अनिवार्य मानी जाने वाली Layer Norm/RMSNorm की जगह Dynamic Tanh (DyT) लगाने पर भी, मौजूदा normalization मॉडल्स के बराबर या उनसे बेहतर प्रदर्शन मिल सकता है
- DyT
DyT(x) = tanh(αx) के रूप में एक element-wise operation है, और यह उस अवलोकन से शुरू होता है कि Transformer के भीतर Layer Normalization अक्सर tanh जैसी S-आकार की input-output mapping बनाता है
- इसका implementation PyTorch की कुछ ही लाइनों में हो जाता है, और trainable
alpha, weight, bias के साथ tanh(alpha * x) के output पर scale और bias लागू किया जाता है
- मूल्यांकन ViT, ConvNeXt, MAE, DINO, DiT, LLaMA, wav2vec 2.0, HyenaDNA, Caduceus तक फैला है, यानी vision, language, speech और DNA sequence modeling जैसे व्यापक क्षेत्रों को कवर करता है
- अलग से hyperparameter tuning के बिना भी कई settings में normalization-आधारित समकक्ष मॉडल्स के समान या बेहतर नतीजे मिले, जिससे यह धारणा फिर से सोचने लायक बनती है कि normalization layer अनिवार्य है
Dynamic Tanh क्या बदलता है
- DyT एक सरल layer है जो Transformer block में Layer Norm या RMSNorm को replace करती है
- इसका मुख्य operation element-wise लागू होने वाला
DyT(x) = tanh(αx) है
- यह दिखाया गया है कि normalization layers हटाने पर भी Transformer, पारंपरिक normalization वाले Transformer जितना या उससे बेहतर प्रदर्शन कर सकता है
- इस विचार की शुरुआत उस अवलोकन से हुई कि Transformer के भीतर Layer Normalization अक्सर scaled tanh function जैसी input-output relationship बनाता है
Implementation का तरीका
- DyT module को PyTorch में छोटे code से implement किया जा सकता है
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 एक trainable parameter है, और इसका initial value 0.5 रखा गया है
weight और bias भी trainable parameters हैं, जो tanh(alpha * x) के output पर लागू होते हैं
Layer Normalization से निकला अवलोकन
- Transformer का Layer Normalization(LN), scaled tanh function के काफ़ी करीब input-output mapping बनाता है
- शुरुआती layers में यह mapping ज़्यादातर linear के करीब होती है
- जैसे-जैसे layers गहरी होती जाती हैं,
tanh function की खास S-आकार की curve और स्पष्ट दिखने लगती है
- इस अवलोकन में Vision Transformer(ViT), speech Transformer मॉडल wav2vec 2.0, और Diffusion Transformer(DiT) की चुनी हुई LN layers शामिल थीं
मूल्यांकन का दायरा और नतीजे
- DyT का मूल्यांकन कई architectures और tasks पर किया गया
- supervised vision: ViT, ConvNeXt
- self-supervised vision: MAE, DINO
- diffusion models: DiT
- large language models: LLaMA
- self-supervised speech: wav2vec 2.0
- DNA sequence modeling: HyenaDNA, Caduceus
- सभी मामलों में DyT लागू किए गए Transformer ने normalization-आधारित समकक्ष मॉडल्स के समान या उनसे बेहतर प्रदर्शन दिखाया
- मूल्यांकन का दायरा recognition से generation, supervised learning से self-supervised learning, और computer vision से language modeling तक व्यापक है
संदर्भ सामग्री
- Download Paper: शोध के पूरे technical details वाला paper
- View on GitHub: implementation details देखने के लिए repository
- View Summary: शोध परिणामों का संक्षिप्त सार
Transformers without Normalization को CVPR 2025 paper के रूप में स्वीकार किया गया है
1 टिप्पणियां
Hacker News पर राय
alpha को adjust करने से खास असर नहीं पड़ा, इसलिए काफी hyperparameter tuning या ज़्यादा sophisticated initialization की ज़रूरत हो सकती है। PyTorch default initialization और orthogonal initialization, दोनों आज़माए, लेकिन कोई फर्क नहीं पड़ा
या शायद मेरे इस्तेमाल किए गए scalar optimizer के साथ यह ठीक से match नहीं करता। मैं एक custom scalar optimizer इस्तेमाल करता हूं जो Adam से तेज़ convergence देता है, लेकिन DyT layers में यह Adam जैसा ही दिखा
या फिर यह ऐसा तरीका हो सकता है जो दसियों अरब tokens के बाद ही catch up करता हो, पर इतना लंबा test करने का budget मेरे पास नहीं है
अगर ऐसी layers को replace किया जा सके, तो compute cost काफी कम करने में मदद मिलेगी
tanh के भी दूसरे effects होंगे। क्योंकि normalization कभी-कभी conditioning problem को हल कर रहा होता है। फिर भी अधिक alternatives मिलना स्वागतयोग्य है
Kaiming He वगैरह का मूल ResNet paper और उसके बाद के papers recommend करूंगा
RNNs के modern approach के लिए DeepMind का https://arxiv.org/abs/2303.06349 पढ़ने लायक है
मुख्य बात यह है कि सबसे बड़ा eigenvalue, यानी spectral radius, 1 के आसपास होना चाहिए। इसका मतलब है कि linear transformation को बार-बार apply करने पर activations न बढ़ें, न घटें
y = x + f(x)हैLNinputऔरLNoutputकी तुलना करते हुएtanh(a*x)के बाद भी weight और bias लगाए गए लगते हैंsimilarity देखने के लिए LayerNorm output से weight और bias हटाए गए result से तुलना करनी चाहिए, ऐसा नहीं है क्या?
final results अच्छे हों तो फर्क नहीं पड़ता, लेकिन असल में बदले जा रहे हिस्से को अलग से देखें तो बेहतर समझ आ सकती है कि क्या हो रहा है