均方差代价函数 + sigmoid

C=(ya)22

其中,z=wx+b,
而a是经历了**函数的z,a=σ(z)。
那么这个的梯度,对w和b分别求导,得到:
Cw=(ay)σ(z)x=aσ(z)

Cb=(ay)σ(z)=aσ(z)

也就是说梯度的大小和**函数的倒数有着直接的正相关关系。假设我们选择sigmoid函数
代价函数和**函数组合效果

可以很明显的看出,在z = 0的时候导数最大,越往两边越小。也就代表神经网络输出结果离真实值越远学习速率越慢。这种差距越大速率越慢的结果对我们训练很不利,所以我们需要寻求一种新的方法来解决。

交叉熵代价函数+sigmoid

我们提出交叉熵的方法,来配合sigmoid可以完美的解决这个问题。
首先,交叉熵的公式是

C=1nx[ylna+(1y)ln(1a)]

求导可以得到

C=1nxσ(z)xjσ(z)(1σ(z))(σ(z)y)

由于sigmoid函数是σ(z)=1/(1+e−z),所以实际上可以推导出σ′(z)=σ(z)(1−σ(z)) (别问我这是怎么发现的,神奇的数学家发现的,我验证过了的),所以可以消除很多项了,也就是

Cwj=1nxxj(σ(z)y)

这样一来速率就只和(σ(z)−y)成正相关了,所以差距越大,速度也就可以越快了。

参考资料:
神经网络与深度学习–交叉熵代价函数

相关文章: