深度学习基础理论探索(二): cross-entropy损失函数的前世今生

前面我们讲到,克服梯度消失有两个方向,1.rule激活函数。2.改进损失函数用cross_entropy

ok,首先我们先看为什么代价损失函数可以用Cross_entropy.

以前使用的二次代价函数很好理解:

    

  即:计算值与真实值的残差。

它有两个特点:

1.损失函数永远大于0.

2.计算值与真实值越接近,损失函数越小。两者差距越大,损失函数越大。

我们现在假设这是损失函数的基本要求。

cross-entropy损失函数满足这些要求吗?

 

      首先,可以证明该函数是大于0

   其次,当y=0时(即真实值为0a=0(计算值为0)c = 0*ln0 + 1*ln1  等于0(前项等于0,后项也等于0)

   y=1时,若a=0, c = ln0 +  0*ln1等于无穷大。

即:计算值与真实值差距越大,损失函数越大。反之亦然。

所以cross-entropy满足我们对损失函数的定义。所以他是个合格的损失函数

这里我们其实会发现 y=0,a=1这样的极端情况出现时,损失函数无穷大。程序会出问题,我们可以对cross-entropy做一个修改:y*ln((a+0.05)/1.05))+(1-y)*ln((1.05-a)/1.05)


ok,下一个话题。为什么cross-entroy可以抑制梯度消失。

根据上个话题我们知道了激活函数为sigmoid、损失 函数为二次代价函数时,w、b的跟新速度与激活函数的导数相关。

那么损失函数换成cross-entropy会怎样呢

再来一波公式:


由以上推导可得w、b对损失函数的偏导,即w、b的更新速度只与(a-y)有关,也就是只与预测值与真实值的差距有关。不同于二次代价函数的更新速度和激活函数的导数成正比(上篇提到)。

这样就会有一个比较好的性质:

计算值与实际值差距越大,w、b的更新速度越快

具体推导过程,可参见

http://neuralnetworksanddeeplearning.com/chap3.html


 

 

你可能感兴趣的:(深度学习)