1. 信息量
- 定义:I(x)=−logP(x)I(x) = -\\log P(x)I(x)=−logP(x)
- 概率越小,信息量越大;取负号是因为 logP(x)<0\\log P(x) < 0logP(x)<0
- 例:P=0.5⇒I=−log20.5=1P=0.5 \\Rightarrow I = -\\log_2 0.5 = 1P=0.5⇒I=−log20.5=1 bit
2. 熵 (Entropy)
- 定义:H(P)=−∑ipilogpiH(P) = -\\sum_i p_i \\log p_iH(P)=−∑ipilogpi = 平均信息量
- P=(1,0)⇒H=0P=(1,0) \\Rightarrow H=0P=(1,0)⇒H=0(无不确定性)
- 最大值:H(X)≤lognH(X) \\le \\log nH(X)≤logn,当 Pi=1/nP_i = 1/nPi=1/n(均匀分布)取等
- 熵越大 ⇒ 不确定性越高
3. 交叉熵 (Cross Entropy)
- 定义:H(P,Q)=−∑xP(x)logQ(x)H(P,Q) = -\\sum_x P(x)\\log Q(x)H(P,Q)=−∑xP(x)logQ(x)
- 含义:用 Q 编码 P 的平均信息量;Q=PQ=PQ=P 时取最小值 H(P)H(P)H(P)
- 分类任务中简化为:Loss=−logP(正确类别)\\text{Loss} = -\\log P(\\text{正确类别})Loss=−logP(正确类别)
- 例:正确类预测 0.8 → L=−log0.8≈0.223L = -\\log 0.8 \\approx 0.223L=−log0.8≈0.223;预测 0.1 → L≈2.302L \\approx 2.302L≈2.302
4. LLM 训练中的交叉熵
- 形式:L=−logP(正确 token)L = -\\log P(\\text{正确 token})L=−logP(正确 token)
- 特性:奖励高置信度正确,严厉惩罚高置信度错误
通俗理解(考试打赌的比喻):把模型看作考生,每道题它给每个选项下注(总注金额 = 1)。规则:正确选项押得越多赢得越多(loss 小),押得越少输得越惨(loss 大),并且 赢的奖励有限,输的惩罚无限。(A 是正确答案)
| 👨🎓 学霸(正确且自信) | A 押 0.99 | 0.01 | “你都对了,没什么好教的” |
| 🤔 中等生(正确但犹豫) | A 押 0.5 | 0.69 | “对是对,但要更确定” |
| 😅 学渣(瞎猜均匀) | 各押 0.25 | 1.39 | “不会就不会,至少没乱来” |
| 🤡 自信学渣(错误且自信) | B 押 0.99,A 仅 0.01 | 4.60 | “错得这么自信,回去重写 100 遍!” |
这样设计的好处:
通俗理解: “答对了,给点甜头;答错了,看你多自信,越自信打得越狠。”
示例:输入 北京是中国的 ___,正确 token = 首都
| ① 正确且自信 | 0.99 | 0.01 | 奖励:loss 极小 |
| ② 正确但不自信 | 0.50 | 0.693 | 中等惩罚 |
| ③ 正确但低概率 | 0.10 | 2.303 | 较大惩罚 |
| ④ 错误且自信(预测"城市"0.99,"首都"仅 0.01) | 0.01 | 4.605 | 严厉惩罚:loss 极大 |
- 对比 ① 与 ④:同样是"高置信度",正确时 loss=0.01,错误时 loss=4.605,相差 约 460 倍
- 这种非对称性来自 −logx-\\log x−logx 在 x→0x\\to 0x→0 时趋于无穷 → 模型不敢轻易"自信地犯错"
4.1 −logx-\\log x−logx 函数的形状
| −logP-\\log P−logP | 6.91 | 4.61 | 2.30 | 1.20 | 0.69 | 0.36 | 0.105 | 0.01 | 0 |
- x→1x \\to 1x→1 时 −logx→0-\\log x \\to 0−logx→0(几乎不惩罚)
- x→0x \\to 0x→0 时 −logx→+∞-\\log x \\to +\\infty−logx→+∞(惩罚爆炸)
- 非对称:0.5 → 0.99 仅降 loss 0.68;0.5 → 0.01 却增 loss 3.91
4.2 四种场景的梯度分析(输入 北京是中国的 ___,正确答案 = 首都)
| ① 正确且自信 | 0.99 | 0.01 | ≈ -1.01 | 几乎不更新 |
| ② 正确但犹豫 | 0.50 | 0.693 | -2 | 适度推高 |
| ③ 错误但不自信 | 0.10 | 2.303 | -10 | 强力拉升 |
| ④ 错误且自信 | 0.01 | 4.605 | -100 | 梯度爆炸式更新 |
4.3 为什么这是"好"的特性
(1) 防止模型"信口开河" — 对比 MSE:
| MSE | (1−0.01)2=0.98(1-0.01)^2 = 0.98(1−0.01)2=0.98 | (1−0.99)2=0.0001(1-0.99)^2 = 0.0001(1−0.99)2=0.0001 | ~10⁴ | 1(有限) |
| CE | −log0.01=4.605-\\log 0.01 = 4.605−log0.01=4.605 | −log0.99=0.01-\\log 0.99 = 0.01−log0.99=0.01 | ~460 | +∞ |
交叉熵让"自信地犯错"代价不可承受,模型学会"不确定时分散概率"。
(2) 梯度信号天然合理 — 对 softmax + 交叉熵组合:
∂L∂zi=y^i−yi\\frac{\\partial L}{\\partial z_i} = \\hat y_i – y_i∂zi∂L=y^i−yi
即"预测概率 − 真实标签":
- 预测对(y^i≈1\\hat y_i \\approx 1y^i≈1,yi=1y_i=1yi=1)→ 梯度 ≈ 0,不再更新
- 预测错(y^i≈0\\hat y_i \\approx 0y^i≈0,yi=1y_i=1yi=1)→ 梯度 ≈ -1,大力更新
效果:对的不动,错的猛改。
(3) 与最大似然等价
min(−logP(正确))⇔maxLikelihood⇔minDKL(P∥Q)\\min(-\\log P(\\text{正确})) \\Leftrightarrow \\max \\text{Likelihood} \\Leftrightarrow \\min D_{KL}(P\\|Q)min(−logP(正确))⇔maxLikelihood⇔minDKL(P∥Q)
4.4 直观理解
交叉熵对"错误且自信"施加无界惩罚,对"正确且自信"几乎不惩罚,迫使模型只在确定时才自信\\boxed{\\text{交叉熵对"错误且自信"施加无界惩罚,对"正确且自信"几乎不惩罚,迫使模型只在确定时才自信}}交叉熵对"错误且自信"施加无界惩罚,对"正确且自信"几乎不惩罚,迫使模型只在确定时才自信
这种 指数级非对称惩罚 正是它成为分类与语言模型默认 loss 的根本原因。
5. KL 散度 (KL Divergence)
- 定义:DKL(P∥Q)=∑xP(x)logP(x)Q(x)D_{KL}(P\\|Q) = \\sum_x P(x)\\log\\dfrac{P(x)}{Q(x)}DKL(P∥Q)=∑xP(x)logQ(x)P(x)
- 含义:衡量两个概率分布的差异(Q 距离 P 有多远)
5.1 三者核心关系
① 公式推导:由 KL 定义展开
DKL(P∥Q)=∑iP(i)logP(i)Q(i)D_{KL}(P\\|Q) = \\sum_i P(i)\\log\\dfrac{P(i)}{Q(i)}DKL(P∥Q)=i∑P(i)logQ(i)P(i)
利用 logab=loga−logb\\log\\dfrac{a}{b} = \\log a – \\log blogba=loga−logb 拆成两项:
=∑iP(i)logP(i)−∑iP(i)logQ(i)= \\sum_i P(i)\\log P(i) – \\sum_i P(i)\\log Q(i)=i∑P(i)logP(i)−i∑P(i)logQ(i)
代入熵和交叉熵的定义:
- H(P)=−∑iP(i)logP(i) ⇒ ∑iP(i)logP(i)=−H(P)H(P) = -\\sum_i P(i)\\log P(i) \\;\\Rightarrow\\; \\sum_i P(i)\\log P(i) = -H(P)H(P)=−∑iP(i)logP(i)⇒∑iP(i)logP(i)=−H(P)
- H(P,Q)=−∑iP(i)logQ(i) ⇒ ∑iP(i)logQ(i)=−H(P,Q)H(P,Q) = -\\sum_i P(i)\\log Q(i) \\;\\Rightarrow\\; \\sum_i P(i)\\log Q(i) = -H(P,Q)H(P,Q)=−∑iP(i)logQ(i)⇒∑iP(i)logQ(i)=−H(P,Q)
得到:
DKL(P∥Q)=−H(P)−(−H(P,Q))=−H(P)+H(P,Q)D_{KL}(P\\|Q) = -H(P) – (-H(P,Q)) = -H(P) + H(P,Q)DKL(P∥Q)=−H(P)−(−H(P,Q))=−H(P)+H(P,Q)
移项即得核心关系:
H(P,Q)=H(P)+DKL(P∥Q)\\boxed{H(P,Q) = H(P) + D_{KL}(P\\|Q)}H(P,Q)=H(P)+DKL(P∥Q)
② 编码视角:
| H(P)H(P)H(P) | 理论最低编码长度(由真实分布决定的极限) |
| H(P,Q)H(P,Q)H(P,Q) | 实际编码长度(用模型分布 Q 设计编码) |
| DKL(P∣Q)D_{KL}(P|Q)DKL(P∣Q) | 多浪费的长度(Q 不准确导致的额外代价) |
例(用 log2\\log_2log2):P=(0.7,0.2,0.1)P=(0.7, 0.2, 0.1)P=(0.7,0.2,0.1),Q=(0.5,0.3,0.2)Q=(0.5, 0.3, 0.2)Q=(0.5,0.3,0.2)
H(P)H(P)H(P) 计算:
H(P)=−[0.7log20.7+0.2log20.2+0.1log20.1]H(P) = -[0.7\\log_2 0.7 + 0.2\\log_2 0.2 + 0.1\\log_2 0.1]H(P)=−[0.7log20.7+0.2log20.2+0.1log20.1]
=0.7×0.515+0.2×2.322+0.1×3.322=0.360+0.464+0.332≈1.16 bit= 0.7\\times 0.515 + 0.2\\times 2.322 + 0.1\\times 3.322 = 0.360 + 0.464 + 0.332 \\approx 1.16 \\text{ bit}=0.7×0.515+0.2×2.322+0.1×3.322=0.360+0.464+0.332≈1.16 bit
H(P,Q)H(P,Q)H(P,Q) 计算(权重用 PPP,对数里用 QQQ):
H(P,Q)=−[0.7log20.5+0.2log20.3+0.1log20.2]H(P,Q) = -[0.7\\log_2 0.5 + 0.2\\log_2 0.3 + 0.1\\log_2 0.2]H(P,Q)=−[0.7log20.5+0.2log20.3+0.1log20.2]
=0.7×1.000+0.2×1.737+0.1×2.322=0.700+0.347+0.232≈1.28 bit= 0.7\\times 1.000 + 0.2\\times 1.737 + 0.1\\times 2.322 = 0.700 + 0.347 + 0.232 \\approx 1.28 \\text{ bit}=0.7×1.000+0.2×1.737+0.1×2.322=0.700+0.347+0.232≈1.28 bit
DKLD_{KL}DKL 计算:
DKL(P∥Q)=H(P,Q)−H(P)≈1.28−1.16=0.12 bitD_{KL}(P\\|Q) = H(P,Q) – H(P) \\approx 1.28 – 1.16 = 0.12 \\text{ bit}DKL(P∥Q)=H(P,Q)−H(P)≈1.28−1.16=0.12 bit
Cross Entropy=H(P)⏟真实分布的不确定性+DKL(P∥Q)⏟模型与真实分布的差距\\boxed{\\text{Cross Entropy} = \\underbrace{H(P)}_{\\text{真实分布的不确定性}} + \\underbrace{D_{KL}(P\\|Q)}_{\\text{模型与真实分布的差距}}}Cross Entropy=真实分布的不确定性H(P)+模型与真实分布的差距DKL(P∥Q)
- One-Hot:H(P)=0H(P)=0H(P)=0 → CE = KL
- 软分布:H(P)>0H(P)>0H(P)>0 → CE = KL + 常数,但 优化等价
5.2 知识蒸馏:KL 能学到 teacher 的"暗知识"
| One-Hot CE | (0,1,0,0)(0,1,0,0)(0,1,0,0) | 只知道"正确答案是 B" |
| KL 蒸馏 | (0.05,0.85,0.08,0.02)(0.05, 0.85, 0.08, 0.02)(0.05,0.85,0.08,0.02) | 知道"B 最对,C 也有点像,D 完全错" |
例:输入哈士奇图,teacher 输出 哈士奇:0.70 / 狼:0.20 / 萨摩耶:0.08 / 猫:0.001 / 卡车:0.0001
- One-Hot CE:学生只学到"是哈士奇",其他错误类一视同仁
- KL 蒸馏:学生还学到"哈士奇像狼、像萨摩耶,但完全不像猫和卡车"—— 即 类别间的相似度结构(dark knowledge)




