多分类交叉熵

发布于:2025-04-03 ⋅ 阅读:(23) ⋅ 点赞:(0)
1. 基本概念:熵与交叉熵

要理解多分类交叉熵损失的由来,首先需要掌握信息论中的两个基础概念:(Entropy)和交叉熵(Cross-Entropy)。

  • 熵(Entropy)
    熵衡量一个随机变量的不确定性。对于一个离散随机变量 X X X(例如类别分布),其熵定义为: H ( X ) = − ∑ i = 1 C p i log ⁡ ( p i ) H(X) = -\sum_{i=1}^{C} p_i \log(p_i) H(X)=i=1Cpilog(pi)

    • C C C:可能的类别数。
    • p i p_i pi:类别 i i i 发生的真实概率。
    • 意义:熵越大,分布的不确定性越高。例如,若所有类别概率相等,熵最大;若某类别概率为 1,其余为 0,熵为 0。
  • 交叉熵(Cross-Entropy)
    交叉熵衡量两个概率分布 P P P(真实分布)和 Q Q Q(预测分布)之间的差异,定义为: H ( P , Q ) = − ∑ i = 1 C p i log ⁡ ( q i ) H(P, Q) = -\sum_{i=1}^{C} p_i \log(q_i) H(P,Q)=i=1Cpilog(qi)

    • p i p_i pi:真实分布 P P P 中类别 i i i 的概率。
    • q i q_i qi:预测分布 Q Q Q 中类别 i i i 的概率。
    • 意义:交叉熵越小,说明预测分布 Q Q Q 越接近真实分布 P P P。交叉熵总是大于等于熵 H ( P ) H(P) H(P)(根据 KL 散度的非负性)。

在分类问题中,交叉熵损失函数正是基于这一概念,用于量化模型预测概率与真实标签之间的差距。


2. 多分类问题的设置

在多分类任务中,假设有 C C C 个类别,每个样本属于其中一个类别。以下是问题的数学建模:

  • 真实标签
    真实标签通常采用 one-hot 编码 表示:

    • 如果样本属于第 k k k 类,则标签为 y = [ y 1 , y 2 , … , y C ] y = [y_1, y_2, \dots, y_C] y=[y1,y2,,yC],其中 y k = 1 y_k = 1 yk=1,其他 y i = 0 y_i = 0 yi=0 i ≠ k i \neq k i=k)。
    • 因此,真实分布 P P P 是确定的: p i = y i p_i = y_i pi=yi
  • 模型预测
    模型通过 softmax 函数 将线性输出转化为概率分布: p i = e z i ∑ j = 1 C e z j p_i = \frac{e^{z_i}}{\sum_{j=1}^{C} e^{z_j}} pi=j=1Cezjezi

    • z i = θ i T x z_i = \theta_i^T x zi=θiTx:第 i i i 类的线性输出(logit),其中 θ i \theta_i θi 是类别 i i i 的参数向量, x x x 是输入特征。
    • p i p_i pi:模型预测样本属于第 i i i 类的概率,且满足 ∑ i = 1 C p i = 1 \sum_{i=1}^{C} p_i = 1 i=1Cpi=1
    • 意义:softmax 将任意实数 z i z_i zi 转换为概率,确保输出是一个合法的概率分布。

3. 交叉熵损失的推导

多分类交叉熵损失的推导基于信息论中的交叉熵定义,结合分类问题的特性。

  • 交叉熵定义
    根据交叉熵的公式,真实分布 P P P(由 y i y_i yi 表示)和预测分布 Q Q Q(由 p i p_i pi 表示)之间的交叉熵为: H ( P , Q ) = − ∑ i = 1 C y i log ⁡ ( p i ) H(P, Q) = -\sum_{i=1}^{C} y_i \log(p_i) H(P,Q)=i=1Cyilog(pi)

  • 损失函数
    在机器学习中,我们将交叉熵直接作为损失函数 L L L L = H ( P , Q ) = − ∑ i = 1 C y i log ⁡ ( p i ) L = H(P, Q) = -\sum_{i=1}^{C} y_i \log(p_i) L=H(P,Q)=i=1Cyilog(pi)

    • 解释:由于 y i y_i yi 是 one-hot 编码,只有真实类别 k k k y k = 1 y_k = 1 yk=1,其他 y i = 0 y_i = 0 yi=0。因此,损失简化为: L = − log ⁡ ( p k ) L = -\log(p_k) L=log(pk)
      • k k k:真实类别的索引。
      • 意义:损失只与模型对正确类别的预测概率 p k p_k pk 有关。 p k p_k pk 越接近 1, − log ⁡ ( p k ) -\log(p_k) log(pk) 越小,损失越低。
  • 推导过程

    1. 真实分布 P P P 是确定的(例如, [ 0 , 0 , 1 , 0 ] [0, 0, 1, 0] [0,0,1,0]),由标签 y i y_i yi 给出。
    2. 预测分布 Q Q Q 是模型通过 softmax 输出的概率分布 p i p_i pi
    3. 目标:最小化 H ( P , Q ) H(P, Q) H(P,Q),使 p i p_i pi 接近 y i y_i yi

4. 为什么使用交叉熵损失?

交叉熵损失在多分类问题中被广泛采用,有以下几个原因:

  • 与最大似然估计(MLE)的联系

    • 在统计学中,最大似然估计的目标是最大化数据的似然函数。
    • 对于一个样本,似然函数是模型正确预测的概率: L = p k L = p_k L=pk k k k 是真实类别)。
    • 对数似然: log ⁡ ( L ) = log ⁡ ( p k ) \log(L) = \log(p_k) log(L)=log(pk)
    • 最小化交叉熵 − log ⁡ ( p k ) -\log(p_k) log(pk) 等价于最大化对数似然。
    • 推导
      • 假设有 N N N 个独立样本,总对数似然为: log ⁡ L ( θ ) = ∑ n = 1 N log ⁡ ( p n , k n ) \log L(\theta) = \sum_{n=1}^{N} \log(p_{n,k_n}) logL(θ)=n=1Nlog(pn,kn)
      • 最小化平均交叉熵: L = − 1 N ∑ n = 1 N ∑ i = 1 C y n , i log ⁡ ( p n , i ) = − 1 N ∑ n = 1 N log ⁡ ( p n , k n ) L = -\frac{1}{N} \sum_{n=1}^{N} \sum_{i=1}^{C} y_{n,i} \log(p_{n,i}) = -\frac{1}{N} \sum_{n=1}^{N} \log(p_{n,k_n}) L=N1n=1Ni=1Cyn,ilog(pn,i)=N1n=1Nlog(pn,kn)
      • 因此,最小化交叉熵等价于最大化似然。
  • 梯度计算简便

    • 交叉熵损失与 softmax 函数结合时,梯度形式非常简洁: ∂ L ∂ z k = p k − y k \frac{\partial L}{\partial z_k} = p_k - y_k zkL=pkyk
    • 意义:梯度直接是预测概率与真实标签的差值,便于反向传播和参数优化。
  • 惩罚错误预测

    • p k p_k pk 很小时(即模型对正确类别的置信度低), − log ⁡ ( p k ) -\log(p_k) log(pk) 变得很大,从而对错误预测施加较大惩罚。
    • 这激励模型提高对正确类别的预测概率。

5. 总结

多分类交叉熵损失函数的由来和推导可以总结为:

  • 信息论基础:交叉熵衡量真实分布与预测分布的差异。
  • 多分类建模:真实标签用 one-hot 编码表示,预测概率通过 softmax 函数生成。
  • 损失函数 L = − ∑ i = 1 C y i log ⁡ ( p i ) L = -\sum_{i=1}^{C} y_i \log(p_i) L=i=1Cyilog(pi),对于单个样本简化为 L = − log ⁡ ( p k ) L = -\log(p_k) L=log(pk)
  • 优化联系:最小化交叉熵等价于最大化对数似然。
  • 梯度简洁:结合 softmax,梯度为 p k − y k p_k - y_k pkyk,便于梯度下降优化。

通过这一损失函数,模型能够有效学习多分类任务中的类别分布,提高分类准确性。

1. 多分类交叉熵损失函数的定义

对于多分类任务,假设有 C C C 个类别,交叉熵损失函数的公式为:

CE = − ∑ i = 1 C y i log ⁡ ( p i ) \text{CE} = -\sum_{i=1}^{C} y_i \log(p_i) CE=i=1Cyilog(pi)

  • 变量说明

    • C C C:类别总数。
    • y i y_i yi:真实标签的 one-hot 编码。如果样本属于第 k k k 类,则 y k = 1 y_k = 1 yk=1,其他 y i = 0 y_i = 0 yi=0
    • p i p_i pi:模型预测样本属于第 i i i 类的概率,通常通过 softmax 函数计算: p i = e z i ∑ j = 1 C e z j p_i = \frac{e^{z_i}}{\sum_{j=1}^{C} e^{z_j}} pi=j=1Cezjezi
      • z i = θ i T x z_i = \theta_i^T x zi=θiTx:第 i i i 类的线性输出。
      • θ i \theta_i θi:第 i i i 类对应的参数向量。
      • x x x:输入特征向量。
  • 目标:通过调整参数 θ i \theta_i θi(每个类别对应一组参数),使预测概率 p i p_i pi 尽可能接近真实标签 y i y_i yi


2. 梯度下降的基本原理

梯度下降通过以下公式更新模型参数:

θ new = θ − η ∇ L ( θ ) \theta_{\text{new}} = \theta - \eta \nabla L(\theta) θnew=θηL(θ)

  • η \eta η:学习率,控制参数更新的步长。
  • ∇ L ( θ ) \nabla L(\theta) L(θ):损失函数 L ( θ ) L(\theta) L(θ) 对参数 θ \theta θ 的梯度。

在多分类问题中,参数 θ \theta θ 通常是一个矩阵,形状为 ( C , 特征数 ) (C, \text{特征数}) (C,特征数),每行对应一个类别的参数向量。梯度 ∇ L ( θ ) \nabla L(\theta) L(θ) 也具有相同的形状。


3. 多分类交叉熵损失的梯度计算

我们需要计算损失函数 CE \text{CE} CE 对每个类别参数 θ k \theta_k θk 的梯度,即 ∂ CE ∂ θ k \frac{\partial \text{CE}}{\partial \theta_k} θkCE。由于 θ k \theta_k θk 是一个向量,梯度也是一个向量。

推导过程

使用链式法则分解梯度:

∂ CE ∂ θ k = ∂ CE ∂ z k ⋅ ∂ z k ∂ θ k \frac{\partial \text{CE}}{\partial \theta_k} = \frac{\partial \text{CE}}{\partial z_k} \cdot \frac{\partial z_k}{\partial \theta_k} θkCE=zkCEθkzk

(1) 计算 ∂ CE ∂ z k \frac{\partial \text{CE}}{\partial z_k} zkCE

损失函数为:

CE = − ∑ i = 1 C y i log ⁡ ( p i ) \text{CE} = -\sum_{i=1}^{C} y_i \log(p_i) CE=i=1Cyilog(pi)

z k z_k zk 求偏导数:

∂ CE ∂ z k = − ∑ i = 1 C y i ⋅ 1 p i ⋅ ∂ p i ∂ z k \frac{\partial \text{CE}}{\partial z_k} = -\sum_{i=1}^{C} y_i \cdot \frac{1}{p_i} \cdot \frac{\partial p_i}{\partial z_k} zkCE=i=1Cyipi1zkpi

  • 计算 ∂ p i ∂ z k \frac{\partial p_i}{\partial z_k} zkpi
    由于 p i = e z i ∑ j = 1 C e z j p_i = \frac{e^{z_i}}{\sum_{j=1}^{C} e^{z_j}} pi=j=1Cezjezi 是 softmax 函数,我们需要分别考虑 i = k i = k i=k i ≠ k i \neq k i=k 的情况:

    • i = k i = k i=k 时: ∂ p k ∂ z k = p k ( 1 − p k ) \frac{\partial p_k}{\partial z_k} = p_k (1 - p_k) zkpk=pk(1pk) (softmax 对自身变量的导数类似于 sigmoid)。
    • i ≠ k i \neq k i=k 时: ∂ p i ∂ z k = − p i p k \frac{\partial p_i}{\partial z_k} = -p_i p_k zkpi=pipk (由于 p i p_i pi 的分母包含 e z k e^{z_k} ezk,增加 z k z_k zk 会减少 p i p_i pi)。
  • 代入损失函数的导数
    ∂ p i ∂ z k \frac{\partial p_i}{\partial z_k} zkpi 代入:

    ∂ CE ∂ z k = − [ y k ⋅ 1 p k ⋅ p k ( 1 − p k ) + ∑ i ≠ k y i ⋅ 1 p i ⋅ ( − p i p k ) ] \frac{\partial \text{CE}}{\partial z_k} = -\left[ y_k \cdot \frac{1}{p_k} \cdot p_k (1 - p_k) + \sum_{i \neq k} y_i \cdot \frac{1}{p_i} \cdot (-p_i p_k) \right] zkCE= ykpk1pk(1pk)+i=kyipi1(pipk)

    化简:

    • 第一项: y k ( 1 − p k ) y_k (1 - p_k) yk(1pk)
    • 第二项: ∑ i ≠ k y i ⋅ ( − p k ) = − p k ∑ i ≠ k y i \sum_{i \neq k} y_i \cdot (-p_k) = -p_k \sum_{i \neq k} y_i i=kyi(pk)=pki=kyi

    合并: ∂ CE ∂ z k = − y k ( 1 − p k ) − p k ∑ i ≠ k y i \frac{\partial \text{CE}}{\partial z_k} = -y_k (1 - p_k) - p_k \sum_{i \neq k} y_i zkCE=yk(1pk)pki=kyi

  • 利用 one-hot 编码特性
    因为 y y y 是 one-hot 向量, ∑ i = 1 C y i = 1 \sum_{i=1}^{C} y_i = 1 i=1Cyi=1,且如果 y k = 1 y_k = 1 yk=1,则 ∑ i ≠ k y i = 0 \sum_{i \neq k} y_i = 0 i=kyi=0;如果 y k = 0 y_k = 0 yk=0,则 ∑ i ≠ k y i = 1 \sum_{i \neq k} y_i = 1 i=kyi=1。我们可以进一步化简: ∂ CE ∂ z k = − y k ( 1 − p k ) + p k ( 1 − y k ) \frac{\partial \text{CE}}{\partial z_k} = -y_k (1 - p_k) + p_k (1 - y_k) zkCE=yk(1pk)+pk(1yk) 展开: = − y k + y k p k + p k − y k p k = p k − y k = -y_k + y_k p_k + p_k - y_k p_k = p_k - y_k =yk+ykpk+pkykpk=pkyk

    结果 ∂ CE ∂ z k = p k − y k \frac{\partial \text{CE}}{\partial z_k} = p_k - y_k zkCE=pkyk

    这个结果非常简洁,表示损失对 z k z_k zk 的变化率等于预测概率与真实标签的差值。

(2) 计算 ∂ z k ∂ θ k \frac{\partial z_k}{\partial \theta_k} θkzk

线性输出定义为:

z k = θ k T x z_k = \theta_k^T x zk=θkTx

θ k \theta_k θk 求梯度:

∂ z k ∂ θ k = x \frac{\partial z_k}{\partial \theta_k} = x θkzk=x

  • 解释 z k z_k zk θ k \theta_k θk x x x 的内积,梯度是一个向量,与输入特征 x x x 相同。
(3) 合并梯度

应用链式法则:

∂ CE ∂ θ k = ∂ CE ∂ z k ⋅ ∂ z k ∂ θ k = ( p k − y k ) x \frac{\partial \text{CE}}{\partial \theta_k} = \frac{\partial \text{CE}}{\partial z_k} \cdot \frac{\partial z_k}{\partial \theta_k} = (p_k - y_k) x θkCE=zkCEθkzk=(pkyk)x

  • 完整梯度
    对于每个类别 k k k k = 1 , 2 , . . . , C k = 1, 2, ..., C k=1,2,...,C),梯度为: ∇ θ k CE = ( p k − y k ) x \nabla_{\theta_k} \text{CE} = (p_k - y_k) x θkCE=(pkyk)x

4. 梯度下降的训练过程

在多分类问题中,训练过程包括以下步骤:

  1. 前向传播

    • 对于每个类别 i i i
      • 计算线性输出 z i = θ i T x z_i = \theta_i^T x zi=θiTx
      • 通过 softmax 函数计算概率: p i = e z i ∑ j = 1 C e z j p_i = \frac{e^{z_i}}{\sum_{j=1}^{C} e^{z_j}} pi=j=1Cezjezi
  2. 计算损失

    • 使用预测概率 p i p_i pi 和真实标签 y i y_i yi 计算交叉熵损失: CE = − ∑ i = 1 C y i log ⁡ ( p i ) \text{CE} = -\sum_{i=1}^{C} y_i \log(p_i) CE=i=1Cyilog(pi)
  3. 反向传播

    • 计算损失对每个类别参数 θ k \theta_k θk 的梯度: ∇ θ k CE = ( p k − y k ) x \nabla_{\theta_k} \text{CE} = (p_k - y_k) x θkCE=(pkyk)x
  4. 更新参数

    • 对每个类别的参数 θ k \theta_k θk 进行更新: θ k = θ k − η ( p k − y k ) x \theta_k = \theta_k - \eta (p_k - y_k) x θk=θkη(pkyk)x
      • η \eta η 是学习率。
  5. 重复迭代

    • 对训练数据集重复上述步骤,直到损失收敛或达到预设的迭代次数。

5. 总结

多分类交叉熵损失函数在梯度下降中的应用过程可以概括为:

  • 损失函数 CE = − ∑ i = 1 C y i log ⁡ ( p i ) \text{CE} = -\sum_{i=1}^{C} y_i \log(p_i) CE=i=1Cyilog(pi)

  • 梯度 ∇ θ k CE = ( p k − y k ) x \nabla_{\theta_k} \text{CE} = (p_k - y_k) x θkCE=(pkyk)x

  • 参数更新 θ k = θ k − η ( p k − y k ) x \theta_k = \theta_k - \eta (p_k - y_k) x θk=θkη(pkyk)x

  • 关键点

    • 梯度 ( p k − y k ) x (p_k - y_k) x (pkyk)x 表明参数调整方向取决于预测概率 p k p_k pk 与真实标签 y k y_k yk 的差值。
    • 这种形式与二分类问题中的梯度 ( p − y ) x (p - y) x (py)x 类似,但多分类中需要为每个类别分别计算。

通过不断迭代,梯度下降使模型的预测概率分布逐渐接近真实标签分布,从而提高分类性能。

6. 交叉熵损失的梯度推导(简要说明)**

为了完整性,我们简要说明梯度计算过程:

  • 目标:计算 L = − ∑ i = 1 C y i log ⁡ ( p i ) L = -\sum_{i=1}^{C} y_i \log(p_i) L=i=1Cyilog(pi) 对线性输出 z k z_k zk 的偏导数。

  • 链式法则 ∂ L ∂ z k = ∑ i = 1 C ∂ L ∂ p i ⋅ ∂ p i ∂ z k \frac{\partial L}{\partial z_k} = \sum_{i=1}^{C} \frac{\partial L}{\partial p_i} \cdot \frac{\partial p_i}{\partial z_k} zkL=i=1CpiLzkpi

    • ∂ L ∂ p i = − y i p i \frac{\partial L}{\partial p_i} = -\frac{y_i}{p_i} piL=piyi
    • ∂ p i ∂ z k \frac{\partial p_i}{\partial z_k} zkpi
      • i = k i = k i=k ∂ p k ∂ z k = p k ( 1 − p k ) \frac{\partial p_k}{\partial z_k} = p_k (1 - p_k) zkpk=pk(1pk)
      • i ≠ k i \neq k i=k ∂ p i ∂ z k = − p i p k \frac{\partial p_i}{\partial z_k} = -p_i p_k zkpi=pipk
  • 合并 ∂ L ∂ z k = − y k p k ⋅ p k ( 1 − p k ) + ∑ i ≠ k ( − y i p i ) ⋅ ( − p i p k ) \frac{\partial L}{\partial z_k} = -\frac{y_k}{p_k} \cdot p_k (1 - p_k) + \sum_{i \neq k} (-\frac{y_i}{p_i}) \cdot (-p_i p_k) zkL=pkykpk(1pk)+i=k(piyi)(pipk) 化简后: ∂ L ∂ z k = p k − y k \frac{\partial L}{\partial z_k} = p_k - y_k zkL=pkyk

  • 对参数的梯度 ∂ L ∂ θ k = ( p k − y k ) x \frac{\partial L}{\partial \theta_k} = (p_k - y_k) x θkL=(pkyk)x

    • x x x:输入特征向量。


网站公告

今日签到

点亮在社区的每一天
去签到