前言:
在调试tensorflow官方教程代码时,我发现了交叉熵(Cross Entropy)损失和其之前所用的softmax函数。我还没在《神经网络与机器学习第3版》中看到交叉熵,就大概先了解一下,并且记录下我目前了解到的信息。
正文:
先说交叉熵的公式:
如果是在训练神经网络的情况下,p(i)代表标签中当前样本属于i类的概率。在mnist的标签中此项非1即0,而且只有某一类对应的概率是1,其他都是0。例如当标签为L=[0,0,1,0,0,0,0,0,0,0]时,只有p(2)=1,即p(i)=L[i]。q(i)代表预测结果中当前样本属于i类的概率。
但是预测结果却不能被直接当作各类对应的概率,例如预测结果R=[22.5, 2.44, -2.1, 2.444, 5.6, 62.3, 4.444, -5.565, 6.454, -5.414]。这时就要用softmax函数,其公式如下:
其中i=R[i]。此公式把R转换成了R’,R’如下:
其总合应为1,第6项为1应该是其小数位太多的原因。
之后根据交叉熵的公式算出R对L的损失loss=64.4。
结语:
为什么要用softmax而不是计算简单的线性方法呢?例如线性转换方法:
其中Q(i)为R[i],Qmin为Q中最小的值,n为Q的个数,O(i)为转换后的结果。
相比于这种线性转换的方法,softmax函数的转换结果中各类的概率之间的差别要大很多,基本达到类似标签的“一类独大”的效果,这也有利于后续计算等(参考:https://www.zhihu.com/question/40403377?sort=created)。
关于交叉熵的意义,参考:https://www.zhihu.com/question/41252833。