Deep Learning基础--Softmax求导过程
一、softmax函数
softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类!
假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素的softmax值就是:
$$ S_i = \frac{e^j }{ \sum\nolimits_{j} e^j} \tag{1}$$
更形象的如下图表示:
softmax直白来说就是将原来输出是3,1,-3通过softmax函数一作用,就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标。
二、softmax相关求导
当我们对分类的Loss进行改进的时候,我们要通过梯度下降,每次优化一个step大小的梯度,这个时候我们就要求Loss对每个权重矩阵的偏导,然后应用链式法则。那么这个过程的第一步,就是对softmax求导传回去,不用着急,我后面会举例子非常详细的说明。在这个过程中,你会发现用了softmax函数之后,梯度求导过程非常非常方便。
下面我们举出一个简单例子。
根据图片网络所示,我们能得到下面公式:
z4 = w41*o1+w42*o2+w43*o3
z5 = w51*o1+w52*o2+w53*o3
z6 = w61*o1+w62*o2+w63*o3
z4,z5,z6分别代表结点4,5,6的输出,01,02,03代表是结点1,2,3往后传的输入.
那么我们可以经过softmax函数得到:
$$a_4 = \frac{e^{z_4}}{e^{z_4} + e^{z_5} + e^{z_6}}, a_5 = \frac{e^{z_5}}{e^{z_4} + e^{z_5} + e^{z_6}}, a_6 = \frac{e^{z_6}}{e^{z_4} + e^{z_5} + e^{z_6}} \tag{2}$$
经过上面的形式化后,接下来我们选用交叉熵作为损失函数来推导Softmax的偏导。交叉熵的形式为:
$$ Loss = -\sum_{i} y_i \cdot \ln a_i \tag{3}$$
其中$y$代表我们的真实值,$a$代表我们softmax求出的值。$i$代表的是输出结点的标号。
为了形式化说明,我这里认为训练数据的真实输出为第$j$个为1,其它均为0,那么Loss就变成了$Loss = - y_j \cdot \ln a_j = - \ln a_j$,累和已经去掉,现在我们开始求导数。
参数的形式在该例子中,总共分为w41,w42,w43,w51,w52,w53,w61,w62,w63.这些,那么比如我要求出w41,w42,w43的偏导,就需要将Loss函数求偏导传到结点4,然后再利用链式法则继续求导即可。
举个例子此时求w41的偏导为:
$$
\frac{\partial Loss}{\partial w_{41}} = \frac{\partial Loss}{\partial a_{4}} \cdot \frac{\partial a_4}{\partial z_{4}} \cdot \frac{\partial z_4}{\partial w_{41}}
\\= - \frac{1}{a_4} \cdot \frac{\partial a_4}{\partial z_{4}} \cdot 1 \tag{4}
$$
上式中,只要求出$\frac{\partial a_4}{\partial z_{4}}$就可以完成推导。这里分为两种情况:
1. 当$j=i$时:
$$ \frac{\partial a_j}{\partial z_i} = \frac{\partial}{\partial z_i}(\frac{e^{z_j}}{\sum_k e^{z_k}})
\\=\frac{(e^{z_j})' \cdot \sum_k e^{z_k} - e^{z_j} \cdot e^{z_j}}{(\sum_k e^{z_k})^2}
\\=\frac{e^{z_j}}{\sum_k e^{z_k}} - \frac{e^{z_j}}{\sum_k e^{z_k}} \cdot \frac{e^{z_j}}{\sum_k e^{z_k}}
\\=a_j \cdot (1-a_j)
\tag{5} $$
将(5)式带入(4)中,得到$ \frac{\partial Loss}{\partial w_{j}} = -\frac{1}{a_j} \cdot a_j \cdot (1-a_j) = a_j - 1$。
2. 当$j \neq i$时:
$$ \frac{\partial a_j}{\partial z_i} = \frac{\partial}{\partial z_i}(\frac{e^{z_j}}{\sum_k e^{z_k}})
\\=\frac{0 \cdot \sum_k e^{z_k} - e^{z_j} \cdot e^{z_i}}{(\sum_k e^{z_k})^2}
\\=- \frac{e^{z_j}}{\sum_k e^{z_k}} \cdot \frac{e^{z_i}}{\sum_k e^{z_k}}
\\=-a_j \cdot a_i
\tag{6} $$
将(6)式带入(4)中,得到$ \frac{\partial Loss}{\partial w_{j}} = -\frac{1}{a_j} \cdot -a_j \cdot a_i = a_i$。
OK,到此我们已经完全推导完Softmax部分的反向传播。
参考:
1. https://zhuanlan.zhihu.com/p/25723112
2. https://blog.csdn.net/u014313009/article/details/51045303
转载于:https://www.cnblogs.com/shixiangwan/p/9285233.html
Deep Learning基础--Softmax求导过程相关推荐
- Logistic回归-代价函数求导过程 | 内含数学相关基础
转载自:https://blog.csdn.net/JUNJUN_ZHAO/article/details/78564557 相关函数求导公式 先复习回顾下一些数学基础,帮助推导过程可以更好的理解.下 ...
- 激活函数汇总,包含公式、求导过程以及numpy实现,妥妥的万字干货
文章目录 1.激活函数的实现 1.1 sigmoid 1.1.1 函数 1.1.2 导数 1.1.3 代码实现 1.2 softmax 1.2.1 函数 1.2.2 导数 1.2.3 代码实现 1.3 ...
- sigmoid函数的求导过程
sigmoid函数的求导过程涉及"链式求导"和"自然指数"的求导.
- 数学----常见函数求导过程
常见函数求导过程 前言 看了之前的导数,有了一个结论,一般导函数的表示如下: f ′ ( t ) = lim Δ t → 0 f ( t + Δ t ) − f ( t ) Δ t f'(t) = ...
- 对 RNN 中 BPTT 求导过程的解析尝试
(转载一次对 RNN 中 BPTT 求导过程的解析尝试 - 知乎 其中关于雅可比的内容 参考: 学习笔记之--Jacobian matrix(雅可比矩阵)学习笔记之--Jacobian matrix( ...
- [损失函数]Softmax求导
原文链接: https://blog.csdn.net/u014380165/article/details/79632950 我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个C ...
- 逻辑回归函数求导过程
基础公式 逻辑回归函数形式为: 它在二维坐标系中的表现形式是这样的: 因为其外形类似S形状,因而又称为Sigmoid函数.sigmoid,英/'sɪgmɒɪd/n. 乙状结肠(等于sigmoidal) ...
- 为什么使用负采样技术(附详细求导过程)
word2vec的初心是什么,为什么使用负采样技术.后面看论文过程经常遇到负采样,如mepath2vec等等,对这个知识点不了解清楚,论文很多精华部分理解就会有偏差了. 看了很多博客和B站视频讲解,还 ...
- arctanx麦克劳林公式推导过程_三角函数的求导过程
上高中的同学一定会很疑惑三角函数的求导公式是怎么推导出来的,毕竟推导过程书本上并没有讲. 如上图,这个推导过程是许多同学都会推导的,但是推导过程仍有漏洞,比如(sinx/x)趋近于0的极限还未证明.三 ...
最新文章
- 怎样把字符1变成数字1
- mysql创建用户并授登录权限_mysql创建用户并授予权限
- 什么是网络可见性?—Vecloud微云
- MySQL为表添加外键约束
- 能源项目xml文件 -- app-context.xml
- nodejs_NodeJS历险记
- java语言中json转换,JSON字符串和JAVA语言对象的相互转换教程
- mfc动态改变clip风格_echarts动态滑动平均滤波
- JavaScript中的私有函数;Javascript构造函数的私有方法中访问其属性和公有方法
- 【VS2010学习笔记】【函数学习】一(MFC+OpenCV2.4.7读取摄像头之WM_TIMER消息处理函数的添加问题)
- java 数据结构与算法_数据结构与算法—常用数据结构及其Java实现
- 编辑邮件时去掉回车光标跟随
- UTF-8、BOM、feff的问题
- 乐符识别matlab,基于DPP的自动音符切分识别研究
- Win10系统中没有Microsoft Store(微软商城)解决方法【详细步骤】
- php国际象棋棋盘,php趣味编程 - php输出国际象棋棋盘 - 小徐
- 来自#Devoxx 2014的WebSocket螺母和螺栓的幻灯片
- Java实现 稀疏矩阵乘积
- 为什么 UDP 有时比 TCP 更有优势
- TensorFlow 真正从零开始,TensorFlow详细安装入门图文教程