目录
简介:nn.CrossEntropyLoss()是nn.logSoftmax()和nn.NLLLoss()的整合
-
softmax函数推导:
公式:
1.定义一个分类模型
one-hot code形式
利用这个模型,就很容易的把逻辑上的分类问题转换成数学上的向量问题了。
通项式:
对于T向量中的每个元素来说,表达式就是
2.定义一个概率模型
概率和为一:
结合1和2两个例子: 表示的是向量中,第个元素等于1的概率。
因此可以求得期望E:
而向量中只有第三项为1,其余均为0,所以:
即期望值等于概率分布:
3.引入一个指示函数概念
这个函数的意义是,当 I 函数括号内表达式为真时,I 函数值为1。当 I 数括号内表达式为假时,I 函数值为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)为交叉熵,则:
有借鉴其他博主文章,只是在撰写这篇博文时找不到当时看的文章了,如果原博主认为侵权,联系我即删除,谢谢!