#017. 大模型方向综合追问:从公式到训练行为

#学习目标:从公式说到模型行为

大模型面试里的数学追问通常不是考你背公式,而是看你能不能把一个公式翻译成训练、采样或微调时真实发生的事情。本章的目标是把常见追问拆成三层:第一层知道符号代表什么,第二层能手算一个小例子,第三层能解释它会如何改变模型行为。

会读符号

看到 \(z\)、\(p\)、\(q\)、\(y\)、\(\pi_\theta\)、\(\pi_{ref}\)、\(D_{KL}\) 时,能说清它们分别是 logits、概率分布、标签、当前策略、参考策略和分布差异。

会算小例子

能用三分类、两个候选回答或一个小矩阵完成 softmax、交叉熵、NLL、perplexity、KL、attention scaling 和 LoRA 参数量的计算。

会接到行为

能解释温度影响多样性,交叉熵推动正确 token,perplexity 表示平均困惑程度,KL 约束策略漂移,LoRA 限制更新子空间。

#概念起点:logits、概率、loss、更新

先建立一条最短链路:模型先输出 logits,再通过 softmax 变成概率;训练时 loss 衡量概率分布和目标之间的差距;反向传播把 loss 对参数的导数算出来;优化器按导数方向更新参数。面试里所有追问几乎都能放回这条链路。

logits \(z\):模型最后一层给每个 token 的未归一化分数。分数可以是任意实数,不要求相加为 1。

softmax 概率 \(q\):把 logits 变成合法概率分布,满足 \(q_i\ge 0\) 且 \(\sum_i q_i=1\)。

标签 \(y\):监督学习里通常是 one-hot,比如真实 token 是第 2 个,就写作 \(y=(0,1,0)\)。

loss \(L\):一个标量,越小说明模型给目标 token 或目标回答的概率越合理。

梯度 \(\partial L/\partial z\):告诉我们每个 logit 应该上调还是下调。梯度下降会沿着让 loss 变小的方向移动。

\[ z \rightarrow q=\mathrm{softmax}(z) \rightarrow L(y,q) \rightarrow \nabla L \rightarrow \text{参数更新} \rightarrow \text{模型行为改变} \]
零基础直觉

logits 像候选 token 的原始分数,softmax 像把分数换成抽奖概率,loss 像告诉模型“这次抽奖规则哪里不对”,梯度像具体的修改意见。优秀回答要沿着这条链讲下去,不要只停在“公式长什么样”。

#追问 1:temperature 怎么改变采样

题目

给定 logits \(z=(2,1,0)\)。分别计算 temperature \(T=1\)、\(T=2\) 和 \(T=0.5\) 下的 softmax 概率,并解释 temperature 为什么会影响生成多样性。

解答

temperature softmax 是:

\[ p_i=\frac{\exp(z_i/T)}{\sum_j\exp(z_j/T)} \]

这里 \(z_i\) 是第 \(i\) 个 token 的原始分数,\(T\) 是温度。先把每个 logit 除以 \(T\),再做 softmax。因为指数函数会放大分数差异,所以 \(T\) 改变的是分数差异进入指数函数前的尺度。

当 \(T=1\) 时,logits 不变,指数项约为 \((e^2,e^1,e^0)=(7.39,2.72,1)\),分母是 \(7.39+2.72+1=11.11\),所以:

\[ p\approx (7.39/11.11,\;2.72/11.11,\;1/11.11)=(0.665,0.245,0.090) \]

当 \(T=2\) 时,先把 logits 缩小成 \((1,0.5,0)\),指数项约为 \((2.72,1.65,1)\),分母是 \(5.37\),所以:

\[ p\approx (2.72/5.37,\;1.65/5.37,\;1/5.37)=(0.506,0.307,0.186) \]

当 \(T=0.5\) 时,先把 logits 放大成 \((4,2,0)\),指数项约为 \((54.60,7.39,1)\),分母是 \(62.99\),所以:

\[ p\approx (54.60/62.99,\;7.39/62.99,\;1/62.99)=(0.867,0.117,0.016) \]

比较三个结果:\(T=2\) 的分布更平,低分 token 有更多机会被采样;\(T=0.5\) 的分布更尖,第一名几乎垄断采样。

温度处理后的 logits概率近似生成行为
\(T=0.5\)\((4,2,0)\)\((0.867,0.117,0.016)\)更确定,更保守,更容易重复高概率模式。
\(T=1\)\((2,1,0)\)\((0.665,0.245,0.090)\)保留模型原始置信度。
\(T=2\)\((1,0.5,0)\)\((0.506,0.307,0.186)\)更多样,但错误或跑偏 token 的机会也上升。
直觉

temperature 不是改变模型学到的知识,也不是重新训练模型,而是改变“按模型分数抽 token”的激进程度。低温像只相信第一名,高温像给后面的候选更多机会。面试里要补一句边界:温度调高只会增加分布熵,不保证增加事实正确性。

#追问 2:交叉熵的梯度在推什么

题目

模型输出概率 \(q=(0.7,0.2,0.1)\),真实 token 是第二个。求交叉熵 loss,并说明 logits 上的梯度方向。

解答

真实 token 是第二个,所以 one-hot 标签为 \(y=(0,1,0)\)。one-hot 的意思是:正确类别位置写 1,其他位置写 0。交叉熵定义为:

\[ \mathrm{CE}(y,q)=-\sum_i y_i\log q_i \]

因为 \(y\) 只有第二个位置为 1,上式只剩第二项:

\[ \mathrm{CE}(y,q)=-(0\cdot\log0.7+1\cdot\log0.2+0\cdot\log0.1)=-\log0.2\approx 1.609 \]

softmax 加交叉熵对 logits 的梯度有一个重要简化:

\[ \frac{\partial L}{\partial z}=q-y=(0.7,0.2,0.1)-(0,1,0)=(0.7,-0.8,0.1) \]

梯度下降的更新方向是负梯度。第一个 logit 的梯度是正的,更新时会被压低;第二个 logit 的梯度是负的,更新时会被抬高;第三个 logit 的梯度是正的,也会被压低但幅度更小。

结果如何对应模型行为

这次样本告诉模型:“你把第一个 token 看得太高,把真实的第二个 token 看得太低。”梯度 \(q-y\) 正是在 logits 层执行这个纠偏。真实 token 概率越低,\(-1+q_{\text{true}}\) 越接近 \(-1\),上推力度越大;错误 token 概率越高,\(q_i\) 越大,下压力度越大。

#追问 3:NLL 和 perplexity 怎么读

题目

一个语言模型在 4 个真实 next token 上给出的概率分别是 \(0.5,0.25,0.1,0.4\)。求平均 NLL 和 perplexity,并解释 perplexity 在语言模型评估中表示什么。

解答

NLL 是 negative log-likelihood,意思是“真实 token 的负对数概率”。如果模型给真实 token 的概率越高,\(-\log p\) 就越小。对 4 个 token,平均 NLL 是:

\[ \mathrm{NLL}=-\frac{1}{4}\sum_{t=1}^{4}\log p(x_t) \]

代入概率:

\[ \mathrm{NLL}=-\frac{1}{4}(\log0.5+\log0.25+\log0.1+\log0.4) \]

用自然对数近似:\(\log0.5=-0.693\),\(\log0.25=-1.386\),\(\log0.1=-2.303\),\(\log0.4=-0.916\)。因此:

\[ \mathrm{NLL}=\frac{0.693+1.386+2.303+0.916}{4}=1.3245 \]

perplexity 是平均 NLL 的指数:

\[ \mathrm{PPL}=\exp(\mathrm{NLL})=\exp(1.3245)\approx 3.76 \]

直觉上,perplexity 可以理解为模型在每一步平均像是在约 \(3.76\) 个同等可能的候选里犯难。它越低,说明模型给真实序列的概率越高;它越高,说明模型越困惑。

面试边界

perplexity 主要衡量 next-token likelihood,不等价于“回答质量”。一个模型可以有更低 perplexity,但在指令遵循、事实性、安全性或长程推理上未必更好。回答时要说清:PPL 是语言建模指标,不是完整聊天能力指标。

#追问 4:KL 方向为什么不能混

题目

给定两个二元分布 \(p=(0.9,0.1)\),\(q=(0.5,0.5)\)。分别计算 \(D_{KL}(p\|q)\) 和 \(D_{KL}(q\|p)\),解释为什么它们不是一回事,并把这个差异接到 policy regularization 的直觉上。

解答

KL 的定义是:

\[ D_{KL}(p\|q)=\sum_x p(x)\log\frac{p(x)}{q(x)} \]

关键点是:求和里的权重来自第一个分布。先算 \(D_{KL}(p\|q)\):

\[ D_{KL}(p\|q)=0.9\log\frac{0.9}{0.5}+0.1\log\frac{0.1}{0.5} \]
\[ \approx 0.9\log1.8+0.1\log0.2=0.9(0.588)+0.1(-1.609)=0.368 \]

再算 \(D_{KL}(q\|p)\):

\[ D_{KL}(q\|p)=0.5\log\frac{0.5}{0.9}+0.5\log\frac{0.5}{0.1} \]
\[ \approx 0.5\log0.556+0.5\log5=0.5(-0.588)+0.5(1.609)=0.511 \]

两个数不同,因为前者按 \(p\) 的常见区域计权,后者按 \(q\) 的常见区域计权。\(D_{KL}(p\|q)\) 问的是:在 \(p\) 常去的地方,\(q\) 有没有给足概率。\(D_{KL}(q\|p)\) 问的是:在 \(q\) 常去的地方,\(p\) 有没有给足概率。

在 post-training 里,如果写成 \(D_{KL}(\pi_\theta\|\pi_{ref})\),第一个分布是当前策略 \(\pi_\theta\)。这表示按当前模型会生成的 token 计权,惩罚当前模型把概率放到 reference 很不支持的地方。它更像“当前策略不要跑离原模型太远”的护栏。

面试边界

不要只说“KL 衡量两个分布差异”。正确说法是:先说明两个参数位置谁在前谁在后,再说明期望按哪个分布取,最后说明这个方向会惩罚哪类偏移。KL 不是对称距离,不能随便交换两个分布。

#追问 5:attention 为什么除以 sqrt(d)

题目

假设 query 和 key 的每个分量独立、均值为 0、方差为 1。解释 attention score \(q^Tk\) 的方差为什么随维度 \(d\) 变大,并说明为什么要除以 \(\sqrt d\)。再用 \(d=64\) 说明尺度变化。

解答

attention 里,一个 query 向量 \(q\) 会和 key 向量 \(k\) 做内积,得到相似度分数:

\[ q^Tk=\sum_{i=1}^d q_i k_i \]

这里 \(d\) 是每个 head 的向量维度。简化假设下,\(q_i\) 和 \(k_i\) 独立、均值为 0、方差为 1。单项乘积 \(q_i k_i\) 的均值约为 0,方差约为 1。内积是 \(d\) 个这样的项相加,所以方差约为:

\[ \mathrm{Var}(q^Tk)\approx d \]

标准差是方差的平方根,因此标准差约为 \(\sqrt d\)。如果 \(d=64\),随机内积的标准差约为 \(8\)。这意味着即使没有特别强的语义匹配,score 也可能天然变得很大。

scaled dot-product attention 用的是:

\[ \frac{q^Tk}{\sqrt d} \]

当 \(d=64\) 时,就是把内积除以 8。这样 score 的标准差从约 8 拉回约 1,softmax 不会因为输入过大而过早饱和。

结果如何对应模型行为

attention score 太大时,softmax 会接近 one-hot:某个位置权重接近 1,其他位置接近 0。这样梯度会变小,模型难以学习细腻的注意力分配。除以 \(\sqrt d\) 不是装饰项,而是为了让不同 head 维度下的注意力 logits 保持可训练的尺度。

#追问 6:LoRA 的低秩假设

题目

一个权重矩阵 \(W\in\mathbb{R}^{4096\times4096}\)。LoRA 用 \(\Delta W=BA\),其中 \(B\in\mathbb{R}^{4096\times8}\),\(A\in\mathbb{R}^{8\times4096}\)。比较完整更新和 LoRA 更新的参数量,并解释低秩限制的含义。

解答

全量微调时,矩阵 \(W\) 的每一个元素都可以被直接更新。需要学习的参数量是:

\[ 4096\times4096=16{,}777{,}216 \]

LoRA 不直接学习完整的 \(\Delta W\),而是把更新矩阵拆成两个小矩阵相乘:

\[ \Delta W=BA,\quad B\in\mathbb{R}^{4096\times8},\quad A\in\mathbb{R}^{8\times4096} \]

需要学习的参数量是:

\[ 4096\times8+8\times4096=32{,}768+32{,}768=65{,}536 \]

参数比例为:

\[ \frac{65{,}536}{16{,}777{,}216}\approx 0.0039=0.39\% \]

低秩的意思是:\(\Delta W=BA\) 的秩最多为 8。它不能表达任意 \(4096\times4096\) 更新,只能表达一个由 8 个中间方向组合出来的更新空间。

结果如何对应模型行为

LoRA 的核心不是只“省显存”,而是把微调限制在一个较小的变化子空间里。它假设很多下游任务只需要沿少数重要方向调整模型。rank 太小会表达不足,rank 太大更接近全量微调,训练成本和过拟合风险都会上升。

#追问 7:RLHF/DPO 里的 logprob 与 KL

题目

在一个偏好样本里,chosen 回答 \(y_w\) 比 rejected 回答 \(y_l\) 更好。当前模型给出的序列 logprob 是 \(\log\pi_\theta(y_w|x)=-4.0\),\(\log\pi_\theta(y_l|x)=-5.2\)。参考模型给出的序列 logprob 是 \(\log\pi_{ref}(y_w|x)=-4.5\),\(\log\pi_{ref}(y_l|x)=-4.7\)。解释这些 logprob 的含义,并计算 DPO 常见的 log-ratio 差值。

解答

序列 logprob 是回答中每个 token 的条件 logprob 相加。它通常是负数,因为概率小于 1 时 \(\log p\le 0\)。数值越大,也就是越接近 0,表示模型给这个回答的概率越高。

DPO 关注当前模型相对参考模型是否更偏好 chosen。先算当前模型对 chosen 和 rejected 的相对偏好:

\[ \log\pi_\theta(y_w|x)-\log\pi_\theta(y_l|x)=-4.0-(-5.2)=1.2 \]

这表示当前模型认为 chosen 比 rejected 更可能,log 概率优势是 \(1.2\)。再算参考模型的相对偏好:

\[ \log\pi_{ref}(y_w|x)-\log\pi_{ref}(y_l|x)=-4.5-(-4.7)=0.2 \]

参考模型也更偏好 chosen,但优势只有 \(0.2\)。DPO 里的核心差值常写成:

\[ \Delta = [\log\pi_\theta(y_w|x)-\log\pi_\theta(y_l|x)]-[\log\pi_{ref}(y_w|x)-\log\pi_{ref}(y_l|x)] \]

代入后:

\[ \Delta=1.2-0.2=1.0 \]

如果再乘上温度系数或偏好强度 \(\beta\),比如 \(\beta=0.1\),就得到 \(\beta\Delta=0.1\)。DPO 的 loss 会鼓励这个差值变大,也就是让当前模型相对参考模型更明确地偏好 chosen。

和 KL 护栏的关系

RLHF 里的 KL 项通常显式惩罚 \(\pi_\theta\) 偏离 \(\pi_{ref}\)。DPO 虽然形式不同,但通过“当前模型的 chosen/rejected log-ratio 减去参考模型的 log-ratio”把参考模型放进目标里:模型被鼓励学习偏好数据,但不是完全无约束地把某些回答概率推到极端。面试回答要说清 logprob 是序列级概率证据,不是奖励模型打分本身。

#常见误区

误区为什么不对更准确的说法
temperature 越高,模型越聪明。temperature 只改变采样分布,不改变模型参数和知识。温度越高分布越平,多样性增加,但错误和跑偏风险也增加。
交叉熵就是分类 loss,背公式即可。面试会追问它在 logits 上怎么推拉。softmax+CE 的梯度是 \(q-y\),真实 token 被上推,错误 token 按概率大小被下压。
perplexity 越低,聊天效果一定越好。PPL 衡量 next-token likelihood,不直接评估指令遵循、事实性、偏好对齐和安全性。PPL 是基础语言建模指标,适合比较同类数据上的预测能力。
KL 是距离,所以方向无所谓。KL 不对称,期望权重来自第一个分布。必须说明是 \(D_{KL}(p\|q)\) 还是 \(D_{KL}(q\|p)\),再解释惩罚的是哪类行为。
attention 除以 \(\sqrt d\) 是经验 trick。它来自随机内积方差随维度增大的尺度问题。除以 \(\sqrt d\) 把 score 标准差拉回常数量级,避免 softmax 饱和。
LoRA 只是为了省参数。省参数是结果,低秩更新是结构假设。LoRA 假设任务更新位于低维子空间,rank 决定表达能力和成本的折中。
DPO 的 logprob 就是 reward。logprob 是策略对回答的概率,reward 是偏好或质量信号。DPO 用 chosen/rejected 的 log-ratio 组织偏好学习,并用参考模型提供相对约束。

#面试回答模板

追问高质量回答骨架不要停在
softmax 在做什么?logits 实数向量 → 指数放大相对差异 → 归一化为分布 → temperature 控制分布尖锐程度 → 影响采样多样性和稳定性。“把分数变概率。”
交叉熵为什么能训练 LM?next token one-hot → CE 等于真实 token 的 NLL → logits 梯度是 \(q-y\) → 提高真实 token logit,压低错误 token logit。“分类常用 loss。”
perplexity 怎么解释?先算平均 NLL → 再取指数 → 可理解为平均候选困惑数 → 只衡量语言建模 likelihood,不等价于完整对话质量。“越低越好。”
KL regularization 有什么用?先说明 KL 方向 → 再说明按哪个分布计权 → 最后说明限制当前策略偏离 reference 的行为和代价。“防止过拟合。”
attention scaling 为什么必要?随机内积方差随 \(d\) 增大 → logits 过大会让 softmax 饱和 → 除以 \(\sqrt d\) 保持尺度 → 梯度更稳定。“论文里这么写。”
LoRA 为什么有效?任务更新可能低秩 → \(\Delta W=BA\) 限制更新子空间 → 参数少、训练快 → rank 不足会欠拟合,rank 过大会增加成本。“省显存。”
DPO 在优化什么?比较 chosen 和 rejected 的 logprob 差 → 再扣掉 reference 的 logprob 差 → 鼓励相对 reference 更偏好 chosen。“不用 reward model。”

#最后检查清单