位置编码
https://blog.youkuaiyun.com/v_JULY_v/article/details/134085503
(1)绝对位置编码
P E ( p o s , 2 i + 1 ) = cos ( p o s 1000 0 2 i d m o d e l ) P E _ { ( p o s , 2 i + 1 ) } = \cos(\frac{pos}{10000^{\frac{2i}{d_{model}}}}) PE(pos,2i+1)=cos(10000dmodel2ipos)
P E ( p o s , 2 i ) = sin ( p o s 1000 0 2 i d m o d e l ) P E _ { ( p o s , 2 i ) } = \sin (\frac{pos}{10000^{\frac{2i}{d_{model}}}}) PE(pos,2i)=sin(10000dmodel2ipos)
- pos 为token在seq中的位置
- d_model 表示word embedding维度
- i 表示 word embedding 中的第 i 个位置
- 奇数cos,偶数sin
(2)旋转位置编码
前置知识
复数与旋转
乘复数 i
,相当于逆时针旋转 90°
欧拉公式
e
i
θ
=
cos
θ
+
i
sin
θ
e ^ { i θ } = \cos { θ } + i \sin { θ }
eiθ=cosθ+isinθ
可推导得:
e
i
(
−
θ
)
=
cos
(
−
θ
)
+
i
sin
(
−
θ
)
=
cos
θ
−
i
sin
θ
e ^ { i (-θ) } = \cos { (-θ) } + i \sin { (-θ) } = \cos { θ } - i \sin { θ }
ei(−θ)=cos(−θ)+isin(−θ)=cosθ−isinθ
sin θ = e i θ − e − i θ 2 i \sin \theta = \frac { e ^ { i \theta } - e ^ { - i \theta } } { 2 i } sinθ=2ieiθ−e−iθ
cos θ = e i θ + e − i θ 2 \cos \theta = \frac { e ^ { i \theta } + e ^ { - i \theta }} { 2} cosθ=2eiθ+e−iθ
复数的实部为 x 方向,虚部为 y 方向
由向量加减法可得
核心
为了建立绝对位置与相对位置之间的联系,论文中假设:
query 向量
q
m
q_m
qm 和 key 向量
k
n
k_n
kn 之间的内积操作可以被一个函数 g 表示
<
f
q
(
x
m
,
m
)
,
f
k
(
x
n
,
n
)
>
=
g
(
x
m
,
x
n
,
m
−
n
)
< f _ { q } \left( x _ { m } , m \right) , f _ { k } \left( x _ { n } , n \right) > = g \left( x _ { m } , x _ { n } , m - n \right)
<fq(xm,m),fk(xn,n)>=g(xm,xn,m−n)
为什么要这样子假设?
- 原因在于左边算是q和k向量的内积,而这恰好是transformer计算自注意力机制的核心一步,右边等式则意味着m与n的相对位置
如此一来,该等式便把“q和k的内积”与“它们的相对位置”给串起来了- 左边是含有各自绝对位置信息的q向量和k向量,而这个等式就是RoPE追求的目标,物理含义就是通过显式传入绝对位置信息实现与传入相对位置信息对等的情况
在二维情况下
q 向量
k 向量
推广到多维度,即每两个维度应用一次旋转矩阵
R o t i , k = ( cos ( θ i , k ) − sin ( θ i , k ) sin ( θ i , k ) cos ( θ i , k ) ) R o t _ { i , k } = \begin{pmatrix} \cos ( \theta _ { i , k } ) & - \sin ( \theta _ { i , k } ) \\ \sin ( \theta _ { i , k } ) & \cos ( \theta _ { i , k } ) \end{pmatrix} Roti,k=(cos(θi,k)sin(θi,k)−sin(θi,k)cos(θi,k))
- i 表示token在seq中的位置
- k 表示embedding的第k个维度
(3)两者的区别
特性 | 绝对位置编码 | 旋转位置编码(RoPE) |
---|---|---|
引入方式 | 通过加法将位置编码加到输入的词嵌入中 | 通过旋转变换直接影响 Q 和 K 向量 |
位置信息融合时机 | 在乘QKV矩阵之前 ,使用加法 | 在乘QKV矩阵之后,Q,K计算内积之前,应用旋转 |
适用性 | 在短序列中效果较好,长序列中可能丢失信息 | 在长序列中表现优越,能够更好地捕捉长距离依赖 |
计算复杂度 | 计算较简单,位置编码在训练前生成并固定 | 计算较复杂,需要在注意力计算前对 Q 和 K 做旋转变换 |
优点 | 简单易实现,足够处理大部分任务 | 更强的建模长序列依赖的能力,适合长距离依赖任务 |
缺点 | 长距离依赖表现较差,难以处理长序列中的复杂关系 | 计算复杂度较高,旋转方式增加了计算负担 |
归一化方式
首先归一化方式都是用来稳定训练,使得每层输入的数值稳定
归一化中可学习的参数是全局共享的
(1)Batch Norm
计算整个batch的均值和方差,用来归一化每一个样本
(2)Layer Norm
对每个样本计算均值和方差,使用自身的均值和方差归一化自己
L N ( x i ) = x i − μ i σ i ⋅ g + b L N ( x_i ) = \frac { x_i - \mu_i } { \sigma_i } \cdot g + b LN(xi)=σixi−μi⋅g+b
σ = 1 n ∑ i = 1 n ( x i − μ ) 2 \sigma = \sqrt { \frac { 1 } { n } \sum _ { i = 1 } ^ { n } ( x _ { i } - \mu ) ^ { 2 } } σ=n1i=1∑n(xi−μ)2
(3)RMSNorm
R M S N o r m ( x i ) = x i R M S ( x i ) ⋅ g R M S N o r m ( x_i ) = \frac { x_i } { R M S ( x_i ) } \cdot g RMSNorm(xi)=RMS(xi)xi⋅g
其中 R M S ( x ) = 1 n ∑ i = 1 n x i 2 其 中 R M S ( x ) = \sqrt { \frac { 1 } { n } \sum _ { i = 1 } ^ { n } x _ { i } ^ { 2 } } 其中RMS(x)=n1i=1∑nxi2
RMSNorm相比LN的优势?
1、计算复杂度更低:LN需要计算均值和方差,RMSnorm省去了计算均值
2、内存占用更小:不用存均值
3、更加鲁棒,对输入分布的编码不敏感:LN计算均值和方差对输入较为敏感,当存在异常值大的值时(均值会被拉大,导致标准差也被拉大,最终导致归一化后分布出现偏移),梯度不稳定。
因为生成任务中对于输入序列的均值并不敏感,所以 RMSNorm 被广泛用于自回归生成大模型中
(4)三者的区别
特性 | Batch Normalization (BN) | Layer Normalization (LN) | RMS Normalization (RMSNorm) |
---|---|---|---|
归一化方式 | 基于批次对样本进行归一化 | 每个样本独立归一化 | 基于样本的均方根进行归一化 |
依赖批次大小 | 依赖批次大小,批次小会失效 | 不依赖批次大小 | 不依赖批次大小 |
适用场景 | 大批次训练,尤其在计算机视觉任务中(如 CNN) | NLP(例如 Transformer)、小批次训练 | 简化的归一化方法,适用于需要减小计算开销,对输入的均值不敏感的任务(例如生成任务…) |
优点 | 提高训练速度、减少协方差偏移、提高表现 | 无批次依赖、计算简单、适合 NLP | 减少计算开销、对批次大小无依赖 |
缺点 | 依赖批次大小、批次小时效果差、推理阶段计算开销较大 | 无法利用批次信息、不能像 BN 那样利用全局统计 | 无法处理均值,可能无法捕捉偏移(shift),不适合所有任务 |
优化器
下面算法中,只有SGD是手动设置 LR,其他都是自动调整的LR
-
SGD(Stochastic Gradient Descent,随机梯度下降)
仅使用一个样本计算梯度并更新参数,每次更新方向存在较大波动,但计算效率高。
适用于大规模数据集,但可能收敛较慢且易陷入局部最优。
可结合Momentum(动量)来加速收敛并减少震荡。 -
Momentum(动量)算法
一种用于加速梯度下降的优化方法,能够减少梯度更新的震荡,使模型收敛更快、更稳定。它的核心思想是在梯度更新时加入“惯性”,让参数在过去梯度的方向上继续前进,而不是仅依赖当前的梯度。 -
Adagrad(Adaptive Gradient)
采用自适应学习率,对更新频繁的参数降低学习率,对较少更新的参数提高学习率。
适用于处理稀疏数据,如NLP任务。
由于学习率随时间不断减小,可能会导致训练提前停止(学习率趋近于零)。 -
RMSprop(Root Mean Square Propagation)
Adagrad的改进版本,使用指数加权移动平均(EMA)来控制学习率衰减速度,避免学习率过快减小的问题。
适用于处理非平稳目标函数,如RNN中的序列任务。
相比Adagrad,更能维持学习率的稳定性。指数加权移动平均(EMA, Exponential Moving Average)是一种平滑数据的方法,它对最近的数据点赋予更高的权重,而对较旧的数据点赋予较低的权重。
-
Adam(Adaptive Moment Estimation)
结合Momentum和RMSprop的优势,分别计算梯度的一阶矩(动量)和二阶矩(梯度平方的均值)。
适用于大多数深度学习任务,默认推荐优化器之一。
学习率适应性强,能处理高噪声和稀疏梯度问题。 -
AdamW(Adam with Weight Decay)
Adam的变体,改进了权重衰减(L2正则化)的计算方式,以提高泛化能力。
适用于深度神经网络,尤其是在防止过拟合方面表现优异。
推荐用于大规模数据训练,如Transformer等模型。
如果选择优化器:
- SGD 适用于小规模任务,计算高效,结合Momentum效果更好。
- Adagrad 适用于稀疏数据,如文本处理。
- RMSprop 适用于非平稳问题,如RNN任务
- Adam 是默认选择,适用于大多数深度学习任务。 - AdamW 更适合大规模深度网络,可减少过拟合风险。
正则化方式
https://blog.youkuaiyun.com/a910247/article/details/137604232
1. L1 正则化(Lasso Regularization)
- 使某些权重变为 0,即产生稀疏性,适用于特征选择
- 适用于高维数据,尤其是特征冗余的情况
J ( w ) = L o s s ( y , y ^ ) + λ ∑ i = 1 n ∣ w i ∣ J ( w ) = L o s s ( y , \hat { y } ) + \lambda \sum _ { i = 1 } ^ { n } | w _ { i } | J(w)=Loss(y,y^)+λi=1∑n∣wi∣
2. L2 正则化(Ridge Regularization)
- 让权重趋向于较小值,而不是完全变为 0(不会产生稀疏性)。
- 有助于降低模型对特定特征的依赖,提高泛化能力。
J ( w ) = L o s s ( y , y ^ ) + λ ∑ i = 1 n w i 2 J ( w ) = L o s s ( y , \widehat { y } ) + \lambda \sum _ { i = 1 } ^ { n } w _ { i } ^ { 2 } J(w)=Loss(y,y )+λi=1∑nwi2
3. Elastic Net 正则化
- 结合了 L1 和 L2 正则化,兼具 稀疏性(L1) 和 权重平滑(L2) 的特点。
- 适用于高维数据,尤其是特征之间存在高度相关性的情况。
J ( w ) = L o s s ( y , j ) + λ 1 ∑ i = 1 n ∣ w i ∣ + λ 2 ∑ i = 1 n w i 2 J ( w ) = L o s s ( y , j ) + \lambda _ { 1 } \sum _ { i = 1 } ^ { n } | w _ { i } | + \lambda _ { 2 } \sum _ { i = 1 } ^ { n } w _ { i } ^ { 2 } J(w)=Loss(y,j)+λ1i=1∑n∣wi∣+λ2i=1∑nwi2
4. Dropout
-
在训练时随机丢弃一部分神经元(将其激活值设为 0),防止神经元间的共适应性。
共适应性(Co-adaptation)是指多个神经元相互依赖,只有在彼此存在的情况下才能有效工作,而单独存在时无法独立学习有用的特征。
这种现象通常会导致模型的泛化能力下降,即在训练集上表现良好,但在测试集上表现较差(过拟合)
5. Early Stopping
- 当损失不再下降或开始上升时停止训练
6. 数据增强(Data Augmentation)
7. 归一化(Normalization)
8. 权重衰减(Weight Decay)
- 等价于 L2 正则化,通过对权重的平方和进行惩罚,防止权重过大导致过拟合。
- 通常在 AdamW、SGD 等优化器中实现。