神经网络与深度学习(五)—改进学习效率

1)引言

前面我们初步认识了神经网络在图像识别当中的应用,我们虽然得到了比较好的识别率,但是能否再提高一点呢?

2)代价函数的改进

(1)交叉熵函数(cross entropy)

首先我们先来看一下公式,其中a是神经元输出,训练输入为x=1,目标输出是y=0:

这里,

我们再来看一下,sigmoid函数图像:

这里我们可以清楚地看到,当函数输出值接近0或1的时候,其导数都逼近0。也就是说逼近0,那么公式(55)和(56)不可避免的都变得很小。而这两个公式代表的是神经网络的学习效率,这也就导致一个问题神经网络训练效率越来越低

那么,我们该如何解决呢?

这里我们选择换一种cost function既然我们二次代价函数有缺点,那么我们试试别的函数—交叉熵函数(cross entropy)。

为什么选择它呢?这里有两个原因:

恒为正。a和y都是在(0,1)内,所以式子中每一项都是负数。括号前面有一个负号,最后得到正数。

a和y相近时,C为0。如:当y=0,a约等于0时,C=0。

我们来推一下,为什么交叉熵代价函数能够避免学习速率的降低:

我们对w求偏导数,得到如下:

这里激励函数(z=wx+b)对w求偏导数得到x。再将括号内的式子通分:

再根据:

得到如下:

我们惊喜的发现,交叉熵函数对w的偏导数与无关了,只与目标输出和实际输出的差值有关。这个优良特性更加符合人学习的特点,错误大的时候,改动的大,错误小的时候,改动的小。

(2)对数似然函数(log-likelihood)

我们之前对网络中的每一层都用的是sigmoid函数激励加权求和得到激励值(activation value)。这里我们要对输出层的输出方程做出改变,不再用之前的方式,换成下式:

这个激励函数叫做柔性最大值函数,得到的激励值是。那么,这个函数的好处是什么呢?让我们根据公式(78)推导一下:

这里我把输出层的所有神经元加了起来,最后得到的结果是1。我们自然可以想到,每一个神经元输出其实是一个概率。得到这个关系,我们可以引出对数似然代价函数(log-likelihood)。如下:

我们举个例子,如果我们输入的是7的图像,那么代价函数的值是。如果神经网络输出的值(概率接近1)大,那么其对应的代价函数的值也就小。换句话说,也就是误差小,学习速率低。反之亦然。这种情况也是满足我们对代价函数的要求。我们可以再证明一下,这里我们还是对w和b求偏导:

我们可以看到,果然只与目标输出和实际输出的值有关了。撒花

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180409G1R3M400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券