参考好文
Attention 机制
整体移动至页面 LLM Attention 系列。
Normalization
Batch Norm(2015)
BN定义
- 范围:对一个Batch的样本,为每个通道数据做归一化
- 求均值、方差,
让数据标准化到(0, 1)正态分布,避免发生梯度消失 - 加入缩放
和平移变量 :使数据在归一化后 保留原有学习来的特征
BN优点
- 允许大学习率,降低对初始化的依赖
- 让中间层数值更稳定,为后面的网络提供坚实基础
- 轻微正则作用 (隐藏层+噪声,类似dropout)
存在的问题
- bs太小:效果不好,均值方差不足以代表整个数据
- bs太大:超过内存;会固定梯度下降方向导致难以更新;需跑更多epoch导致训练时间变长
Layer Norm(2016)
定义
- 范围
对同一层所有神经元的输入/某条数据(tensor)的多个维度做归一化 - 算法:同BN,归一化+缩放平移参数
优点
- 不需要Batch训练,在单条数据内部就能归一化
- LN可以有效缓解RNN的梯度消失和爆炸问题,但在CNN上效果不如BN

Post & Pre Layer Norm(2020)
Pre-LN
- LN在MHA之前做归一化。
- 行业标准:
更稳定。- 大模型训练难度大,使用Pre-LN居多。
- 优点
防止梯度爆炸或消失:一部分参数直接加在后面,没有正则化,可在反向时防止梯度消失或爆炸。
- 缺点
会削弱模型深度:梯度可以直接通过残差连接抄近道,不完全流经每一层
Post-LN:
- 定义:LN在残差之后做归一化,最初Bert的LN。
- 优点
性能可能更好:迫使信息和梯度必须流过每1层,完全利用模型深度对参数正则化更强、模型收敛性更好
- 缺点
训练不稳定、很容易失败。- MiniMax-01 使用Hybrid Lightning Attention
- 实验Post-LN比Pre-LN 效果好,从43.9 -> 50.2。
- 稳定训练。

Deep Norm(2022)
定义
- 范围:对Post-Layer Norm的改进。
- Post-LN问题:不稳定性来自梯度消失以及太大模型更新。
- 算法:
- 在LN之前,乘以
扩大残差连接。 LayerNorm(x * alpha + f(x)) - 以β减小部分参数的初始化范围,Xavier均匀分布初始化
- 在LN之前,乘以
优点
- 具备Post-LN的好性能,且具有Pre-LN 的稳定训练
RMS Norm(2019) & pRMS Norm
RMS Norm
针对LayerNorm改进,主要区别在于去掉了减去均值的部分,采用根均方。
RMS 操作 (
Root Mean Squre):
pRMS Norm
- 核心思想:用部分数据,代替全部的计算,p为前p%的数据
Instance Norm(图像, 2017)& Group Norm (2018)
Instance Norm
- 范围:针对图像做Norm,对每个样本的H、W维度做,保留N、C维度。
- 算法:只在Channel内部求均值做标准差
Group Norm
- 范围:对每个Chanel,再继续划分g个组,每组去做归一化。
QK-Norm
- 核心
- 在MHA中引入额外的
RMSNorm,用在Q、K之前。
- 在MHA中引入额外的
- 优点
- 在RoPE之前对输入做
归一化,减少训练中数值不稳定性。
- 在RoPE之前对输入做
各种Norm对比

位置编码
不同于RNN/CNN模型,Transformer模型必须加入位置编码,纯粹靠attention是无法捕捉顺序信息的,即无法区分不同位置的token。
- 绝对位置编码
- 优点:实现简单,不用训练,高效计算。
- 缺点:没有外推性。
- 相对位置编码
- 优点:直接体现相对位置,效果更好。具有一定外推性。
- 缺点:模型计算复杂,长序列仍然有外推性问题。
- RoPE(旋转位置编码)
- 优点:结合了绝对和相对位置的优点。
- 缺点:实现复杂,理论上外推性更好,但可能仍然存在外推问题。没训练过,效果不好。
绝对位置编码
早期笔记:Transformer-位置编码
核心思想:直接为输入
1. 可训练式
- 定义:把位置向量作为可训练的参数,如
维度。 - 缺点:没有外推性,难处理超过最大长度n的位置
2. 三角式
定义:
中第 和 各位置的值,分别由sin和cos函数来定义。 优点:三角函数有一定外推性,不用训练。
缺点:但现在很少看到这种绝对位置编码的工作。
3. 递归式
- 定义:通过递归计算位置编码,
,示例论文。 - 优点:具有较好外推性
- 缺点:牺牲并行性,计算不足
💥计算
⭐
相对位置编码
- 在计算attention时,考虑
当前位置和目标位置的相对距离,不建模输入位置的全局信息 - NLP任务更适合相对位置编码👍。
🧠 1、经典相对位置编码核心思想
核心
- 从绝对位置attention公式出发
- 去掉
及复杂内容, 由二元位置向量 来代替,主要在softmax和v加权里变换。
💥相对位置
:只依赖相对距离 ,再进行截断,缩小至有限范围 ❤️。 - Clip裁切:把相对距离缩短至有限范围。
:位置向量
- 优点
- 只需要有有限个位置向量,即可表示任意相对位置(因为进行了截断) 👍
2、XLNet式相对位置编码
- 核心
- 从公式
展开,把 改成相对位置向量 , 把2个 替换为可训练向量 和 不做截断,用了Sinusoidal式的生成方案。 加权时不再需要位置偏置,直接是 后期工作相对位置只在attention权重上计算,不在v上了。
- 从公式
3、T5
核心:从
展开出发做简化。认为输入和位置当解耦不做交互,直接删掉很多项,增加相对位置编码可训练参数 不做 截断,做分桶处理,相对位置 对应 。近的位置使用独立精细编码,越远越共用一个位置编码。
4、Deberta式
- 核心:从
出发,扔掉第4项,保留2、3项并改为相对位置编码。
旋转位置编码
参考文章
- RoPE 无显式的远程衰减,这在Long Context至关重要。
- RoPE 通过不同频率的三角函数有效区分了长程和短程,达到了类似层次位置编码的效果。
- 是一种真正的位置编码,这也是Long Context中比较关键的一环。
- RoPE直接作用于Q、K,不改变Attention的形式,与Flash Attention更契合,更容易Scale Up。
🌟核心思想
- RoPE位置编码通过将一个向量旋转某个角度,为其赋予位置信息。
- RoPE通过绝对位置方式实现相对位置编码😍, 综合了绝对和相对的优点。
- 为
、 向量注入绝对位置信息 , (注:很多文章使用的是m和n,这里为了保持和上文一致所以使用 )
和 向量内积时,带上相对位置信息
推导过程
通过复数方程找到使等式成立的g函数,最终求解得到
- 💥
公式,绝对位置编码 (假设是q是二维向量, 是常数)
- 💥
公式,相对位置融入
- 多维向量旋转:多维向量,两两一组,分别旋转,得到旋转公式。
- 远程衰减:
。 - 相反,如果
是1,随着 距离增加, 内积会震荡不会远程衰减,这就是问题。
- 相反,如果
- 💥
旋转矩阵
- 二维空间存在旋转矩阵
,二维向量左乘 ,相当于逆时针旋转 弧度。 RoPE旋转编码名称的来源。
- 只要对向量进行旋转,就能添加对应的位置信息,且具有周期性。

ALiBi (Attention with Linear Bias)
核心
- 目的:解决训练推理长度不一致的问题,如 训练 1024,推理 2048
- 思想:在
计算时加一个阈值好的偏置,偏置包括了Q和K的相对位置,相距越远贡献越低。不直接输入位置编码。 - 外推性会更好点。

Yarn
todo update
长度外推篇
问题:模型输入长度,训练短,预测长,导致泛化性效果不好。
FFN 层
两个全连接层+激活函数:
接在attention输出后面,带有激活函数,做复杂非线性变换,对最终性能非常重要。
增加FFN的维度有利于提升效果,一般比attention层维度大。
- 如Transformer里 attention输出是512,FFN是2048。
注:后期多用GeLU。ReLU 更适用于CNN,而 GeLU FFN。
激活函数
- 早期激活函数笔记:
Sigmoid、Tanh、ReLU、Maxout。
GeLU
- ReLU缺点:当输入为负数值为0,可能导致神经元死亡,降低模型表达能力。
- GeLU:很像ReLU,是一个连续的S曲线更平滑。
- 优点:一定程度上缓解死亡问题。
- 缺点:计算比ReLU慢。

Swish
- 特点:接近0时,像线性函数;远离0时,具有非线性特性。
- 优点:相比ReLU/Tanh等具有更好性能和收敛速度。
- 缺点:计算使用sigmoid,开销大。
- 公式如下,
是可调节参数。
解码策略
整体移动至文档 LLM解码相关
杂项
Encoder和Decoder 可做权重共享
- 每一层由Self-Attention和FFN组成,在Encoder或Decoder内部,做层共享。
- 但是现在大模型时代,每一层都有独立的参数,增强表达能力
Masked Self-Attention:Decoder解码过程,当前位置不能看到未来的内容。
Bert
- Bert的非线性来源:来自于self-attention和FFN中的gelu函数。
- WarmUp策略:在训练初期,把学习率小初始值逐步增加到预设最大值,提高稳定性和加快收敛。
- 初期使用较小学习率,避免早期训练不稳定和过拟合。