-- TOC --
cross entropy函数的计算公式:
$$C=- \frac{1}{n} \sum_x \bigl(y\ln{a}+(1-y)\ln{(1-a)}\bigr)$$
首先,它是一个损失函数。C为正,并且随着a逐渐逼近y,C在逐渐变小。
在使用sigmoid神经元作为output layer的时候,如果损失函数为quadratic,存在一个学习缓慢的问题。这个缓慢的原因来自sigmoid函数的导数,最大值也才0.25,对应w和b的梯度就变小了很多,学习就慢了。而使用cross entropy损失函数,可以有效的避免最后一层学习缓慢的问题。
$$C_x = - \bigl( y\ln{a}+(1-y)\ln{(1-a)} \bigr)$$
对 \(C_x\) 求导:
$$\frac{\partial C_x}{\partial a}=\frac{a-y}{a(1-a)}$$
a代表神经元的激活输出,如果我们对sigmoid函数按z求导:
$$\frac{\partial a}{\partial z}=a(1-a)$$
很明显可以看到,在计算w和b的梯度的时候,\(a(1-a)\)这一项可以被约掉!相当于sigmoid函数的导数值被约掉了,那个最大才0.25的数值没有了。因此,在sigmoid作为output layer时,必须cross entropy损失函数,可以加快output layer的学习速度。
本文链接:https://cs.pynote.net/ag/ml/ann/202303251/
-- EOF --
-- MORE --