在 Bradley-Terry 奖励模型、逻辑回归、神经网络输出层里,我们反复看到一个变形:
很多教材直接写出结论,但不展示推导。这里完整走一遍。
1.1 完整推导步骤
先回忆 sigmoid 函数的定义:
现在推导 $\dfrac{e^a}{e^a + e^b} = \sigma(a-b)$,每一步都列出来:
1.2 在 Bradley-Terry 模型中的应用
Bradley-Terry 假设每个选手有潜在能力值 $s_i$,且令 $s = e^r$(保证正数),则胜率为:
直接套用上面的等价变形(令 $a = r_w,\; b = r_l$):
这意味着:好回答的得分减去差回答的得分,直接输入 sigmoid,就是奖励模型「认为好回答更好」的概率。
1.3 直觉核验
| 得分差 $r_w - r_l$ | $\sigma(\cdot)$ 值 | 含义 |
|---|---|---|
| $+\infty$ | → 1 | 模型极度确信好回答更好 |
| $+2$ | ≈ 0.88 | 88% 概率认为好回答更好 |
| $0$ | = 0.5 | 两者得分相等,完全不确定 |
| $-2$ | ≈ 0.12 | 判断反了!差回答反而得分高 |
| $-\infty$ | → 0 | 模型完全判断错误 |
Bradley-Terry 损失函数为(对单个样本):
2.1 对 $r_w$ 和 $r_l$ 分别求偏导
📖 前置知识回顾:导数 · 链式法则 · Sigmoid 求导 点击展开
① 导数是什么——「变化率」
导数 $f'(x)$ 表示函数 $f$ 在 $x$ 处的瞬时变化率:$x$ 变化一点点 $\Delta x$,$f$ 会跟着变多少。
形式化定义:$f'(x) = \lim_{\Delta x \to 0} \dfrac{f(x+\Delta x) - f(x)}{\Delta x}$,但实际做题直接套公式,不需要算极限。
② 链式法则——「复合函数的导数」
如果 $y = f(g(x))$,即先算 $u = g(x)$,再算 $y = f(u)$,那么:
口诀:外层导数 × 内层导数。
$\dfrac{dy}{dx} = \underbrace{\dfrac{1}{\sigma(x)}}_{\text{外层导数 }\frac{d\ln u}{du}=\frac{1}{u}} \cdot \underbrace{\sigma'(x)}_{\text{内层导数}}$
具体例子 2:$y = e^{-x}$,外层是 $e^u$,内层是 $u = -x$
$\dfrac{dy}{dx} = e^{-x} \cdot (-1) = -e^{-x}$
③ Sigmoid 的导数——完整推导
$\sigma(x) = \dfrac{1}{1+e^{-x}}$,用链式法则一步步推:
数值感觉:当 $\sigma(x) = 0.5$($x=0$),导数最大为 $0.5 \times 0.5 = 0.25$;当 $\sigma(x) \to 0$ 或 $1$(饱和区),导数趋近于 $0$(梯度消失!)。
④ 偏导数——多变量的导数
当函数有多个变量(如 $\mathcal{L}(r_w, r_l)$ 同时依赖 $r_w$ 和 $r_l$),对某个变量的偏导数是:把其他变量当作常数,只对这一个变量求导。
$\dfrac{\partial \Delta}{\partial r_w} = 1$(把 $r_l$ 当常数,对 $r_w$ 求导,$r_w$ 的系数是 1)
$\dfrac{\partial \Delta}{\partial r_l} = -1$(把 $r_w$ 当常数,对 $r_l$ 求导,$r_l$ 的系数是 $-1$)
符号区别:普通导数用 $\dfrac{d}{dx}$,偏导数用 $\dfrac{\partial}{\partial x}$(∂ 读作「偏」或「curly d」),含义相似,只是强调「多变量里只动这一个」。
有了上面的工具,来推导一个在 §2 全程都要用到的引理:$\dfrac{d}{dx}\log\sigma(x) = 1 - \sigma(x)$
现在对 $\mathcal{L} = -\log\sigma(\Delta)$ 求偏导,注意 $\Delta = r_w - r_l$:
对 $r_w$ 求偏导
梯度为负 → 梯度下降时 $r_w$ 增大(好回答分数涨 ↑)
对 $r_l$ 求偏导
梯度为正 → 梯度下降时 $r_l$ 减小(差回答分数跌 ↓)
2.2 自适应更新强度——梯度的优雅之处
梯度幅度 $= |1 - \sigma(\Delta)|$,它随着得分差 $\Delta$ 自动调整:
| 场景 | $\Delta = r_w - r_l$ | $\sigma(\Delta)$ | 梯度幅度 | 更新力度 |
|---|---|---|---|---|
| 已判断正确且很确信 | $\Delta \gg 0$(如 +4) | ≈ 0.98 | ≈ 0.02 | 极小,几乎不更新 |
| 判断正确但不确定 | $\Delta$ 小正数(如 +0.5) | ≈ 0.62 | ≈ 0.38 | 中等,继续拉大差距 |
| 举棋不定 | $\Delta \approx 0$ | ≈ 0.5 | ≈ 0.5 | 最大,重点学习 |
| 判断错误 | $\Delta < 0$(如 -2) | ≈ 0.12 | ≈ 0.88 | 很大,强力纠错 |
这个自适应机制和「智能刷题」完全一致:
- 已经会的题(模型判断正确且很确信)→ 快速掠过,不浪费时间
- 模棱两可的题(举棋不定)→ 重点强化,花最多时间
- 做错的题(判断反了)→ 强力纠错,立刻重做
这不是人为设计的规则,而是从 BT 损失函数自然涌现的性质——数学自动帮你分配了学习优先级。
假设当前奖励模型打分:$r(B)=2.1,\; r(D)=1.3,\; r(A)=0.8,\; r(C)=-0.5$
| 训练对 | $\Delta$ | $\sigma(\Delta)$ | Loss | 梯度幅度 |
|---|---|---|---|---|
| (B, D):B 应该 > D,差距不大 | 2.1−1.3 = 0.8 | 0.69 | 0.37 | 0.31(需继续学) |
| (B, A):B 应该 > A,差距较大 | 2.1−0.8 = 1.3 | 0.79 | 0.24 | 0.21 |
| (B, C):B 应该 > C,差距很大 | 2.1−(−0.5) = 2.6 | 0.93 | 0.07 | 0.07(几乎不更新) |
| (D, A):D 应该 > A,差距最小 | 1.3−0.8 = 0.5 | 0.62 | 0.48 | 0.38(最需要学) |
结论:(D, A) 对学习信号最强,因为当前模型对「D 比 A 好」还不够确信。(B, C) 几乎没有学习信号,因为模型已经非常确定 B 比 C 好。
① 「似然」不是「相似」
「似然」是 Likelihood 的中文翻译,直译是「像是真的的程度」,本质就是概率——某组参数下,观测到这批数据的概率有多大。
类比:你在猜一枚硬币的偏斜度,抛了 10 次得到 7 正 3 反。
「$p=0.7$ 时的似然」= 「用 $p=0.7$ 这个参数,算出看到「7 正 3 反」的概率」= 0.267
「$p=0.5$ 时的似然」= 「用 $p=0.5$ 这个参数,算出看到「7 正 3 反」的概率」= 0.117
$p=0.7$ 的似然更高,说明「$p=0.7$ 更像是产生这批数据的真实参数」。
② 最大似然怎么变成了 Loss(为什么方向反了?)
这是最让人晕的地方。完整链条只有 3 步:
一句话总结:最大化概率 → 最大化 log 概率 → 取负后最小化 = Loss。方向反了是因为加了负号,内容是完全一样的。
3.1 「似然」是什么——更正式的说法
我们有一批观测数据 $\mathcal{D} = \{x_1, x_2, \ldots, x_N\}$,有一个含参数 $\theta$ 的概率模型 $P_\theta(x)$。
最大似然的问题:哪个 $\theta$ 使得「看到这批数据」的概率最大?
你捡到一枚硬币,抛了 10 次,结果是 7 正 3 反。
问:这枚硬币正面朝上的概率 $p$ 最可能是多少?
如果 $p=0.7$,看到「7正3反」的概率 = $\binom{10}{7} (0.7)^7 (0.3)^3 \approx 0.267$
如果 $p=0.5$,看到「7正3反」的概率 = $\binom{10}{7} (0.5)^{10} \approx 0.117$
如果 $p=0.9$,看到「7正3反」的概率 = $\binom{10}{7} (0.9)^7 (0.1)^3 \approx 0.057$
结论:$p=0.7$ 使数据出现概率最大 → 最大似然估计 $\hat{p} = 0.7$(正好等于样本频率)
形式化定义:似然函数(Likelihood)是参数 $\theta$ 的函数:
(假设数据独立同分布)最大似然估计就是找让似然最大的参数:
3.2 为什么取对数——对数似然(Log-Likelihood)
直接对 $\prod P_\theta(x_i)$ 求导非常麻烦(连乘积),而且当 $N$ 很大时,连乘会导致数值下溢(概率都是小数,乘很多次会变成 $10^{-300}$,浮点数无法表示)。
由于 $\log$ 是单调递增函数,最大化 $\mathcal{L}(\theta)$ 等价于最大化 $\log \mathcal{L}(\theta)$:
✅ 取对数的好处
- 连乘变连加,求导更简单
- 数值稳定,不会下溢
- $\log P$ 和 $P$ 有相同的极值点(最大值在同一个 $\theta$ 处)
⚠️ 常见混淆
「似然 $\mathcal{L}(\theta)$」和「损失函数 loss」方向相反:
- 优化目标:最大化似然
- 训练操作:最小化损失
- 转换:loss = $-\log \mathcal{L}(\theta)$(取负号)
3.3 从 MLE 到负对数似然损失(NLL Loss)
最大化 $\sum \log P_\theta(x_i)$ 等价于最小化它的负数,再除以 $N$ 取平均(方便梯度稳定):
这就是负对数似然损失(Negative Log-Likelihood,NLL),它和交叉熵损失在独立同分布假设下完全等价(见 §5)。
| 训练阶段 | 数据 $\mathcal{D}$ | $P_\theta(x)$ 的含义 | MLE 目标 |
|---|---|---|---|
| 预训练 | 互联网文本 token 序列 | $P(x_t \mid x_{<t})$:下一个词的概率 | 最大化每个位置的下一词预测概率 |
| SFT | (prompt, response) 对中的 response token | $P(y_t \mid x, y_{<t})$:在 prompt 条件下的回答概率 | 最大化 response 部分每个 token 的预测概率 |
| 奖励模型 | 偏好对 $(y_w, y_l)$ | $P(y_w \succ y_l) = \sigma(r_w - r_l)$:好回答更好的概率 | 最大化「人类偏好被正确预测」的概率 |
三个阶段的损失函数本质都是同一件事:最大化模型对观测数据的似然,只是数据和概率的定义不同。
3.4 为什么 MLE 是合理的训练目标
当数据量 $N \to \infty$ 时,MLE 估计量会收敛到真实参数 $\theta^*$(在一定正则性条件下)。
对 LLM 的启示:数据越多,模型越接近真实的语言分布。这也解释了为什么大家都在争抢更多更高质量的预训练数据。
MLE 最大化「数据出现的概率」,但训练数据(互联网文本)不等于「我们想要的回答」。互联网上有大量有害、低质量的文本,MLE 会让模型原封不动地学习这些分布。
RLHF 引入了一个额外的目标:最大化「人类认为好的回答」的概率,纠正了 MLE 在对齐方面的不足。
3.5 ✨ 殊途同归:MLE 和交叉熵 Loss 是同一件事
你说的「两边推理最后能重合」就是这个。两个完全独立的学科——统计学和信息论——各自出发,最后写出了同一个公式。
出发点:「找让数据出现概率最大的参数」
的公式
出发点:「用模型 $P_\theta$ 来编码真实数据分布 $P_{\text{data}}$,最小化编码代价」
两条路的核心操作完全相同:用 $-\log P_\theta(x)$ 来量化「模型在样本 $x$ 上表现有多差」,然后对所有样本取平均。
$-\log P_\theta(x)$ = 「参数 $\theta$ 下样本 $x$ 多难以解释」,越小越好
$-\log P_\theta(x)$ = 「用模型 $P_\theta$ 编码样本 $x$ 需要多少 bits」,越小越好
两者殊途同归,说明这个公式不是人为凑出来的,而是从「让模型更好地解释数据」这件事情上,数学必然给出的唯一答案。这也是为什么交叉熵 Loss 在分类任务里几乎无处不在——不管你从哪个角度出发,都会走到这里。
假设真实数据只有 3 个样本:$x_1, x_2, x_3$,模型当前的预测概率为 $P_\theta(x_1)=0.8,\; P_\theta(x_2)=0.3,\; P_\theta(x_3)=0.5$
$-\frac{1}{3}[\log 0.8 + \log 0.3 + \log 0.5]$
$= -\frac{1}{3}[-0.22 + (-1.20) + (-0.69)]$
$= -\frac{1}{3} \times (-2.11) \approx \mathbf{0.70}$
$H(P_\text{data}, P_\theta) \approx \frac{1}{N}\sum -\log P_\theta(x_i)$
$= \frac{1}{3}[0.22 + 1.20 + 0.69]$
$= \frac{1}{3} \times 2.11 \approx \mathbf{0.70}$
两条路算出来完全相同:0.70。这不是巧合,而是必然。
KL 散度(Kullback-Leibler Divergence)在 RLHF 里无处不在:PPO 的 KL 惩罚、DPO 的推导都用到它。但它到底在量什么?
4.1 定义
对于离散分布 $P$ 和 $Q$,从 $Q$ 到 $P$ 的 KL 散度为:
- $P$:「真实」分布(或我们关心的目标分布)
- $Q$:「近似」分布(用来近似 $P$ 的)
- $D_{KL}(P \| Q)$:用 $Q$ 来近似 $P$ 时产生的「额外代价」
- 注意:$D_{KL}(P\|Q) \neq D_{KL}(Q\|P)$,KL 散度不对称!
4.2 直觉理解——「用错了码本的代价」
假设你要传输一段文字,最优编码方案应该根据字符的真实频率 $P$ 设计(常见字符用短编码)。
但如果你用的是基于 $Q$ 设计的码本(以为某些字符更常见),那么平均编码长度会变长。
$D_{KL}(P\|Q)$ = 用 $Q$ 的码本而非最优 $P$ 的码本时,每个符号多花的比特数(单位是 nats,若用 $\log_2$ 则为 bits)。
当 $P = Q$ 时,码本最优,$D_{KL} = 0$;$P$ 和 $Q$ 差异越大,KL 散度越大。
4.3 重要性质
✅ 非负性
$D_{KL}(P \| Q) \geq 0$,当且仅当 $P = Q$ 时取等。
证明:由 Jensen 不等式,对凸函数 $-\log$ 有 $\mathbb{E}[-\log \frac{Q}{P}] \geq -\log \mathbb{E}[\frac{Q}{P}] = 0$。
⚠️ 不对称性
$D_{KL}(P\|Q) \neq D_{KL}(Q\|P)$,因此不是「距离」(违反对称公理)。
两个方向有不同的含义:「前向 KL」vs「反向 KL」在机器学习中表现非常不同。
4.4 在 RLHF 中的作用
RLHF 的优化目标中有这一项:
展开来看,对一条回答 $y$ 中每个 token $y_t$,KL 项等于:
这个惩罚项确保当前策略 $\pi_\theta$ 不要偏离 SFT 参考模型 $\pi_\text{ref}$ 太远,防止模型通过「钻奖励模型漏洞」(Reward Hacking)来刷高分。
「前向 KL」$D_{KL}(\pi_\theta \| \pi_\text{ref})$ 惩罚的是:当前策略在参考模型认为「不可能」的地方赋予了概率。这正是我们想防止的——模型不应该输出 SFT 模型从未见过的奇怪文本。
这三个概念经常同时出现,但教材往往割裂讲。这里把它们放在一起,看清楚关系。
5.1 信息熵(Shannon Entropy)
信息熵衡量一个分布的「不确定性」:
$H = -0.5\log 0.5 - 0.5\log 0.5 = \log 2 \approx 0.693$ nats
不确定性最大,熵最高
$H = -0.9\log 0.9 - 0.1\log 0.1 \approx 0.325$ nats
基本知道结果,熵较低
极端情况:$P(\text{正})=1$,$H=0$——完全确定,无不确定性,熵为零。
5.2 交叉熵(Cross-Entropy)
交叉熵衡量「用分布 $Q$ 来预测真实分布 $P$ 时的平均编码代价」:
和信息熵的区别:$H(P)$ 用 $P$ 自己编码,$H(P, Q)$ 用 $Q$ 编码真实分布 $P$。
5.3 三者的统一关系
完整推导(每步都解释清楚):
推导的第 2 步会在式子里同时加上 $+\sum P(x)\log P(x)$ 和 $-\sum P(x)\log P(x)$,这两项加起来等于零,所以值没变——这是数学推导里常见的「凑项」技巧,目的是把式子拆成两个我们认识的东西。
因为我们想把 $H(P,Q)$(含两个分布)拆成「只含 $P$ 的部分」+ 「含两个分布之差的部分」,这样就能看出:
- $H(P)$:真实分布自身的不确定性,和模型 $Q$ 无关,训练时固定不变
- $D_{KL}(P\|Q)$:模型 $Q$ 和真实分布 $P$ 的差距,这才是训练时真正要压缩的
5.4 LLM 预训练 loss 就是交叉熵
预训练 loss 写作:
这正是以真实 token 序列 $x_t$(one-hot 分布 $P$)为目标,让模型预测分布 $P_\theta$ 去拟合,即 $H(P_{\text{data}}, P_\theta)$ 的样本估计。
- 预训练 loss = 交叉熵 = NLL = 负对数似然 → 最小化分布差异
- SFT loss = 同上,只是 mask 掉了 prompt 部分
- 奖励模型 loss = BT 损失 = 二元交叉熵(输入是得分差)
- RLHF KL 惩罚 = 直接最小化 KL 散度防止偏离 SFT 模型
语言模型生成下一个词时,输出的是所有词汇表位置的 logit(原始分数),Softmax 把它们转换成概率分布,再进行采样。
6.1 Softmax 定义
- $\mathbf{z} = (z_1, z_2, \ldots, z_V)$:模型输出的 logit 向量,$V$ 是词汇表大小(通常 3~15 万)
- 输出是归一化的概率分布:所有 $\text{softmax}_i \in (0,1)$,且 $\sum_i \text{softmax}_i = 1$
6.2 温度系数(Temperature)
标准 softmax 对模型 confidence 非常敏感:如果某个词的 logit 远高于其他,softmax 后这个词的概率会接近 1,模型变得「贪婪」。
引入温度系数 $T$:
假设模型对候选词输出了如下 logit(原始分数):
温度公式:先把 logit 除以 $T$,再做 softmax。$T$ 越小,除完之后差距被放大;$T$ 越大,差距被压缩。
| 词 | 原始 logit | $T=0.5$(低温) logit÷0.5,差距放大 |
$T=1.0$(默认) logit÷1,不变 |
$T=2.0$(高温) logit÷2,差距压缩 |
|---|---|---|---|---|
| 好 | 4.0 | 88% 🔥 | 64% | 47% |
| 棒 | 3.0 | 8% | 24% | 26% |
| 热 | 2.0 | 3% | 9% | 16% |
| 差 | 1.0 | 1% | 3% | 11% |
「好」拿走 88%,几乎每次都输出同一个词
→ 确定性强,但没有变化
「好」64%,「棒」24%,偶尔出现其他词
→ 适中,最常用
四个词都有明显概率,「差」也有 11%
→ 多样,但可能出奇怪的词
本质:$T$ 控制的是「模型有多犹豫」。低温 = 模型非常自信,押注最高分;高温 = 模型装作不那么确定,给低分词也留机会。
| 温度 $T$ | 效果 | 适用场景 |
|---|---|---|
| $T \to 0$ | 概率集中在 logit 最大的词上(等价于 argmax,贪心解码) | 确定性任务(代码、数学) |
| $T = 1$ | 标准 softmax,不做任何调整 | 默认设置 |
| $T > 1$(如 1.5) | 分布更均匀,增加随机性,生成更多样 | 创意写作、头脑风暴 |
| $T \to \infty$ | 均匀分布,完全随机采样 | (实际不用,太随机) |
统计物理里,粒子的能量分布也有类似的 Boltzmann 分布:$P_i \propto e^{-E_i / (kT)}$,高温时粒子分布更均匀,低温时更集中在低能态。
语言模型的「温度」直接借用了这个概念:高温 = 更多随机探索,低温 = 更确定地走已知的好路。
6.3 采样策略:top-k 和 top-p(nucleus sampling)
温度控制分布形状,但实际采样时通常还要配合截断策略,防止出现概率极低但仍可能被采到的「意外词」:
Top-k 采样
只保留概率最高的 $k$ 个词,其余概率设为 0,然后在 $k$ 个词上归一化后采样。
问题:$k$ 是固定的,有时候「合理词」只有 3 个但 $k=50$ 会引入噪声,有时候「合理词」有 200 个但 $k=50$ 会过度截断。
Top-p(Nucleus)采样
按概率从高到低排列,累计到概率和 $\geq p$(如 $p=0.9$)为止,只在这个「核」里采样。
优点:自适应词数——分布尖锐时核小(保守),分布平缓时核大(多样),更符合直觉。
温度改变的是分布形状(概率数值),但不一定能改变「候选集合是谁」。三种解码方式受温度影响的程度完全不同:
| 解码方式 | 温度有没有用? | 原因 |
|---|---|---|
| 贪心解码(每次取 argmax) | ❌ 完全没用 | 永远选最高分,温度压缩差距也不改变排名第一的词 |
| Top-k 采样(先选 k 个再采样) | ⚠️ 只影响 k 个词内部 | 候选集合固定不变,但高温让这 k 个词概率更均匀,低温让第一名更垄断——你说的就是这个 |
| Top-p 采样(累计概率截断) | ✅ 影响候选集大小 | 高温让分布更平,要累计到 p 需要更多词,候选集会扩大;低温让分布尖锐,候选集会缩小 |
| Beam Search(保留 k 条路径) | ⚠️ 单步影响小,多步有差异 | 每步候选不变,但各路径得分累积不同,最终保留的完整句子可能不同 |
结论:这就是为什么实践中 top-p 比 top-k 更常用——top-p 是温度 + 截断真正联动的采样方式,高温时自动放宽候选范围,低温时自动收窄,行为更符合直觉。用 top-k 时如果想让温度真正起作用,需要把 $k$ 设得足够大(比如 $k=50$ 甚至更大),让分布有展开的余地。
| 词 | logit | 原始 softmax 概率 | top-p=0.9 是否纳入 |
|---|---|---|---|
| 好 | 4.2 | 55% | ✅(累计 55%) |
| 棒 | 3.1 | 20% | ✅(累计 75%) |
| 差 | 2.4 | 10% | ✅(累计 85%) |
| 热 | 1.9 | 6% | ✅(累计 91% ≥ 0.9,纳入后停止) |
| 糟糕 | 0.5 | 1.5% | ❌(累计已超过 0.9,截断) |
| (其他 3 万个词) | <0 | <0.1% | ❌ |
最终从「好、棒、差、热」这 4 个词中按归一化概率采样,既保证了多样性,又避免了低概率的奇怪词出现。
6.4 温度系数在训练时有没有用?
温度系数是推理时的工具,训练时几乎不用——但有一个重要例外。
训练的目标是计算 loss 做反向传播,用的是整个概率分布,而不是「采样选一个词」。预训练和 SFT 的核心 loss 是:
如果在训练时对 softmax 加了温度 $T$,真实词的概率会变:
对 loss 求梯度时,温度会以 $\frac{1}{T}$ 的倍率缩放梯度:
梯度被 $\frac{1}{T}$ 缩小,分布更平缓,模型对每个位置都更「谦虚」,不那么自信。 相当于隐式的正则化,防止模型太快收敛到某个词。
梯度被放大,分布更尖锐,模型被「逼着」更快把正确词推到接近 1。 可能导致训练不稳定,很少这样用。
为什么标准训练固定 $T=1$?
因为温度的效果完全可以被学习率替代——$T=2$ + 某学习率,等价于 $T=1$ + 一半学习率(梯度幅度减半,效果相同)。所以没必要引入额外超参数,直接调学习率就够了。训练时用温度的唯一理由是知识蒸馏(见下),那里的温度有独特的语义,不能被学习率替代。
| 训练/推理阶段 | 用温度吗? | 原因 |
|---|---|---|
| 预训练 / SFT | ❌ 不用 | 直接算 NLL loss,不采样,温度无处介入 |
| 奖励模型训练 | ❌ 不用 | 算 BT loss,比较两个回答的得分差,不采样 |
| RLHF(PPO)生成 rollout 时 | ⚠️ 有时用 | 策略模型需要采样生成回答,可以加温度增加样本多样性,避免所有样本都一样 |
| 知识蒸馏(KD)训练 | ✅ 专门用 | 见下方详解 ↓ |
| 推理 / 生成文本 | ✅ 主战场 | 控制输出的多样性和确定性 |
知识蒸馏是让小模型(Student)去学大模型(Teacher)的一种方法。朴素做法是让小模型直接预测正确答案(hard label),但更好的做法是让小模型去拟合大模型对所有词的完整概率分布(soft label)——这里就需要温度。
Hard Label(不用温度)
正确答案是「猫」,就用 one-hot:$[0, 0, 1, 0, \ldots]$
小模型只知道「猫对狗错」,学不到「狗虽然错但也挺像,鱼差得远」这些排名信息。
Soft Label(大模型输出 + 高温)
大模型(高温软化后)输出:$[0.01, 0.08, 0.70, 0.15, \ldots]$
小模型能学到「猫最可能,狗差一点,鱼很不可能」这些排名中间的隐含知识,效果更好。
蒸馏时对教师模型用高温($T=4\sim10$):
高温把教师分布「摊平」,让「第2名、第3名」的词也有一定概率,小模型才能真正学到排名信息,而不只是在模仿「第1名是谁」。这种软化的分布被称为 soft target,是知识蒸馏效果好的核心原因(Hinton et al., 2015)。