深度学习-softmax

本文详细解释了Softmax函数如何将多分类输出转换为概率分布,讨论了指数函数的优缺点,并介绍了Softmax在深度学习中的应用,包括与Sigmoid的区别,以及Softmax损失函数的推导和与交叉熵的关系。
摘要由CSDN通过智能技术生成

Softmax是将各个输出节点的输出值范围映射到[0, 1],并且约束各个输出节点的输出值的和为1的函数。

从字面上来说,其可以分成soft和max两个部分。max故名思议就是最大值的意思。Softmax的核心在于soft,而soft有软的含义,与之相对的是hard硬。很多场景中需要我们找出数组所有元素中值最大的元素,实质上都是求的hardmax。hardmax最大的特点就是只选出其中一个最大的值,即非黑即白。但是往往在实际中这种方式是不合情理的,比如对于文本分类来说,一篇文章或多或少包含着各种主题信息,我们更期望得到文章对于每个可能的文本类别的概率值(置信度),可以简单理解成属于对应类别的可信度。所以此时用到了soft的概念,Softmax的含义就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。

下面给出Softmax函数的定义(以第i个节点输出为例):

其中为第i个节点的输出值,C为输出节点的个数,即分类的类别个数。通过Softmax函数就可以将多分类的输出值转换为范围在[0, 1]和为1的概率分布。

引入指数函数对于Softmax函数是把双刃剑,即得到了优点也暴露出了缺点:

优点:

1.经过使用指数形式的Softmax函数能够将差距大的数值距离拉的更大。

2.在深度学习中通常使用反向传播求解梯度进而使用梯度下降进行参数更新的过程,而指数函数在求导的时候比较方便。

缺点:

1.当值非常大的话,计算得到的数值也会变的非常大,数值可能会溢出。

单个输出节点的二分类问题一般在输出节点上使用Sigmoid函数,拥有两个及其以上的输出节点的二分类或者多分类问题一般在输出节点上使用Softmax函数。

现在可以构建比较复杂的神经网络模型,最重要的原因之一得益于反向传播算法。反向传播算法从输出端也就是损失函数开始向输入端基于链式法则计算梯度,然后通过计算得到的梯度,应用梯度下降算法迭代更新待优化参数。

由于反向传播计算梯度基于链式法则,因此下面为了更加清晰,首先推导一下Softmax函数的导数。作为最后一层的激活函数,求导本身并不复杂,但是需要注意需要分成两种情况来考虑。

下面举例说明:

回顾Softmax函数的表达式:,其中表示输出节点的编号。

影响的有与之相连的,因此需要分别求出。此时输出值为,很明显结果不同,而只需换相应索引号即可。因此在对Softmax函数求导的时候,需要分两种情况考虑。即对第个输出节点,分为对的求导以及其它的求导。

上面使用了函数相除的导数运算,由于是对求导数,由于此时,因此的导数还是本身,对求导结果只保留。因此上面求导的结果为:

提取公共项

拆分成两个部分:

为了方便,将Softmax函数表达式表示为 ,结果为,由于此时,因此最终结果为。

上面使用了函数相除的导数运算,由于是对求导数,由于此时j≠i,因此相当于常数,常数的导数为0,对求导同样只保留。因此上面求导的结果为:

分解两项相乘:

为了方便,将Softmax函数表达式表示为,因为j!=i,所以最终结果为。

Softmax偏导数的最终表达式如下:

接下来看一看Softmax的损失函数。回顾Softmax函数的表达式:

,其中表示输出节点的编号

假设此时第个输出节点为正确类别对应的输出节点,则是正确类别对应输出节点的概率值。添加log运算不影响函数的单调性,首先为添加log运算:

由于此时的是正确类别对应的输出节点的概率,当然希望此时的越大越好(当然最大不能超过1)。通常情况下使用梯度下降法来迭代求解,因此只需要为 加上一个负号变成损失函数,现在变成希望损失函数越小越好:

对上面的式子进一步处理:

这样就将上面的Softmax一步一步转换成了Softmax的损失函数。

但是通常我们说起交叉熵往往是下面的式子:

那上面这种形式的损失函数和上面通过Softmax函数一步一步转换推导成的损失函数有什么区别呢?

为了方便将第一个命名为式子1,将通常的交叉熵损失函L数命名为式子2。其实式子1和式子2本质上是一样的。对于式子1来说,只针对正确类别的对应的输出节点,将这个位置的Softmax值最大化,而式子2则是直接衡量真实分布和实际输出的分布之间的距离。

对于分类任务来说,真实的样本标签通常表示为one-hot的形式。比如对于三分类来说,真实类别的索引位置为1,也就是属于第二个类别,那么使用one-hot编码表示为[0, 1, 0],也就是仅正确类别位置为1,其余位置都为0。而式子2中的就是真实样本的标签值,将[0, 1, 0]代入式子2中即

最终的结果为:

式子1只是对正确类别位置计算损失值:

既然式子1和式子2两个损失函数一样,那么接下来计算损失函数的导数使用比较常见的式子2,也就是

在这里直接推导最终损失函数L对网络输出变量的偏导数,展开为:

接下来利用复合函数分解成:

其中

就是我们前面推导的Softmax函数的偏导数。

对于Softmax函数分为两种情况,因此需要将求和符号拆分成c=i以及c!=i这两种情况。代入求解公式,可得:

进一步进一步化简为:

提取公共项,可得:

至此完成了对交叉熵函数的梯度推导。对于分类问题中标签y通过one-hot编码的方式,则有如下关系:

因此将交叉熵的偏导数进一步简化为:

最后为了直观的感受Softmax与交叉熵的效果,我使用一个简单的输出值[4, -4, 3],通过计算做了下面三分类的表格。

此时是模型输出的实际值,而是真实的标签值。

参考:https://zhuanlan.zhihu.com/p/105722023

转载:

深度学习-softmax - 简书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值