目录

 

1.softmax

2.softmax求导过程:

3. softmax结合交叉熵


1.softmax

softmax多用于多分类问题,它会把网络的输出变成概率,公式如下:

                                                        

softmax一般会和交叉熵结合在一起,因为交叉熵的输入是概率,而softmax就可以把网络的输出变成对应等比例的概率。

 

2.softmax求导过程:

假设求导时,有如下x:

                   

s 为网络输出,第一个输出节点为S_{1},第二个为S_{2},以此类推第 i 个输出节点为S_{i},同理 x 就是网络的输入节点了,第 j 个输入节点为X_{j} 。

这时候要分两种情况,即 i = j 和 i不等于j的情况。

举例,例如求 S_{1}X_{1}的导数:(相当于与 i = j情况)

但是由于从softmax公式的分母可知,分母包括了e^{x1}e^{x2}​​​​​​​,……,e^{xj}​​​​​​​,所以任何一个输出节点 S_{i}都要对所有x 进行求导。

所以就有了 i 不等j 这种情况,如:求 s1 对 x2 的导数:

所以可以得到,i=j 时 和 i 不等于 j 时的 softmax导数如下:

                              

3. softmax结合交叉熵

由于交叉熵的输入是概率,因此经常和sigmoid或softmax结合在一起。一般情况下,在神经网络中,最后一个输出层的节点个数与分类任务的目标数相等。假设最后的节点数为N,那么对于每一个样例,神经网络可以得到一个N维的数组作为输出结果,数组中每一个维度会对应一个类别。在最理想的情况下,如果一个样本属于k,那么这个类别所对应的的输出节点的输出值应该为1,而其他节点的输出都为0,即[0,0,1,0,….0,0],这个数组也就是样本的Label,是神经网络最期望的输出结果,交叉熵就是用来判定实际的输出与期望的输出的接近程度!

交叉熵公式:

                             Loss=-\sum_{i}^{ }y_{i}\l n(S_{i})

如下图所示,若Loss对Z点求导,则:

                    \frac{\partial Loss}{\partial Z_{j}}=-\sum_{i}^{ }\frac{\partial (y_{i}*ln(S_{i}))}{\partial S_{i}}*\frac{\partial S_{i}}{\partial Z_{j}} =-\sum_{i}^{ }\frac{y_{i}}{S_{i}}*\frac{\partial S_{i}}{\partial Z_{j}}=-\frac{y_{j}}{S_{j}}*S_{j}(1-S_{j})+\sum_{i\neq j}^{ }\frac{y_{i}}{S_{i}}*S_{i}S_{j}=-y_{i}+\sum_{i}^{ }y_{i}S_{j}=S_{j}-y_{i}

解释下上面的式子,由softmax的公式可知,输出节点Si 是由所有Z组成的,所以若Loss对某个Z,如Zi求导的话,则需要对每个输出节点S进行求导。可以从求导的结果看出:用交叉熵对网络softmax前的输出求导,其结果等于softmax后的结果减去真实标签label。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐