神经网络(二)——深入理解反向传播的四个基本方程

由于神经网络覆盖的内容比较多,一时提笔不知从何开始说起,刚好看到这一章以公式为主,因此先入手这一章。本章参考书籍《神经网络与深度学习》以及三蓝一棕的B站视频。

1.预备知识

我们先来看一张图,了解一下我们的符号定义:

这里写图片描述

我们首先给出网络中权重的定义: wljk w j k l 表示从第 l1 l − 1 层的的 k k 个神经元到l层的第 j j 个神经元的连接的权重,可能大家会觉得这里权重的下标j k k 应该调换,但是在之后的表达中,这样写会有一些好处。

我们继续来看一张图:

这里写图片描述

我们对网络的偏置和激活值也使用类似的表达。我们使用bjl表示在第 l l 层第j个神经元的偏置,使用 alj a j l 表示第 l l 层第j个神经元的激活值。
有了这些符号表示,第 l l 层第j个神经元的激活值 alj a j l 就和第 l1 l − 1 层的激活值关联起来了:
这里写图片描述

我相信你能看懂这个公式,举个例子,就是第二层的第一个神经元的激活值(值在0-1之间),是由第一层所有神经元的激活值乘上对应的权重矩阵(即每个激活值的重要程度)求和,然后加上第二层第一个神经元的偏置,最后通过整体利用sigmoid函数压缩到0-1的范围内。
但是一直看这个公式相信大家也会觉得很麻烦,毕竟太多的上标和下标要去思考含义,那我们就简化一下:
这里写图片描述

这样就简洁多了,为了在后面介绍四个方程时方便,我们引入一个中间量 zl=wlal1+bl z l = w l a l − 1 + b l ,我们称 zl z l 称为 l l 层的带权输入。则上面的式子有时也可以写成al=σ(zl)。同样要指出的是 zl z l 的每个元素是:
这里写图片描述

2. 反向传播的四个基本方程

我们要始终明确反向传播的目的是什么:反向传播算法是单个训练样本修改权重与偏置,影响代价函数的过程。最终极的含义就是计算偏导数: Cωjkl ∂ C ∂ ω j k l Cbjl ∂ C ∂ b j l ,也就是告诉我们在改变权重和偏置时,代价函数变化的快慢,我们希望沿着速度最快的方向改变代价函数。注意,为了方便计算,我们还是引入一个中间量 δlj δ j l ,这个我们称为在第 l l 层第j个神经元上的误差。
这个误差是什么,如何来理解呢?我们先来看一下它的定义: δljCzjl δ j l ≡ ∂ C ∂ z j l ,其实我们可以发现它其实是一个误差的度量,是一个变化率。假设在第 l l 层第j个神经元上有一个微小的变化 zlj △ z j l ,使得神经元输出由 σ(zlj) σ ( z j l ) 变成了 σ(zlj+zlj) σ ( z j l + △ z j l ) 。这个变换会向网络后面的层进行传播,最终导致整个代价产生 CzljΔzlj ∂ C ∂ z j l Δ z j l 。如果我们能找到使代价函数减小的 Δzlj Δ z j l ,并且使它与 Czjl ∂ C ∂ z j l 变化率的符号相反,那么最终会使代价函数更小。
可能大家会疑惑为什么这里要用 zl z l ,如果用激活值 alj a j l 表示度量误差的方法可能会更好理解。大家不要过于纠结这里,用前一种方法来表示会在后面公式推导的过程中更加方便,同样对这里误差的含义也不用太过纠结,我们就把它看成中间量。

2.1 四个方程的定义
1. 输出层误差的方程, δl δ l ,每个元素定义如下:

δLj=CaLjσ(zLj).(BP1) (BP1) δ j L = ∂ C ∂ a j L σ ′ ( z j L ) .
右式第一项 C/aLj ∂ C / ∂ a j L 表示代价随着第j个输出激活值的变化而变化的速度。假设C不太依赖一个特定的输出神经元j,即变化率很小,那么 δLj δ j L 就会很小,这也是我们想要的效果。右式第二项 σ(zLj) σ ′ ( z j L ) 为在 zlj z j l 处激活函数 σ σ 变化的速度。
以上是按每个元素分量定义的公式,如果以矩阵形式来表示,则为:
δL=aCσ(zL).(BP1a) (BP1a) δ L = ∇ a C ⊙ σ ′ ( z L ) .
这里 aC ∇ a C 被定义成一个向量,其元素是偏导数 C/aLj ∂ C / ∂ a j L 。你可以将 aC ∇ a C 看成是代价函数C关于输出激活值的改变速度。中间的那个符号表示为Hadamard乘积,其含义如下:

[12][34]=[1324]=[38].(1) (1) [ 1 2 ] ⊙ [ 3 4 ] = [ 1 ∗ 3 2 ∗ 4 ] = [ 3 8 ] .

(BP1)和(BP1a)是等价的。

2. 使用下一层的误差 δl+1 δ l + 1 来表示当前层的误差 δl δ l

δl=((wl+1)Tδl+1)σ(zl)(BP2) (BP2) δ l = ( ( w l + 1 ) T δ l + 1 ) ⊙ σ ′ ( z l )
这个公式乍一看比较复杂,我们先不管它是如何推导出来的。先直观感受一下,我们一旦知道了当前层的误差,就可以求前一层的误差!这就引出了反向传播的感觉。通过组合(BP1)和(BP2),我们可以通过(BP1)计算当前层误差 δl δ l ,通过(BP2)计算 δl1 δ l − 1 ,再用(BP2)计算 δl2 δ l − 2 ,一步步反向传播整个网络。

3. 代价函数关于网络中任意偏置的变化率:

Cblj=δlj.(BP3) (BP3) ∂ C ∂ b j l = δ j l .

神奇的发现误差 δlj δ j l 和偏导 Cblj ∂ C ∂ b j l 结果完全一样,这里可以发现,我们定义误差为z的好处了。

4. 代价函数关于任何一个权重的变化率:

Cwljk=al1kδlj.(BP4) (BP4) ∂ C ∂ w j k l = a k l − 1 δ j l .
直观来看一下,可以发现右式第一项是输入给权重w的神经元的激活值,右式第二项是输出自权重w的神经元的误差。当输入的激活值很小的时候,偏导数的值也会很小,我们可以得到一个结果,即来自低激活值神经元的权重学习会非常缓慢,基本已经饱和了。
回忆一下sigmoid函数的形状,结合(BP1)中的项 σ(zlk) σ ′ ( z k l ) ,当 σ(zlk) σ ( z k l ) 近似为0或者1的时候, σ σ 函数非常平缓,则 σ(zlk) σ ′ ( z k l ) 近似为0。所以如果输出神经元处于低激活值或者高激活值状态时,最终层的权重学习缓慢,这样我们称神经元已经饱和了。
总结一下4个公式:

这里写图片描述

2.2 四个方程的证明

为了给大家更直观的证明,我们先进行单个参数的公式证明,假设一些内容:

C=12(aly)2 C = 1 2 ( a l − y ) 2 zl=wlal1+bl z l = w l a l − 1 + b l al=σ(zl) a l = σ ( z l )

所有的证明都是基于多元微积分的链式法则:首先是BP1
δl===CzlCalalzl(aly)σ(zl)(2)(3)(4) (2) δ l = ∂ C ∂ z l (3) = ∂ C ∂ a l ∗ ∂ a l ∂ z l (4) = ( a l − y ) ∗ σ ′ ( z l )

这就是链式法则,来,我们继续BP2:
δl=====CzlCzl+1zl+1zlδl+1j(wl+1al+b)zlδl+1j(wl+1σ(zl)+b)zlδl+1jwl+1σ(zl)(5)(6)(7)(8)(9) (5) δ l = ∂ C ∂ z l (6) = ∂ C ∂ z l + 1 ∗ ∂ z l + 1 ∂ z l (7) = δ j l + 1 ∗ ∂ ( w l + 1 a l + b ) ∂ z l (8) = δ j l + 1 ∗ ∂ ( w l + 1 σ ( z l ) + b ) ∂ z l (9) = δ j l + 1 ∗ w l + 1 ∗ σ ′ ( z l )

继续,相信你也差不多知道BP3和BP4怎么证明了:BP3
Cbl===Calalzlzlbl(aly)σ(zl)1δl(10)(11)(12) (10) ∂ C ∂ b l = ∂ C ∂ a l ∗ ∂ a l ∂ z l ∗ ∂ z l ∂ b l (11) = ( a l − y ) ∗ σ ′ ( z l ) ∗ 1 (12) = δ l

最后一个BP4:
Cwl===Calalzlzlwl(aly)σ(zl)al1al1δl(13)(14)(15) (13) ∂ C ∂ w l = ∂ C ∂ a l ∗ ∂ a l ∂ z l ∗ ∂ z l ∂ w l (14) = ( a l − y ) ∗ σ ′ ( z l ) ∗ a l − 1 (15) = a l − 1 δ l
以上就是针对单个参数的证明过程,同理对于多参数的情况,同样是利用链式法则来计算,这就大家自己去证明,主要就是加了一个求和的过程。

3.总结

上述虽然是说的4个方程,但是还是提醒大家注意反向传播的目的究竟是什么,最后要得到的还是代价函数对偏置和权重的求偏导(即是让单个训练样本代价函数能够改变的最快),因此(BP3)和(BP4)是我们最终要求的,(BP1)和(BP2)是帮助我们理解反向传播和计算方便的中间量。

键盘不灵了,打字贼痛苦。之后会出神经网络1的讲解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值