Transformer中Post-Norm和Pre-Norm如何选择?
pre-norm:
x n + 1 = x n + f ( n o r m ( x n ) ) x_{n+1}=x_n+f(norm(x_n)) xn+1=xn+f(norm(xn))
其中第二项的方差由于有 norm 是不随层数变化的,于是 x 的方差会在主干上随层数积累。到了深层以后,单层对主干的影响可以视为小量,而不同层的 f 统计上是相似的,于是有
x n + 1 = x n + f ( n o r m ( x n ) ) = x n − 1 + f ( n o r m ( x n − 1 ) ) + f ( n o r m ( x n ) ) ≈ x n − 1 + 2 f ( n o r m ( x n − 1 ) ) 。 \begin{aligned} x_{n+1} &=x_{n}+f(norm(x_{n})) \\ &=x_{n-1}+f(norm(x_{n-1}))+f(norm(x_{n}))\\ &\approx x_{n-1} + 2f(norm(x_{n-1})) 。 \end{aligned} xn+1=xn+f(norm(xn))=xn−1+f(norm(xn−1))+f(norm(xn))≈xn−1+2f(norm(xn−1))。
这样训练出来的深层 ResNet or Transformer,深层部分实际上更像扩展了模型宽度,所以相对好训练,但某种意义上并不是真正的 deep.
post-norm
x n + 1 = n o r m ( x n + f ( x n ) ) x_{n+1}=norm(x_n+f(x_n)) xn+1=norm(xn+f(xn))则保证了主干方差恒定,每层对 x 都可能有较大影响,代价则是模型结构中没有从头到尾的恒等路径,梯度难以控制。通常认为会更难收敛,但训练出来的效果更好。
deep-norm
x n + 1 = n o r m ( α x n + f ( x n ) ) ( α > 1 ) x_{n+1}=norm(αx_n+f(x_n))(α>1) xn+1=norm(αxn+f(xn))(α>1)通过控制参数起到了一个折中的效果
恒等路径(Identity Path)
指的是神经网络中从输入到输出的一条 “直接通路”,使得信息可以不经过任何非线性变换或复杂运算直接传递。这种路径的核心作用是保留原始输入的信息,并通过残差连接(Residual Connection)等机制帮助梯度更顺畅地反向传播,避免深层网络中的梯度消失问题。
恒等路径的本质与取舍
结构 | 恒等路径完整性 | 梯度传播难度 | 训练收敛性 | 特征表达能力 |
---|---|---|---|---|
Post-Norm | 无(需归一化) | 高(依赖调参) | 较差 | 较强(浅层更灵活) |
Pre-Norm | 有(残差直连) | 低(梯度短路) | 较好 | 较平滑(深层更稳定) |
- 恒等路径的核心价值:通过保留原始输入的直接传递通道,降低深层网络的优化难度,这是 Pre-Norm 成为主流的关键原因。
- Post-Norm 的适用场景:若任务需要模型在浅层捕捉强非线性特征,且计算资源允许精细调参,可尝试 Post-Norm(如原始 Transformer 在机器翻译中的成功)。
选择
场景 | Pre-Norm(推荐) | Post-Norm(谨慎使用) |
---|---|---|
模型深度 | 深层(≥12 层) | 浅层(≤6 层)或实验性浅层结构 |
训练稳定性 | 优先(尤其存在梯度问题时) | 需调参(如学习率、优化器等) |
任务类型 | NLP 主流模型、深层 CV 模型(如 ViT) | 原始 Transformer 复现、小规模实验 |
优化难度 | 低(适合新手或大规模训练) | 高(需丰富调参经验) |
https://www.zhihu.com/question/519668254/answer/2371885202