探究Transformer中PostNorm/PreNorm/Initialization/LearningRate之间的关系

论文:On Layer Normalization in the Transformer Architecture

                                                       

 

推荐说明:我们知道,在原始的Transformer中,Layer Norm在跟在Residual之后的,我们把这个称为Post-LN Transformer;而且用Transformer调过参的同学也知道,Post-LN Transformer对参数非常敏感,需要很仔细地调参才能取得好的结果,比如必备的warm-up学习率策略,这会非常耗时间。

所以现在问题来了,为什么warm-up是必须的?能不能把它去掉?本文的出发点是:既然warm-up是训练的初始阶段使用的,那肯定是训练的初始阶段优化有问题,包括模型的初始化。从而,作者发现,Post-LN Transformer在训练的初始阶段,输出层附近的期望梯度非常大,所以,如果没有warm-up,模型优化过程就会炸裂,非常不稳定。既然如此,本文作者尝试把Layer Norm换个位置,比如放在Residual的过程之中(称为Pre-LN Transformer),再观察训练初始阶段的梯度变化,发现比Post-LN Transformer不知道好到哪里去了,甚至不需要warm-up,从而进一步减少训练时间,这一结果的确令人震惊。

推荐理由:本文别出心裁,用实验和理论验证了Pre-LN Transformer结构不需要使用warm-up的可能性,其根源是LN层的位置导致层次梯度范数的增长,进而导致了Post-LN Transformer训练的不稳定性。本文第一次将warm-up、LayerNorm、gradient和initialization联系起来,非常值得一读!

推荐:

1、Transformers without Tears: Improving the Normalization of Self-Attention

2、Transformer中warm-up和LayerNorm的重要性探究

 

### LLAMA PostnormPrenorm 的区别 在 Transformer 架构中,PostnormPrenorm 是两种不同的残差连接与层归一化(Layer Normalization)的应用方式。这两种方法的主要差异在于层归一化的应用位置。 #### 1. **Postnorm** 在传统的 Transformer 架构中,层归一化被放置在子层之后,即在残差连接之后执行。这意味着输入数据会先经过自注意力机制或前馈网络处理,然后再进行层归一化操作[^1]。这种设计可以看作是一种“后置”的规范化策略。 - 结构描述: 输入 → 子层(Self-Attention 或 Feedforward Network)→ 层归一化(Layer Norm) - 特点: - 更接近原始的 Transformer 设计。 - 可能会在训练初期引入较大的梯度波动,因为未经归一化的激活值可能会导致不稳定[^2]。 #### 2. **Prenorm** 相比之下,Prenorm 将层归一化移动到子层之前的位置。也就是说,在进入自注意力机制或前馈网络之前,输入会被先行归一化。这种方式能够有效稳定训练过程中的梯度流动[^3]。 - 结构描述: 输入 → 层归一化(Layer Norm)→ 子层(Self-Attention 或 Feedforward Network) - 特点: - 提高了模型训练的稳定性,尤其是在深层网络中表现更优。 - 能够缓解因未归一化而导致的梯度爆炸或消失问题。 - 需要注意的是,最终输出仍然可以通过额外的 Layer Norm 来进一步优化性能[^4]。 #### 实现对比 以下是两者的伪代码实现: ```python # Postnorm Implementation def postnorm(x, sublayer): output = sublayer(x) # Apply self-attention or feed-forward network normalized_output = layer_norm(output + x) # Residual connection followed by normalization return normalized_output # Prenorm Implementation def prenorm(x, sublayer): normalized_input = layer_norm(x) # Normalize input before applying sublayer output = sublayer(normalized_input) # Apply self-attention or feed-forward network final_output = output + x # Add residual connection return final_output ``` ### 总结 PostnormPrenorm 的主要区别在于层归一化的顺序安排不同。尽管两者都能完成任务,但在实际应用中发现 Prenorm 对于大规模预训练语言模型(LLMs),特别是像 LLaMA 这样的模型来说更加友好,因为它有助于提升训练效率并减少潜在的不稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值