Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第 2 讲 · 闭卷回忆卡

用法:遮住答案,在空白纸上写;写完再展开对照。每张卡末尾标记号:✓ 能完整写出 / △ 有关键词但缺条件 / × 完全想不起,只重做 △ 与 ×。共 40 张卡,一轮约 35 分钟。

A. 定义卡

A1. 写出「序列建模问题」的三条要求,并各配一个「违反它」的做法。

解答

① 参数不变性——∣θ∣≠O(T)\lvert\theta\rvert\neq\mathcal O(T)(违反者:把序列摊平、给每个位置配一套权重的 MLP);② 顺序敏感——fθ(x1:T)≠fθ(xπ(1:T))f_\theta(\boldsymbol x_{1:T})\neq f_\theta(\boldsymbol x_{\pi(1:T)})(违反者:对所有词向量取平均的词袋模型);③ 一致性——同一组 θ\theta 能作用到训练时未见过的长度(违反者:pad 到最大长度再喂固定形状网络)。三条合起来只剩一条路:沿序列方向共享同一套函数(定义 2.1.1)。(✓ / △ / ×)

A2. 序列任务按输出形态分哪四类?其中哪两类必须因果,为什么?

解答

序列 → 标签(句级分类,可双向)、同步对齐(Tout=TinT_{\text{out}}=T_{\text{in}},因果)、异步序列 → 序列(编码器可双向 + 解码器因果)、自回归生成(因果)。必须因果的是同步对齐(逐帧在线,未来数据还没产生)与自回归生成(第 tt 步只能看 ≤t\le t)——这是任务约束,不是模型偏好(定义 2.1.2)。(✓ / △ / ×)

A3. 写出 RNN 的递推式与参数量,并说明「参数与 TT 无关」的代价。

解答

zt=Whhht−1+Wxhxt+bh\boldsymbol z_t=W_{hh}\boldsymbol h_{t-1}+W_{xh}\boldsymbol x_t+\boldsymbol b_h、ht=ϕ(zt)\boldsymbol h_t=\phi(\boldsymbol z_t)、y^t=ψ(Whyht+by)\hat{\boldsymbol y}_t=\psi(W_{hy}\boldsymbol h_t+\boldsymbol b_y);参数量 (dx+dh)dh+dh+dydh(d_x+d_h)d_h+d_h+d_y d_h。代价三条:① 沿时间不能并行(串行深度 TT);② 梯度要穿过 TT 次状态转移(连乘 ⇒ 消失 / 爆炸);③ 全部历史压进固定 dhd_h 维状态——有损摘要(定义 2.2.1、定理 2.2.1)。(✓ / △ / ×)

A4. 写出 BPTT 的单步雅可比 JkJ_k、跨多步的雅可比与误差信号 δt\boldsymbol\delta_t 的定义。

解答

zk=Whhhk−1+Wxhxk+bh\boldsymbol z_k=W_{hh}\boldsymbol h_{k-1}+W_{xh}\boldsymbol x_k+\boldsymbol b_h,Jk=∂hk∂hk−1=diag⁡(ϕ′(zk))WhhJ_k=\dfrac{\partial\boldsymbol h_k}{\partial\boldsymbol h_{k-1}}=\operatorname{diag}\bigl(\phi'(\boldsymbol z_k)\bigr)W_{hh};∂hs∂ht=∏k=t+1sJk\dfrac{\partial\boldsymbol h_s}{\partial\boldsymbol h_t}=\prod_{k=t+1}^{s}J_k;δt=diag⁡(ϕ′(zt))(WhyT∂Lt∂y^t+WhhTδt+1)\boldsymbol\delta_t=\operatorname{diag}(\phi'(\boldsymbol z_t))\Bigl(W_{hy}^{\mathrm T}\dfrac{\partial\mathcal L_t}{\partial\hat{\boldsymbol y}_t}+W_{hh}^{\mathrm T}\boldsymbol\delta_{t+1}\Bigr),且 ∂L∂Whh=∑tδtht−1T\dfrac{\partial\mathcal L}{\partial W_{hh}}=\sum_t\boldsymbol\delta_t\boldsymbol h_{t-1}^{\mathrm T}(定义 2.2.2、定理 2.2.2)。(✓ / △ / ×)

A5. 写出 LSTM 的三门与细胞状态更新式,并说明 ct\boldsymbol c_t 与 ht\boldsymbol h_t 的分工。

解答

ft,it,ot=σ(W[ht−1,xt]+b)\boldsymbol f_t,\boldsymbol i_t,\boldsymbol o_t=\sigma(W[\boldsymbol h_{t-1},\boldsymbol x_t]+\boldsymbol b),c~t=tanh⁡(⋅)\tilde{\boldsymbol c}_t=\tanh(\cdot),ct=ft⊙ct−1+it⊙c~t\boldsymbol c_t=\boldsymbol f_t\odot\boldsymbol c_{t-1}+\boldsymbol i_t\odot\tilde{\boldsymbol c}_t,ht=ot⊙tanh⁡(ct)\boldsymbol h_t=\boldsymbol o_t\odot\tanh(\boldsymbol c_t)。ct\boldsymbol c_t 是内部长期记忆(不对外输出),ht\boldsymbol h_t 是读出来给输出层与门控用的部分;∂ct/∂ct−1=diag⁡(ft)\partial\boldsymbol c_t/\partial\boldsymbol c_{t-1}=\operatorname{diag}(\boldsymbol f_t) 就是那条加法通道(定义 2.3.1)。(✓ / △ / ×)

A6. 写出 GRU 的两个门与更新式,并说明它与 LSTM 在自由度上的差别。

解答

zt,rt=σ(W[ht−1,xt]+b)\boldsymbol z_t,\boldsymbol r_t=\sigma(W[\boldsymbol h_{t-1},\boldsymbol x_t]+\boldsymbol b),h~t=tanh⁡(W[rt⊙ht−1,xt]+bh)\tilde{\boldsymbol h}_t=\tanh\bigl(W[\boldsymbol r_t\odot\boldsymbol h_{t-1},\boldsymbol x_t]+\boldsymbol b_h\bigr),ht=(1−zt)⊙ht−1+zt⊙h~t\boldsymbol h_t=(1-\boldsymbol z_t)\odot\boldsymbol h_{t-1}+\boldsymbol z_t\odot\tilde{\boldsymbol h}_t;加法通道对应因子是 diag⁡(1−zt)\operatorname{diag}(1-\boldsymbol z_t)。差别:GRU 用一个门同时决定「写入」与「保留」(互补),且 ht\boldsymbol h_t 既当记忆又当输出;LSTM 有两个独立的门,且 (ct,ht)(\boldsymbol c_t,\boldsymbol h_t) 分离——记忆可以存在而不对外暴露(定义 2.3.2)。(✓ / △ / ×)

A7. 写出缩放点积注意力,说明 softmax 沿哪一维、输出形状,以及 Q / K / V 各扮演什么角色。

解答

Attention⁡(Q,K,V)=softmax⁡ ⁣(QKTdk)V\operatorname{Attention}(\boldsymbol Q,\boldsymbol K,\boldsymbol V)=\operatorname{softmax}\!\left(\dfrac{\boldsymbol Q\boldsymbol K^{\mathrm T}}{\sqrt{d_k}}\right)\boldsymbol V;Q∈RTq×dk\boldsymbol Q\in\mathbb R^{T_q\times d_k}、K∈RTk×dk\boldsymbol K\in\mathbb R^{T_k\times d_k}、V∈RTk×dv\boldsymbol V\in\mathbb R^{T_k\times d_v},softmax 沿键维(每一行),输出 Tq×dvT_q\times d_v,每个位置是 V\boldsymbol V 各行的凸组合。Q 是「想找什么」、K 是「挂出的匹配标签」、V 是「真正被取走的内容」——键指路、值交货(定义 2.4.4)。(✓ / △ / ×)

A8. 写出因果掩码的定义,并列出三条实现细节。

解答

S←S+M\boldsymbol S\leftarrow\boldsymbol S+\boldsymbol M,Mij=0 (j≤i)M_{ij}=0\ (j\le i)、Mij=−∞ (j>i)M_{ij}=-\infty\ (j\gt i),且必须在 softmax 之前加:P=softmax⁡(S/dk+M)\boldsymbol P=\operatorname{softmax}(\boldsymbol S/\sqrt{d_k}+\boldsymbol M)。三条细节:① 位置不可交换(加在之后行和不为 1);② 用 −∞-\infty 或该 dtype 的 finfo.min(加 0 等于不掩码,固定的 −109-10^9 在低精度下不可靠);③ 整行全被掩码时 softmax 给出 NaN,要保证「至少可见自己」或做重归一化 / nan_to_num(定义 2.4.5)。(✓ / △ / ×)

A9. 写出多头自注意力与一个 Pre-LN 块的公式。

解答

Qj=XWjQ\boldsymbol Q_j=\boldsymbol XW_j^Q、Kj=XWjK\boldsymbol K_j=\boldsymbol XW_j^K、Vj=XWjV\boldsymbol V_j=\boldsymbol XW_j^V(Wj∙∈Rd×dhW_j^\bullet\in\mathbb R^{d\times d_h},dh=d/Hd_h=d/H),head⁡j=Attention⁡(Qj,Kj,Vj)\operatorname{head}_j=\operatorname{Attention}(\boldsymbol Q_j,\boldsymbol K_j,\boldsymbol V_j),MHA⁡(X)=[head⁡1;… ;head⁡H]WO\operatorname{MHA}(\boldsymbol X)=[\operatorname{head}_1;\dots;\operatorname{head}_H]W^O;Pre-LN 块:Y=X+Sub⁡(LN⁡(X))\boldsymbol Y=\boldsymbol X+\operatorname{Sub}(\operatorname{LN}(\boldsymbol X))(两个子层各一次,收尾再归一化)(定义 2.5.1、定义 2.5.3)。(✓ / △ / ×)

A10. 自回归解码里 KV cache 缓存的是什么?每步算多少?复杂度怎么变?

解答

缓存的是历史位置的键与值 K1:t,V1:t\boldsymbol K_{1:t},\boldsymbol V_{1:t}(每头一份、t×dht\times d_h,头数为 nkvn_{kv});每一步只为新 token 计算 Qt\boldsymbol Q_t,再与缓存的 K1:t\boldsymbol K_{1:t} 做注意力。增量计算量由 O(t2d)O(t^2d) 降为 O(td)O(td);显存 2LB Tnkvdh2LB\,Tn_{kv}d_h 字节,随 B⋅TB\cdot T 线性增长(定义 2.5.4、方法 2.5.3)。(✓ / △ / ×)

B. 结论卡

B1. 为什么说「参数与 TT 无关」是 RNN 全部价值的来源?它的三条代价是什么?

解答

因为 Whh,Wxh,bhW_{hh},W_{xh},\boldsymbol b_h 在所有时间步复用,参数量与序列长度无关,且同一模式出现在任何位置都由同一组参数识别,因此可以外推到训练时未见的长度。代价:不能沿时间并行(串行深度 TT)、梯度必须穿过 TT 次状态转移(连乘雅可比)、状态是有损摘要(容量固定而历史任意长)(定理 2.2.1、方法 2.2.1)。(✓ / △ / ×)

B2. 为什么梯度裁剪只能治爆炸、不能治消失?给一句严格理由。

解答

裁剪是等比缩小:g←g⋅min⁡(1,c/∥g∥)\boldsymbol g\leftarrow\boldsymbol g\cdot\min(1,c/\lVert\boldsymbol g\rVert),方向不变、只改尺度。梯度已经衰减到 10−910^{-9} 时,乘一个 ≤1\le1 的系数还是 10−910^{-9} 量级——救不回已被连乘吞掉的信号。它治的是爆炸方向(防溢出与 NaN),是一场安全网而不是疗法(方法 2.2.2、2.2.5)。(✓ / △ / ×)

B3. 为什么说「门控只是缓解、不是根治」?给出至少两条理由,并各配一个可观测判据。

解答

① 读出路径被打折:损失经 ht=ot⊙tanh⁡(ct)\boldsymbol h_t=\boldsymbol o_t\odot\tanh(\boldsymbol c_t) 读出,每步都乘 diag⁡(ot)diag⁡(1−tanh⁡2)\operatorname{diag}(\boldsymbol o_t)\operatorname{diag}(1-\tanh^2)——判据:按时间差统计梯度范数,看长程梯度是否仍随距离衰减;② 门值严格小于 1:f≡0.99f\equiv0.99 时 100 步只剩 37%37\%、700700 步只剩 8.8×10−48.8\times10^{-4}——判据:打印遗忘门均值是否被学到 0.990.99 以上、再算 ∏f\prod f;③ 间接项仍含 WW:完整雅可比不只是 diag⁡(ft)\operatorname{diag}(\boldsymbol f_t),经 ht−1\boldsymbol h_{t-1} 反传到门与候选的项依旧含矩阵连乘(定理 2.3.1、2.3.8)。(✓ / △ / ×)

B4. 为什么注意力要除以 dk\sqrt{d_k}?它防的是溢出吗?

解答

独立零均值单位方差下 Var⁡(qTk)=dk\operatorname{Var}(\boldsymbol q^{\mathrm T}\boldsymbol k)=d_k、标准差 dk\sqrt{d_k},不缩放时分数尺度随维度增大,softmax 被推入饱和区(最大权重趋 1、其余趋 0),其对输入的导数 p(1−p)p(1-p) 趋 0,反向梯度被掐断。除 dk\sqrt{d_k} 把方差拉回 11,让 softmax 工作在梯度良好的区间。它防的不是数值溢出(dk=1024d_k=1024 时标准差才 32),而是工作点 / 饱和——与第 1 讲 Sigmoid 饱和同源(定理 2.4.1)。(✓ / △ / ×)

B5. 为什么位置编码是必需品?掩码为什么不能替代它?

解答

纯注意力置换等变:Attention⁡(PπX,… )=PπAttention⁡(X,… )\operatorname{Attention}(\boldsymbol P_\pi\boldsymbol X,\dots)=\boldsymbol P_\pi\operatorname{Attention}(\boldsymbol X,\dots)——打乱输入的行,输出只是被同样打乱、每个位置拿到的上下文一模一样,因此模型分不清「狗咬人」与「人咬狗」。掩码只提供「谁在谁左边」这一位方向信息,不提供距离与位置:它能学出「只看前一个 token」,无法表达「相隔 7 步」。所以位置必须显式注入(嵌入加性 / QK 乘性 / 分数加性三选一)(定理 2.4.2、2.6.1)。(✓ / △ / ×)

B6. 「训练可并行、推理必须串行」是工程缺陷吗?为什么?

解答

不是——是自回归目标的结构性后果:训练时知道正确答案,可用因果掩码在同一次前向里模拟出「每个位置只看左边」并一次算完 TT 个位置;推理时 p(xt+1∣x≤t)p(x_{t+1}\mid x_{\le t}) 的条件里含模型自己的采样结果,第 t+1t+1 个 token 必须先生成才能作为下一步输入。三条推论:长上下文推理瓶颈常在显存带宽、batch 内长度不齐要连续批处理、KV cache 必须靠 GQA / 量化 / 滑窗压缩(2.5.6)。(✓ / △ / ×)

B7. Pre-LN 与 Post-LN 的差别是什么?各自付出什么代价?

解答

Post-LN:Y=LN⁡(X+Sub⁡(X))\boldsymbol Y=\operatorname{LN}(\boldsymbol X+\operatorname{Sub}(\boldsymbol X));Pre-LN:Y=X+Sub⁡(LN⁡(X))\boldsymbol Y=\boldsymbol X+\operatorname{Sub}(\operatorname{LN}(\boldsymbol X))。论文报告:Post-LN 靠近输出层的参数梯度尺度较大(形如 dln⁡dd\ln d 的量级项),需要学习率预热;Pre-LN 的梯度尺度与深度基本无关、去掉预热也能训。代价:Pre-LN 主干是恒等累加,∥XL∥=O(L)\lVert\boldsymbol X_L\rVert=\mathcal O(\sqrt L) 随深度累积,必须加收尾归一化才能接输出头;此外该结论是「训练稳定性」层面的,不是「效果一定更好」的承诺(定理 2.5.2)。(✓ / △ / ×)

B8. FlashAttention 为什么快?它是近似算法吗?它减少了什么、没减少什么?

解答

它把不物化的分数矩阵留在片上内存、用在线 softmax 边算边累积(运行最大值 mjm_j + 指数和 ℓj\ell_j 的重缩放递推),反向传播用重计算代替保存。不是近似:分块递推与整块 softmax 的数学结果完全相同,差别只有浮点舍入(所以要用 FP32 累积统计量)。FLOPs 不变(4BHT2dh4BHT^2d_h 一步没少);省的是 T×TT\times T 中间矩阵在 HBM 上的读写与存放(中间显存 O(T2)→O(T)O(T^2)\to O(T))——「快的根因是少搬了几趟数据」(定理 2.6.4)。(✓ / △ / ×)

B9. 线性 SSM 为什么能同时做到「训练并行」与「推理 O(1)O(1) 状态」?Mamba 改了什么、又怎么找回并行度?

解答

因为转移是线性且时不变的,递推可以展开成固定核的因果卷积(y=Kˉ∗x\boldsymbol y=\bar K*\boldsymbol x,Kˉt=CAˉtBˉ\bar K_t=C\bar A^t\bar B):训练用一次卷积(分块 / FFT)并行算完,推理换回递推、只带固定大小状态。Mamba 让 Δt,Bt,Ct\Delta_t,B_t,C_t 依赖输入(不再是时不变),固定核不存在、卷积形式失效——换回并行度的办法是并行扫描(块内串行、块间前缀扫描,并行深度 O(T/C)O(T/C),中间状态留在片上)。Mamba-2 进一步证明:在「标量×恒等」约束下 SSM 与带因果掩码的注意力同族(定理 2.7.1、定理 2.7.2、方法 2.7.1)。(✓ / △ / ×)

B10. MoE 把什么解耦了?它省的是显存还是计算量?代价是什么?

解答

把「总参数量」与「每 token 计算量」解耦:NN 个专家、每 token 选 kk 个时,专家参数 ≈NP\approx NP、每 token 计算 ≈kP\approx kP,比值 N/kN/k。省的是每 token 计算量(换来吞吐),不是显存——全部专家参数必须常驻,MoE 的显存需求反而更大。代价还有 all-to-all 通信(dispatch / combine)与负载不均造成的设备空转,必须靠辅助损失 / 动态偏置与容量因子共同控制(定理 2.7.4、方法 2.7.2)。(✓ / △ / ×)

B11. 困惑度是什么?它「说明什么、不说明什么」?温度会改变它吗?

解答

PPL=exp⁡(H)\mathrm{PPL}=\exp(H),HH 是每 token 平均负对数似然(nat)——读作「模型在每个位置相当于在多少个等概率候选之间犹豫」,取值 [1,V][1,V],均匀分布时 PPL=V\mathrm{PPL}=V。它说明「给定真实前缀,下一个 token 猜得准不准」,不说明生成质量:背下训练集的模型可以有极低 PPL,自由跑时却三步内复读;也不含误差累积(exposure bias)。温度与 PPL 的关系取决于口径:用重标定分布算 NLL 时 τ\tau 变小会变差,用自己生成的序列算 NLL 时 τ\tau 越小越好——报告必须写清是哪一个(定理 2.8.1、2.8.6)。(✓ / △ / ×)

C. 公式卡

C1. 写出 RNN 的参数量表达式,并说说它与「摊平的 MLP」差在哪。

解答

(dx+dh)dh+dh+dydh(d_x+d_h)d_h+d_h+d_y d_h,与 TT 无关;摊平 MLP 的第一层是 dh(Tdx)d_h(Td_x)——随长度线性增长,且 TT 一变就得重来(方法 2.2.1)。(✓ / △ / ×)

C2. 写出跨 nn 步的雅可比、范数界与有效记忆跨度公式。

解答

∂hs∂ht=∏k=t+1sdiag⁡(ϕ′(zk))Whh\dfrac{\partial\boldsymbol h_s}{\partial\boldsymbol h_t}=\prod_{k=t+1}^{s}\operatorname{diag}(\phi'(\boldsymbol z_k))W_{hh};∥∏kJk∥2≤(max⁡k∥Jk∥2)n≤∥Whh∥2 n\Bigl\lVert\prod_k J_k\Bigr\rVert_2\le\bigl(\max_k\lVert J_k\rVert_2\bigr)^{n}\le\lVert W_{hh}\rVert_2^{\,n}(长期由谱半径主导);以「低于 10−710^{-7} 视为被吞掉」为判据得 n⋆=−7log⁡10ρn^\star=\dfrac{-7}{\log_{10}\rho}:ρ=0.9→153\rho=0.9\to153 步、0.98→7980.98\to798 步、0.99→16040.99\to1604 步(定理 2.2.3、例 2.2.1)。(✓ / △ / ×)

C3. 写出 LSTM 的加法通道雅可比,以及门值「学到接近 1」需要多大预激活。

解答

直接路径 ∂ct∂ct−1=diag⁡(ft)\dfrac{\partial\boldsymbol c_t}{\partial\boldsymbol c_{t-1}}=\operatorname{diag}(\boldsymbol f_t),跨 kk 步 =diag⁡(∏jfj)=\operatorname{diag}\bigl(\prod_j\boldsymbol f_j\bigr)(逐元素标量连乘,只衰减不放大)。要把 kk 步的保留率做到 1−ϵ1-\epsilon 以上,需要每步衰减 γ≲ϵ/k\gamma\lesssim\epsilon/k,即门预激活 z≳ln⁡(k/ϵ)z\gtrsim\ln(k/\epsilon):k=100,ϵ=0.1k=100,\epsilon=0.1 时 z≳ln⁡1000≈6.9z\gtrsim\ln1000\approx6.9——远大于偏置 1 的起手值 σ(1)≈0.73\sigma(1)\approx0.73(定理 2.3.1 后的推导)。(✓ / △ / ×)

C4. 写出门控参数量对照表(dx=32,dh=128d_x=32,d_h=128 与一般式)。

解答

一般式:朴素 RNN dh(dx+dh)+dhd_h(d_x+d_h)+d_h;GRU 3×3\times、LSTM 4×4\times 同一块。dx=32,dh=128d_x=32,d_h=128 时基准块 20,60820{,}608 ⇒ 朴素 RNN 20,60820{,}608、GRU 61,82461{,}824、LSTM 82,43282{,}432;框架实现每门多一组 bias_hh,得 20,736/62,208/82,94420{,}736/62{,}208/82{,}944,倍数仍是 1:3:41:3:4(例 2.3.1)。(✓ / △ / ×)

C5. 写出注意力的形状链与「一行等于什么」。

解答

S=QKT∈RTq×Tk\boldsymbol S=\boldsymbol Q\boldsymbol K^{\mathrm T}\in\mathbb R^{T_q\times T_k}(内积相似度)→ S/dk\boldsymbol S/\sqrt{d_k}(缩放)→ P=softmax⁡(⋅)\boldsymbol P=\operatorname{softmax}(\cdot) 沿键维(每行和为 1)→ O=PV∈RTq×dv\boldsymbol O=\boldsymbol P\boldsymbol V\in\mathbb R^{T_q\times d_v}。O\boldsymbol O 的第 ii 行是 V\boldsymbol V 各行的凸组合(权重非负、和为 1);自注意力里 Tq=Tk=TT_q=T_k=T 且三路投影自同一输入(定义 2.4.4)。(✓ / △ / ×)

C6. 写出注意力三笔账的复杂度与倍数关系。

解答

分数 / 权重矩阵(单层)B⋅H⋅T2B\cdot H\cdot T^2 个元素、FP16 占 BH T2×2BH\,T^2\times2 字节;注意力 FLOPs(前向)约 4B H T2dh4B\,H\,T^2d_h;KV cache(整模型)2LB Tnkvdh×22LB\,Tn_{kv}d_h\times2 字节。TT 每乘 44:前两者乘 1616、KV cache 只乘 44(定理 2.4.3、方法 2.6.1)。(✓ / △ / ×)

C7. 写出多头注意力、FFN 与「每层 12d212d^2」的参数量。

解答

多头 4d2+4d4d^2+4d(与 HH 无关);经典 FFN d→4d→dd\to4d\to d 是 8d2+5d8d^2+5d;合计每层 ≈12d2\approx12d^2,FFN 占 2/32/3、注意力占 1/31/3(d=768d=768 时单块 7,087,8727{,}087{,}872,12 层 ≈85\approx85M)(定理 2.5.1、例 2.5.1)。(✓ / △ / ×)

C8. 写出 LN 与 RMSNorm 的公式,以及 Post-LN / Pre-LN 两种布局。

解答

LN⁡(x)=γ⊙x−μσ2+ϵ+β\operatorname{LN}(\boldsymbol x)=\boldsymbol\gamma\odot\dfrac{\boldsymbol x-\mu}{\sqrt{\sigma^2+\epsilon}}+\boldsymbol\beta(μ,σ2\mu,\sigma^2 是该位置在特征维上的统计量);RMSNorm⁡(x)=γ⊙xmean⁡(x2)+ϵ\operatorname{RMSNorm}(\boldsymbol x)=\boldsymbol\gamma\odot\dfrac{\boldsymbol x}{\sqrt{\operatorname{mean}(\boldsymbol x^2)+\epsilon}}(去掉去均值与偏置)。布局:Post-LN Y=LN⁡(X+Sub⁡(X))\boldsymbol Y=\operatorname{LN}(\boldsymbol X+\operatorname{Sub}(\boldsymbol X));Pre-LN Y=X+Sub⁡(LN⁡(X))\boldsymbol Y=\boldsymbol X+\operatorname{Sub}(\operatorname{LN}(\boldsymbol X))(定义 2.5.3)。(✓ / △ / ×)

C9. 写出正弦位置编码、RoPE 的内积性质与 ALiBi 的偏差形式。

解答

PE(pos,2i)=sin⁡(pos/100002i/d)PE_{(pos,2i)}=\sin(pos/10000^{2i/d})、PE(pos,2i+1)=cos⁡(pos/100002i/d)PE_{(pos,2i+1)}=\cos(pos/10000^{2i/d}),加到词嵌入上;RoPE:⟨Rmq,Rnk⟩=⟨q,Rn−mk⟩\langle\boldsymbol R_m\boldsymbol q,\boldsymbol R_n\boldsymbol k\rangle=\langle\boldsymbol q,\boldsymbol R_{n-m}\boldsymbol k\rangle——缩放前分数只依赖相对位移 n−mn-m;ALiBi:sij+=−mh(i−j)s_{ij}\mathrel{+}=-m_h(i-j)(每头一个斜率);T5:sij+=bbucket(i−j)s_{ij}\mathrel{+}=b_{\text{bucket}(i-j)}(分桶可学习偏差)(定义 2.6.1、定理 2.6.3、定义 2.6.4、定义 2.6.5)。(✓ / △ / ×)

C10. 写出 KV cache 的字节公式,并复算「L=32,d=4096,H=32,dh=128,B=1,T=8192L=32,d=4096,H=32,d_h=128,B=1,T=8192、FP16」的三档数字。

解答

2⋅L⋅B⋅T⋅nkv⋅dh×22\cdot L\cdot B\cdot T\cdot n_{kv}\cdot d_h\times2 字节。MHA(nkv=32n_{kv}=32)=4.0=4.0 GiB;GQA(nkv=8n_{kv}=8,每 4 个查询头共享一组)=1.0=1.0 GiB;MQA(nkv=1n_{kv}=1)=0.125=0.125 GiB。而 d=4096,L=32d=4096,L=32 的模型权重约 12Ld2≈6.412Ld^2\approx6.4B 参数、FP16 约 12.8 GB——TT 一大 KV cache 就会逼近甚至超过权重(方法 2.5.3)。(✓ / △ / ×)

C11. 写出温度采样、top-p 的定义与困惑度的关系。

解答

p^i=exp⁡(zi/τ)∑jexp⁡(zj/τ)\hat p_i=\dfrac{\exp(z_i/\tau)}{\sum_j\exp(z_j/\tau)}(等价于「把 logits 除以 τ\tau 再 softmax」;τ→0+\tau\to0^+ 趋近 argmax、τ=1\tau=1 是原分布、τ>1\tau\gt1 被摊平);top-p(核采样):取最小 S\mathcal S 使 ∑i∈Sp^i≥p\sum_{i\in\mathcal S}\hat p_i\ge p(跨过阈值的那个保留),再在 S\mathcal S 上重归一化。分布越平(τ\tau 大)核越大——因为需要更多候选才能凑够同样的概率质量。PPL=eH\mathrm{PPL}=e^{H},与采样策略无关(定义 2.8.3、定义 2.8.4、定理 2.8.1)。(✓ / △ / ×)

D. 陷阱卡(每题给一个错误说法,请指出错在哪)

D1. 「把序列 pad 到定长再喂 MLP,是可行的工程折中」;「序列就是一堆符号,顺序不影响训练」。

解答

两处都错。① pad + MLP 的参数量随最长长度线性增长、且无法外推到更长输入,违反参数不变性与一致性(pad 只适合长度高度集中的窄场景,且 pad 位置必须在损失端屏蔽)。② 顺序当然影响:词袋式平均对「狗咬人 / 人咬狗」毫无区分能力,保序是三条要求之一(定义 2.1.1、2.1.6)。(✓ / △ / ×)

D2. 「换成 ReLU 就不梯度消失了」;「梯度裁剪能解决梯度消失」。

解答

两处都错。① 界 ∥Jk∥2≤∥Whh∥2\lVert J_k\rVert_2\le\lVert W_{hh}\rVert_2 与激活无关,ReLU 只去掉饱和项;真正有效的是正交 / 单位初始化 + 门控加法通道 + 残差。② 裁剪是等比缩小,梯度已到 10−910^{-9} 时乘一个 ≤1\le1 的系数仍是 10−910^{-9}——裁剪只防爆炸(定理 2.2.3、方法 2.2.2)。(✓ / △ / ×)

D3. 「ht\boldsymbol h_t 记住了前面所有信息」;「LSTM 的状态只有 ht\boldsymbol h_t」;「双向结构可以用在生成任务上」。

解答

三处都错。① dhd_h 固定而 tt 任意大,ht\boldsymbol h_t 是按当前参数认为重要的有损摘要,不是完整记忆。② LSTM 的状态是 (ht,ct)(\boldsymbol h_t,\boldsymbol c_t) 一对:output 只含各步 h\boldsymbol h,c_n 单独返回;状态传递与断点恢复要带两个。③ 后向递推要求先看到整句,生成第 tt 个 token 时未来还不存在——训练期偷看未来会让离线指标虚高、部署崩坏(定理 2.2.1、2.3.8、2.3.5)。(✓ / △ / ×)

D4. 「softmax 沿查询维归一化」;「因果掩码加 0 也行」;「掩码加在 softmax 之后也一样」。

解答

三处都错。① 必须沿键维(每一行)归一化:含义是「这个查询把 100% 的注意力按比例分给各键」;按查询维归一化得到的是「每个键分完所有查询的注意力」,语义完全不同。② 加 0 等于不掩码(exp⁡0=1\exp0=1,未来位置拿到正常权重);要用 −∞-\infty 或 finfo.min。③ 加在 softmax 之后只是把权重改小,行和不再为 1、输出尺度被破坏(定义 2.4.5、2.4.5)。(✓ / △ / ×)

D5. 「聚合的是 KK,因为分数是 QKT\boldsymbol Q\boldsymbol K^{\mathrm T} 算出来的」;「注意力权重高就说明该位置重要,可以当解释用」。

解答

两处都错。① 分数只决定权重,真正被加权求和的是 V\boldsymbol V——把 V\boldsymbol V 换成随机数,输出立刻变随机。② 权重不是贡献:权重与贡献之间隔着 V\boldsymbol V;残差与后续层会稀释;softmax 权重和恒为 1,一个位置上升必然压低其他位置;多头冗余使「能剪掉的头」不足以承载唯一解释。要检验解释,至少要做消融 + 跨初始化稳定性 + 与梯度归因对照(2.4.7)。(✓ / △ / ×)

D6. 「多头让参数量随头数增长」;「FFN 只是装饰」;「Pre-LN 主干上有归一化,尺度不漂」。

解答

三处都错。① 多头参数量 4d2+4d4d^2+4d 与 HH 无关(Hdh=dHd_h=d):HH 只改变「怎么切」,改变的是归纳偏置与 dhd_h。② FFN 占块内约 2/32/3 参数,承担位置内的非线性变换;删掉它模型退化成多层加权平均。③ Pre-LN 的归一化在子层内部,主干是纯加法,∥XL∥\lVert\boldsymbol X_L\rVert 随 L\sqrt L 增长,必须加收尾归一化(定理 2.5.1、例 2.5.1、定理 2.5.2)。(✓ / △ / ×)

D7. 「位置编码可有可无」;「RoPE 天然支持无限外推」;「FlashAttention 是近似算法」。

解答

三处都错。① 纯注意力置换等变,没有位置注入时目标函数对语序置换不变,模型学到的是词袋式预测(症状:困惑度尚可、语序任务崩坏)。② 内积只依赖相对位移是表示层面性质,外推时高频维度相位混叠、分布相对训练区间偏移;ALiBi 的结论也只在「短训长测」的特定设定下成立。③ FlashAttention 是精确注意力(在线 softmax 等价、只差浮点舍入),FLOPs 不变,省的是中间显存与 HBM 读写(定理 2.6.1、定理 2.6.3、定理 2.6.4)。(✓ / △ / ×)

D8. 「MoE 省显存」;「线性注意力是无损的」;「O(T)O(T) 一定比 O(T2)O(T^2) 快」。

解答

三处都错。① MoE 省的是每 token 计算量,总参数显存反而更大(全部专家常驻)。② 线性注意力把 softmax 的锐化换成核函数相似度、把历史压进固定容量的 d×dd\times d 状态,「精确挑一个键并原样复制」变成近似操作(论文报告在关联回忆类任务上弱于 softmax 注意力)。③ 渐近阶只描述大 TT 行为:稠密注意力是矩阵乘、能跑满硬件,而扫描 / 逐元素算子常是访存受限的——中小 TT 上线性方案更慢是常见现象;任何「线性更快」的论断都必须附上 TT、硬件与实现(2.7.11、定理 2.7.3)。(✓ / △ / ×)

导出到 Anki / CSV

  1. 建卡组:打开 Anki → 新建卡组「DL-第 2 讲」,与「DL-全书」卡组并列(不要混进默认卡组)。
  2. 逐条录入:正面放「编号 + 题干」,背面放「答案 + 依据 + 记号」;纯文本批量导入时用 Tab 分隔「正面 / 背面」,一行一张卡(本页 40 张按 A1–A10 / B1–B11 / C1–C11 / D1–D8 顺序录入)。
  3. 复习节点(当天 / 隔天 / 第 3 天 / 第 7 天):当天 → 第 1 天 → 第 3 天 → 第 7 天,四轮;每轮只重做标 △ 与 × 的卡。四轮后仍未「✓」的卡,抄进勘误与补注第四节的待核实条目,作为个人薄弱点单独跟踪。
  4. 两类卡要特殊处理:公式卡(C 组)背面附一张手写照片——手写的记忆强度高于打字;陷阱卡(D 组)背面必须写出「为什么错」而不只是「对 / 错」。
  5. 配合使用:本页负责检索(从空白纸把定义与公式叫出来);速查背记卡负责压缩、公式与结论卡负责收口、易混对照卡负责辨析——四件不要重复劳动。