BN LN

1. BN的优势总结

  • 通过解决ICS的问题,使得每一层神经网络的输入分布稳定,在这个基础上可以使用较大的学习率,加速了模型的训练速度
  • 起到一定的正则作用,进而减少了dropout的使用。当我们通过BN规整数据的分布以后,就可以尽量避免一些极端值造成的overfitting的问题
  • 使得数据不落入饱和性激活函数(如sigmoid,tanh等)饱和区间,避免梯度消失的问题

2. LN优势总结

在Transformer模型中,Layer Normalization(LN,层归一化)是一种常用的归一化技术。Pre - LN(Pre - Layer Normalization)是对传统LN使用方式的一种改进,以下是关于Pre - LN的介绍及其原因: ### 1. Pre - LN的定义 在传统的Transformer架构中,Layer Normalization通常应用在残差连接之后,即"先计算注意力机制和前馈神经网络,再进行层归一化",其计算流程可以表示为: [ \begin{align*} \text{Attention Output}&=\text{Attention}(\text{Input})\ \text{FFN Output}&=\text{FFN}(\text{Attention Output})\ \text{Output}&=\text{LN}(\text{Attention Output}+\text{Input}+\text{FFN Output}) \end{align*} ] 而Pre - LN则是将Layer Normalization应用在每个子层(注意力子层和前馈神经网络子层)之前,计算流程变为: [ \begin{align*} \text{LN - Input - Attention}&=\text{LN}(\text{Input})\ \text{Attention Output}&=\text{Attention}(\text{LN - Input - Attention})\ \text{LN - Input - FFN}&=\text{LN}(\text{Input}+\text{Attention Output})\ \text{Output}&=\text{FFN}(\text{LN - Input - FFN}) \end{align*} ] ### 2. 使用Pre - LN的原因

  • 在learning rate schedular上,Pre-LN不需要采用warm-up策略,而Post-LN必须要使用warm-up策略才可以在数据集上取得较好的Loss和BLEU结果。
  • 在收敛速度上,由于Pre-LN不采用warm-up,其一开始的learning rate较Post-LN更高,因此它的收敛速度更快。
  • 在超参调整上,warm-up策略带来了两个需要调整的参数: (最大学习率)和 (warmup过程的总步数)。这两个参数的调整将会影响到模型最终的效果。而由于transformer模型的训练代价是昂贵的,因此多引入超参,也给模型训练带来了一定难度。
  • 缓解梯度消失问题:在传统的Transformer中,随着网络层数的增加,深层网络的梯度在反向传播过程中容易逐渐变小,导致模型难以训练。Pre - LN使得每层的输入都被归一化到相近的分布,使得梯度在反向传播时更加稳定,避免了梯度消失, 从而使得模型能够训练更深的网络结构。
  • 加快训练收敛速度:归一化后的输入数据能让神经网络中的参数更容易学习,因为数据分布的稳定性减少了参数更新时的波动,使得模型能够更快地找到最优解。实验表明,使用Pre - LN的Transformer模型在训练过程中收敛速度更快, 可以减少训练所需的时间和计算资源。
  • 增强模型的泛化能力:Pre - LN使得模型在训练过程中更加稳定,不容易出现过拟合现象。因为它对输入数据的分布进行了约束,使得模型在不同的训练样本上表现更加一致,从而提高了模型在未见数据上的泛化能力。
  • 降低训练过程中的不稳定性:传统的Transformer架构中,当输入数据的规模较大或者变化较剧烈时,经过多个子层的计算后,可能会导致数值不稳定,比如某些层的输出值过大或过小。Pre - LN通过在每个子层前对输入进行归一化,有效降低了这种不稳定性,让模型训练过程更加平稳。 总的来说,Pre - LN通过改变Layer Normalization的应用位置,在训练效率、模型稳定性和泛化能力等方面对Transformer模型进行了优化。
相关推荐
Lee川14 小时前
优雅进化的JavaScript:从ES6+新特性看现代前端开发范式
javascript·面试
Lee川17 小时前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
晴殇i19 小时前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
绝无仅有19 小时前
Redis过期删除与内存淘汰策略详解
后端·面试·架构
绝无仅有20 小时前
Redis大Key问题排查与解决方案全解析
后端·面试·架构
AAA梅狸猫21 小时前
Looper.loop() 循环机制
面试
AAA梅狸猫21 小时前
Handler基本概念
面试
Wect21 小时前
浏览器缓存机制
前端·面试·浏览器
掘金安东尼1 天前
Fun with TypeScript Generics:玩转 TS 泛型
前端·javascript·面试
掘金安东尼1 天前
Next.js 企业级落地
前端·javascript·面试