《机器学习》学习笔记4.9:反向传播(BP算法)详解

参考了台湾大学李宏毅老师2021版《机器学习》课程

此处符号表示与吴恩达的略有不同。

单个训练集的代价函数用 C ( θ ) C(\theta) C(θ)表示,所有训练集代价函数之和用 L ( θ ) L(\theta) L(θ)表示,

神经网络中的参数 θ \theta θ包括权重 w w w和偏置 b b b

g ( x ) g(x) g(x) σ ( x ) \sigma(x) σ(x)都是指某种激活函数。

终于理清反向传播算法(Backpropagation Algorithm,BP算法)的过程了。


1 梯度下降

在用梯度下降算法时,网络参数 θ = { w 1 , w 2 , . . . , b 1 , b 2 } \theta = \{w_1,w_2,...,b_1,b_2\} θ={w1,w2,...,b1,b2},我们要做的是选定一个初始参数 θ 0 \theta^0 θ0,计算它对代价函数的梯度 ∇ L ( θ 0 ) \nabla L(\theta^0) L(θ0),然后通过梯度下降更新为 θ 1 = θ 0 − α ∇ J ( θ 0 ) \theta^1 = \theta^0-\alpha \nabla J(\theta^0) θ1=θ0αJ(θ0),反复这个过程直到收敛。

其中 ∇ L ( θ ) = [ ∂ ∂ w 1 L ( θ ) ∂ ∂ w 2 L ( θ ) . . . ∂ ∂ b 1 L ( θ ) ∂ ∂ b 2 L ( θ ) ] {{\nabla L(\theta)}}=\begin{bmatrix} \frac{\partial }{\partial {w_1}}L\left( \theta \right) \\\frac{\partial }{\partial {w_2}}L\left( \theta \right)\\ ...\\ \frac{\partial }{\partial {b_1}}L\left( \theta \right)\\ \frac{\partial }{\partial {b_2}}L\left( \theta \right) \end{bmatrix} L(θ)=w1L(θ)w2L(θ)...b1L(θ)b2L(θ)

在神经网络中参数可能有上百万个, ∇ L ( θ ) {{\nabla L(\theta)}} L(θ)为上百万维向量,反向传播算法就是用于高效地计算这个向量,然后再用梯度下降求代价函数最小值。

2 反向传播

设神经网络(NN)某一组输出值与标签之间的代价为 C n C^n Cn,则将所有训练集的代价加起来即为 L ( θ ) L(\theta) L(θ),这里以对权重 w w w求偏导为例得到右边的式子。
在这里插入图片描述
接下来只对一组训练数据进行计算 ∂ C ∂ w \frac{\partial C}{\partial {w}} wC(最后将所有的训练集加起来即可)。

假设神经网络只有两个输入 x 1 , x 2 x_1,x_2 x1,x2,那么加权和为 z = x 1 w 1 + x 2 w 2 + b z=x_1w_1+x_2w_2+b z=x1w1+x2w2+b。通过链式法则可知:

∂ C ∂ w = ∂ z ∂ w ∂ C ∂ z \frac{\partial C}{\partial {w}}=\frac{\partial z}{\partial {w}}\frac{\partial C}{\partial {z}} wC=wzzC

这里 ∂ z ∂ w \frac{\partial z}{\partial {w}} wz将使用顺推法(forward pass) ∂ C ∂ z \frac{\partial C}{\partial {z}} zC将使用逆推法(backward pass)
在这里插入图片描述

2.1 顺推法

由上可得: ∂ z ∂ w 1 = x 1 \frac{\partial z}{\partial {w_1}}=x_1 w1z=x1 ∂ z ∂ w 2 = x 2 \frac{\partial z}{\partial {w_2}}=x_2 w2z=x2

即对于在这之后的层上 ∂ z ∂ w \frac{\partial z}{\partial {w}} wz都为前一层的输出值。

只要把输入丢入神经网络,计算每个神经元的输出,即可得到每个 ∂ z ∂ w \frac{\partial z}{\partial {w}} wz值。这个步骤即为顺推法
在这里插入图片描述

2.2 顺推法求 ∂ C ∂ z \frac{\partial C}{\partial {z}} zC

如果继续使用顺推法,将网络向后拓展,第一层的输出值为 a = g ( z ) a=g(z) a=g(z),由链式法则可得:

∂ C ∂ z = ∂ a ∂ z ∂ C ∂ a \frac{\partial C}{\partial {z}}=\frac{\partial a}{\partial {z}}\frac{\partial C}{\partial {a}} zC=zaaC

易算出 ∂ a ∂ z = g ′ ( z ) \frac{\partial a}{\partial {z}}=g'(z) za=g(z),主要问题在于计算 ∂ C ∂ a \frac{\partial C}{\partial {a}} aC
在这里插入图片描述
由网络图可知, a a a会通过 z ′ , z ′ ′ z',z'' z,z影响 C C C。由链式法则可得:

∂ C ∂ a = ∂ z ′ ∂ a ∂ C ∂ z ′ + ∂ z ′ ′ ∂ a ∂ C ∂ z ′ ′ \frac{\partial C}{\partial {a}}=\frac{\partial z'}{\partial {a}}\frac{\partial C}{\partial {z'}}+\frac{\partial z''}{\partial {a}}\frac{\partial C}{\partial {z''}} aC=azzC+azzC

此网络中只有两项,如果有更多项则都需根据链式法则加起来。

易算出 ∂ z ′ ∂ a = w 3 \frac{\partial z'}{\partial {a}}=w_3 az=w3 ∂ z ′ ′ ∂ a = w 4 \frac{\partial z''}{\partial {a}}=w_4 az=w4,此时有:

∂ C ∂ z = ∂ a ∂ z ∂ C ∂ a = g ′ ( z ) [ w 3 ∂ C ∂ z ′ + w 4 ∂ C ∂ z ′ ′ ] \frac{\partial C}{\partial {z}}=\frac{\partial a}{\partial {z}}\frac{\partial C}{\partial {a}}=g'(z)[w_3\frac{\partial C}{\partial {z'}}+w_4\frac{\partial C}{\partial {z''}}] zC=zaaC=g(z)[w3zC+w4zC]

问题在于如何算 ∂ C ∂ z ′ , ∂ C ∂ z ′ ′ \frac{\partial C}{\partial {z'}},\frac{\partial C}{\partial {z''}} zC,zC。可从两种情况考虑:

1、已经到了输出层可直接由链式法则算出。
在这里插入图片描述
2、还没到输出层,继续套娃计算直到到输出层。
在这里插入图片描述
但是这样计算过于复杂,所以需要使用逆推法。

2.3 逆推法

在顺推法求 ∂ C ∂ z \frac{\partial C}{\partial {z}} zC中我们得到了这个式子:

∂ C ∂ z = ∂ a ∂ z ∂ C ∂ a = g ′ ( z ) [ w 3 ∂ C ∂ z ′ + w 4 ∂ C ∂ z ′ ′ ] \frac{\partial C}{\partial {z}}=\frac{\partial a}{\partial {z}}\frac{\partial C}{\partial {a}}=g'(z)[w_3\frac{\partial C}{\partial {z'}}+w_4\frac{\partial C}{\partial {z''}}] zC=zaaC=g(z)[w3zC+w4zC]

将相应的计算图画出来,其实就是顺推倒过来。这里的 g ′ ( z ) g'(z) g(z)已经通过正推得到,是一个常数。
在这里插入图片描述
由此可知,我们可以通过下一层的 ∂ C ∂ z ( L ) \frac{\partial C}{\partial {z^{(L)}}} z(L)C来推上一层的 ∂ C ∂ z ( L − 1 ) \frac{\partial C}{\partial {z^{(L-1)}}} z(L1)C,只需要知道权值 w w w和已计算出 g ′ ( z ) g'(z) g(z)

这个步骤即为逆推法

对于下图的神经网络,用顺推法求 ∂ C ∂ z \frac{\partial C}{\partial {z}} zC需要套娃递归,计算量过大,所以我们可以先算最后一层,再用逆推法往前推。
在这里插入图片描述

3 总结

使用反向传播我们要做的就是:

先用正向传播计算出各个加权和 z z z、神经元的输出值 a a a a = g ′ ( z ) a=g'(z) a=g(z))、最后一层的代价函数 C C C

然后通过顺推法得到每个 ∂ z ∂ w \frac{\partial z}{\partial {w}} wz值( ∂ z ∂ w = a \frac{\partial z}{\partial {w}}=a wz=a),

然后通过逆推法,先求最后一层的 ∂ C ∂ z ( L ) \frac{\partial C}{\partial {z^{(L)}}} z(L)C,再推出前面所有的 ∂ C ∂ z \frac{\partial C}{\partial {z}} zC

二者相乘,即为 ∂ C ∂ w = ∂ z ∂ w ∂ C ∂ z \frac{\partial C}{\partial {w}}=\frac{\partial z}{\partial {w}}\frac{\partial C}{\partial {z}} wC=wzzC

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值