第 5 周 · Day 4:系统复习(二)——28 个核心推导默写

Transformers and Large Language Models · Week 5 · Day 4。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

时长 7 小时:§1 方法(0.5h)· §2–§7 推导默写(每个限时 10 分钟,约 4.5h)· §8 代码默写(1.5h)· 对照答案卷与补漏(0.5h)

对应学习计划 支线 1 的”手推 attention / LoRA / DPO 三个公式到不用思考”,以及面试题库里所有”推一下”的题。今天把全课的推导浓缩成 28 个,每个给出题目、提纲、容易错在哪、出处。提纲只写关键的一步步,完整的推导回到出处去看。

配套代码 w5day4_checks.py(纯 numpy):28 个推导的数值答案卷:每个推导出来的公式,都用有限差分、蒙特卡洛或暴力枚举核对一遍(28/28 通过)

§B 参考实现(code/ 目录):w5d4_drills.py(15 道”把推导写成代码”的挖空练习,自带判题);w5d4_drills_solutions.py(参考答案,先别看)。

今天的目标:28 个推导,每个能在 10 分钟内闭卷写完,并说出它的动机和一个数值检验的办法;15 道代码练习全部通过判题。


§0 今天怎么安排

  1. 先挑顺序:拿出昨天的漏洞清单(Day 3 §B 第 4 题)和期中、期末的错题记录(Day 2 §2.5)。清单里有的推导排在前面。
  2. 每个推导限时 10 分钟,纸笔,闭卷:写题目 → 按 §1 的方法推 → 写完后打开 out_w5day4.txt(或跑 python w5day4_checks.py)看对应的那一行,确认你的公式和数值核对的一致 → 对不上或超时的,回到”出处”重看,当天再默写一遍。
  3. 下午做代码默写(§8):15 道练习,每道 10 分钟。
  4. 记录:每个推导记一个状态:✓(10 分钟内写完且正确)/ △(写出来了但超时或有小错)/ ✗(写不出来)。△ 和 ✗ 进”三天后重做”的清单(Day 3 §A 的间隔重复)。

今天要用到的旧结论:全部。


§1 怎么默写一个推导

Week 0 Day 1 §5.0 的”五步推导法”在这里同样适用,稍作浓缩:

  1. 动机一句话:这个推导要回答什么问题?(“为什么要除以 dk\sqrt{d_k}""DPO 为什么不需要奖励模型”)写不出动机,说明你只记住了公式。
  2. 写清对象:变量是什么、形状是什么、要求的是什么(对谁求导、求什么的最优解、求什么的期望)。
  3. 按最朴素的方式展开:矩阵公式先写成索引形式、期望先写成求和、最优化先写出拉格朗日函数。不要跳步:跳步的地方就是考试和面试里被追问的地方。
  4. 化简并对照直觉:结果的形状对吗?特殊情况(β→0\beta\to0、k=1k=1、B=0B=0)对吗?符号的方向对吗(梯度该推高还是压低)?
  5. 说出一个数值检验:有限差分、蒙特卡洛、暴力枚举,哪一个能验证它?(这就是 w5day4_checks.py 在做的事,也是这门课每一个 checks.py 的精神。)

面试里的加分项:推完之后主动说”它的代价 / 局限是……”和”它在哪里被用到……”。


§2 基础

D1 softmax + 交叉熵对 logits 的梯度

  • 提纲:L=−log⁡pyL=-\log p_y,p=softmax(z)p=\mathrm{softmax}(z)。∂log⁡py/∂zj=1[j=y]−pj\partial\log p_y/\partial z_j=\mathbb 1[j=y]-p_j(softmax 的雅可比 diag(p)−pp⊤\mathrm{diag}(p)-pp^\top 与 −1/py-1/p_y 相乘,大部分项抵消)。所以 ∂L/∂z=p−ey\partial L/\partial z=p-e_y。
  • 容易错在:直接对 pp 求导后忘了乘 softmax 的雅可比;或者把雅可比写成 diag(p)\mathrm{diag}(p)。
  • 出处:Week 0 Day 1 §5.2。核对:D1。

D2 线性层的反向(VJP)

  • 提纲:y=Wxy=Wx,上游梯度 δ=∂L/∂y\delta=\partial L/\partial y。索引形式 yi=∑jWijxjy_i=\sum_jW_{ij}x_j,所以 ∂L/∂Wij=δixj\partial L/\partial W_{ij}=\delta_ix_j,即 ∂L/∂W=δx⊤\partial L/\partial W=\delta x^\top;∂L/∂xj=∑iδiWij\partial L/\partial x_j=\sum_i\delta_iW_{ij},即 W⊤δW^\top\delta。梯度与参数同形状,可以用”形状凑法”检查。
  • 容易错在:转置的位置;batch 时 ∂L/∂W=∑bδbxb⊤\partial L/\partial W=\sum_b\delta_bx_b^\top(对 batch 求和)。
  • 出处:Week 0 Day 1 §3–§4。核对:D2。

D3 LayerNorm 的雅可比是一个投影

  • 提纲:x^=(x−μ1)/σ\hat x=(x-\mu\mathbf 1)/\sigma。对 xx 求导:∂x^/∂x=1σ(I−1d11⊤−1dx^x^⊤)\partial\hat x/\partial x=\frac1\sigma\big(I-\frac1d\mathbf1\mathbf1^\top-\frac1d\hat x\hat x^\top\big)。括号里是把向量投影到”与 1\mathbf1 和 x^\hat x 都正交”的子空间:沿”整体平移”和”整体缩放”方向的扰动被消掉了。
  • 容易错在:忘了 σ\sigma 也依赖 xx(漏掉 x^x^⊤/d\hat x\hat x^\top/d 那一项)。
  • 出处:Week 0 Day 2 §4.3。核对:D3。

D4 Adam 的偏差修正

  • 提纲:mt=β1mt−1+(1−β1)gtm_t=\beta_1m_{t-1}+(1-\beta_1)g_t,m0=0m_0=0。展开:mt=(1−β1)∑k=1tβ1t−kgkm_t=(1-\beta_1)\sum_{k=1}^t\beta_1^{t-k}g_k,若 E[gk]=gˉ\mathbb E[g_k]=\bar g,则 E[mt]=(1−β1t)gˉ\mathbb E[m_t]=(1-\beta_1^t)\bar g。所以要除以 1−β1t1-\beta_1^t;vtv_t 同理。
  • 容易错在:以为偏差修正只影响最初几步所以无所谓:没有它,前几步的有效学习率会被放大或缩小很多(取决于 mm 和 v\sqrt v 谁的偏差大)。
  • 出处:Week 0 Day 2 §2.6。核对:D4。

§3 架构

D5 为什么除以 dk\sqrt{d_k}

  • 提纲:q,kq,k 各分量独立、均值 0、方差 1,q⋅k=∑i=1dkqikiq\cdot k=\sum_{i=1}^{d_k}q_ik_i,每项方差 1,和的方差 dkd_k,标准差 dk\sqrt{d_k}。除以 dk\sqrt{d_k} 让打分的方差回到 1,softmax 不会一开始就饱和。
  • 容易错在:说成”防止数值溢出”(那是减最大值解决的);真正的理由是饱和导致梯度消失。
  • 出处:Week 1 Day 1 §2.1;Week 0 Day 4 §5.5。核对:D5。

D6 注意力的反向

  • 提纲:S=QK⊤/dS=QK^\top/\sqrt d,P=softmax(S)P=\mathrm{softmax}(S)(按行),O=PVO=PV。dV=P⊤dOdV=P^\top dO;dP=dO V⊤dP=dO\,V^\top;softmax 的 VJP 按行:dSij=Pij(dPij−∑kdPikPik)dS_{ij}=P_{ij}\big(dP_{ij}-\sum_kdP_{ik}P_{ik}\big);dQ=dS K/ddQ=dS\,K/\sqrt d,dK=dS⊤Q/ddK=dS^\top Q/\sqrt d。
  • 容易错在:softmax 的 VJP 写成逐元素的 P(1−P)P(1-P)(那只是雅可比的对角线);漏掉 1/d1/\sqrt d;dKdK 的转置。
  • 出处:Week 1 Day 1 §2.3。核对:D6;代码默写第 2 题。

D7 RoPE:打分只依赖相对位置

  • 提纲:二维时把 qq 看成复数,位置 mm 乘 eimθe^{im\theta}。Re[(qeimθ)(keinθ)‾]=Re[qkˉ ei(m−n)θ]\mathrm{Re}\big[(qe^{im\theta})\overline{(ke^{in\theta})}\big]=\mathrm{Re}\big[q\bar k\,e^{i(m-n)\theta}\big],只依赖 m−nm-n。高维时 d/2d/2 对维度各用一个频率 θi=base−2i/d\theta_i=\text{base}^{-2i/d}。
  • 容易错在:把 RoPE 加到嵌入上(它是乘到每一层的 qq、kk 上);对 vv 也旋转(不需要)。
  • 出处:Week 1 Day 5 §2.2–2.3。核对:D7;代码默写第 3 题。

D8 KV Cache 的显存

  • 提纲:每个 token、每层要存 K 和 V,各 nkv×dheadn_{kv}\times d_{head} 个数:字节数 =2×L×nkv×dhead×T×B×=2\times L\times n_{kv}\times d_{head}\times T\times B\times 字节数。70B(80 层、8 个 KV 头、头维 128)、bf16、batch 32、8192:2×80×8×128×2×32×8192=802\times80\times8\times128\times2\times32\times8192=80 GiB。
  • 容易错在:用查询头数代替 KV 头数(GQA 省的就在这里);忘了乘 2(K 和 V)。
  • 出处:Week 1 Day 4 §1.4。核对:D8。

D9 每层参数 12d212d^2 与 C≈6NDC\approx6ND

  • 提纲:MHA 的 Q、K、V、O 各 d2d^2(4d24d^2);FFN 两个 d×4dd\times4d 矩阵(8d28d^2);合计 12d212d^2。训练:每个参数每个 token 前向一次乘加(2 FLOPs),反向约前向的两倍(对输入、对权重各一次,4 FLOPs),合计 6ND6ND。
  • 容易错在:SwiGLU 有三个矩阵(中间维常取 83⋅4d\frac83\cdot4d 左右以保持参数量);GQA 下 K、V 更小(Day 3 §2.1)。
  • 出处:Week 1 Day 2 §5。核对:D9。

D10 online softmax

  • 提纲:分块处理打分,维护当前最大值 mm、归一化常数 ℓ\ell、未归一化的加权和 aa。新块到来:m′=max⁡(m,max⁡jsj)m'=\max(m,\max_j s_j),ℓ←ℓem−m′+∑jesj−m′\ell\leftarrow\ell e^{m-m'}+\sum_je^{s_j-m'},a←aem−m′+∑jesj−m′vja\leftarrow ae^{m-m'}+\sum_je^{s_j-m'}v_j。最后 a/ℓa/\ell。归纳法可证每一步都等于”到目前为止的精确结果”。
  • 容易错在:更新 ℓ\ell 时忘了给旧的 ℓ\ell 乘修正系数;第一块时 m=−∞m=-\infty 的处理。
  • 出处:Week 1 Day 6 §3.2。核对:D10;代码默写第 4 题。

§4 训练

D11 Chinchilla 的最优配比

  • 提纲:L(N,D)=E+A/Nα+B/DβL(N,D)=E+A/N^\alpha+B/D^\beta,约束 C=6NDC=6ND。把 D=C/(6N)D=C/(6N) 代入,对 NN 求导令为 0:αAN−α−1=βB(6N/C)βN−1\alpha AN^{-\alpha-1}=\beta B(6N/C)^{\beta}N^{-1},解得 N∗=G (C/6)β/(α+β)N^*=G\,(C/6)^{\beta/(\alpha+\beta)},G=(αAβB)1/(α+β)G=\big(\frac{\alpha A}{\beta B}\big)^{1/(\alpha+\beta)};α≈β\alpha\approx\beta 时 N∗,D∗∝C0.5N^*,D^*\propto C^{0.5}。
  • 容易错在:直接在两个变量上求偏导而忘了约束;指数的分子分母写反。
  • 出处:Week 2 Day 1 §3.2。核对:D11。

D12 MoE 负载均衡损失的梯度

  • 提纲:Laux=n∑ifiPi\mathcal L_{aux}=n\sum_if_iP_i,fif_i 是实际分到专家 ii 的 token 比例(argmax,不可导,当常数),Pi=1T∑tpt,iP_i=\frac1T\sum_tp_{t,i}。对路由概率求导:∂L/∂pt,i=nfi/T\partial\mathcal L/\partial p_{t,i}=nf_i/T:越热门的专家(fif_i 大),它的路由概率被压得越狠。均匀分配时 L=1\mathcal L=1 最小。
  • 容易错在:以为 fif_i 也能求导;忘了乘专家数 nn(它让损失的尺度与专家数无关)。
  • 出处:Week 2 Day 2 §3.2。核对:D12。

D13 LoRA 的梯度与初始化

  • 提纲:y=(W+BA)xy=(W+BA)x,上游 gg。∂L/∂B=g(Ax)⊤\partial L/\partial B=g(Ax)^\top,∂L/∂A=B⊤gx⊤\partial L/\partial A=B^\top gx^\top。B=0B=0 初始化:一开始 BA=0BA=0,模型与原模型相同;此时 ∂L/∂A=0\partial L/\partial A=0 但 ∂L/∂B≠0\partial L/\partial B\neq0(AA 随机),所以 BB 先动起来、训练能启动。若两者都为 0,梯度全为 0,永远学不动。缩放 α/r\alpha/r 让改变 rr 时更新的尺度大致不变。
  • 容易错在:把 AA、BB 都初始化为 0;或者都随机(一开始就改变了模型)。
  • 出处:Week 2 Day 6 §3.2、§3.4。核对:D13;代码默写第 5 题。

D14 推测解码的输出分布恰好是 pp

  • 提纲:草稿 x∼qx\sim q,以 min⁡(1,p(x)/q(x))\min(1,p(x)/q(x)) 接受;拒绝时从 (p−q)+/(1−α)(p-q)^+/(1-\alpha) 重采,α=∑min⁡(p,q)\alpha=\sum\min(p,q)。P(x)=q(x)min⁡(1,p(x)q(x))+(1−α)(p(x)−q(x))+1−α=min⁡(p,q)+(p−q)+=p(x)P(x)=q(x)\min(1,\frac{p(x)}{q(x)})+(1-\alpha)\frac{(p(x)-q(x))^+}{1-\alpha}=\min(p,q)+(p-q)^+=p(x)。
  • 容易错在:以为推测解码是”近似”:它是精确的;期望产出 1−αk+11−α\frac{1-\alpha^{k+1}}{1-\alpha} 也常被问。
  • 出处:Week 3 Day 1 §3.2。核对:D14;代码默写第 15 题。

§5 对齐

D15 从 Gumbel 噪声推出 Bradley-Terry

  • 提纲:感受到的效用 ui=ri+ϵiu_i=r_i+\epsilon_i,ϵ\epsilon 独立同分布于标准 Gumbel。两个 Gumbel 之差服从 logistic 分布,所以 P(i≻j)=P(ϵj−ϵi<ri−rj)=σ(ri−rj)P(i\succ j)=P(\epsilon_j-\epsilon_i<r_i-r_j)=\sigma(r_i-r_j)。损失 −log⁡σ(rw−rl)-\log\sigma(r_w-r_l),梯度 ∂/∂rw=−σ(rl−rw)\partial/\partial r_w=-\sigma(r_l-r_w):排错越厉害,梯度越大。
  • 容易错在:只写结论不写噪声模型;忘了”奖励只确定到一个常数”这个推论。
  • 出处:Week 3 Day 2 §2.2。核对:D15;代码默写第 6 题。

D16 策略梯度与基线

  • 提纲:∇θEy∼πθ[r(y)]=∑yr(y)∇πθ(y)=∑yπθ(y)r(y)∇log⁡πθ(y)=E[r∇log⁡π]\nabla_\theta\mathbb E_{y\sim\pi_\theta}[r(y)]=\sum_yr(y)\nabla\pi_\theta(y)=\sum_y\pi_\theta(y)r(y)\nabla\log\pi_\theta(y)=\mathbb E[r\nabla\log\pi](对数导数技巧)。减去不依赖 yy 的基线 bb:E[b∇log⁡π]=b∑y∇π=b∇1=0\mathbb E[b\nabla\log\pi]=b\sum_y\nabla\pi=b\nabla1=0,期望不变、方差可以大幅降低。
  • 容易错在:基线依赖了动作本身(那就会引入偏差)。
  • 出处:Week 3 Day 3 §1.2–1.3。核对:D16。

D17 PPO 裁剪目标的四种情况

  • 提纲:min⁡(ρA,clip(ρ,1±ε)A)\min(\rho A,\mathrm{clip}(\rho,1\pm\varepsilon)A)。A>0A>0:ρ>1+ε\rho>1+\varepsilon 时取裁剪项(常数),梯度 0;否则梯度 AA。A<0A<0:ρ<1−ε\rho<1-\varepsilon 时梯度 0;否则梯度 AA。只在”已经往有利方向走过头”时切断梯度。
  • 容易错在:以为裁剪是对称地限制 ρ\rho 在区间里(往不利方向的偏离不被裁剪)。
  • 出处:Week 3 Day 3 §3.2。核对:D17。

D18 KL 约束目标的闭式最优解

  • 提纲:max⁡π∑yπ(y)r(y)−β∑yπ(y)log⁡π(y)πref(y)\max_\pi\sum_y\pi(y)r(y)-\beta\sum_y\pi(y)\log\frac{\pi(y)}{\pi_{ref}(y)},约束 ∑π=1\sum\pi=1。拉格朗日对 π(y)\pi(y) 求导:r(y)−βlog⁡π(y)πref(y)−β−λ=0r(y)-\beta\log\frac{\pi(y)}{\pi_{ref}(y)}-\beta-\lambda=0,得 π∗(y)=1Zπref(y)er(y)/β\pi^*(y)=\frac1{Z}\pi_{ref}(y)e^{r(y)/\beta}。(或者:目标等于 −β KL(π∥π∗)+βlog⁡Z-\beta\,\mathrm{KL}(\pi\|\pi^*)+\beta\log Z,最大化即令 π=π∗\pi=\pi^*。)
  • 容易错在:忘了归一化常数 ZZ,或者以为 ZZ 可以算出来(它要对所有回答求和,算不了:这正是 DPO 要消掉它的原因)。
  • 出处:Week 3 Day 4 §1.2。核对:D18。

D19 DPO 的损失与梯度

  • 提纲:由 D18 反解 r(x,y)=βlog⁡π∗(y)πref(y)+βlog⁡Z(x)r(x,y)=\beta\log\frac{\pi^*(y)}{\pi_{ref}(y)}+\beta\log Z(x)。代入 Bradley-Terry:σ(rw−rl)\sigma(r_w-r_l) 里 Z(x)Z(x) 抵消。用 πθ\pi_\theta 代替 π∗\pi^*:L=−log⁡σ(β[log⁡πθ(yw)πref(yw)−log⁡πθ(yl)πref(yl)])\mathcal L=-\log\sigma\big(\beta[\log\frac{\pi_\theta(y_w)}{\pi_{ref}(y_w)}-\log\frac{\pi_\theta(y_l)}{\pi_{ref}(y_l)}]\big)。梯度:−β σ(−Δ) [∇log⁡πθ(yw)−∇log⁡πθ(yl)]-\beta\,\sigma(-\Delta)\,[\nabla\log\pi_\theta(y_w)-\nabla\log\pi_\theta(y_l)],权重 σ(−Δ)\sigma(-\Delta) 在隐式奖励排错时最大。
  • 容易错在:说不清 Z(x)Z(x) 为什么能抵消(两个回答来自同一个提示);把 β\beta 的方向说反(β\beta 大 = 离参考模型近)。
  • 出处:Week 3 Day 4 §2。核对:D19;代码默写第 7 题。

D20 GRPO 的组内优势

  • 提纲:同一道题采 GG 个回答,A^i=(ri−rˉ)/std(r)\hat A_i=(r_i-\bar r)/\mathrm{std}(r),回答里的每个 token 共用。二值奖励、组内正确率 pp:答对 (1−p)/p\sqrt{(1-p)/p},答错 −p/(1−p)-\sqrt{p/(1-p)}。全对或全错时 std = 0,没有信号,概率 pG+(1−p)Gp^G+(1-p)^G。不需要价值网络:组内均值就是基线(D16)。
  • 容易错在:忘了除以标准差(以及它带来的”难度加权”偏置,Dr. GRPO 把它去掉了)。
  • 出处:Week 3 Day 5 §3.2、§4.1。核对:D20;代码默写第 8 题。

D21 pass@k 的无偏估计

  • 提纲:采 n≥kn\ge k 次、cc 次成功。估计量 1−(n−ck)/(nk)1-\binom{n-c}k/\binom nk:它是”从这 nn 个里无放回地抽 kk 个,至少一个成功”的概率;对 c∼Bin(n,p)c\sim\mathrm{Bin}(n,p) 取期望恰好是 1−(1−p)k1-(1-p)^k。朴素的 1−(1−c/n)k1-(1-c/n)^k 有偏(Jensen)。pass^k 同理:(ck)/(nk)\binom ck/\binom nk。
  • 容易错在:用 kk 次采样直接算(方差大);用朴素公式。
  • 出处:Week 3 Day 5 §5.1;Week 4 Day 4 §3.3。核对:D21;代码默写第 9 题。

§6 应用与评测

D22 InfoNCE 的梯度

  • 提纲:S=QD⊤/τS=QD^\top/\tau,P=softmax(S)P=\mathrm{softmax}(S)(按行),L=−1B∑ilog⁡Pii\mathcal L=-\frac1B\sum_i\log P_{ii}。由 D1,∂L/∂S=(P−I)/B\partial\mathcal L/\partial S=(P-I)/B;链式法则 ∂L/∂Q=(P−I)D/(τB)\partial\mathcal L/\partial Q=(P-I)D/(\tau B)。log⁡B−L\log B-\mathcal L 是互信息的下界,永远不超过 log⁡B\log B。
  • 容易错在:漏掉 1/τ1/\tau 或 1/B1/B;说不清温度的作用(梯度集中在难负例上)。
  • 出处:Week 4 Day 1 §3.3。核对:D22;代码默写第 14 题。

D23 BM25 的 IDF

  • 提纲:二元独立模型:出现词 tt 贡献 log⁡p(1−q)q(1−p)\log\frac{p(1-q)}{q(1-p)},p=P(t∣相关)p=P(t\mid\text{相关})、q=P(t∣不相关)q=P(t\mid\text{不相关})。无标注时取 p=0.5p=0.5、q≈(n+0.5)/(N+1)q\approx(n+0.5)/(N+1):得 log⁡N−n+0.5n+0.5\log\frac{N-n+0.5}{n+0.5}。n>N/2n>N/2 时为负,Lucene 用 log⁡(1+⋅)\log(1+\cdot)。词频项 tf(k1+1)tf+k1(1−b+b∣d∣/avgdl)\frac{tf(k_1+1)}{tf+k_1(1-b+b|d|/\text{avgdl})} 饱和于 k1+1k_1+1。
  • 容易错在:说不出 IDF 的概率来源;忘了负 IDF 的坑。
  • 出处:Week 4 Day 2 §1.2–1.4。核对:D23;代码默写第 10 题。

D24 NDCG

  • 提纲:DCG@k=∑i≤k2reli−1log⁡2(i+1)\mathrm{DCG@}k=\sum_{i\le k}\frac{2^{rel_i}-1}{\log_2(i+1)},除以理想排序的 IDCG。增益指数化(完全相关远比部分相关重要),折扣对数(越往下越不重要,但不像 1/i1/i 那么快),归一化让不同查询可比。
  • 容易错在:名次从 0 还是从 1 开始(折扣是 log⁡2(1+名次)\log_2(1+\text{名次}),第 1 名是 1);IDCG 要用库里所有相关文档排序,而不只是返回的那几个。
  • 出处:Week 4 Day 2 §3.2。核对:D24;代码默写第 11 题。

D25 检查与重试的成功率

  • 提纲:每步做对概率 ss;做错时检查器以召回 rr 发现并重试,最多 mm 次。递推 Sm=s+(1−s)rSm−1S_m=s+(1-s)rS_{m-1},S0=sS_0=s,得 Sm=s∑j=0m((1−s)r)j→s1−(1−s)rS_m=s\sum_{j=0}^m((1-s)r)^j\to\frac{s}{1-(1-s)r}。nn 步 SmnS_m^n。r=0r=0 时重试无用。
  • 容易错在:以为重试次数越多越好(上限由 rr 决定)。
  • 出处:Week 4 Day 4 §3.2。核对:D25。

D26 Cohen’s κ

  • 提纲:pop_o = 混淆矩阵对角线之和 / NN;pe=∑kp1(k)p2(k)p_e=\sum_kp_1(k)p_2(k)(两人各按自己的类别比例独立地乱打);κ=po−pe1−pe\kappa=\frac{p_o-p_e}{1-p_e}。两人各以准确率 aa 标二分类(均衡):κ=(2a−1)2\kappa=(2a-1)^2。
  • 容易错在:pep_e 用了”均匀分布”而不是各自的边缘分布;忘了 κ 悖论(类别不均衡时 κ 低)。
  • 出处:Week 4 Day 5 §2.2、§2.3、§2.5。核对:D26;代码默写第 12 题。

D27 Elo 是对 Bradley-Terry 的随机梯度上升

  • 提纲:EA=11+10(RB−RA)/400=σ(c(RA−RB))E_A=\frac1{1+10^{(R_B-R_A)/400}}=\sigma(c(R_A-R_B)),c=ln⁡10/400c=\ln10/400。一局的对数似然 ℓ=Slog⁡E+(1−S)log⁡(1−E)\ell=S\log E+(1-S)\log(1-E),∂ℓ/∂RA=c(S−E)\partial\ell/\partial R_A=c(S-E)。所以 K(S−E)=Kc⋅∂ℓ/∂RAK(S-E)=\frac Kc\cdot\partial\ell/\partial R_A:学习率 K/cK/c、每局一个样本的 SGD。于是它依赖顺序、KK 大时波动大;BT 的最大似然一次拟合全部对局。
  • 容易错在:说不出 cc 从哪来(10x=exln⁡1010^x=e^{x\ln10})。
  • 出处:Week 4 Day 6 §2.5。核对:D27;代码默写第 13 题。

§7 前沿

D28 掩码扩散的目标等于 −log⁡p(x)-\log p(x)(精确条件分布下)

  • 提纲:遮住集合 MM(∣M∣=k|M|=k)的概率 tk(1−t)L−kt^k(1-t)^{L-k},损失乘 1/t1/t,对 tt 积分 ∫01tk−1(1−t)L−kdt=(k−1)!(L−k)!L!\int_0^1t^{k-1}(1-t)^{L-k}dt=\frac{(k-1)!(L-k)!}{L!},这正是”随机生成顺序里,轮到位置 ii 时已生成的恰好是 McM^c“的概率。所以目标 = 所有顺序的自回归损失的平均 = −log⁡p(x)-\log p(x)。
  • 容易错在:说不清 1/t1/t 的作用;把它和 BERT 的 MLM 混为一谈(BERT 固定 15%、不加权,不是似然的界)。
  • 出处:Week 5 Day 1 §3.3。核对:D28。

§8 代码默写

code/w5d4_drills.py 里有 15 个挖空的函数,每个对应一个推导(注释里写了是哪一个):

题函数推导
1softmax_xent_gradD1
2attention_backwardD6
3apply_ropeD7
4online_softmax_attentionD10
5lora_gradsD13
6bt_loss_and_gradD15
7dpo_loss_and_gradsD19
8grpo_advantagesD20
9pass_at_k、pass_hat_kD21
10bm25D23
11ndcg_at_kD24
12cohen_kappaD26
13elo_updateD27
14info_nce_gradD22
15speculative_sampleD14

做法:把 raise NotImplementedError 换成你的实现,跑 python w5d4_drills.py 判题(✓ 通过 / ✗ 结果不对并打印第一组对不上的输入 / · 还没写);只判某几题:python w5d4_drills.py 2 7。判题用随机输入和参考答案比较(允许 10−610^{-6} 的误差),第 15 题比较 20 万次采样的经验分布。不要看 w5d4_drills_solutions.py,全部通过或者实在卡住再看。

为什么要写成代码:推导写在纸上,错一个转置你可能看不出来;写成代码、和参考答案一比,错在哪一目了然。面试里的”白板写 attention”就是这个难度。


§A 推导的通用检查手段

  • 形状:梯度与参数同形状(Week 0 Day 1 §3.1);矩阵乘法两边的维度要对得上。形状对不上的公式一定错,形状对上的不一定对。
  • 特殊情况:B=0B=0(LoRA)、k=1k=1(pass@k 等于准确率)、β→∞\beta\to\infty(KL 约束:策略等于参考模型)、T=1T=1(注意力退化成恒等)、只有一个类别(κ 没有定义)。
  • 极限与单调性:温度 → 0 退化成 argmax;τ\tau → 0 时 InfoNCE 只看最难的负例;检查器召回 r→1r\to1 时每步成功率 → 1。
  • 对称性与守恒:GRPO 的组内优势之和为 0;softmax 的梯度之和为 0(∑j(pj−yj)=0\sum_j(p_j-y_j)=0);RoPE 的内积只依赖相对位置。
  • 数值检验:有限差分(梯度)、蒙特卡洛(期望、概率)、暴力枚举(小规模的最优化、组合)。这是最可靠的一招:w5day4_checks.py 的每一行都是一个例子。

§B 实操

  1. 推导默写(4.5h):按 §0 的顺序,28 个推导每个限时 10 分钟,纸笔闭卷,写完对照 python w5day4_checks.py 的对应行。记录 ✓ / △ / ✗。
  2. 代码默写(1.5h):python code/w5d4_drills.py,15 道练习全部通过。
  3. 补漏(0.5h):△ 和 ✗ 的推导回到出处重看,当天再默写一遍;列进”三天后重做”的清单。
  4. 挑战(可选):从 28 个里随机抽 5 个,限时 30 分钟一口气写完。明天面试练习前再做一次。

参考实现:code/w5d4_drills.py、code/w5d4_drills_solutions.py。


§C 自测

从下面的清单里随机抽,每题 10 分钟,闭卷:

  1. 推导 softmax 交叉熵的梯度,并用它推出 InfoNCE 对查询的梯度。
  2. 推导注意力的反向传播(写出 dQ、dK、dV)。
  3. 证明 RoPE 下注意力打分只依赖相对位置。
  4. 推导 Chinchilla 的最优配比。
  5. 推导 KL 约束目标的闭式最优解,再推出 DPO 损失,说明 Z(x)Z(x) 为什么抵消。
  6. 推导策略梯度,并证明基线不改变期望。
  7. 写出 PPO 的裁剪目标,分四种情况讨论梯度。
  8. 写出 GRPO 的组内优势,算出二值奖励下答对和答错的优势,以及没有信号的概率。
  9. 证明推测解码的输出分布恰好是目标分布。
  10. 证明 Elo 更新是对 Bradley-Terry 似然的随机梯度上升。

出关标准

  • 28 个推导中至少 24 个在 10 分钟内闭卷写完且正确(✓),其余的在出处重看并当天重写
  • 每个推导都能说出动机、一个数值检验的办法、它在哪里被用到
  • python code/w5d4_drills.py 15 道全部通过
  • 列出了”三天后重做”的清单

疑问清单

← 返回课程目录