本文内容来自:Michael Nielsen的《Neural Networks and Deep Learning》中文翻译
学习缓慢问题
产生原因
我们之前用的代价函数都是二次代价函数:
a是神经元的输出,假设训练输入x=1,输出y=0,求权重和偏置的偏导数有:
偏导数受激活函数的变化率的影响,假设我们激活函数为sigmoid函数,我们看一下函数图像:
当神经元的输出接近1的时候,曲线非常平缓,求导的值(变化率)会很小,上边式子所求的权重和偏置也会很小,学习速度就会很缓慢(也称作神经元饱和了)。
更换代价函数
为了改进这个问题,引入交叉熵代价函数:
其中n是训练数据总数。这和使用最大似然来训练是等价的,而最大似然的代价函数是负的对数似然,这和交叉熵代价函数等价。交叉熵能作为代价函数有两个原因,第一,交叉熵是非负的;第二,如果神经元的实际输出接近目标值,那么交叉熵接近0。相比于二次代价函数,还避免了学习速度下降的问题,原因如下,先求偏导:
化简:
其中分母就是sigmoid函数求导之后的形式,约去,化简得