版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
10 篇文章0 订阅
订阅专栏
大家在学习深度学习时,肯定会遇到softmax这个知识点,初学者大都一知半解,没有理解透彻,很多文章直接讲述softmax公式及求导,忽略了其中的因果缘由。初学者通过此文可以梳理知识结构,高手可直接查看公式推导来巩固知识。
softmax公式及理解
softmax主要用于深度学习多分类,作用是将输出层的数值映射为概率,且所有输出节点概率累加为1。为什么要把数值转为概率呢?因为多分类模型中,输出值为概率更利于反向推导和模型的迭代(比如minist手写数字识别,对应的是0-9的概率,概率与概率可以更好的比较,数值与概率无法计算差距,从而也无法反向推导)。
接下来我们看一下softmax的公式:
如下图所示,(3,1,-3)经过softmax计算后变为概率(0.88,0.12,0),大家可以亲自计算一下,充分理解softmax公式。
求概率为什么要用e的指数?
通过e的指数图像我们可以看到:1、可以把输入为负数的值转为正数;2、指数函数曲线呈递增趋势,斜率逐渐增大,这样x轴上很小的变化反映到y轴可以看到很大的变化,所以它可以将差距大的值拉的更大。ps:其实不一定是e的指数,还有很多其他数的指数也同样适用,这里为了方便后面的计算,选用e。
补充一个知识点,softmax中,当输入值非常大时,softmax会更大,可能会溢出,所以在TensorFlow中,一般将softmax与交叉熵函数统一实现,因为TensorFlow会启用一些优化机制。
为什么softmax求导如此重要
深度学习的核心就是误差逆传播(error BackPropagation,简称BP)算法,算法中最核心的是损失函数对权重和阈值求导,在这里我们用经常与softmax使用的交叉熵损失函数为例,进行推导:
交叉熵损失函数公式(交叉熵函数中的对数,有的以e为底,有的以2为底,此处是以e为底)如下,其中
表示第i维度的实际值,
表示第i维度的预测值:
这里我们用
表示
的输入,v表示前一层节点的数量,
表示前一层第u个节点到
节点的权重,
表示前一层第u个节点到
节点的阈值。我们的目标是求
(
节点对前一层第q个节点权重的偏导数)和
(
节点对前一层第q个节点阈值的偏导数),可推导为
根据
可以推导出
为0或x,
为0或1,所以当前核心问题转换为求
,根据softmax公式(公式1)和 交叉熵公式(公式2),我们可以把
转换为:
利用交叉熵公式(公式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中的
用
表示(为了公式计算中书写简便,看起来更直观),则softmax公式变为:
根据基本公式
,我们可以得到:
当u=p时:
当u!=p时:
PS:为了避免公式中字母一样导致的歧义,我对公式上某些字母进行了修改,但公式意义没有任何改变。
扩展:交叉熵求导
家下来我们将softmax求导结果(公式6)带入交叉熵求导(公式5),可得:
将公式9和公式10带入公式11,把公式11拆分为u=p和u!=p的累加的相加,即:
接着往下推导:
到这里推导全部完成。