Softmax

最近看了几篇有关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值就是

S_i = \frac{e^{V_i}}{\sum_j{e^{V_j}}}

即该向量V中每个元素都取个指数,然后对每个元素求一个概率,得到另外一个向量S,这个向量的每个值Si就是每个元素的Softmax值(概率)。

  • 为什么叫Softmax?Softmax相对应的是max。如果对一个向量取max,则只有一个值,只取了该向量中最大的那个数,也就说其他小于这个数的元素都被过滤了。但我们希望的是向量中每个元素都能对我的权重产生影响,元素值大的影响大一点,元素小的影响小一点(我认为这个影响的意思就是所有元素都参与了概率的计算)。Softmax就是这样,它最后计算出的仍是一个向量,且是一个概率向量(归一化的)。这样一来,softmax值大的元素可以看做经常取到,softmax值小的元素就偶尔取到。所以说不是max,而是 Soft max。

                        

这张图的yi标签是0,1,2;这里Hinge Loss计算公式为: 

                                                               

这里  Δ 是一个阈值,表示即使误分类,但是没有达到阈值,也不存在损失 。上面的公式把错误类别  (jyi)(j≠yi)  都遍历一遍,求值加和。

设 xixi 的正确类别是”船”,阈值 Δ=1Δ=1 ,则对应的Hinge loss 为: 

Li=max(0,2.850.28+1)+max(0,0.860.28+1)=1.58

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

最后结果的形式非常的简单,只要将算出来的概率的向量对应的真正结果的那一维减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的定义其实为

                                                                                

当cross entropy的输入P是softmax的输出时,cross entropy等于softmax loss

Pj是输入的概率向量P的第j个值,所以如果你的概率是通过softmax公式得到的,那么cross entropy就是softmax loss。








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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值