pytorch损失函数之nn.CrossEntropyLoss()【内含softmax推导】

目录

softmax函数推导

Logsoftmax

Nllloss

CrossEntropyLoss


简介:nn.CrossEntropyLoss()是nn.logSoftmax()和nn.NLLLoss()的整合

  • softmax函数推导:

公式:

1.定义一个分类模型

   one-hot code形式

利用这个模型,就很容易的把逻辑上的分类问题转换成数学上的向量问题了。

通项式:

对于T向量中的每个元素来说,表达式就是

2.定义一个概率模型

 

概率和为一:         

结合1和2两个例子:   表示的是向量中,第个元素等于1的概率。

因此可以求得期望E:

                                        

而向量中只有第三项为1,其余均为0,所以:

             

即期望值等于概率分布:

 

3.引入一个指示函数概念

这个函数的意义是,当 函数括号内表达式为真时,函数值为1。当 数括号内表达式为假时,函数值为0。所以,T 向量中的某个元素的值还可以表示成:

即当y=i时:

利用这个概念,我们将多项式分布转换为指数分布表达式,这一堆东西看起来很复杂,其实并不难理解。看不懂也没关系,继续往下看后面的注释

其中:

因此我们得到一个很有用的表达式:

 

4.开始推导

我们对其进行变换,变换过程如下:

对1式,我们对两边同时求和:

根据文中第二部分结论  得出:

因为1式中  ,联立两式的:

     

得出:

Softmax结果表示概率,在【0,1】

根据第二部分我们知道, 表示的是向量中,第个元素等于1的概率。因此softmax计算出的最后结果为:

代表的是一个概率值,对于一个分类问题来说,softmax函数的结果,表示一个“东西”属于每个类别的可能性。这也就是为什么softmax函数适用于解决分类问题的原因。

  • Logsoftmax

就是对softmax取对数,底数为e。

范围在【-∞,0】

  • Nllloss

NLLLoss的结果就是把经过log_softmax函数的值与标签对应的那个值拿出来求和,再求平均,最后取相反数

就是经过Softmax——Log_softmax——NllLoss。

Ps:使用了CrossEntropyLoss后模型的最后一层无需再用softmax激活。

交叉熵原理:交叉熵刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近。假设概率分布p为期望输出,概率分布q为实际输出,H(p,q)为交叉熵,则:

有借鉴其他博主文章,只是在撰写这篇博文时找不到当时看的文章了,如果原博主认为侵权,联系我即删除,谢谢!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值