2020-5-13 吴恩达-NN&DL-w4 深层NN(4.6 前向和反向传播(以3层NN实现为例))

274 篇文章 24 订阅
233 篇文章 0 订阅

1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai

4.6 前向和反向传播 Forward and backward propagation

上一节了解了构成深度NN的基本模块,每一层都有前向传播步骤以及一个相反的反向传播步骤,本节将介绍如何实现这些步骤。

前向传播

第l层输入a[l-1],输出a[l],保存z[l],W[l]和b[l]

前向传播的步骤

z [ l ] = W [ l ] a [ l − 1 ] + b [ l ] z^{[l]}=W^{[l]}a^{[l-1]}+b^{[l]} z[l]=W[l]a[l1]+b[l]
a [ l ] = g [ l ] ( z [ l ] ) a^{[l]}=g^{[l]}(z^{[l]}) a[l]=g[l](z[l])
输入特征 x = a [ 0 ] x=a^{[0]} x=a[0]

向量化实现

Z [ l ] = W [ l ] A [ l − 1 ] + b [ l ] Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]} Z[l]=W[l]A[l1]+b[l]
A [ l ] = g [ l ] ( Z [ l ] ) A^{[l]}=g^{[l]}(Z^{[l]}) A[l]=g[l](Z[l])
输入特征集合 X = A [ 0 ] X=A^{[0]} X=A[0]

反向传播

第l层输入da[l],输出da[l-1],dz[l],dW[l]和db[l]

反向传播的步骤

d z [ l ] = d a [ l ] ∗ g [ l ] ′ ( z [ l ] ) dz^{[l]}=da^{[l]}\ast g^{[l]'}(z^{[l]}) dz[l]=da[l]g[l](z[l])
d W [ l ] = d z [ l ] a [ l − 1 ] dW^{[l]}=dz^{[l]}a^{[l-1]} dW[l]=dz[l]a[l1]
d b [ l ] = d z [ l ] db^{[l]}=dz^{[l]} db[l]=dz[l]
d a [ l − 1 ] = W [ l ] T d z [ l ] da^{[l-1]}=W^{[l]T}dz^{[l]} da[l1]=W[l]Tdz[l]

3.9 神经网络的梯度下降法曾经给出过单隐层NN的dz公式

d z [ l ] = W [ l + 1 ] T d z [ l + 1 ] ∗ g [ l ] ′ ( z [ l ] ) dz^{[l]}=W^{[l+1]T}dz^{[l+1]}∗g^{[l]′}(z^{[l]}) dz[l]=W[l+1]Tdz[l+1]g[l](z[l])

注意,其实2个公式是一致的。

向量化实现

d Z [ l ] = d A [ l ] ∗ g [ l ] ′ ( Z [ l ] ) dZ^{[l]}=dA^{[l]}\ast g^{[l]'}(Z^{[l]}) dZ[l]=dA[l]g[l](Z[l])
d W [ l ] = 1 m d Z [ l ] A [ l − 1 ] T dW^{[l]}=\frac 1m dZ^{[l]}A^{[l-1]T} dW[l]=m1dZ[l]A[l1]T
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]}=\frac 1m np.sum(dZ^{[l]},axis=1,keepdims=True) db[l]=m1np.sum(dZ[l],axis=1,keepdims=True)
d A [ l − 1 ] = W [ l ] T d Z [ l ] dA^{[l-1]}=W^{[l]T}dZ^{[l]} dA[l1]=W[l]TdZ[l]

汇总

输入X

  • 第一层使用修正线性单元激活函数Relu
  • 第二层使用另外一个Relu函数
  • 第三层使用sigmoid函数(如果是二分分类)
  • 输出预测值 y ^ \hat y y^
  • 计算损失 L ( y ^ , y ) L(\hat y,y) L(y^,y)
    在这里插入图片描述

然后开始向后迭代,反向传播求导

  • 使用保存的 z [ l ] z^{[l]} z[l]来计算 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]
  • 依次回传 d a [ 3 ] , d a [ 2 ] , d a [ 1 ] da^{[3]},da^{[2]},da^{[1]} da[3]da[2]da[1]

以上就是一个3层NN的前向和反向传播。

前向传播,我们使用输入数据X来初始化。
对于逻辑回归的反向传播,初始化使用的是
d A [ l ] = ( − y ( 1 ) a ( 1 ) + 1 − y ( 1 ) 1 − a ( 1 ) . . . . . . − y ( m ) a ( m ) + 1 − y ( m ) 1 − a ( m ) ) dA^{[l]}=(-\frac {y^{(1)}}{a^{(1)}}+\frac {1-y^{(1)}}{1-a^{(1)}}......-\frac {y^{(m)}}{a^{(m)}}+\frac {1-y^{(m)}}{1-a^{(m)}}) dA[l]=(a(1)y(1)+1a(1)1y(1)......a(m)y(m)+1a(m)1y(m))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值