4.6 前向和反向传播-深度学习-Stanford吴恩达教授


←上一篇↓↑下一篇→
4.5 搭建深层神经网络快回到目录4.7 参数 vs. 超参数

前向和反向传播 (Forward and Backward Propagation)

之前我们学习了构成深度神经网络的基本模块,比如每一层都有前向传播步骤以及一个相反的反向传播步骤,这次视频我们讲讲如何实现这些步骤。

先讲前向传播,输入 a [ l − 1 ] a^{[l-1]} a[l1] ,输出是 a [ l ] a^{[l]} a[l] ,缓存为 z [ l ] z^{[l]} z[l] ;从实现的角度来说我们可以缓存下 w [ l ] w^{[l]} w[l] b [ l ] b^{[l]} b[l] ,这样更容易在不同的环节中调用函数。

在这里插入图片描述

所以前向传播的步骤可以写成: z [ l ] = W [ l ] ⋅ a [ l − 1 ] + b [ l ] a [ l ] = g [ l ] ( z [ l ] ) z^{[l]}=W^{[l]}\cdot a^{[l-1]} + b^{[l]}\quad a^{[l]}=g^{[l]}(z^{[l]}) z[l]=W[l]a[l1]+b[l]a[l]=g[l](z[l])

向量化实现过程可以写成: Z [ l ] = W [ l ] ⋅ A [ l − 1 ] + b [ l ] A [ l ] = g [ l ] ( Z [ l ] ) Z^{[l]}=W^{[l]}\cdot A^{[l-1]} + b^{[l]}\quad A^{[l]}=g^{[l]}(Z^{[l]}) Z[l]=W[l]A[l1]+b[l]A[l]=g[l](Z[l])

前向传播需要喂入 A [ 0 ] A^{[0]} A[0] 也就是 X X X ,来初始化;初始化的是第一层的输入值。 a [ 0 ] a^{[0]} a[0] 对应于一个训练样本的输入特征,而 A [ 0 ] A^{[0]} A[0] 对应于一整 ( m ) (m) (m) 个训练样本的输入特征,所以这就是这条链的第一个前向函数的输入,重复这个步骤就可以从左到右计算前向传播。

下面讲反向传播的步骤:

输入为 d a [ l ] da^{[l]} da[l] ,输出为 d a [ l − 1 ] da^{[l-1]} da[l1] d w [ l ] dw^{[l]} dw[l] , d b [ l ] db^{[l]} db[l]

在这里插入图片描述
所以反向传播的步骤可以写成:

(1) d z [ l ] = d a [ l ] cot ⁡ g [ l ] ′ ( z [ l ] ) dz^{[l]}=da^{[l]}\cot g^{[l]^{\prime}}(z^{[l]}) dz[l]=da[l]cotg[l](z[l])
(2) d w [ l ] = d z [ l ] ⋅ a [ l − 1 ] dw^{[l]}=dz^{[l]}\cdot a^{[l-1]} dw[l]=dz[l]a[l1]
(3) d b [ l ] = d z [ l ] db^{[l]}=dz^{[l]} db[l]=dz[l]
(4) d a [ l − 1 ] = w [ l ] T ⋅ d z [ l ] da^{[l-1]}=w^{[l]T}\cdot dz^{[l]} da[l1]=w[l]Tdz[l]
(5) d z [ l ] = w [ l + 1 ] T d z [ l + 1 ] ⋅ g [ l ] ( z [ l ] ) dz^{[l]}=w^{[l+1]T}dz^{[l+1]}\cdot g^{[l]}(z^{[l]}) dz[l]=w[l+1]Tdz[l+1]g[l](z[l])

式子(5)由式子(4)带入式子(1)得到,前四个式子就可实现反向函数。

向量化实现过程可以写成:

(6) d Z [ l ] = d A [ l ] ⋅ g [ l ] ′ ( Z [ l ] ) dZ^{[l]}=dA^{[l]}\cdot g^{[l]^{\prime}}(Z^{[l]}) dZ[l]=dA[l]g[l](Z[l])
(7) d W [ l ] = 1 m d Z [ l ] ⋅ A [ l − 1 ] T dW^{[l]}=\frac1mdZ^{[l]}\cdot A^{[l-1]T} dW[l]=m1dZ[l]A[l1]T
(8) d b [ l ] = 1 m n p . s u m ( d z [ l ] , a x i s = 1 , k e e p d i m s = T r u e ) db^{[l]}=\frac1mnp.sum(dz^{[l]}, axis=1, keepdims=True) db[l]=m1np.sum(dz[l],axis=1,keepdims=True)
(9) d A [ l − 1 ] = W [ l ] T ∗ d Z [ l ] dA^{[l-1]}=W^{[l]T}*dZ^{[l]} dA[l1]=W[l]TdZ[l]

总结一下:

在这里插入图片描述

第一层你可能有一个ReLU激活函数,第二层为另一个ReLU激活函数,第三层可能是sigmoid函数(如果你做二分类的话),输出值为,用来计算损失;这样你就可以向后迭代进行反向传播求导来求 d w [ 3 ] , d b [ 3 ] , d w [ 2 ] , d b [ 2 ] , d w [ 1 ] , d b [ 1 ] dw^{[3]} ,db^{[3]} ,dw^{[2]} ,db^{[2]} ,dw^{[1]} ,db^{[1]} dw[3]db[3]dw[2]db[2]dw[1]db[1] 。在计算的时候,缓存会把 z [ 1 ]   z [ 2 ]   z [ 3 ] z^{[1]}\ z^{[2]}\ z^{[3]} z[1] z[2] z[3] 传递过来,然后回传 d a [ 2 ] , d a [ 1 ] da^{[2]},da^{[1]} da[2]da[1] ,可以用来计算 d a [ 0 ] da^{[0]} da[0] ,但我们不会使用它,这里讲述了一个三层网络的前向和反向传播,还有一个细节没讲就是前向递归——用输入数据来初始化,那么反向递归(使用Logistic回归做二分类)——对 A [ l ] A^{[l]} A[l] 求导。

忠告:补补微积分和线性代数,多推导,多实践。

课程PPT

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


←上一篇↓↑下一篇→
4.5 搭建深层神经网络快回到目录4.7 参数 vs. 超参数

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhao-Jichao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值