0%
- SFT Loss计算方法
- 交叉熵损失 CE Loss
- 假设输入prompt为x,目标输出序列为 y = (y1, y2, ..., yT),模型预测条件概率为
pθ(yt|x, y < t)
- 则SFT Loss定义为: SFTθ = −∑t = 1Tlog pθ(yt|x, y < t)
- 模型在生成每一个token时会预测一个概率分布,而希望它尽可能把正确token的概率提高。其损失就是“模型预测分布和参考答案之间的差距”。
- 每一步预测都会对计算交叉熵取平均,最后对整个结果取平均。
- 交叉熵:用来度量两个概率分布差异的函数,熵越小越接近真实分布。
- 真实分布p(x),预测分布q(x),交叉熵定义为 H(p, q) = −∑p(xi)log q(xi).
- Transformer与注意力机制
- Attention类别:Self Attention,Cross Attention,MHA,Flash
Attention等。
- Transformer结构:
- Encoder模块:由N层堆叠,每一层主要包含:
- 多头自注意力:捕捉输入序列中不同位置之间的依赖关系。
- Attention(Q, K, V) = softmax(QKT/sqrtdk)V
- 其中 Q, K, V 均由输入
X 投影得到:Q = XWQ, K = XWK, V = XWV.
- 前向传播:对于每个token进行线性变换,提高表达能力.
- FFN(x) = ReLU(xW1 + b1)W2 + b2
- 残差连接和Layer Norm:保证梯度稳定,提高训练效果。
- X′ = LayerNorm(X + MultiHead(X, X, X)), Y = LayerNorm(X′ + FFN(X′))
- Decoder模块:同样由N层堆叠
- Masked多头自注意力:防止token看到未来信息,保证自回归生成。
- QKT + M,通过mask矩阵屏蔽token之后的所有位置。
- Encoder-Decoder多头注意力:让Decoder关注Encoder计算出的特征。
- 公式相同,但是Q由decoder产生,K和V由Encoder提供。
- 前馈网络:增强表达。
- 残差连接:稳定训练,提高梯度传播能力。
- Decoder的最终输出会通过一个线性变换和softmax层得到最后的预测分布。
- 使用多头自注意力机制的优势:
- MHA可以让模型从不同的表示子空间中学习不同的特征,增强模型的表达能力;提高模型的鲁棒性,减少单个注意力头可能带来的信息丢失;允许不同的注意力头关注输入序列的不同部分,使模型能够捕捉更丰富的上下文信息;增强模型的表达能力,避免单一注意力模式可能导致的局部最优解。
- 为什么Q和K需要使用不同的权重矩阵:如果Q和K使用相同的权重矩阵,则
QKT
变成了一个对称矩阵,这样会导致注意力分数的计算缺乏灵活性,无法区分不同的输入关系。
- 计算注意力使用点积计算的优势:
- 计算效率更高,矩阵运算可以使用并行加速;避免了额外的可训练参数,而假发注意力需要额外的权重矩阵和非线性变换;也适用于高维向量。
- 为什么对 QKT
进行scaled处理:
- dk
是K的维度,如不不进行缩放,当 dk 较大时 QKT
的数值会变得过大,导致softmax的梯度消失。scaled后可以使得分布更加平稳,提高训练稳定性。
- 为什么在进行多头注意力时需要先concat再降维:
- 如果不降维会导致每个头的计算量变得很大,因此一般将d维的输入向量映射到一个较低维的子空间,使得每个头的计算量减少;如果直接相加那么所有注意力头的输出都会累驾到同一个维度上;而多头的优势在于可以关注不同的特征,直接相加会让这些特征混合,进而无法区分不同的注意力模式,降低了表达力。
- Mask如何实现:对于需要padding的位置设置负无穷,需要的位置设置0.
- 残差连接的作用:
- 缓解梯度消失:梯度可以残差路径传播,使得深层网络训练更加稳定。
- 加速收敛:通过跳跃连接使得梯度流动更加顺畅,减少训练时间。
- 防止信息丢失:输入信息可以沿着残差路径流向更深层网络。
- 提高泛化能力:残差+LayerNorm可以防止过拟合。
- 为什么用LayerNorm而不是BatchNorm:
- BatchNorm依赖于mini-batch统计量,而NLP任务序列长度不固定,BatchNorm可能表现不稳定,而LayerNorm不受影响。BatchNorm也依赖于较大的batchsize来获得稳定的均值和方差,而Transformer的batchsize通常较小。此外,transformer中每个token的计算是独立的,LayerNorm可以为每个token进行归一化,而batchnorm需要整个batch的信息。