2021年1月20日 / 137次阅读 / Last Modified 2021年1月20日
神经网络
本来quadratic cost function简单易懂,为什么要用cross entropy函数作为损失函数呢?
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的学习速度。
还有别的理由吗?
-- EOF --
本文链接:https://www.pynote.net/archives/3289
前一篇:MLP网络BP公式推导
后一篇:log-likelihood损失函数
©Copyright 麦新杰 Since 2019 Python笔记