交叉熵与softmax

介绍改进神经网络的基本方法:交叉熵代价函数与softmax。

二次代价函数

之前我们一直使用二次代价函数,貌似在一定程度上也挺work。但其实,当输入值与目标值差距很大时,二次代价函数就不是很恰当了;这是因为当差距很大时,此函数的学习速率会很慢。我们可以通过一个简单的例子观察这种变化:

假设我们只使用一个神经元与一个输出神经元,定义代价函数为:

C=(ya)22 C = ( y − a ) 2 2

使用链式法则计算权重和偏置的导数:

Cw=(ay)σ(z)x ∂ C ∂ w = ( a − y ) σ ′ ( z ) x

Cb=(ay)σ(z) ∂ C ∂ b = ( a − y ) σ ′ ( z )

假设我们训练输入为 x=1 x = 1 ,目标输出为 y=0 y = 0 ,可以看见此时输入输出差距很大,则带入:

Cw=aσ(z) ∂ C ∂ w = a σ ′ ( z )

Cb=aσ(z) ∂ C ∂ b = a σ ′ ( z )

回忆一下 σ σ 函数:

1526177496672

可以看出,当神经元的输出接近于1时,曲线变得相当平缓,因此 σ(z) σ ′ ( z ) 就很小了。这就是学习缓慢的原因。

交叉熵代价函数

因此,我们引入交叉熵代价函数,我们希望这个函数能弥补我们之前遇到的问题:

C=1nx[ylna+(1y)ln(1a)] C = − 1 n ∑ x [ y ln ⁡ a + ( 1 − y ) ln ⁡ ( 1 − a ) ]

这个函数的表达式看起来十分晦涩难懂,首先我们来看它为什么能成为一个代价函数。

why cost function

  1. C>0 C > 0

    代价函数需要满足非负性。

    在求和中,由于 ya[0,1] y 、 a ∈ [ 0 , 1 ] ,因此都是负数,在前面加上一个负号就变为正数。

  2. 在神经元输出接近目标值时,代价函数接近于0

    我们假设 y=0,a0 y = 0 , a ≈ 0 ,则带入可发现 C0 C ≈ 0

    同样,在 y=1,a1 y = 1 , a ≈ 1 ,也发现 C0 C ≈ 0

    因此,满足这个性质。

交叉熵是非负的,并且在神经元达到很好的正确率时会接近于0,这就是我们想要的代价函数的性质。

why works

接下来我们就要来搞清楚为什么交叉熵代价函数能比二次代价函数更好地避免学习速率下降的问题:

我们对其求权重 w w 的偏导数:

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值