如何评价 Meta 新论文 Transformers without Normalization?
更新于:2025-04-14 10:56:55

这篇文章有何恺明和杨立昆两位大佬坐镇,不由得让人重视。核心发现是:Transformer可以在不使用任何归一化层的情况下,通过简单的Dynamic Tanh(DyT)操作实现同等甚至更好的性能

一、归一化层简介

1.1 内部协变量偏移

训练深度神经网络时,每一层的输入的分布都在发生变化,这种现象被称为「内部协变量偏移 (Internal Covariate Shift)」。可以通俗理解为训练数据和测试数据的输入分布不一致。

内部协变量偏移会导致以下问题:

  • 梯度消失或爆炸:每一层的输入分布都在变化,这使得网络很难学习,因为梯度可能会消失或爆炸。
  • 学习率敏感:需要非常小的学习率才能保证训练的稳定性。
  • 收敛速度慢:由于每一层的输入分布都在变化,网络需要花费更多的时间才能收敛。

1.2 常见归一化方法

为了解决内部协变量偏移问题,我们需要对每一层的输入进行归一化,使其分布稳定在一个范围内。常见的归一化方法包括:

  • BatchNorm (2015):通过批次维度统计量进行标准化,解决了深层网络训练中的梯度问题。BatchNorm 是在 batch 维度上进行归一化,针对的是中间层的单个神经元。对于每个 mini-batch,计算该神经元的均值和方差,然后对该 mini-batch 中的所有样本进行归一化。
  • LayerNorm (2016):LayerNorm 是在 layer 维度上进行归一化,针对的是中间层的单个样本。对于每个样本,计算该层所有神经元的均值和方差,然后对该层的所有神经元进行归一化。更适合处理序列数据。
  • RMSNorm (2019):RMSNorm 可以看作是 LayerNorm 的简化版本,它只使用均方根 (Root Mean Square, RMS) 进行归一化,省略了减去均值的步骤。被LLaMA等大模型采用。
特性BatchNormLayerNormRMSNorm
归一化维度batch 维度layer 维度layer 维度
适用场景图像分类等任务序列数据等任务大模型等任务
依赖 batch size高度依赖不依赖不依赖
训练/测试行为不一致一致一致
计算复杂度较高较高较低
是否中心化

二、归一化层的S型曲线

这篇文章的核心发现就是,LayerNorm 的输入-输出映射呈现出类 tanh 的 S 型曲线。LayerNorm 并非严格意义上的线性变换,其输入-输出映射呈现出类 tanh 的 S 型曲线。这种非线性特性并非设计初衷,而是训练过程中自然形成的——由每个 token 的标准化过程独立,以及不同 token 的统计量差异导致的。S 型曲线可以缓解梯度消失/爆炸问题,提高泛化能力,但也可能损失一些信息,增加训练难度。

2.1 线性变换的认知误区

从单个神经元的角度来看,LayerNorm 是一个线性变换。因为对于单个神经元x_i\,可以将其看作是经过了如下的线性变换:

\mathrm{LayerNorm}(x_i) = \frac{\gamma}{\sqrt{\sigma^2+\epsilon}} \cdot x_i + (\beta - \frac{\gamma \mu}{\sqrt{\sigma^2+\epsilon}})\

其中,\frac{\gamma}{\sqrt{\sigma^2+\epsilon}}\相当于权重,(\beta - \frac{\gamma \mu}{\sqrt{\sigma^2+\epsilon}})\相当于偏置。

但是,从整个 layer 的角度来看,LayerNorm 并不是一个线性变换。因为每个神经元的均值\mu\和方差\sigma^2\都是由该 layer 的所有神经元共同决定的。也就是说,不同神经元的 LayerNorm 变换是相互影响的。

2.2 S 型曲线的产生

S 型曲线的产生,主要是由于以下两个原因:

  • 每个 token 的标准化过程独立:Transformer 中的每个 token 都是独立进行 LayerNorm 的,这意味着不同 token 的统计量 (均值和方差) 可能不同。
  • 不同 token 的统计量差异导致整体非线性:由于不同 token 的统计量不同,因此它们的 LayerNorm 变换也不同。当我们将所有 token 的输入-输出映射放在一起观察时,就会发现整体呈现出 S 型曲线。

我们可以用一个简单的例子来说明。假设有两个 token,它们的输入分别为x_1\和x_2\,它们的均值和方差分别为\mu_1, \sigma_1^2\和\mu_2, \sigma_2^2\。则它们的 LayerNorm 输出分别为:

\mathrm{LayerNorm}(x_1) = \gamma \cdot \frac{x_1-\mu_1}{\sqrt{\sigma_1^2+\epsilon}} + \beta\

\mathrm{LayerNorm}(x_2) = \gamma \cdot \frac{x_2-\mu_2}{\sqrt{\sigma_2^2+\epsilon}} + \beta

由于\mu_1 \neq \mu_2\和\sigma_1^2 \neq \sigma_2^2\,因此\mathrm{LayerNorm}(x_1)\和\mathrm{LayerNorm}(x_2)\的变换也不同。当我们将x_1\和\mathrm{LayerNorm}(x_1)\,x_2\和\mathrm{LayerNorm}(x_2)\的关系绘制在同一个图上时,就会发现整体呈现出 S 型曲线。

2.3 深层网络中的特征分布双极分化

深层网络中的特征分布双极分化,指的是 在深层网络中,一些神经元的输出会变得非常大,而另一些神经元的输出会变得非常小。这种现象会导致梯度消失或爆炸,影响网络的训练。

这主要是由于深层网络的 复合效应。在深层网络中,每一层的输出都会受到前面所有层的影响。如果前面的层出现了一些异常值,这些异常值会被逐层放大,最终导致某些神经元的输出变得非常大。

LayerNorm 的 S 型曲线可以缓解这种双极分化。因为 S 型曲线可以将极端值压缩到一个较小的范围内,从而防止这些极端值被逐层放大。

2.4 \tanh(\alpha \mathbf{x})\的近似

论文中提到,可以用\tanh(\alpha \mathbf{x})\来近似 LayerNorm 的行为。其中,\alpha\是一个可学习的参数,用于控制 tanh 函数的陡峭程度。

可以用 tanh 函数来近似,是因为 tanh 函数也是一个 S 型曲线,它可以将输入压缩到 (-1, 1) 的范围内。通过调整\alpha\的值,可以使 tanh 函数的形状与 LayerNorm 的 S 型曲线更加接近。

\alpha\可以理解为 LayerNorm 的 增益 (gain)。当\alpha\较大时,tanh 函数的曲线越陡峭,LayerNorm 的输出对输入的微小变化越敏感;当\alpha\较小时,tanh 函数的曲线越平缓,LayerNorm 的输出对输入的微小变化越不敏感。

2.5 非线性特性的影响

LayerNorm 的非线性特性对 Transformer 的影响是复杂的,既有好处也有坏处。

好处

  • 缓解梯度消失/爆炸:S 型曲线可以压缩极端值,从而缓解梯度消失/爆炸问题。
  • 提高泛化能力:S 型曲线可以防止网络过于依赖于训练数据,从而提高泛化能力。

坏处

  • 可能损失信息:S 型曲线的非线性压缩可能会损失一些信息。
  • 增加训练难度:非线性变换会增加训练的难度。

三、Dynamic Tanh(DyT)的设计哲学

3.1 核心思想

DyT 是这篇论文提出的一种创新的归一化方法,它通过使用可学习的缩放 tanh 函数替代归一化层,实现了高计算效率、自适应特征尺度调节和特征表达能力维持。DyT 在计算资源有限、需要快速训练和对特征表达能力要求较高的场景中具有优势。

计算公式:

\mathrm{DyT}(\mathbf{x}) = \gamma \cdot \tanh(\alpha \mathbf{x}) + \beta\

3.2 实现细节

class DyT(nn.Module): def __init__(self, dim, init_alpha=0.5): super().__init__() self.alpha = nn.Parameter(torch.ones(1) * init_alpha) self.gamma = nn.Parameter(torch.ones(dim)) self.beta = nn.Parameter(torch.zeros(dim)) def forward(self, x): x = torch.tanh(self.alpha * x) return self.gamma * x + self.beta

3.3 关键创新点

  1. 元素级操作:无需计算统计量,计算效率提升
  2. 动态缩放因子α:自适应调节特征尺度
  3. 仿射变换保留:维持特征表达能力

四、实验验证

4.1 主要结果

在8类任务中验证(图像分类、生成、语音、语言模型等):

  • 性能匹配:ViT-B在ImageNet上DyT(82.5%) vs. LayerNorm(82.3%)
  • 效率提升:LLaMA 7B推理时间减少7.8%,训练时间减少8.2%
  • 初始化鲁棒性:非LLM任务中\alpha_0=0.5\普遍有效,LLM需分层调整(如注意力模块\alpha_0\更高)

4.2 为什么在CNN中效果不佳?

ResNet-50替换BN后精度下降,可能得原因在于:

  • 架构差异:CNN的卷积层输出空间相关性强,同一通道内不同位置统计量差异大,需要BN的局部归一化。
  • 频率问题:BN在CNN中每层都有,而Transformer中LayerNorm间隔多个自注意力层,DyT的全局缩放难以适应高频统计变化。
  • 初始化耦合:CNN通常依赖BN的初始化特性(如零初始化bias),直接替换破坏初始化平衡。

可尝试结合通道注意力(如SE模块),为每个通道学习独立的\alpha\,但会增加参数量。

五、反思与总结

5.1 DyT的「动态」本质是否被高估?

论文强调DyT通过可学习参数α实现动态缩放,但实验显示α最终与输入标准差倒数(1/σ)高度相关。这暗示DyT可能只是将显式的统计量计算(LayerNorm的σ)转化为隐式的参数学习,并未真正摆脱归一化的统计逻辑。

α的学习目标与LayerNorm的1/σ相似,但关键差异在于计算方式。LayerNorm动态计算每个token的σ,而DyT通过全局学习一个固定α,牺牲了细粒度统计适应性,换取了计算效率。

LayerNorm的归一化是「数据依赖型」(data-dependent),随输入实时变化;DyT是「参数依赖型」(parameter-dependent),通过训练集整体统计调整α。这可能导致DyT在分布偏移(OOD)场景下表现更差(论文未验证)。

5.2 DyT在LLM中需分层调整α可能引发「级联敏感性问题」

LLaMA实验显示,模型宽度越大,α需越小,且注意力模块需更高α。这表明DyT对网络深度和模块类型敏感,可能因参数耦合引发级联误差。

深层Transformer中,激活的幅度会随深度指数增长或衰减,这要求每层的α具备自适应调节能力。然而,DyT的α是独立学习的,缺乏跨层协同机制。

对比LayerNorm,LN通过逐token计算σ,天然适应不同层的幅度变化,而DyT的固定α需通过训练被动调整,导致深层网络需要精细初始化(如LLaMA的分层α)。

这可能说明,效率提升(固定α)与动态适应性(LayerNorm的实时计算)难以兼得。DyT在LLM中的成功依赖大量试错调参(如表12的网格搜索),实用性存疑。

5.3 生物学启示

人脑神经元的S型激活特性(Adrian,1926)与DyT设计不谋而合:

  • 对弱信号保持线性响应
  • 对强信号进行饱和抑制
  • 动态调节敏感区间

5.4 与传统方法的对比

方法计算复杂度可解释性硬件友好度
LayerNormO(n)一般
RMSNormO(n)较好
Fixup初始化O(1)优秀
DyTO(1)优秀

5.5 局限性

  • 对BatchNorm的替代效果有限
  • 超大模型需要精细调整α初始化
  • 理论解释仍需深化