这篇文章有何恺明和杨立昆两位大佬坐镇,不由得让人重视。核心发现是:Transformer可以在不使用任何归一化层的情况下,通过简单的Dynamic Tanh(DyT)操作实现同等甚至更好的性能。
训练深度神经网络时,每一层的输入的分布都在发生变化,这种现象被称为「内部协变量偏移 (Internal Covariate Shift)」。可以通俗理解为训练数据和测试数据的输入分布不一致。
内部协变量偏移会导致以下问题:
为了解决内部协变量偏移问题,我们需要对每一层的输入进行归一化,使其分布稳定在一个范围内。常见的归一化方法包括:
特性 | BatchNorm | LayerNorm | RMSNorm |
---|---|---|---|
归一化维度 | batch 维度 | layer 维度 | layer 维度 |
适用场景 | 图像分类等任务 | 序列数据等任务 | 大模型等任务 |
依赖 batch size | 高度依赖 | 不依赖 | 不依赖 |
训练/测试行为 | 不一致 | 一致 | 一致 |
计算复杂度 | 较高 | 较高 | 较低 |
是否中心化 | 是 | 是 | 否 |
这篇文章的核心发现就是,LayerNorm 的输入-输出映射呈现出类 tanh 的 S 型曲线。LayerNorm 并非严格意义上的线性变换,其输入-输出映射呈现出类 tanh 的 S 型曲线。这种非线性特性并非设计初衷,而是训练过程中自然形成的——由每个 token 的标准化过程独立,以及不同 token 的统计量差异导致的。S 型曲线可以缓解梯度消失/爆炸问题,提高泛化能力,但也可能损失一些信息,增加训练难度。
从单个神经元的角度来看,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 变换是相互影响的。
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 型曲线。
深层网络中的特征分布双极分化,指的是 在深层网络中,一些神经元的输出会变得非常大,而另一些神经元的输出会变得非常小。这种现象会导致梯度消失或爆炸,影响网络的训练。
这主要是由于深层网络的 复合效应。在深层网络中,每一层的输出都会受到前面所有层的影响。如果前面的层出现了一些异常值,这些异常值会被逐层放大,最终导致某些神经元的输出变得非常大。
LayerNorm 的 S 型曲线可以缓解这种双极分化。因为 S 型曲线可以将极端值压缩到一个较小的范围内,从而防止这些极端值被逐层放大。
论文中提到,可以用\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 的输出对输入的微小变化越不敏感。
LayerNorm 的非线性特性对 Transformer 的影响是复杂的,既有好处也有坏处。
好处:
坏处:
DyT 是这篇论文提出的一种创新的归一化方法,它通过使用可学习的缩放 tanh 函数替代归一化层,实现了高计算效率、自适应特征尺度调节和特征表达能力维持。DyT 在计算资源有限、需要快速训练和对特征表达能力要求较高的场景中具有优势。
计算公式:
\mathrm{DyT}(\mathbf{x}) = \gamma \cdot \tanh(\alpha \mathbf{x}) + \beta\
在8类任务中验证(图像分类、生成、语音、语言模型等):
ResNet-50替换BN后精度下降,可能得原因在于:
可尝试结合通道注意力(如SE模块),为每个通道学习独立的\alpha\,但会增加参数量。
论文强调DyT通过可学习参数α实现动态缩放,但实验显示α最终与输入标准差倒数(1/σ)高度相关。这暗示DyT可能只是将显式的统计量计算(LayerNorm的σ)转化为隐式的参数学习,并未真正摆脱归一化的统计逻辑。
α的学习目标与LayerNorm的1/σ相似,但关键差异在于计算方式。LayerNorm动态计算每个token的σ,而DyT通过全局学习一个固定α,牺牲了细粒度统计适应性,换取了计算效率。
LayerNorm的归一化是「数据依赖型」(data-dependent),随输入实时变化;DyT是「参数依赖型」(parameter-dependent),通过训练集整体统计调整α。这可能导致DyT在分布偏移(OOD)场景下表现更差(论文未验证)。
LLaMA实验显示,模型宽度越大,α需越小,且注意力模块需更高α。这表明DyT对网络深度和模块类型敏感,可能因参数耦合引发级联误差。
深层Transformer中,激活的幅度会随深度指数增长或衰减,这要求每层的α具备自适应调节能力。然而,DyT的α是独立学习的,缺乏跨层协同机制。
对比LayerNorm,LN通过逐token计算σ,天然适应不同层的幅度变化,而DyT的固定α需通过训练被动调整,导致深层网络需要精细初始化(如LLaMA的分层α)。
这可能说明,效率提升(固定α)与动态适应性(LayerNorm的实时计算)难以兼得。DyT在LLM中的成功依赖大量试错调参(如表12的网格搜索),实用性存疑。
人脑神经元的S型激活特性(Adrian,1926)与DyT设计不谋而合:
方法 | 计算复杂度 | 可解释性 | 硬件友好度 |
---|---|---|---|
LayerNorm | O(n) | 高 | 一般 |
RMSNorm | O(n) | 中 | 较好 |
Fixup初始化 | O(1) | 低 | 优秀 |
DyT | O(1) | 高 | 优秀 |