介绍改进神经网络的基本方法:交叉熵代价函数与softmax。
二次代价函数
之前我们一直使用二次代价函数,貌似在一定程度上也挺work。但其实,当输入值与目标值差距很大时,二次代价函数就不是很恰当了;这是因为当差距很大时,此函数的学习速率会很慢。我们可以通过一个简单的例子观察这种变化:
假设我们只使用一个神经元与一个输出神经元,定义代价函数为:
使用链式法则计算权重和偏置的导数:
假设我们训练输入为 x=1 x = 1 ,目标输出为 y=0 y = 0 ,可以看见此时输入输出差距很大,则带入:
回忆一下 σ σ 函数:
可以看出,当神经元的输出接近于1时,曲线变得相当平缓,因此 σ′(z) σ ′ ( z ) 就很小了。这就是学习缓慢的原因。
交叉熵代价函数
因此,我们引入交叉熵代价函数,我们希望这个函数能弥补我们之前遇到的问题:
这个函数的表达式看起来十分晦涩难懂,首先我们来看它为什么能成为一个代价函数。
why cost function
C>0 C > 0
代价函数需要满足非负性。
在求和中,由于 y、a∈[0,1] y 、 a ∈ [ 0 , 1 ] ,因此都是负数,在前面加上一个负号就变为正数。
在神经元输出接近目标值时,代价函数接近于0
我们假设 y=0,a≈0 y = 0 , a ≈ 0 ,则带入可发现 C≈0 C ≈ 0
同样,在 y=1,a≈1 y = 1 , a ≈ 1 ,也发现 C≈0 C ≈ 0
因此,满足这个性质。
交叉熵是非负的,并且在神经元达到很好的正确率时会接近于0,这就是我们想要的代价函数的性质。
why works
接下来我们就要来搞清楚为什么交叉熵代价函数能比二次代价函数更好地避免学习速率下降的问题:
我们对其求权重 w w 的偏导数: