Skip to content

第 15 章:需要时回查的矩阵公式与补充推导 ​

返回目录

下面保留第一版与第二版里有用的补充公式,供你在主文某一步想核查时使用。原对话直接用到的Softmax、方差、负对数与单参数更新,已经在对应章节展开;这里不把那些解释抽走。

本章沿用补充推导里的U记输出矩阵,与主文Wout同义。例子里的WQ、WK等仍是同一组参数,不新增一套模型。

15.1 Softmax导数,从商法则逐项推出 ​

设 D=\sum_r e^{s_r},a_j=e^{s_j}/D。若对自己的分数sj求导,商法则给出:

\frac{\partial a_j}{\partial s_j}
=\frac{e^{s_j}D-e^{2s_j}}{D^2}=a_j(1-a_j).

若对别的分数sk求导,只有分母受影响:

\frac{\partial a_j}{\partial s_k}
=-\frac{e^{s_j}e^{s_k}}{D^2}=-a_ja_k,\qquad k\ne j.

这解释了“提高一项,会挤掉其他项的比例”。若一项已接近1、其他项接近0,上述导数都可能很小,所以过尖的注意力分配可能不易调整。缩放分数是帮助控制这种情况的方法,不是所有训练问题的保证解法。

为了数值稳定,所有分数可先减去最大值。Softmax不变,因为分子分母中的公共指数因子会约去。这能避免直接对很大的分数取指数。

15.2 输出Softmax与交叉熵合起来怎样求导 ​

对目标编号y,输出分数是 \ell_1,\ldots,\ell_N,Softmax概率为p。将目标概率代入负对数:

L=-\ln\frac{e^{\ell_y}}{\sum_r e^{\ell_r}}
=-\ell_y+\ln\sum_r e^{\ell_r}.

对第j个分数求导:第一项在j=y时给−1,否则给0;第二项给 e^{\ell_j}/\sum_r e^{\ell_r}=p_j。所以:

\frac{\partial L}{\partial\ell_j}=p_j-\mathbf1_{j=y}.

因此即使输出对错误候选很自信,目标项梯度仍可能接近−1。不能仅根据Softmax本身的导数很小,就推断“输出错误且自信时一定无法学习”。合并损失后要看完整导数。

15.3 内容混合、Q/K/V与矩阵反传的完整连接 ​

用上横线表示“损失对这个量的梯度”,比如 \bar Z=\partial L/\partial Z。梯度与原量同形状。对矩阵X,它的含义由微分关系规定:

dL=\sum_{ir}\bar X_{ir}\,dX_{ir}.

对输出 \ell=hU+b:

\bar U=h^\mathsf T\bar\ell,\qquad
\bar h=\bar\ell U^\mathsf T,\qquad \bar b=\bar\ell.

第一式为什么是外积?因为第j分数是 \ell_j=\sum_r h_rU_{rj}+b_j,故 \partial L/\partial U_{rj}=h_r\bar\ell_j。多位置时将各贡献累加;若损失取平均,梯度也带同样的平均系数。

对于本版第13章定义的简化模块 R=X+ZW_O,Z=AV,给定 \bar R:

\bar W_O=Z^\mathsf T\bar R,\quad
\bar Z=\bar RW_O^\mathsf T,\quad
\bar A=\bar ZV^\mathsf T,\quad
\bar V=A^\mathsf T\bar Z.

对允许的注意力分数,用Softmax各导数汇总:

\bar S_{ij}=a_{ij}\left(\bar A_{ij}-\sum_{r\in J_i}a_{ir}\bar A_{ir}\right).

被禁止位置梯度为0。然后:

\bar Q=\bar SK/\sqrt{d_k},\qquad
\bar K=\bar S^\mathsf TQ/\sqrt{d_k},
\bar W_Q=X^\mathsf T\bar Q,\quad
\bar W_K=X^\mathsf T\bar K,\quad
\bar W_V=X^\mathsf T\bar V.

输入X通过残差与三条投影路径同时影响损失,故收到的梯度要相加:

\bar X=\bar R+\bar QW_Q^\mathsf T+\bar KW_K^\mathsf T+\bar VW_V^\mathsf T.

这些式子针对本节明确的小模块,不冒充整个完整GPT的反向公式。完整网络还要沿FFN、归一化和更多层继续用链式法则。

如果X来自嵌入查表,某个词表行收到的梯度,就是本次所有使用该行的位置梯度之和。没有用到的行不从输入路径收到梯度;重复Token的贡献相加。

15.4 小模型其余参数的梯度 ​

同一次前向得到的梯度约为:

\bar W_Q=\begin{bmatrix}0\\0.133562\end{bmatrix},\qquad
\bar W_K=\begin{bmatrix}0.133562\\-0.133562\end{bmatrix},
\bar W_V=\bar W_O=\begin{bmatrix}
0.921825&0.425203\\0.339120&0.156423
\end{bmatrix},
\bar U=\begin{bmatrix}
0.248311&0.425203&-0.673514\\
0.431008&0.738049&-1.169057
\end{bmatrix},
\bar E=\begin{bmatrix}
1.055387&0.425203\\1.466503&0.871611\\0&0
\end{bmatrix}.

C“黑便”的嵌入行没作为输入出现,所以这里E第三行梯度为0;但U的C输出列有非零梯度。输入角色和输出角色是不同路径。WV与WO梯度相等,则是本例单位矩阵初值造成的特殊结果。

配套程序用 [L(\theta+\epsilon e_r)-L(\theta-\epsilon e_r)]/(2\epsilon) 对24个参数逐项做中心差分,\epsilon=10^{-5},e_r表示只在第r个参数位置改动。差分有数值误差,是对解析推导的核验,不代替推导本身。

15.5 FFN与LayerNorm的公式及反向计算 ​

主线只解释各模块用途,这里明确一种可计算的排列。令X是本层输入,LN1/LN2为两次归一化,MHA是多头注意力:

T=X+\operatorname{MHA}(\operatorname{LN}_1(X)),
Y=T+\operatorname{FFN}(\operatorname{LN}_2(T)).

这叫Pre-LN,因为归一化放在各子层前面。Y进入下一层。最后还可以做最终归一化,得到用于输出的H。原始2017年Transformer使用子层与残差相加之后再归一化的Post-LN排列,不要混成同一精确配置。[R1]

对一行x,LayerNorm先定义均值μ和平方偏差平均v:

\mu=\frac1d\sum_r x_r,\qquad v=\frac1d\sum_r(x_r-\mu)^2.

再逐坐标计算:

\operatorname{LN}(x)_r=\gamma_r\frac{x_r-\mu}{\sqrt{v+\varepsilon}}+\beta_r.

ε为小正数,避免分母为0;γ/β是可训练的逐坐标缩放和偏移。这里v是归一化定义的平方偏差平均,不是除以d−1的统计样本方差。因为有ε及γ/β,不能声称最后输出严格均值0、方差1。[R3]

FFN可设 B=XW_1+b_1,C=\sigma(B),Y=CW_2+b_2。给定 \bar Y,按乘积与链式法则:

\bar W_2=C^\mathsf T\bar Y,\quad
\bar C=\bar YW_2^\mathsf T,\quad
\bar B=\bar C\odot\sigma'(B),
\bar W_1=X^\mathsf T\bar B,\qquad \bar X=\bar BW_1^\mathsf T.

符号⊙表示逐坐标相乘;偏置梯度对位置相加。ReLU在0不可微,自动微分实现会使用约定值;平滑激活按自己的导数计算。

LayerNorm也可逐步求导。令 s=\sqrt{v+\varepsilon}、\hat x=(x-\mu)/s,已知输出梯度g,令 u=g\odot\gamma,可整理为:

\bar x=\frac1s\left[u-\operatorname{mean}(u)\mathbf1
-\hat x\operatorname{mean}(u\odot\hat x)\right].

mean沿这一个位置的坐标取平均。用 d\mu=\operatorname{mean}(dx)、dv=2\operatorname{mean}((x-\mu)\odot dx) 与 ds=dv/(2s) 代入 d\hat x,即可推出。γ/β梯度分别为 g\odot\hat x 与g,多位置时相加。完整网络就是把这些局部规则按计算图连接起来。

15.6 位置旋转与输入输出共享 ​

没有位置编码、也没有位置相关掩码的全注意力,对输入位置的重排会相应重排输出,这叫置换等变。因为Q/K/V都随行重排,分数表随行列重排,每行Softmax与内容组合也随之重排。

因果掩码本身已经引入方向约束,不能把这个“没有掩码”的论证原封不动套给因果网络。显式位置信息还可提供位置或距离结构。

RoPE的一种理解是:先给不同位置的Q/K施加不同角度的二维旋转,再点积。本段专门采用列向量,写成 \tilde q_i=R_iq_i,\tilde k_j=R_jk_j。那么:

\tilde q_i^\mathsf T\tilde k_j=q_i^\mathsf T R_i^\mathsf T R_jk_j.

若一个二维块的旋转角是位置乘固定频率ω,则 R_i^\mathsf T R_j=R((j-i)\omega)。相对位置差j−i便进入点积分数。换回主文行向量约定时,相应转置即可。[R4]

最后,输入嵌入E为N×d,输出U为d×N,可以有意设置 U=E^\mathsf T,这叫权重共享。此时输出是拿h与各Token嵌入点积,而不是对E求逆。共享参数收到输入、输出两条路径的梯度之和;不共享时分别训练。[R1、R6]

15.7 残差的直接梯度路径 ​

残差形式是 y=x+F(x)。相加要求形状相同。它提供一条不必经过 F 的直接路径,而不是保证原信息永远不丢失,例如 F(x)=-x 会得到零。

在列向量的 Jacobian 记号下:

J_y=I+J_F.

所以梯度有一条恒等路径。这有助于解释深层优化,但不保证 I+J_F 永远良好,也不构成“绝不会梯度消失”的证明。

15.8 学习两套Q/K投影,比直接点积多了什么 ​

用行向量写:

q_ik_j^\mathsf T=x_iW_QW_K^\mathsf T x_j^\mathsf T.

中间矩阵 B=W_QW_K^\mathsf T 可训练,秩至多dk,通常不要求对称。若强制WQ=WK,那么B变成 W_QW_Q^\mathsf T,额外受到对称半正定约束。

一个小例子:x_a=(1,0),x_b=(0,1),取 W_Q=(1,0)^\mathsf T,W_K=(0,1)^\mathsf T,则a读b时点积为1,b读a时为0。原来两个输入向量的直接点积却是0。可见投影后的匹配不是原始向量相似度的简单重复。

15.9 原始架构和GPT不要混为一谈 ​

架构主要信息流常见任务形式
Encoder-only输入位置双向互读表示、分类、掩码预测等
Decoder-only因果自注意力自回归续写
Encoder–Decoder编码器双向;解码器因果并读取编码结果条件序列生成,如翻译

编码器—解码器的交叉注意力中,Q 来自解码端,K/V 来自编码端,长度可以不同,注意力矩阵是目标长度乘源长度。它不是把同一个 X 投影三次的 self-attention。原始 Transformer 属于第三类;本笔记训练与生成主线研究第二类。[来源 R1、R5]

15.10 关于能力,哪些是机制解释,哪些还需证据 ​

训练目标奖励能预测文本的数据处理方式。有些预测需要句法、指代、事实关联或多步依赖;模型若学到可复用特征,可以在多个样本上减少损失。输入嵌入、内容混合和输出层共同适应,使隐藏向量成为后续计算可利用的表示。

这是训练机制与经验结果之间的解释,不能由矩阵公式单独推出“必然具有可靠推理能力”。表达能力、优化是否找到好参数、数据是否提供信号、泛化是否可靠,是不同问题。

较大注意力系数表示该头对某个 Value 使用了较大系数;它不直接量化最终答案受该词影响多少。Value 的方向与大小、其他头、投影、残差和后续非线性都会改变最终效果。

“华法林与黑便有关”可以作为教学情境,但不能在未测真实模型时声称某个头已经学到这个关系。第13章甚至展示了损失降低时某条注意力比例下降的情况。

对数损失以数据实际提供的后续为目标,不直接判断命题真伪。一段错误文本也能成为训练样本;降低该样本损失不等于提高事实可靠性。模型有能力拟合复杂关系,也可能依赖表面共现、偏差或记忆。

所以本文能严格建立的是“定义后的模型怎样计算、梯度怎样产生、给定例子怎样更新”;对现实模型理解、推理、可靠性的判断,需要额外实验与证据。

保留每一次追问,认真走完每一步证明。