逻辑回归多分类:Softmax回归的交叉熵梯度推导
本指南将一步步推导多分类逻辑回归(即Softmax回归)中,交叉熵损失函数关于模型参数的梯度。理解这个推导过程,是掌握该算法并实现其反向传播的核心。
1. 定义问题与模型
首先,明确我们面对的是一个 $K$ 分类 问题。
-
定义符号:
- 输入特征:一个样本的特征向量为 $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$ 的内积。
-
定义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类),我们使用 交叉熵损失 来衡量预测分布与真实标签之间的差异。
-
构建真实标签的One-Hot向量:
真实标签 $y$ 可以表示为一个长度为 $K$ 的向量 $t$,其第 $y$ 个元素为 $1$,其余为 $0$。例如,若 $y=3$,则 $t = [0, 0, 1, 0, \dots]^T$。 -
定义交叉熵损失函数 $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}$。
-
回顾链式法则:
$$\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}$$ -
计算 $\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$。 -
计算 $\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)$$
- 情况一:$m = k$
-
合并计算 $\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$ 的梯度。
- 回顾:$z_k = w_k^T x$。
- 计算梯度:
这是一个简单的线性函数。损失 $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. 最终梯度公式
结合前两步,得到最终梯度。
- 应用链式法则:
$$\frac{\partial L}{\partial w_k} = \frac{\partial L}{\partial z_k} \cdot \frac{\partial z_k}{\partial w_k}$$ - 代入结果:
$$\frac{\partial L}{\partial w_k} = (p_k - t_k) \cdot x$$ - 推广到整个数据集:
如果对包含 $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$ 的梯度。

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