欢迎光临
我们一直在努力

交叉熵的理解以及和 KL散度对比

1. 信息量

  • 定义:I(x)=−log⁡P(x)I(x) = -\\log P(x)I(x)=logP(x)
  • 概率越小,信息量越大;取负号是因为 log⁡P(x)<0\\log P(x) < 0logP(x)<0
  • 例:P=0.5⇒I=−log⁡20.5=1P=0.5 \\Rightarrow I = -\\log_2 0.5 = 1P=0.5I=log20.5=1 bit

2. 熵 (Entropy)

  • 定义:H(P)=−∑ipilog⁡piH(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)≤log⁡nH(X) \\le \\log nH(X)logn,当 Pi=1/nP_i = 1/nPi=1/n(均匀分布)取等
  • 熵越大 ⇒ 不确定性越高

3. 交叉熵 (Cross Entropy)

  • 定义:H(P,Q)=−∑xP(x)log⁡Q(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=−log⁡P(正确类别)\\text{Loss} = -\\log P(\\text{正确类别})Loss=logP(正确类别)
  • 例:正确类预测 0.8 → L=−log⁡0.8≈0.223L = -\\log 0.8 \\approx 0.223L=log0.80.223;预测 0.1 → L≈2.302L \\approx 2.302L2.302

4. LLM 训练中的交叉熵

  • 形式:L=−log⁡P(正确 token)L = -\\log P(\\text{正确 token})L=logP(正确 token)
  • 特性:奖励高置信度正确,严厉惩罚高置信度错误

通俗理解(考试打赌的比喻):把模型看作考生,每道题它给每个选项下注(总注金额 = 1)。规则:正确选项押得越多赢得越多(loss 小),押得越少输得越惨(loss 大),并且 赢的奖励有限,输的惩罚无限。(A 是正确答案)

考生类型行为Loss老师反应
👨‍🎓 学霸(正确且自信) A 押 0.99 0.01 “你都对了,没什么好教的”
🤔 中等生(正确但犹豫) A 押 0.5 0.69 “对是对,但要更确定”
😅 学渣(瞎猜均匀) 各押 0.25 1.39 “不会就不会,至少没乱来”
🤡 自信学渣(错误且自信) B 押 0.99,A 仅 0.01 4.60 “错得这么自信,回去重写 100 遍!”

这样设计的好处:

  • 鼓励"知之为知之":会的大胆答,不会的就分散概率,别瞎押
  • 防止模型"嘴硬":MSE 最多扣 1 分,模型敢赌;交叉熵敢赌就扣到无穷,模型自然老实
  • 学习效率高:对了不浪费时间,错得越自信纠正越狠
  • 通俗理解: “答对了,给点甜头;答错了,看你多自信,越自信打得越狠。”

    示例:输入 北京是中国的 ___,正确 token = 首都

    场景模型对"首都"的概率Loss =−log⁡P=-\\log P=logP说明
    ① 正确且自信 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 倍
    • 这种非对称性来自 −log⁡x-\\log xlogxx→0x\\to 0x0 时趋于无穷 → 模型不敢轻易"自信地犯错"

    4.1 −log⁡x-\\log xlogx 函数的形状

    PPP0.0010.010.10.30.50.70.90.991.0
    −log⁡P-\\log PlogP 6.91 4.61 2.30 1.20 0.69 0.36 0.105 0.01 0
    • x→1x \\to 1x1−log⁡x→0-\\log x \\to 0logx0(几乎不惩罚)
    • x→0x \\to 0x0−log⁡x→+∞-\\log x \\to +\\inftylogx+(惩罚爆炸)
    • 非对称:0.5 → 0.99 仅降 loss 0.68;0.5 → 0.01 却增 loss 3.91

    4.2 四种场景的梯度分析(输入 北京是中国的 ___,正确答案 = 首都)

    场景“首都” 概率Loss∂L/∂P\\partial L/\\partial PL/P行为
    ① 正确且自信 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:

    Loss错误自信 (P=0.01)正确自信 (P=0.99)比值上界
    MSE (1−0.01)2=0.98(1-0.01)^2 = 0.98(10.01)2=0.98 (1−0.99)2=0.0001(1-0.99)^2 = 0.0001(10.99)2=0.0001 ~10⁴ 1(有限)
    CE −log⁡0.01=4.605-\\log 0.01 = 4.605log0.01=4.605 −log⁡0.99=0.01-\\log 0.99 = 0.01log0.99=0.01 ~460 +∞

    交叉熵让"自信地犯错"代价不可承受,模型学会"不确定时分散概率"。

    (2) 梯度信号天然合理 — 对 softmax + 交叉熵组合:

    ∂L∂zi=y^i−yi\\frac{\\partial L}{\\partial z_i} = \\hat y_i – y_iziL=y^iyi

    即"预测概率 − 真实标签":

    • 预测对(y^i≈1\\hat y_i \\approx 1y^i1yi=1y_i=1yi=1)→ 梯度 ≈ 0,不再更新
    • 预测错(y^i≈0\\hat y_i \\approx 0y^i0yi=1y_i=1yi=1)→ 梯度 ≈ -1,大力更新

    效果:对的不动,错的猛改。

    (3) 与最大似然等价

    min⁡(−log⁡P(正确))⇔max⁡Likelihood⇔min⁡DKL(P∥Q)\\min(-\\log P(\\text{正确})) \\Leftrightarrow \\max \\text{Likelihood} \\Leftrightarrow \\min D_{KL}(P\\|Q)min(logP(正确))maxLikelihoodminDKL(PQ)

    4.4 直观理解

    交叉熵对"错误且自信"施加无界惩罚,对"正确且自信"几乎不惩罚,迫使模型只在确定时才自信\\boxed{\\text{交叉熵对"错误且自信"施加无界惩罚,对"正确且自信"几乎不惩罚,迫使模型只在确定时才自信}}交叉熵对"错误且自信"施加无界惩罚,对"正确且自信"几乎不惩罚,迫使模型只在确定时才自信

    这种 指数级非对称惩罚 正是它成为分类与语言模型默认 loss 的根本原因。

    5. KL 散度 (KL Divergence)

    • 定义:DKL(P∥Q)=∑xP(x)log⁡P(x)Q(x)D_{KL}(P\\|Q) = \\sum_x P(x)\\log\\dfrac{P(x)}{Q(x)}DKL(PQ)=xP(x)logQ(x)P(x)
    • 含义:衡量两个概率分布的差异(Q 距离 P 有多远)

    5.1 三者核心关系

    ① 公式推导:由 KL 定义展开

    DKL(P∥Q)=∑iP(i)log⁡P(i)Q(i)D_{KL}(P\\|Q) = \\sum_i P(i)\\log\\dfrac{P(i)}{Q(i)}DKL(PQ)=iP(i)logQ(i)P(i)

    利用 log⁡ab=log⁡a−log⁡b\\log\\dfrac{a}{b} = \\log a – \\log blogba=logalogb 拆成两项:

    =∑iP(i)log⁡P(i)−∑iP(i)log⁡Q(i)= \\sum_i P(i)\\log P(i) – \\sum_i P(i)\\log Q(i)=iP(i)logP(i)iP(i)logQ(i)

    代入熵和交叉熵的定义:

    • H(P)=−∑iP(i)log⁡P(i)  ⇒  ∑iP(i)log⁡P(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)log⁡Q(i)  ⇒  ∑iP(i)log⁡Q(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(PQ)=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(PQ)

    ② 编码视角:

    量含义
    H(P)H(P)H(P) 理论最低编码长度(由真实分布决定的极限)
    H(P,Q)H(P,Q)H(P,Q) 实际编码长度(用模型分布 Q 设计编码)
    DKL(P∣Q)D_{KL}(P|Q)DKL(PQ) 多浪费的长度(Q 不准确导致的额外代价)

    例(用 log⁡2\\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.7log⁡20.7+0.2log⁡20.2+0.1log⁡20.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.3321.16 bit

    H(P,Q)H(P,Q)H(P,Q) 计算(权重用 PPP,对数里用 QQQ):

    H(P,Q)=−[0.7log⁡20.5+0.2log⁡20.3+0.1log⁡20.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.2321.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(PQ)=H(P,Q)H(P)1.281.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(PQ)

    • 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)
    赞(0)
    未经允许不得转载:171主机测评 » 交叉熵的理解以及和 KL散度对比
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址