Meta:去除Transformer的归一化

在这里插入图片描述

📖标题:Transformers without Normalization
🌐来源:arXiv, 2503.10622

🌟摘要

🔸归一化层在现代神经网络中无处不在,长期以来一直被认为是必不可少的。这项工作表明,没有归一化的变形金刚可以使用非常简单的技术实现相同或更好的性能。
🔸我们引入了动态 Tanh (DyT),这是一种元素操作 DyT (x) = tanh(αx),作为 Transformer 中归一化层的替代品。DyT的灵感来自于观察到 Transformers 中的层归一化通常会产生类似 tanh 的 S 形状的输入输出映射。通过结合 DyT,没有归一化的 Transformer 可以匹配或超过其归一化对应物的性能,主要是在没有超参数调整的情况下。
🔸我们在不同的环境中验证了具有 DyT 的 Transformer 的有效性,范围从识别到生成、监督到自我监督学习以及计算机视觉到语言模型。这些发现挑战了传统理解,即归一化层在现代神经网络中是必不可少的,并为它们在深度网络中的作用提供了新的见解。

🛎️文章简介

🔸研究问题:论文挑战了在现代神经网络训练中归一化层的必要性,探讨了可替代归一化层的简单方法——动态tanh(DyT)。
🔸主要贡献:论文提出了DyT作为归一化层的替代方案,并通过实验证明DyT在多种任务和模型架构中能够有效替代传统的归一化方法,且不需要计算激活统计量。

📝重点思路

🔸 介绍了传统归一化层的背景,强调它们在优化过程中的重要性。
🔸 提出了动态tanh(DyT),其定义为DyT(x) = tanh(αx),其中α为可学习参数,旨在模拟归一化层的行为。
🔸 通过替换Transformer及其他现代架构中的归一化层,实验证明DyT的有效性。
🔸 进行了多种实验,包括在视觉分类、自监督学习和语言模型中的应用,比较DyT与传统归一化层的性能。

🔎分析总结

🔸 实验结果显示,在视觉Transformer(ViT)和ConvNeXt模型上,DyT的分类准确性与传统层归一化(LN)相当,甚至略有改善。
🔸 在自监督学习任务中,DyT的表现与LN相当,显示出其在无标签数据训练中的有效性。
🔸 在大语言模型(LLM)中,DyT与根均方归一化(RMSNorm)对比,表现出相似的训练损失和零样本任务性能。
🔸 研究还探讨了DyT在不同模型中的计算效率和参数α的初始化对训练稳定性的影响,得出动态调整α能够提高模型性能的结论。

💡个人观点

论文的核心是提出了DyT作为归一化层的有效替代方案,打破了归一化层在深度学习中的“不可或缺”的传统观念。DyT不仅简化了模型结构,还通过保留归一化的效果来提高计算效率,展现了在现代神经网络设计中的潜在应用价值。

🧩附录

在这里插入图片描述
在这里插入图片描述

### Transformer模型中的归一化方法 在Transformer架构中,为了稳定和加速训练过程,在每一层之后通常会应用归一化技术。具体来说,Layer Normalization是一种常用的方法[^2]。 #### Layer Normalization的应用方式 对于每一个子层(即多头自注意机制或多层感知机),输入会被先传递给该子层处理后再经过残差连接与原始输入相加,最后再施加Layer Normalization操作: \[ \text{LayerNorm}(x + \text{Sublayer}(x)) \] 这种设计有助于缓解深层网络中存在的梯度消失/爆炸问题,并且可以在不依赖批量大小的情况下工作良好,因为它是基于特征维度而不是样本批次来进行标准化的。 ```python import torch.nn as nn class EncoderLayer(nn.Module): def __init__(self, d_model, num_heads, feed_forward_hidden, dropout=0.1): super(EncoderLayer, self).__init__() self.self_attn = MultiHeadAttention(d_model, num_heads) self.feed_forward = PositionwiseFeedForward(d_model, feed_forward_hidden, dropout) self.norm_1 = nn.LayerNorm(d_model) self.norm_2 = nn.LayerNorm(d_model) def forward(self, x, mask=None): # Apply layer normalization before the first sub-layer (multi-head attention) norm_x = self.norm_1(x) attn_output = self.self_attn(norm_x, norm_x, norm_x, mask) # Add & Norm after multi-head attention output = x + attn_output # Apply layer normalization before the second sub-layer (feed-forward network) norm_output = self.norm_2(output) ff_output = self.feed_forward(norm_output) # Final add operation with residual connection final_output = output + ff_output return final_output ``` 上述代码片段展示了一个典型的编码器层实现,其中包含了两次Layer Normalization的操作——分别位于两个主要组件之前:一次是在多头注意力机制前;另一次则放在位置前馈神经网络前面。 #### 应用场景 Layer Normalization不仅适用于标准的自然语言处理任务如机器翻译、文本摘要等,还扩展到了其他领域,比如语音识别以及图像生成等领域内的序列建模问题上。它能够有效地提高模型收敛速度并改善最终性能表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大模型任我行

随意啦,喜欢就好~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值