
Example概览
想象一下,计算梯度就像一个“寻根问责”的过程。模型做出了一个预测,我们通过损失函数(交叉熵损失)计算出这个预测有多“差”(也就是损失有多大)。然后,我们要从这个最终的“差评”出发,反向追溯,看看网络中的每一个参数(也就是你说的矩阵)各自应该为这个差评负多少责任。这个“责任”就是梯度。
整个过程的核心是微积分中的链式法则 (Chain Rule),我们把它称为反向传播 (Backpropagation)。
核心思想
- 前向传播 (Forward Pass): 数据从输入层开始,一层一层地通过网络,直到最终输出预测结果。这就像水顺流而下。
- 反向传播 (Backward Pass): 我们从最终的损失(Loss)开始,一层一层地反向计算梯度。这就像水逆流而上,每一层都会根据自己的运算方式,把“责任”传递给前一层。
两层 LLaMA 模型简化结构
为了方便理解,我们先画出模型的简化路线图:
- 输入 (Input): 文本被转换成词元(Token)ID。
- 词嵌入层 (Embedding Layer): 使用嵌入矩阵
$W_{embed}$ 将每个 Token ID 转换成向量。
- 第一层 Transformer Block:
- 自注意力机制 (Self-Attention): 包含矩阵
$W_{q1}, W_{k1}, W_{v1}, W_{o1}$
- 前馈网络 (Feed-Forward Network): 包含矩阵
$W_{1\_1}, W_{2\_1}, W_{3\_1}$
- 第二层 Transformer Block:
- 自注意力机制 (Self-Attention): 包含矩阵
$W_{q2}, W_{k2}, W_{v2}, W_{o2}$
- 前馈网络 (Feed-Forward Network): 包含矩阵
$W_{1\_2}, W_{2\_2}, W_{3\_2}$
- 输出层 (Output Layer): 一个线性分类器,使用矩阵
$W_{cls}$(Classifier) 将最终的向量转换成词汇表大小的 logits。
- 损失函数 (Loss Function): Softmax + 交叉熵损失,计算最终的误差。
现在,我们开始“逆流而上”的梯度计算之旅。
梯度计算步骤 (反向传播)