文章目录

逻辑回归多分类Softmax回归的交叉熵梯度推导

发布于 2026-07-17 08:50:40 · 浏览 42 次 · 评论 0 条

逻辑回归多分类:Softmax回归的交叉熵梯度推导

本指南将一步步推导多分类逻辑回归(即Softmax回归)中,交叉熵损失函数关于模型参数的梯度。理解这个推导过程,是掌握该算法并实现其反向传播的核心。


1. 定义问题与模型

首先,明确我们面对的是一个 $K$ 分类 问题。

  1. 定义符号

    • 输入特征:一个样本的特征向量为 $x$,为简化推导,假设其为列向量。
    • 模型参数:对于每个类别 $k$($k=1, 2, \dots, K$),都有一个权重向量 $w_k$ 和一个偏置项 $b_k$。为方便,通常将偏置并入权重向量,即令 $x$ 的首元素为 $1$,对应的 $w_k$ 包含 $b_k$。下文统一用 $w_k$ 表示类别 $k$ 的参数向量。
    • 模型输出:模型首先计算每个类别的“原始得分”(logits):
      $$z_k = w_k^T x$$
      其中 $w_k^T x$ 表示参数向量 $w_k$ 与特征向量 $x$ 的内积。
  2. 定义Softmax函数
    Softmax函数将 $K$ 个原始得分 $\{z_1, z_2, \dots, z_K\}$ 转换成一个概率分布 $\{p_1, p_2, \dots, p_K\}$,其中 $p_k$ 表示样本属于类别 $k$ 的预测概率。
    计算方法
    $$p_k = \frac{e^{z_k}}{\sum_{j=1}^{K} e^{z_j}}$$
    关键特性:所有 $p_k$ 都大于 $0$,且它们的和为 $1$。


2. 定义损失函数:交叉熵

对于一个真实标签为 $y$ 的样本($y$ 是类别索引,如 $y=3$ 表示属于第3类),我们使用 交叉熵损失 来衡量预测分布与真实标签之间的差异。

  1. 构建真实标签的One-Hot向量
    真实标签 $y$ 可以表示为一个长度为 $K$ 的向量 $t$,其第 $y$ 个元素为 $1$,其余为 $0$。例如,若 $y=3$,则 $t = [0, 0, 1, 0, \dots]^T$。

  2. 定义交叉熵损失函数 $L$
    $$L = - \sum_{k=1}^{K} t_k \ln(p_k)$$
    由于 $t_k$ 仅在 $k=y$ 时为 $1$,否则为 $0$,上式简化为:
    $$L = - \ln(p_y)$$
    目标:最小化损失 $L$,即最大化模型预测正确类别的概率 $p_y$。


3. 推导梯度:从损失到模型输出

我们的最终目标是得到损失 $L$ 关于每个类别参数向量 $w_k$ 的梯度 $\frac{\partial L}{\partial w_k}$。这需要使用链式法则。

第一步:计算损失 $L$ 关于原始得分 $z_k$ 的偏导数 $\frac{\partial L}{\partial z_k}$。

  1. 回顾链式法则
    $$\frac{\partial L}{\partial z_k} = \frac{\partial L}{\partial p_y} \cdot \frac{\partial p_y}{\partial z_k}$$
    但这里 $p_y$ 只是 $p_1, \dots, p_K$ 中的一个,而每一个 $p_k$ 都依赖于所有的 $z_j$。因此,更通用的链式法则是:
    $$\frac{\partial L}{\partial z_k} = \sum_{m=1}^{K} \frac{\partial L}{\partial p_m} \cdot \frac{\partial p_m}{\partial z_k}$$

  2. 计算 $\frac{\partial L}{\partial p_m}$:
    由 $L = - \ln(p_y)$ 可知:
    $$\frac{\partial L}{\partial p_m} = \begin{cases} -\frac{1}{p_y} & \text{如果 } m = y \\ 0 & \text{如果 } m \neq y \end{cases}$$
    简写为 $\frac{\partial L}{\partial p_m} = -\frac{1}{p_y} \delta_{my}$,其中 $\delta_{my}$ 是克罗内克δ函数,当 $m=y$ 时为 $1$,否则为 $0$。

  3. 计算 $\frac{\partial p_m}{\partial z_k}$:
    这是推导的核心。需要分两种情况讨论:$m=k$ 和 $m \neq k$。

    • 情况一:$m = k$
      $$p_k = \frac{e^{z_k}}{\sum_{j=1}^{K} e^{z_j}}$$
      使用商的求导法则:若 $f(z) = \frac{g(z)}{h(z)}$,则 $f'(z) = \frac{g'(z)h(z) - g(z)h'(z)}{[h(z)]^2}$。
      这里 $g(z_k) = e^{z_k}$,$h(z_k) = \sum_{j=1}^{K} e^{z_j}$。
      注意 $h$ 也依赖于 $z_k$,所以 $\frac{\partial h}{\partial z_k} = e^{z_k}$。
      因此:
      $$\frac{\partial p_k}{\partial z_k} = \frac{e^{z_k} \cdot \sum_{j=1}^{K} e^{z_j} - e^{z_k} \cdot e^{z_k}}{(\sum_{j=1}^{K} e^{z_j})^2} = \frac{e^{z_k}}{\sum_{j=1}^{K} e^{z_j}} - \frac{e^{z_k}}{\sum_{j=1}^{K} e^{z_j}} \cdot \frac{e^{z_k}}{\sum_{j=1}^{K} e^{z_j}} = p_k - p_k \cdot p_k = p_k(1-p_k)$$
    • 情况二:$m \neq k$
      此时,分子 $e^{z_m}$ 不依赖于 $z_k$,分母 $h(z_k) = \sum_{j=1}^{K} e^{z_j}$ 仍然依赖于 $z_k$。
      所以:
      $$\frac{\partial p_m}{\partial z_k} = \frac{0 \cdot \sum_{j=1}^{K} e^{z_j} - e^{z_m} \cdot e^{z_k}}{(\sum_{j=1}^{K} e^{z_j})^2} = - \frac{e^{z_m}}{\sum_{j=1}^{K} e^{z_j}} \cdot \frac{e^{z_k}}{\sum_{j=1}^{K} e^{z_j}} = - p_m p_k$$
      综合两种情况
      $$\frac{\partial p_m}{\partial z_k} = p_k (\delta_{mk} - p_m)$$
  4. 合并计算 $\frac{\partial L}{\partial z_k}$:
    将第2步和第3步的结果代入链式法则公式:
    $$\frac{\partial L}{\partial z_k} = \sum_{m=1}^{K} \left(-\frac{1}{p_y} \delta_{my}\right) \cdot \left[ p_k (\delta_{mk} - p_m) \right]$$
    求和只在 $m=y$ 时项非零:
    $$\frac{\partial L}{\partial z_k} = \left(-\frac{1}{p_y}\right) \cdot \left[ p_k (\delta_{yk} - p_y) \right] = -\frac{p_k}{p_y} (\delta_{yk} - p_y) = p_k - \delta_{yk}$$
    最终得到一个极其简洁的表达式
    $$\frac{\partial L}{\partial z_k} = p_k - t_k$$
    其中 $t_k$ 就是真实标签的One-Hot向量中的元素(即 $t_y=1$,其他为 $0$)。这个结果非常直观:损失关于类别 $k$ 得分的梯度,就是模型对类别 $k$ 的预测概率 $p_k$ 减去它是否为真实类别的指示值 $t_k$。


4. 推导梯度:从模型输出到模型参数

第二步:计算原始得分 $z_k$ 关于参数 $w_k$ 的梯度

  1. 回顾:$z_k = w_k^T x$。
  2. 计算梯度
    这是一个简单的线性函数。损失 $L$ 关于 $w_k$ 的梯度,等于损失 $L$ 关于 $z_k$ 的梯度乘以 $z_k$ 关于 $w_k$ 的梯度。
    $$\frac{\partial z_k}{\partial w_k} = x$$
    注意:$z_k$ 只依赖于它自己对应的参数 $w_k$,与其他 $w_j$ ($j \neq k$) 无关。

5. 最终梯度公式

结合前两步,得到最终梯度

  1. 应用链式法则
    $$\frac{\partial L}{\partial w_k} = \frac{\partial L}{\partial z_k} \cdot \frac{\partial z_k}{\partial w_k}$$
  2. 代入结果
    $$\frac{\partial L}{\partial w_k} = (p_k - t_k) \cdot x$$
  3. 推广到整个数据集
    如果对包含 $N$ 个样本的数据集计算平均损失,那么总梯度是每个样本梯度的平均值:
    $$\frac{\partial L_{total}}{\partial w_k} = \frac{1}{N} \sum_{i=1}^{N} (p_k^{(i)} - t_k^{(i)}) x^{(i)}$$
    其中 $p_k^{(i)}$ 和 $t_k^{(i)}$ 分别是第 $i$ 个样本对于类别 $k$ 的预测概率和真实标签值,$x^{(i)}$ 是第 $i$ 个样本的特征向量。

梯度计算完成。这个形式与二分类逻辑回归的梯度形式高度统一,便于记忆和实现。在实际编程中,你会先计算所有样本的预测概率矩阵 $P$ 和真实标签矩阵 $T$,然后通过矩阵运算高效地计算出所有 $w_k$ 的梯度。

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文