为什么要用cross entropy作为损失函数?

2021年1月20日 / 11次阅读 / 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

留言区

邮箱地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top