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(知足几率的性质),那么咱们就能够将它理解成几率,在最后选取输出结点的时候,咱们就能够选取几率最大(也就是值对应最大的)结点,做为咱们的预测目标。spa
当咱们对分类的Loss进行改进的时候,咱们要经过梯度降低,每次优化一个step大小的梯度,这个时候咱们就要求Loss对每一个权重矩阵的偏导,而后应用链式法则。那么这个过程的第一步,就是对softmax求导传回去,不用着急,我后面会举例子很是详细的说明。在这个过程当中,你会发现用了softmax函数以后,梯度求导过程很是很是方便。.net
下面咱们举出一个简单例子。blog
根据图片网络所示,咱们能获得下面公式:图片
z4 = w41*o1+w42*o2+w43*o3it
z5 = w51*o1+w52*o2+w53*o3im
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