最近看了几篇有关softmax的博客,感觉写的特别好的有:
https://www.cnblogs.com/liuyu124/p/7332476.html
https://blog.csdn.net/u014380165/article/details/77284921
https://blog.csdn.net/u010976453/article/details/78488279
感觉自己看了又忘,可能每次都只是懂一点点吧。现在对这三篇进行下整理,以便自己之后再来回顾:
Softmax的优点:
- 计算损失函数简单,效果显著。
- 反向传播计算梯度时,最终表达式简单。
Softmax定义
假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素的Softmax值就是
即该向量V中每个元素都取个指数,然后对每个元素求一个概率,得到另外一个向量S,这个向量的每个值Si就是每个元素的Softmax值(概率)。
为什么叫Softmax?Softmax相对应的是max。如果对一个向量取max,则只有一个值,只取了该向量中最大的那个数,也就说其他小于这个数的元素都被过滤了。但我们希望的是向量中每个元素都能对我的权重产生影响,元素值大的影响大一点,元素小的影响小一点(我认为这个影响的意思就是所有元素都参与了概率的计算)。Softmax就是这样,它最后计算出的仍是一个向量,且是一个概率向量(归一化的)。这样一来,softmax值大的元素可以看做经常取到,softmax值小的元素就偶尔取到。所以说不是max,而是 Soft max。
这张图的yi标签是0,1,2;这里Hinge Loss计算公式为:
设 xixi 的正确类别是”船”,阈值 Δ=1Δ=1 ,则对应的Hinge loss 为:
Softmax loss
上面讲的其实是Softmax层的影响。在前向传播时,需要计算代价函数,也就是有了Softmaxloss。
1、计算与标注样本的差距
- 在神经网络的计算当中,我们经常需要计算按照神经网络的正向传播计算的分数S1,和按照正确标注计算的分数S2,之间的差距,计算Loss,才能应用反向传播。Loss定义为交叉熵 :
- 注意的是公式中的分母不等于1,这是在计算softmax值,计算完后softmax值相加才等于1。
- 其实这和逻辑回归的损失函数有关,logistic是一个二分类器,softmax是一个多分类器,都是求似然函数的极大值,进而推导出它的经验风险函数为:最小化负的似然函数。
- 也有的地方写成
这里的是yj是输入的训练数据标签,只在一个地方是1,其余都是0;sj是softmax输出的概率向量。化简后其实和上面表达式是一样的,也可以表达成:
这里的sj是真实标签对应的softmax值(概率值),和上面的交叉熵表达式是一样的。因为分母,我们可以看到其实元素值小的也参与了影响损失函数。
2、反向传播求梯度
- 当我们对计算出的Loss进行权重更新的时候,我们要通过梯度下降,每次优化一个step大小的梯度。
- 我们定义选到yi的概率是
- 然后我们求Loss对每个权重矩阵的偏导,应用链式法则(中间推导省略)。
![\frac{\partial{L_i}}{\partial{f_{y_i}}}=\frac{\partial(-\ln(\frac{e^{f_{y_{i}}}}{\sum_{j}e^{{j}}}))}{\partial{f_{y_i}}}=P_{f_{y_i}}-1](https://i-blog.csdnimg.cn/blog_migrate/d8efd62148fd60ed77f8f8e1e28a5916.png)
最后结果的形式非常的简单,只要将算出来的概率的向量对应的真正结果的那一维减1,就可以了
举个例子,通过若干层的计算,最后得到的某个训练样本的向量的分数是[ 1, 5, 3 ], 那么概率分别就是[0.015,0.866,0.117],如果这个样本正确的分类是第二个的话,那么计算出来的偏导就是[0.015,0.866−1,0.117]=[0.015,−0.134,0.117],是不是很简单!!然后再根据这个进行back propagation就可以了
-------------------------------------------------------------------------------------------------------------------
真实的交叉熵cross entropy的定义其实为:
![](https://i-blog.csdnimg.cn/blog_migrate/ab2635ac3f7759f54c9f92324485c68c.png)
当cross entropy的输入P是softmax的输出时,cross entropy等于softmax loss。
Pj是输入的概率向量P的第j个值,所以如果你的概率是通过softmax公式得到的,那么cross entropy就是softmax loss。