Skip to content

LLMs 损失函数篇

来源:AiGC面试宝典 整理日期:2024年8月11日


一、介绍一下 KL 散度?

KL散度(Kullback-Leibler散度)衡量了两个概率分布之间的差异,也称为相对熵。其公式为:

$$D_{KL}(P||Q) = \sum_{x \in X} P(x) \log \frac{P(x)}{Q(x)}$$

等价形式:

$$D_{KL}(P||Q) = -\sum_{x \in X} P(x) \log \frac{Q(x)}{P(x)}$$

📝通俗解释:KL散度就像比较两个概率分布的"距离"(但不是真正的距离,因为不对称)。比如,你预测明天天气是晴天80%、雨天20%,但实际是晴天70%、雨天30%,KL散度就能算出这个预测有多"离谱"。数值越小,说明预测越接近真实情况。


二、交叉熵损失函数写一下,物理意义是什么?

交叉熵损失函数(Cross-Entropy Loss)是用于度量两个概率分布之间差异的损失函数。在分类问题中,用于衡量模型预测分布与真实标签分布之间的差异。

二分类情况:

$$H(p, q) = -[p \log(q) + (1-p) \log(1-q)]$$

多分类情况:

$$H(p, q) = -\sum_{i=1}^{n} y_i \log(p_i)$$

📝通俗解释:交叉熵可以理解为"用一种编码方式发送信息,但实际信息是另一种分布"所需的信息量。在机器学习中,它衡量的是:你的预测概率分布与真实答案之间的"信息差"。预测越准确,损失越接近0;预测越离谱,损失越大。


三、KL 散度与交叉熵的区别?

特性KL散度交叉熵
定义两个概率分布P和Q差别的非对称性度量H(P,Q) = -∑P(x)log(Q(x))
对称性不对称,DKL(P||Q) ≠ DKL(Q||P)对称
取值非负数非负数
关系DKL(P||Q) = H(P,Q) - H(P)-
  • 交叉熵 = 熵 + KL散度,即 H(P,Q) = H(P) + DKL(P||Q)
  • 在机器学习中,由于真实分布P的熵H(P)是常数,所以最小化交叉熵等价于最小化KL散度
  • 交叉熵损失函数是分类问题中最常用的损失函数
  • KL散度更侧重于衡量两个分布的差异

📝通俗解释:可以把KL散度理解为"额外的信息损失"。比如,你本来知道真实分布(熵),但用另一个分布Q来近似它,KL散度就是多浪费的那部分信息。交叉熵则是总的信息量。两者差一个常数(真实分布的熵)。


四、多任务学习各 loss 差异过大怎样处理?

多任务学习中,如果各任务的损失差异过大,可以采用以下方法处理:

  1. 动态调整损失权重

    • 使用不确定性加权(Uncertainty Weighting):根据任务的不确定性自动调整权重
    • 动态权重调度(Dynamic Weight Averaging):训练过程中动态调整权重
  2. 使用任务特定的损失函数

    • 根据任务特性选择合适的损失函数
  3. 改变模型架构

    • 共享底层参数,任务特定的头部
    • 使用注意力机制平衡不同任务
  4. 引入正则化

    • 添加任务间相关性约束
  5. 梯度平衡

    • 多任务权重优化(MGDA)
    • 梯度归一化

📝通俗解释:就像同时教一个人打篮球和弹钢琴,如果篮球老师布置的作业量是钢琴的100倍,学生肯定只顾着练篮球。解决方法就是给钢琴课"加权",或者调整课程安排,让两门课的学习时间更均衡。多任务学习也是同理,要让各个任务都能被有效学习。


五、分类问题为什么用交叉熵损失函数不用均方误差(MSE)?

对比项交叉熵损失函数均方误差(MSE)
适用场景分类问题回归问题
概率敏感性对概率细微差异敏感不敏感
梯度特性梯度平滑,不易梯度消失梯度较小,易梯度消失
数学性质凸函数,优化稳定在分类场景下非凸

主要原因:

  1. 概率分布匹配:分类问题输出是概率分布,交叉熵能直接度量两个概率分布的差异

  2. 梯度优化更好:交叉熵在预测错误时梯度大,预测正确时梯度小,利于模型快速修正

  3. 激活函数兼容:分类问题常用softmax/sigmoid,交叉熵与这些激活函数配合数学性质更好

📝通俗解释:比如判断一张图片是猫还是狗。假设真实概率是[0.9, 0.1](猫),模型预测[0.5, 0.5]。用MSE算损失是0.5²+(-0.5)²=0.5,这个损失"看起来不大",模型改进动力不足。但用交叉熵算,-0.9*log(0.5)很大,模型会意识到自己预测得很差,必须大幅改进。交叉熵对错误更"敏感"。


六、什么是信息增益?

信息增益(Information Gain)是决策树算法中用于选择最佳分裂特征的评价指标。

定义:信息增益 = 父节点熵 - 加权子节点熵

$$IG = H(Parent) - \sum_{i} \frac{N_i}{N} H(Child_i)$$

其中H表示熵,定义为:

$$H = -\sum_{i} p_i \log_2(p_i)$$

📝通俗解释:信息增益就像问"这个问题能让我减少多少不确定性"。比如猜一个电影明星的性别,直接问"是男的吗"能减少50%的不确定性;但问"演过古装剧吗"可能只能减少10%。信息增益大的特征就是能"一刀切"把样本分清楚的特征,决策树会优先用这种特征来分裂节点。


七、多分类的分类损失函数(Softmax)?

Softmax交叉熵损失函数是深度学习中多分类问题的标准损失函数。

Softmax函数:

$$y_i = \frac{e^{l_i}}{\sum_{j} e^{l_j}}$$

损失函数:

$$L = -\sum_{i=1}^{n} y_i \log(p_i)$$

其中:

  • $n$ 是类别数
  • $y_i$ 是第i类的真实标签(one-hot编码)
  • $p_i$ 是第i类的预测概率

📝通俗解释:Softmax就像把所有输出"挤压"成概率分布(所有值加起来等于1)。比如模型输出[2.0, 1.0, 0.1],经过Softmax变成[0.7, 0.2, 0.1],表示模型有70%把握认为是第一类。交叉熵损失就是衡量这个概率分布和真实答案(比如[1,0,0])之间的差距。


八、softmax 和交叉熵损失怎么计算,二分类交叉熵呢?

Softmax计算:

$$y_i = \frac{e^{l_i}}{\sum_{j} e^{l_j}}$$

多分类交叉熵:

$$L = -\frac{1}{N} \sum_{i=1}^{N} \sum_{c=1}^{M} y_{ic} \log(p_{ic})$$

其中:

  • $M$ —— 类别的数量
  • $y_{ic}$ —— 符号函数(0或1),样本i的真实类别等于c时取1,否则取0
  • $p_{ic}$ —— 样本i属于类别c的预测概率
  • $N$ —— 样本数量

二分类交叉熵(Binary Cross Entropy):

$$L = -\frac{1}{N} \sum_{i=1}^{N} [y_i \cdot \log(p_i) + (1 - y_i) \cdot \log(1 - p_i)]$$

其中:

  • $y_i$ —— 样本i的标签,正类为1,负类为0
  • $p_i$ —— 样本i预测为正类的概率

📝通俗解释:多分类交叉熵就是把所有类别的"正确概率的对数"加起来再取负。比如三个类别,正确答案是第一类,预测概率是[0.7, 0.2, 0.1],损失 = -log(0.7) ≈ 0.36。如果预测概率是[0.9, 0.05, 0.05],损失 = -log(0.9) ≈ 0.105,损失更小。二分类其实是多分类的特例,只是只关心"正类"的概率。


九、如果 softmax 的 e 次方超过 float 的值了怎么办?

解决方案:减去输入向量中的最大值(数值稳定化技巧)

$$\tilde{p}k = \frac{e^{x_k - \max(x)}}{\sum e^{x_j - \max(x)}}$$

原理

  • $e^{x_k - \max(x)} \leq e^0 = 1$,确保分子不会溢出
  • 分母中的每一项都在 [0,1] 范围内,不会溢出

📝通俗解释:比如输入是[1000, 1001, 1002],直接算 $e^{1002}$ 会变成无穷大。但如果我们减去最大值1002,变成[0, 1, 2],$e^2$ ≈ 7.4是可以表示的数。最后算出来的概率还是一样的(只是等比例缩小了),这个技巧叫"数值稳定化",是深度学习框架常用的技巧。


📌 整理说明:本文档整理自AiGC面试宝典,涵盖了LLMs训练中常用的损失函数知识点,包括KL散度、交叉熵、信息增益、Softmax等核心概念及其在实际问题中的应用。

基于 MIT 许可发布