【机器学习基础】对 softmax 和 cross-entropy 求导

目录

  • 符号定义
  • 对 softmax 求导
  • 对 cross-entropy 求导
  • 对 softmax 和 cross-entropy 一起求导
  • References

在论文中看到对 softmax 和 cross-entropy 的求导,一脸懵逼,故来整理整理。

以 softmax regression 为例来展示求导过程,softmax regression 可以看成一个不含隐含层的多分类神经网络,如 Fig. 1 所示。

Fig. 1 Softmax Regression.

softmax regression 的矩阵形式如 Fig. 2 所示:

Fig. 2 Matrix Form.

符号定义

如 Fig. 1 所示,\(\bm x = [x_1, x_2, x_3]^{\top}\) 表示 softmax regression 的输入,\(\bm y = [y_1, y_2, y_3]^{\top}\) 表示 softmax regression 的输出,\(\bm W\) 为权重,\(\bm b = [b_1, b_2, b_3]^{\top}\) 为偏置。

令 Fig. 2 中 softmax function 的输入为 \(z_i = W_{i, 1}x_1 + W_{i, 2}x_2 + W_{i, 3}x_3 + b_i = W_{i}\bm x + b_i\),其中 \(i= 1, 2, 3\),\(W_{i}\) 表示权重矩阵 \(\bm W\) 的第 \(i\) 行;softmax function 的输出就是整个网络的输出,即 \(\bm y\)。

Note: Fig. 1 和 Fig.2 中权重 \(W_{i, j}\) 表示第 \(i\) 个输出和第 \(j\) 个输入之间的联系,和一般的记法(即 \(W_{i, j}\) 表示第 \(i\) 个输入和第 \(j\) 个输出之间权重)相差一个转置。

用 \(m\) 表示输出的类别数,本文中 \(m = 3\)。

Note: softmax regression 指的是整个网络,softmax function 仅仅指的是激活函数。本文默认 softmax 代指激活函数,当表示整个网络时会明确说明 softmax regression。

对 softmax 求导

softmax 函数的表达式为:
\[
y_i = \frac{e^{z_i}}{\sum_{t = 1}^m e^{z_t}}
\tag{1}
\]

其中 \(i= 1, 2, 3\)。由式(1)可知,\(y_i\) 与 softmax function 所有的输入 \(z_j, j = 1,2,3.\) 都有关。
softmax function 的输出对其输入求偏导:
\[
\frac{\partial y_i}{\partial z_j}
= \frac{\partial \frac{e^{z_i}}{\sum_{t = 1}^m e^{z_t}}}{\partial z_j}
\tag{2}
\]

需要对式(2)中 \(i = j\) 和 \(i \not = j\) 的情况进行分别讨论。因为式(1)分子中仅含第 \(i\) 项,式(2)中如果 \(i = j\),那么导数 \(\frac{\partial e^{z_i}}{\partial z_j} = e^{z_i}\),不为 0;如果 \(i \not = j\),那导数 \(\frac{\partial e^{z_i}}{\partial z_j} = 0\)。

  • \(i = j\),则式(2)为:
    \[
    \begin{split}
    \frac{\partial y_i}{\partial z_j}
    &= \frac{\partial \frac{e^{z_i}}{\sum_{t = 1}^m e^{z_t}}}{\partial z_j}
    \\ &= \frac{e^{z_i} \cdot \sum_{t = 1}^m e^{z_t} - e^{z_i} \cdot e^{z_j} }{(\sum_{t = 1}^m e^{z_t})^2}
    \\ &= \frac{e^{z_i}}{\sum_{t = 1}^m e^{z_t}} - \frac{e^{z_i}}{\sum_{t = 1}^m e^{z_t}} \cdot \frac{e^{z_j}}{\sum_{t = 1}^m e^{z_t}}
    \\ &=y_i(1 - y_j)
    \end{split}
    \tag{3}
    \]

当然,式(3)也可以写成 \(y_i(1 - y_i)\) 或者 \(y_j(1 - y_j)\),因为这里 \(i = j\)。

  • \(i \not = j\),则式(2)为:
    \[
    \begin{split}
    \frac{\partial y_i}{\partial z_j}
    &= \frac{\partial \frac{e^{z_i}}{\sum_{t = 1}^m e^{z_t}}}{\partial z_j}
    \\ &= \frac{0\cdot \sum_{t = 1}^m e^{z_t} - e^{z_i} \cdot e^{z_j} }{(\sum_{t = 1}^m e^{z_t})^2}
    \\ &= - \frac{e^{z_i}}{\sum_{t = 1}^m e^{z_t}} \cdot \frac{e^{z_j}}{\sum_{t = 1}^m e^{z_t}}
    \\ &= -y_iy_j
    \end{split}
    \tag{4}
    \]

对 cross-entropy 求导

令 \(\bm {\hat y} = [\hat{y}_1, \hat{y}_2, \hat{y}_3]^{\top}\) 为输入 \(\bm x\) 真实类别的 one-hot encoding。

cross entropy 的定义如下:
\[
H(\bm {\hat y}, \bm y)
= - \bm {\hat y}^{\top} \log \bm y
= - \sum_{t = 1}^m \hat{y}_t\log y_t
\tag{5}
\]

对 cross entropy 求偏导:(\(\log\) 底数为 \(e\))
\[
\frac{\partial H(\bm {\hat y}, \bm y) }{\partial y_i}
= \frac{\partial [- \sum_{t = 1}^m \hat{y}_t\log y_t ]}{\partial y_i}
= - \frac{\hat{y}_i}{y_i}
\tag{6}
\]

\(\bm {\hat y}\) 是确定的值,可以理解为样本的真实 one-hot 标签,不受模型预测标签 \(\bm y\) 的影响。

对 softmax 和 cross-entropy 一起求导

\[
\begin{split}
\frac{\partial H(\bm {\hat y}, \bm y) }{\partial z_j}
&= \sum_{i = 1}^{m} \frac{\partial H(\bm {\hat y}, \bm y) }{\partial y_i} \frac{\partial y_i }{\partial z_j}
\\ &= \sum_{i = 1}^{m} -\frac{\hat{y}_i}{y_i} \cdot \frac{\partial y_i }{\partial z_j}
\\ &= \left(-\frac{\hat{y}_i}{y_i} \cdot \frac{\partial y_i }{\partial z_j}\right )_{i = j} + \sum_{i = 1 , i \not = j}^{m} -\frac{\hat{y}_i}{y_i} \cdot \frac{\partial y_i }{\partial z_j}
\\ &= -\frac{\hat{y}_j}{y_i} \cdot y_i(1-y_j) + \sum_{i = 1 , i \not = j}^{m} -\frac{\hat{y}_i}{y_i} \cdot -y_iy_j
\\ &= - \hat{y}_j + \hat{y}_jy_j + \sum_{i = 1 , i \not = j}^{m} \hat{y}_iy_j
\\ & = - \hat{y}_j + y_j\sum_{i = 1}^{m} \hat{y}_i
\\ &= y_j - \hat{y}_j
\end{split}
\tag{7}
\]

交叉熵 loss function 对 softmax function 输入 \(z_j\) 的求导结果相当简单,在 tensorflow 中,softmax 和 cross entropy 也合并成了一个函数,tf.nn.softmax_cross_entropy_with_logits,从导数求解方面看,也是有道理的。

在实际使用时,推荐使用 tensorflow 中实现的 API 去实现 softmax 和 cross entropy,而不是自己写,原因如下:

  • 都已经有 API 了,干嘛还得自己写,懒就是最好的理由;
  • softmax 因为计算了 exp(x),很容易就溢出了,比如 np.exp(800) = inf,需要做一些缩放,而 tensorflow 会帮我们处理这种数值不稳定的问题。

References

TensorFlow MNIST Dataset and Softmax Regression - Data Flair
链式法则 - 维基百科
Softmax函数与交叉熵 - 知乎

原文地址:https://www.cnblogs.com/wuliytTaotao/p/10787510.html

时间: 2024-07-29 12:35:29

【机器学习基础】对 softmax 和 cross-entropy 求导的相关文章

softmax交叉熵损失函数求导

来源:https://www.jianshu.com/p/c02a1fbffad6 简单易懂的softmax交叉熵损失函数求导 来写一个softmax求导的推导过程,不仅可以给自己理清思路,还可以造福大众,岂不美哉~ softmax经常被添加在分类任务的神经网络中的输出层,神经网络的反向传播中关键的步骤就是求导,从这个过程也可以更深刻地理解反向传播的过程,还可以对梯度传播的问题有更多的思考. softmax 函数 softmax(柔性最大值)函数,一般在神经网络中, softmax可以作为分类任

卷积神经网络系列之softmax,softmax loss和cross entropy的讲解

我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个CNN网络主要包含卷积层,池化层(pooling),全连接层,损失层等.虽然现在已经开源了很多深度学习框架(比如MxNet,Caffe等),训练一个模型变得非常简单,但是你对这些层具体是怎么实现的了解吗?你对softmax,softmax loss,cross entropy了解吗?相信很多人不一定清楚.虽然网上的资料很多,但是质量参差不齐,常常看得眼花缭乱.为了让大家少走弯路,特地整理了下这些知识点的来龙去脉,希望不仅帮助自

机器学习 —— 基础整理(五):线性回归;二项Logistic回归;Softmax回归;广义线性模型

本文简单整理了以下内容: (一)线性回归 (二)二分类:二项Logistic回归 (三)多分类:Softmax回归 (四)广义线性模型 二项Logistic回归是我去年入门机器学习时学的第一个模型,我觉得这个模型很适合用来入门(但是必须注意这个模型有很多很多很多很多可以展开的地方).比较有意思的是那时候还不会矩阵微积分,推导梯度时还是把矩阵全都展开求的(牛顿法要用的二阶梯度也是)... 下面的文字中,"Logistic回归"都表示用于二分类的二项Logistic回归. 首先约定一下记号

Deep Learning基础--CNN的反向求导及练习

前言: CNN作为DL中最成功的模型之一,有必要对其更进一步研究它.虽然在前面的博文Stacked CNN简单介绍中有大概介绍过CNN的使用,不过那是有个前提的:CNN中的参数必须已提前学习好.而本文的主要目的是介绍CNN参数在使用bp算法时该怎么训练,毕竟CNN中有卷积层和下采样层,虽然和MLP的bp算法本质上相同,但形式上还是有些区别的,很显然在完成CNN反向传播前了解bp算法是必须的.本文的实验部分是参考斯坦福UFLDL新教程UFLDL:Exercise: Convolutional Ne

最大似然估计 (Maximum Likelihood Estimation), 交叉熵 (Cross Entropy) 与深度神经网络

最近在看深度学习的"花书" (也就是Ian Goodfellow那本了),第五章机器学习基础部分的解释很精华,对比PRML少了很多复杂的推理,比较适合闲暇的时候翻开看看.今天准备写一写很多童鞋们w未必完全理解的最大似然估计的部分. 单纯从原理上来说,最大似然估计并不是一个非常难以理解的东西.最大似然估计不过就是评估模型好坏的方式,它是很多种不同评估方式中的一种.未来准备写一写最大似然估计与它的好朋友们,比如说贝叶斯估计 (Beyasian Estimation), 最大后验估计(Max

【机器学习基础】Logistic回归基础

soft binary classification Logistics回归模型要解决的是分类问题,在之前的二元分类问题中,我们将数据分成正例和负例,但是像PLA算法一样,用单位阶跃函数来处理的这种瞬间跳跃的过程有时很难处理.于是,我们希望能得到正例的概率值是多少. logistic regression的假设 我们在PLA和线性回归算法中都用数据的加权来计算一个分数s,在logistic回归中,我们用sigmoid函数来将这个分数s转化成0到1的概率值. 所以,用下面的h(x)来表示一个假设,

数据挖掘、机器学习基础算法

Basis(基础): MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方),LSM(Least Square Methods 最小二乘法),MLE(MaximumLikelihood Estimation最大似然估计),QP(Quadratic Programming 二次规划), CP(Conditional Probability条件概率),JP(Joint Probability 联合概率),MP(Marginal Probabili

【机器学习基础】混合和装袋

融合模型(Aggregation Model) 如果我们已经得到了一些特征或者假设,它们和我们做机器学习的目标有若干的一致性的话,我们可以将这些假设综合起来,让预测效果变得更好,这样的模型被称为融合模型. 融合模型是通过混合(mix)和组合(combine)一些假设的方式,得到更好的预测结果. 下面列举了四种不同的混合组合方式,并给出了数学表示形式: 当有多个假设时,我们选择检验误差最小的假设作为我们最信任的目标函数: 我们现在有多个假设,我们可以给每个假设一个投票的权利,综合所有假设的投票结果

cross entropy与logistic regression

维基上corss entropy的一部分 知乎上也有一个类似问题:https://www.zhihu.com/question/36307214 cross entropy有二分类和多分类的形式,分别对应sigmoid和softmax