LLM:大模型的正则化

主流大模型使用的Normalization主要有三类,分别是Layer Norm,RMS Norm,以及Deep Norm。 

小模型的正则化参考:

l1l2正则和dropout正则化[https://youzipi.blog.csdn.net/article/details/75307522]

LN和BN归一化 [深度学习:批归一化Batch Normalization

Post-Norm和Pre-Norm

根据Normalization在结构中的位置,也可分为Post-Norm和Pre-Norm。

一般认为,Post-Norm在残差之后做归一化,对参数正则化的效果更强,进而模型的收敛性也会更好;

而Pre-Norm有一部分参数直接加在了后面,没有对这部分参数进行正则化,可以在反向时防止梯度爆炸或者梯度消失,大模型的训练难度大,因而使用Pre-Norm较多。

目前比较明确的结论是:同一设置之下,Pre Norm结构往往更容易训练,但最终效果通常不如Post Norm。Pre Norm更容易训练好理解,因为它的恒等路径更突出,但为什么它效果反而没那么好呢?[为什么Pre Norm的效果不如Post Norm? - 科学空间|Scientific Spaces]

[【重新了解Transformer模型系列_1】PostNorm/PreNorm的差别 - 知乎]

RMS Norm

2019年的论文《Root Mean Square Layer Normalization》比较了去掉center后的Layer Normalization,文章称之为RMS Norm,但这篇论文总的结果显示:RMS Norm比Layer Normalization更快,效果也基本一致。RMS Norm还被Google用在了T5中,并且在另外的一篇文章《Do Transformer Modifications Transfer Across Implementations and Applications?》中做了比较充分的对比实验,显示出RMS Norm的优越性。这样看来,未来RMS Norm很可能将会取代Layer Normalization而成为Transformer的标配。

与layerNorm相比,RMS Norm的主要区别在于去掉了减去均值的部分。计算公式为:

这里的 ai与Layer Norm中的 x等价,作者认为这种模式在简化了Layer Norm的同时,可以在各个模型上减少约 7%∼64% 的计算时间

代码实现:https://github.com/bzhangGo/rms

 [ 昇腾大模型|结构组件-1——Layer Norm、RMS Norm、Deep Norm]

Deep Norm

 Deep Normalization

Deep Norm是对Post-LN的的改进,具体的:

  • DeepNorm在进行Layer Norm之前会以 α参数扩大残差连接
  • 在Xavier参数初始化过程中以 β减小部分参数的初始化范围

一些模型的具体参数使用方法如下:

这里N和M分别指编码和解码器的层数

论文中,作者认为 Post-LN 的不稳定性部分来自于梯度消失以及太大的模型更新,同时,有以下几个理论分析

  • 定义了“预期模型更新”的概念表示 模型更新的规模量级
  • 证明了 WQ和 WK不会改变注意力输出大小数量级的界限,因而 β 并没有缩小这部分参数
  • 模型倾向于累积每个子层的更新,从而导致模型更新量呈爆炸式增长,从而使早期优化变得不稳定
  • 使用Deep Norm 的 "预期模型更新",在参数 α,β 取值适当的时候,以常数为界

同时,作者通过实验证实了Deep Norm在训练深层transformer模型的时候具备近乎恒定的更新规模,成功训练了1000层transformer的模型,认为Deep Norm在具备 Post-LN 的良好性能 的同时又有 Pre-LN 的稳定训练

代码实现:https://github.com/microsoft/to

from:深度学习:大模型的正则化_-柚子皮-的博客-CSDN博客

ref: 

猜你喜欢

转载自blog.csdn.net/pipisorry/article/details/130958856