一、归一化层简介

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等大模型采用。
特性 BatchNorm LayerNorm RMSNorm
归一化维度 batch 维度 layer 维度 layer 维度
适用场景 图像分类等任务 序列数据等任务 大模型等任务
依赖 batch size 高度依赖 不依赖 不依赖
训练/测试行为 不一致 一致 一致
计算复杂度 较高 较高 较低
是否中心化

如何评价 Meta 新论文 Transformers without Normalization?

二、归一化层的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}})

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 函数的陡峭程度。

如何评价 Meta 新论文 Transformers without Normalization?

可以用 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
mathrm{DyT}(mathbf{x}) = gamma cdot tanh(alpha mathbf{x}) + beta

如何评价 Meta 新论文 Transformers without Normalization?

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
类 DyT(nn.模块): def __init__(self, dim, init_alpha=0.5): super().__init__() self.alpha = nn.参数(torch.ones(1) * init_alpha) self.gamma = nn.参数(torch.ones(dim)) self.beta = nn.参数(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%)
    性能匹配 :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的σ)转化为隐式的参数学习,并未真正摆脱归一化的统计逻辑。

如何评价 Meta 新论文 Transformers without Normalization?

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

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

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

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

如何评价 Meta 新论文 Transformers without Normalization?

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

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

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

5.3 生物学启示

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

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

5.4 与传统方法的对比

方法 计算复杂度 可解释性 硬件友好度
LayerNorm  层规范 O(n)  O(n) 一般
RMSNorm  RMS 数字 O(n)  O(n) 较好
Fixup初始化 O(1)  的(1) 优秀
DyT  DyT 公司 O(1)  的(1) 优秀

5.5 局限性

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