尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

241、【AI】【模型部署】基座模型研究:loss 面面观(交叉熵 / NLL / KL / 最大似然)

241、【AI】【模型部署】基座模型研究:loss 面面观(交叉熵 / NLL / KL / 最大似然) 【声明】本博客所有内容均为个人业余时间创作所述技术案例均来自公开开源项目如GithubApache基金会不涉及任何企业机密或未公开技术如有侵权请联系删除标题241、【AI】【模型部署】基座模型研究loss 面面观交叉熵 / NLL / KL / 最大似然背景上篇 blog【AI】【模型部署】基座模型研究logits 与 softmax把 logits 与 softmax 讲透了logits 是输出头给出的未归一化分数可负、只有差值有意义softmax 用取指数、除以总和把它压成非负且和为 1 的概率并放大差距由于平移不变工程上先减最大值再取指数保证数值稳定温度是对 logits 做除法来调确定与多样而 softmax 输出的p pp与真实标签y yy之差正是交叉熵对 logits 的梯度。从上篇到更早的几篇损失这个词反复出现却用了好几种名字交叉熵、负对数似然、KL 散度、最大似然。它们到底是不是同一个东西本篇把它们放在一起做一次系统的正本清源。模型部署训练一个语言模型最后都要落到一个标量损失上。但这个损失背后其实站着一整族概念从信息量到熵再到交叉熵与KL 散度以及被等价改写的负对数似然和最大似然。把它们的关系理清很多看起来不同的损失其实是一回事为什么偏偏用交叉熵的疑问都会自然消解。从信息量到熵先看最小的砖块——信息量self-information一个事件概率越小一旦发生带来的惊讶越大用负对数度量I ( x ) − log ⁡ p ( x ) I(x) -\log p(x)I(x)−logp(x)几个极端情形说明了它为什么合理p 1 p1p1必然发生时I 0 I0I0毫无惊讶p 0.5 p0.5p0.5时I ≈ 0.69 I\approx0.69I≈0.69p → 0 p\to 0p→0几乎不可能时I → ∞ I\to\inftyI→∞惊讶爆炸。把所有可能事件的惊讶按各自概率加权平均就得到熵entropyH ( P ) − ∑ x P ( x ) log ⁡ P ( x ) H(P) -\sum_x P(x)\log P(x)H(P)−x∑​P(x)logP(x)熵衡量的是分布P PP自身的不确定度越接近均匀熵越大越集中确定熵越小。它是分布P PP的固有属性与模型无关。举一个V 4 V4V4的例子均匀分布[ 0.25 , 0.25 , 0.25 , 0.25 ] [0.25,0.25,0.25,0.25][0.25,0.25,0.25,0.25]的熵最大为ln ⁡ 4 ≈ 1.39 \ln 4\approx1.39ln4≈1.39而极端分布[ 1 , 0 , 0 , 0 ] [1,0,0,0][1,0,0,0]完全确定熵为 0。训练想做的一件事就是让模型预测的不确定度逼近数据真实的不确定度。交叉熵用一个分布去编码另一个分布交叉熵Cross-Entropy换了个角度用真实分布P PP当权重去对预测分布Q QQ的负对数做加权平均H ( P , Q ) − ∑ x P ( x ) log ⁡ Q ( x ) H(P,Q) -\sum_x P(x)\log Q(x)H(P,Q)−x∑​P(x)logQ(x)直觉上它衡量如果按预测Q QQ的把握去描述真实P PP平均要吃多少惊讶。Q QQ越贴近P PPH ( P , Q ) H(P,Q)H(P,Q)越小当Q QQ恰好等于P PP时取到最小值H ( P ) H(P)H(P)。核心分解交叉熵 熵 KL把上式做一步变形就得到整篇最关键的关系H ( P , Q ) H ( P ) ⏟ 真实分布自身的熵 K L ( P ∥ Q ) ⏟ 预测偏离真实 H(P,Q) \underbrace{H(P)}_{\text{真实分布自身的熵}} \underbrace{\mathrm{KL}(P\|Q)}_{\text{预测偏离真实}}H(P,Q)真实分布自身的熵H(P)​​预测偏离真实KL(P∥Q)​​图 1 用一根堆叠柱画出这个分解底下蓝色的H ( P ) H(P)H(P)是常数只由真实数据决定上面红色的K L ( P ∥ Q ) \mathrm{KL}(P\|Q)KL(P∥Q)才是模型能去优化的部分。其中K L \mathrm{KL}KL是KL 散度Kullback-Leibler divergence相对熵它有两个关键性质恒非负K L ( P ∥ Q ) ≥ 0 \mathrm{KL}(P\|Q)\ge 0KL(P∥Q)≥0当且仅当P Q PQPQ时为 0不对称K L ( P ∥ Q ) ≠ K L ( Q ∥ P ) \mathrm{KL}(P\|Q)\ne \mathrm{KL}(Q\|P)KL(P∥Q)KL(Q∥P)所以它不是距离而是方向性的偏离度量。由这个分解立刻得到一个结论真实分布固定时H ( P ) H(P)H(P)是常数所以最小化交叉熵与最小化 KL 散度完全等价。补一点 KL 的直觉K L ( P ∥ Q ) \mathrm{KL}(P\|Q)KL(P∥Q)可以理解为用Q QQ去描述P PP时多付出的编码长度。它不对称因此用Q QQ近似P PP与用P PP近似Q QQ是两回事——前者会重罚Q QQ在有概率处给出 0逼着Q QQ覆盖P PP的全部支撑倾向平均、含糊。交叉熵对应的正是这个方向也是语言模型训练用的方向。NLLone-hot 时交叉熵退化为负对数似然语言模型每个位置的真实分布是one-hot正确 token 为 1、其余为 0。代入交叉熵只有正确那一项被P 1 P1P1选中于是H ( P , Q ) − log ⁡ Q ( 正确 token ) H(P,Q) -\log Q(\text{正确 token})H(P,Q)−logQ(正确token)这就是负对数似然Negative Log-LikelihoodNLL。换句话说NLL 不是另一种损失而是交叉熵在 one-hot 标签下的特例——第 235 篇讲的损失只取决于模型给正确 token 的概率正是它。批量训练时这个损失会把一个 batch 里所有位置的 NLL求平均最终得到第 238 篇说的那个标量L LL对应F.cross_entropy默认的mean归约。最大似然从连乘最大到交叉熵最小另一种常见的说法是训练就是最大似然估计Maximum Likelihood EstimationMLE让模型对全部真实样本的预测概率连乘最大。由于连乘容易下溢、也不便求导通常先取对数把连乘变成求和图 2 是这条等价链似然∏ i Q ( y i ) \prod_i Q(y_i)∏i​Q(yi​)→ 取对数∑ i log ⁡ Q ( y i ) \sum_i\log Q(y_i)∑i​logQ(yi​)→ 取负− ∑ i log ⁡ Q ( y i ) -\sum_i\log Q(y_i)−∑i​logQ(yi​)→ 最小化它。而最后这个式子正是把每个位置的 NLL 加起来、再对样本求平均——也就是交叉熵。所以第三个结论是最大似然 ⇔ 最小化交叉熵。四个概念的关系把前面几条串起来一张图就能说清图 3 中交叉熵是总熵与 KL 是它的两个组成部分NLL 是交叉熵在 one-hot 下的特例而最大似然是从另一条路走到同一个终点。至此损失这个名字下的四种说法关系彻底清楚了。这一族概念在数学系列的《信息量、熵与交叉熵》里也从信息论角度推导过两篇可互相印证。一句话收口一个总交叉熵两个部分熵、KL两种等价说法NLL、最大似然。正面回答loss 和 KL 是不是一回事现在可以精确回答了说法是否等于交叉熵说明KL 散度不等于交叉熵 熵 KL交叉熵比 KL 多一个H ( P ) H(P)H(P)负对数似然等于one-hot 时one-hot 下H ( P ) 0 H(P)0H(P)0交叉熵退化成 NLL最大似然等价优化目标最小化交叉熵 ⇔ 最大化似然是同一目标的两面熵H ( P ) H(P)H(P)是其中一项真实分布自身的不确定度与模型无关一句话KL 是交叉熵减去熵后的可优化部分NLL 是交叉熵的一个特例最大似然是它的等价视角。另有一个实际差别虽然最小化交叉熵等价于最小化 KL但训练与汇报时用的量是交叉熵或它的指数——困惑度而不是 KL。原因是 KL 需要真实分布P PP而在语言模型里P PP通常未知只能用 one-hot 近似——这也正是 loss 用交叉熵口径报告的原因。一个数值例子取真实分布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]图 4 对应的三个数是H ( P ) 0.80 H(P)0.80H(P)0.80、K L ( P ∥ Q ) 0.09 \mathrm{KL}(P\|Q)0.09KL(P∥Q)0.09、H ( P , Q ) 0.89 H(P,Q)0.89H(P,Q)0.89。可以看到交叉熵0.89确实等于熵0.80加上 KL0.09。训练时P PP不动模型能压下去的只有那 0.09——当Q QQ逼近P PPKL 趋于 0交叉熵趋于H ( P ) H(P)H(P)的下限。顺带为什么分类不用均方误差一个常见对照是均方误差Mean Squared ErrorMSE。把它接在 softmax 后面有两个问题一是梯度里会多出 softmax 的导数预测越接近 0 或 1 时梯度越平学习反而变慢二是 MSE 隐含误差服从高斯分布而分类目标本质是类别分布交叉熵才是与它对应的似然。交叉熵与 softmax 组合后梯度恰好是p − y p-yp−y第 239 篇既简洁又不饱和——这才让它成为分类任务的默认选择。为什么偏偏用交叉熵回到最初的动机三个理由第 235 篇已展开这里收口等价于最大似然符合让数据出现概率最大的统计原则梯度漂亮与 softmax 组合后对 logits 的梯度恰好是p − y p-yp−y第 239 篇推导好训练数值稳定配合 log-sum-exp 能安全处理极小概率。一句话记忆“− log ⁡ p -\log p−logp是信息量按真实分布P PP加权平均得到熵H ( P ) H(P)H(P)用P PP的权重去衡量预测Q QQ的负对数就是交叉熵H ( P , Q ) H ( P ) K L ( P ∥ Q ) H(P,Q)H(P)\mathrm{KL}(P\|Q)H(P,Q)H(P)KL(P∥Q)其中H ( P ) H(P)H(P)与模型无关所以最小化交叉熵 ⇔ 最小化 KL真实标签 one-hot 时H ( P ) 0 H(P)0H(P)0交叉熵退化为 NLL再从最大似然连乘取负对数也走到同一个目标——四者是同一条链上的不同说法”但交叉熵本身不等于 KL。OK本篇先到这里如有疑问欢迎评论区留言讨论祝各位功力大涨技术更上一层楼更多内容见下篇 blog
返回列表