交叉熵代价函数(cross-entropy)

目的:让神经网络学习更快

假设简单模型: 只有一个输入,一个神经元,一个输出

交叉熵代价函数(cross-entropy)

简单模型: 输入为1时, 输出为0

交叉熵代价函数(cross-entropy)

交叉熵代价函数(cross-entropy)

交叉熵代价函数(cross-entropy)

初始 w = 0.6, b = 0.9   初始预测的输出 a = 0.82, 需要学习

学习率: 0.15

演示:

交叉熵代价函数(cross-entropy)

初始: w = 2.0, b = 2.0, 初始预测输出: 0.98, 和理想输出0差得很远
演示:

交叉熵代价函数(cross-entropy)



神经网络的学习行为和人脑差不多, 开始学习很慢, 后来逐渐增快.

为什么?

学习慢 => 偏导数 ∂C/∂w 和 ∂C/∂b 值小 

计算偏导数:

回顾之前学习的Cost函数:

交叉熵代价函数(cross-entropy)

对于一个x, y 和单个神经元:

交叉熵代价函数(cross-entropy)

分别对w和b求偏导数:


 交叉熵代价函数(cross-entropy)

 

回顾sigmoid函数

交叉熵代价函数(cross-entropy)


 当神经元输出接近1时, 曲线很平缓, 因为sigmoid函数的性质,导致σ′(z)在z取大部分值时会很小(如下图标出来的两端,几近于平坦),这样会使得w和b更新非常慢。偏导很小, 所以学习很慢

如何增快学习?

介绍cross-entropy cost 函数

假设一个稍微复杂一些的神经网络


交叉熵代价函数(cross-entropy)=>   

定义cross-entropy函数:

交叉熵函数的形式是−[ylna+(1−y)ln(1−a)]而不是 −[alny+(1−a)ln(1−y)],为什么?因为当期望输出的y=0时,lny没有意义;当期望y=1时,ln(1-y)没有意义。而因为a是sigmoid函数的实际输出,永远不会等于0或1,只会无限接近于0或者1,因此不存在这个问题。

交叉熵代价函数(cross-entropy) 

为什么可以用来做cost函数?

1.  函数值大于等于0 (验证)

2.  当a=y时, cost = 0

交叉熵代价函数(cross-entropy)

用sigmoid函数定义

推出:

 交叉熵代价函数(cross-entropy)


 代入 上面的偏导, 得到:

 交叉熵代价函数(cross-entropy)

学习的快慢取决于 

交叉熵代价函数(cross-entropy)

也就是输出的error 

可以看到,导数中没有σ′(z)这一项,权重的更新是受σ(z)−y这一项影响,即受误差的影响。所以当误差大的时候,权重更新就快,当误差小的时候,权重的更新就慢。

好处: 错误大时,更新多,学得快. 错误小时,学习慢

对于偏向也类似:

交叉熵代价函数(cross-entropy)