上一篇文章我们简单介绍了信息熵的概念,知道了信息熵可以表达数据的信息量大小,是信息处理一个非常重要的概念。
推导到这相信很多人会想,既然如此,那为什么现在还是很多人用相对熵衍生出来的交叉熵作为损失函数来训练神经网络而不直接用距离相关的均方差呢?
以下面的例子稍作解释:
假设神经网络的最后一层激活函数为sigmoid,它长这样:
可以看到它的两头异常的平,也就是说在那些地方的导数接近于0。而反向传播是需要求导的,用了均方差损失函数之后求导结果包含y ( y − 1 )(可参考这篇文章),这在y接近于0或者1的时候都趋于0,会导致梯度消失,网络训练不下去。但如果用相对熵衍生出来的交叉熵作为损失函数则没有这个问题。详细的分析可见这篇文章。因此虽然相对熵的距离特性不是特别好,但总归好过直接梯度消失玩不下去,因此很多用sigmoid作为激活函数的神经网络还是选择了用相对熵衍生出来的交叉熵作为损失函数。
当然如果你选用的不是sigmoid激活函数,则不需要考虑这些,这个是外话了。