交叉熵损失函数
原文:http://neuralnetworksanddeeplearning.com/chap3.html#the_cross-entropy_cost_function
作者在开头举了一个生动的例子来说明人类在学习中的自然过程,总结来说就是人类在学习过程中所表现出的错误越严重学习速度越快的现象,而先前作者介绍的神经网络的学习过程却并不完全是这样的,从作者文中给出的两个实时计算过程的动画可以轻易看出在w和bias都较大的时候,损失函数的下降在学习开始的一段时间内下降非常缓慢,直到w和bias降到1以下的时候下降速度开始大幅变快,这样的结果并不自然,直觉来看,应该在误差越大的时候越容易学习才对呀?这是怎么回事呢?
作者在先前的文中使用的损失函数是
再来看看梯度计算
再来看看sigmoid函数的图像:
通过图像可以看出在 sigmoid(z) 非常接近1的时候,其导数非常接近0,而欧氏距离损失函数的导数是一个最大为1的线性函数,从而导致w和bias的梯度非常小,造成每次迭代对权重的更新幅度非常小,换句话说也就是学习速度非常慢了。
为了改善学习的过程,使得误差越大的时候学习速度越快,作者介绍了交叉熵损失函数:
交叉熵损失函数有一个非常有用的性质,它的导数为:
你可以看出,在a接近1的时候,也就是sigmoid函数的导数非常小的时候,交叉熵损失函数的导数会变得非常大,由它来对梯度进行一个补偿,使得在误差很大但结点饱和的时候仍然能有一个比较满意的梯度来进行学习。