交叉熵与softmax函数
在神经网络中,在对超参数进行优化过程当中,需要有一个优化的目标值,也就是真实值与预测值之间的差距要尽量小,差距越小说明预测越精确。这个差距往往用loss表示
在分类问题当中,我们用交叉熵来表示这个loss值。
1. 熵的概念
熵是物理学中的一个名词,表示体系混乱的程度,越混乱熵越大。在神经网络中,交叉熵越大说明预测的越不准确,越混乱。
2. 交叉熵的计算公式
Hy′(y)=−i=0∑nyi′log(yi)
其中
yi′就是真实值,
yi为预测的结果概率
3. 二分类问题
假设真实结果:
方法一:预测的结果为:
则他们的交叉熵就为:
−(0∗log0.4)−1∗log0.6=0.222
方法二:预测的结果为:
则他们的交叉熵就为:
−(0∗log0.1)−1∗log0.9=0.046
经过计算,方案二的交叉熵比方案一的小,这也和我们预期的一样,方案二的预测结果的确更加精确
4. 多分类问题
在多分类问题当中,我们假设5分类,真实结果为:
- A’ 发生的概率为 0
- B’ 发生的概率为 0
- C’ 发生的概率为 0
- D’ 发生的概率为 0
- E’ 发生的概率为 1
在计算交叉熵前,我们要确保预测的所有结果满足概率和为1,但是往往,我们通过神经网络计算出来的结果并不满足这样的条件。这时候就需要softmax函数帮忙了。
4.1. softmax函数
- softmax能够计算出每个值在所有值中的大小比重,得出该事件的概率
- 并且保证所有事件的概率和为1
4.1.1. softmax公式
Si=∑j=0nejei
其中,i为第i个事件对应的神经网络计算出的值,
Si就是第i个事件在所有事件中的概率了
4.1.2. 简单应用
在多分类问题当中,我们假设5分类,计算出的结果为:
- A 预测的概率为 1
- B 预测的概率为 4
- C 预测的概率为 0.6
- D 预测的概率为 0.1
- E 预测的概率为 9
很显然这5个事件的概率和并不为1,不能直接使用交叉熵进行计算,先通过softmax函数进行适当的缩放,使得他们的概率和为1
j=0∑nej=e1+e4+e0.6+e0.1+e9=8163.33SA=8163.33e1=0.0003SB=8163.33e4=0.0067SC=8163.33e0.6=0.0002SD=8163.33e0.1=0.0001SE=8163.33e9=0.9923显然SA+SB+SC+SD+SE=1,softmax函数成功实现功能
4.2. 求交叉熵
有了softmax函数的转换,多分类问题求交叉熵就容易了,和二分类别无二致。
−(0∗log0.0003)−0∗log0.0067−0∗log0.0002−0∗log0.0001−1∗log0.9923=0.0034
这个计算结果已经很小了,说明系统预测的这个结果还是很精确的。并且系统预测E的概率0.9923,实际E的概率为1,也的确很精确了。