初探softmax

冒泡~又是新的一周鸭!经历了昨天的多次地震,要更珍惜生命,努力鸭!

Softmax

首先,我们要先了解一下,什么是Softmax?
Softmax是用于分类过程,用来实现多分类的,简单来说,它把一些输出的神经元映射到(0-1)之间的实数,并且归一化保证和为1,从而使得多分类的概率之和也刚好为1
这是一种较为通俗的解释,当然我们也可以直接从这个名字入手去解释,Softmax可以分为soft和max,max也就是最大值,假设有两个变量a,b。如果a>b,则max为a,反之为b。那么在分类问题里面,如果只有max,输出的分类结果只有a或者b,是个非黑即白的结果。但是在现实情况下,我们希望输出的是取到某个分类的概率,或者说,我们希望分值大的那一项被经常取到,而分值较小的那一项也有一定的概率偶尔被取到,所以我们就应用到了soft的概念,即最后的输出是每个分类被取到的概率

Softmax函数

函数定义如下:

初探softmax_第1张图片

其中,Vi 是分类器前级输出单元的输出。i 表示类别索引,总的类别个数为 C。Si 表示的是当前元素的指数与所有元素指数和的比值。(划重点)通过这个Softmax函数 就可以将多分类的输出数值转化为相对概率。
下面通过这个图片可以更直观展示:
初探softmax_第2张图片

通过图片直观可以看出原来输出是3,1,-3通过softmax函数一作用,就映射成为(0,1)的值即0.88、0.12、0,而这些值的累和为1,这样我们就可以根据概率的大小进行选择,作为我们的预测目标,如果预测目标要有两个,就可以选择概率大的前两个。

补充:实际应用中,使用 Softmax 需要注意数值溢出的问题。因为有指数运算,如果 V 数值很大,经过指数运算后的数值往往可能有溢出的可能。所以,需要对 V 进行一些数值处理:即 V 中的每个元素减去 V 中的最大值。
初探softmax_第3张图片
参考:https://www.jianshu.com/p/2b35be46a098?utm_source=oschina-app

softmax损失函数求导

在多分类问题中,我们经常使用交叉熵作为损失函数。

先补充概念交叉熵:
交叉熵,其用来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出的努力的大小。使用交叉熵做分类问题中的损失函数,可以在一定程度上减少梯度消散。
softmax中使用的交叉熵公式如下:

在softmax中,ti表示真实值,yi表示求出的softmax值
(在通常的定义中,ti表示真实分布,yi表示非真实分布)
我们来简单理解一下这个函数的含义:输入一个样本,那么只有一个神经元对应了该样本的正确类别;若这个神经元输出的概率值越高,则按照以上的函数公式,其产生的损失就越小;反之,则产生的损失就越高。
初探softmax_第4张图片
更多关于交叉熵可参考(https://blog.csdn.net/mieleizhi0522/article/details/80200126)这里就不做详细介绍

接下来进入对这个损失函数的求导:

a.当预测第i个时,可以认为ti=1。此时损失函数变成了

b.对Loss求导。根据定义

将数值映射到了0-1之间,并且和为1,则有

c.具体求导过程
初探softmax_第5张图片

通过上面的求导结果,可以发现结果恰好为通过softmax函数求出了概率减1,那么我们就可以得到反向更新的梯度了。

举个例子
通过若干层的计算,最后得到的某个训练样本的向量的分数是[ 2, 3, 4 ],
那么经过softmax函数作用后概率分别就是 [0.0903,0.2447,0.665],
如果这个样本正确的分类是第二个的话,
那么计算出来的偏导就是[0.0903,0.2447-1,0.665]=[0.0903,-0.7553,0.665](划重点)
然后再根据这个进行back propagation就可以了。

参考:(https://www.cnblogs.com/alexanderkun/p/8098781.html)
(https://blog.csdn.net/bitcarmanlee/article/details/82320853)

Ending~还是那句话理解更重要!

你可能感兴趣的:(初探softmax)