Softmax从小白到深度理解

大家在学习深度学习时,肯定会遇到softmax这个知识点,初学者大都一知半解,没有理解透彻,很多文章直接讲述softmax公式及求导,忽略了其中的因果缘由。初学者通过此文可以梳理知识结构,高手可直接查看公式推导来巩固知识。

softmax公式及理解

softmax主要用于深度学习多分类,作用是将输出层的数值映射为概率,且所有输出节点概率累加为1。为什么要把数值转为概率呢?因为多分类模型中,输出值为概率更利于反向推导和模型的迭代(比如minist手写数字识别,对应的是0-9的概率,概率与概率可以更好的比较,数值与概率无法计算差距,从而也无法反向推导)。

接下来我们看一下softmax的公式:

Softmax从小白到深度理解_第1张图片

如下图所示,(3,1,-3)经过softmax计算后变为概率(0.88,0.12,0),大家可以亲自计算一下,充分理解softmax公式。

Softmax从小白到深度理解_第2张图片

求概率为什么要用e的指数?

Softmax从小白到深度理解_第3张图片

通过e的指数图像我们可以看到:1、可以把输入为负数的值转为正数;2、指数函数曲线呈递增趋势,斜率逐渐增大,这样x轴上很小的变化反映到y轴可以看到很大的变化,所以它可以将差距大的值拉的更大。ps:其实不一定是e的指数,还有很多其他数的指数也同样适用,这里为了方便后面的计算,选用e。

补充一个知识点,softmax中,当输入值非常大时,softmax会更大,可能会溢出,所以在TensorFlow中,一般将softmax与交叉熵函数统一实现,因为TensorFlow会启用一些优化机制。

为什么softmax求导如此重要

深度学习的核心就是误差逆传播(error BackPropagation,简称BP)算法,算法中最核心的是损失函数对权重和阈值求导,在这里我们用经常与softmax使用的交叉熵损失函数为例,进行推导:

交叉熵损失函数公式(交叉熵函数中的对数,有的以e为底,有的以2为底,此处是以e为底)如下,其中y_{i}表示第i维度的实际值,s_{i}表示第i维度的预测值:

Softmax从小白到深度理解_第4张图片

这里我们用表示z_{i}的输入,v表示前一层节点的数量,表示前一层第u个节点到z_{i}节点的权重,表示前一层第u个节点到z_{i}节点的阈值。我们的目标是求z_{i}节点对前一层第q个节点权重的偏导数)和z_{i}节点对前一层第q个节点阈值的偏导数),可推导为

Softmax从小白到深度理解_第5张图片

Softmax从小白到深度理解_第6张图片

根据可以推导出为0或x,为0或1,所以当前核心问题转换为求,根据softmax公式(公式1)和 交叉熵公式(公式2),我们可以把转换为:

Softmax从小白到深度理解_第7张图片

利用交叉熵公式(公式2),我们求L对的偏导数(利用对数函数的导数公式:,lne=1)可以推导出:                                            

有些同学对累加求导不太明白的,可以看一下知乎上的这个解释:https://www.zhihu.com/question/67307437,例如公式6中当i不等于p时,L对的偏导数为0,所以公式演化为

所以交叉熵对权重和阈值的求导公式只剩未知,即对softmax求导。

softmax求导公式推导

接下来我们对softmax求导,为了承接上面的(第p个节点的softmax对u个节点的输入求偏导数),我们先用p代替softmax中的i,公式意义没有任何改变,所以softmax公式变为:

Softmax从小白到深度理解_第8张图片

我们把softmax中的表示(为了公式计算中书写简便,看起来更直观),则softmax公式变为:

根据基本公式,我们可以得到:

Softmax从小白到深度理解_第9张图片

当 u=p 时:

当 u!=p 时:

PS:为了避免公式中字母一样导致的歧义,我对公式上某些字母进行了修改,但公式意义没有任何改变。

扩展:交叉熵求导

家下来我们将softmax求导结果(公式6)带入交叉熵求导(公式5),可得:

Softmax从小白到深度理解_第10张图片

将公式9和公式10带入公式11,把公式11拆分为u=p和u!=p的累加的相加,即:

接着往下推导:

到这里推导全部完成。

 

 

你可能感兴趣的:(Machine,Learning,深度学习,机器学习,算法,人工智能)