神经网络与深度学习(三)—BP算法

引言:

在上节课中,我们知道梯度下降算法的核心是要重复对w,b求偏导数,这样我们就能够让代价函数一直减小,最后让实际输出值尽量拟合预计输出值,那么我们怎么去求w和b的偏导数呢?这节课,我们就来讲一下。

1)基本规则

既然我们想求出每个位置相应的w和b,我们就需要先将每个位置的w和b清晰的表示出来。请看下图:

这里你可能会奇怪,为什么下标先写2,再写4呢?按照常理来说,第二层的第四个神经元应该放在前面,第三层的第二个神经元应该放在后面。这样才合理嘛,因为是由前向后传递嘛。先别急,后面给你解释。

a(activation值)和b(biases)也有类似的表示方式:

有了以上作为前提后,我们就可以将第l层的第j个神经元的激活值和第(l-1)层的所有激活值联系起来了。如下图:

我们这里可以举个例子,求一下第三层第一个神经元的激活值,如下图:

到这里,你可能有点理解,为什么上面要把2放到前面了。

接下来,我们把公式(23)向量化,得到如下形式:

这里,我们就得到了如何以矩阵形式,求出每一个神经元的激活函数了。

2)两个假设

第⼀个假设就是代价函数可以被写成⼀个在每个训练样本x 上的代价函数Cx 的均值C,其:

这里我想问个问题,为什么要提出这个假设呢?

实质上,反向传播算法是对一个独立(不要说你不知道什么是独立)的训练样本x,计算了代价函数对其的weight和biases的偏导数。然后,我们将所有的样本训练完后,然后对其求和取均值,最后得到平均weight和biases偏导数。这样我就把这个均值化得到的“个性化”的代价函数,当作了全体适用的代价函数。以二次代价函数举例,如下:

第二个假设就是代价C可以写成神经网络输出的函数。这个就很容易理解了,例如我们对于一个单独的训练样本x的二次代价函数,我们就可以将其写成:

这里表示,x的代价可以用对所有的输出神经元的期望值和实际输出值做差的平方和的函数来表示。

3)哈达玛乘积(Hadamard)

求两个矩阵的Hadamard乘积就是对矩阵之间同位置的元素求积得到的矩阵,如下:

4)四个基本方程

好了,有了以上的做铺垫,我们可以介绍下面BP算法的四个基本方程了,我们在这里再强调一遍:BP算法的核心任务是求代价函数关于w和b的偏导数。我们为了解决这个任务,引入一个中间量,这个中间量是第l层上第j个神经元的误差。这个误差和代价函数关于weight和biases的偏导数有关系。这样,我们可以通过计算误差来计算偏导数。

你可能要问那么这个误差量从何而来呢?回想一下,输出函数公式(3):

这里如果在输入时,有一个干扰量,那么当我们最终输出的时候,结果就变成了:

那么,我们最终输出产生了如下变化:

我们可以很容易看出来,这里变化值取决于前面的偏导数(干扰量假设恒定),所以我们将这个偏导数定义为第l层的第j个神经元的误差:

好了终于解释清楚这个中间量怎么来的了,下面直接给出四个基本方程,我们可以根据这四个基本方程来算出代价函数的偏导数:

我们可以看到(BP3),(BP4)分别是计算对b和w的公式。

下面给出伪算法:

BP算法就介绍到这里。希望有志同道合的小伙伴关注我的公众平台,欢迎您的批评指正,共同交流进步。

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

扫码关注云+社区

领取腾讯云代金券