3.10 直观理解反向传播-深度学习-Stanford吴恩达教授


←上一篇↓↑下一篇→
3.9 神经网络的梯度下降法回到目录3.11 随机初始化

直观理解反向传播 (Backpropagation Intuition (Optional))

这个视频主要是推导反向传播。

下图是逻辑回归的推导:

回想一下逻辑回归的公式(参考公式3.2、公式3.5、公式3.6、公式3.15)

x w b } ⇒ z = w T + b ⇒ a = σ ( z ) ⇒ L ( a , y ) (3.38) \left.\begin{matrix} x\\w\\b \end{matrix}\right\}\Rightarrow z=w^T+b\Rightarrow a=\sigma(z)\Rightarrow L(a,y) \tag{3.38} xwbz=wT+ba=σ(z)L(a,y)(3.38)

所以回想当时我们讨论逻辑回归的时候,我们有这个正向传播步骤,其中我们计算 z z z ,然后 a a a ,然后损失函数 L L L

x w b } ⏟ d w = d z ⋅ x , d b = d z ⇐ z = w T + b ⏟ d z = d a ⋅ g ′ ( z ) , g ( z ) = σ ( z ) , d L d z = d L d a ⋅ d a d z , d d z g ( z ) = g ′ ( z ) ⇐ a = σ ( z ) ⇐ L ( a , y ) ⏟ d a = d d a L ( a , y ) = ( − y log ⁡ a − ( 1 − y ) log ⁡ ( 1 − a ) ) ′ = − y a + 1 − y 1 − a (3.39) \underbrace{\left.\begin{matrix} x\\w\\b \end{matrix}\right\}}_{dw=dz\cdot x,db=dz} \Leftarrow \underbrace{z=w^T+b}_{dz=da\cdot g^{'}(z),g(z)=\sigma(z),\frac{dL}{dz}=\frac{dL}{da}\cdot \frac{da}{dz},\frac{d}{dz}g(z)=g^{'}(z)} \Leftarrow \underbrace{a=\sigma(z)\Leftarrow L(a,y)}_{da=\frac{d}{da}L(a,y)=(-y\log a-(1-y)\log(1-a))^{'}=-\frac ya+\frac{1-y}{1-a}} \tag{3.39} dw=dzx,db=dz xwbdz=dag(z),g(z)=σ(z),dzdL=dadLdzda,dzdg(z)=g(z) z=wT+bda=dadL(a,y)=(yloga(1y)log(1a))=ay+1a1y a=σ(z)L(a,y)(3.39)

神经网络的计算中,与逻辑回归十分类似,但中间会有多层的计算。下图是一个双层神经网络,有一个输入层,一个隐藏层和一个输出层。

前向传播:

计算 z [ 1 ] , a [ 1 ] z^{[1]},a^{[1]} z[1]a[1] ,再计算 z [ 2 ] , a [ 2 ] z^{[2]},a^{[2]} z[2]a[2] ,最后得到loss function

反向传播:

向后推算出 d a [ 2 ] da^{[2]} da[2] ,然后推算出 d z [ 2 ] dz^{[2]} dz[2] ,接着推算出 d a [ 1 ] da^{[1]} da[1] ,然后推算出 d z [ 1 ] dz^{[1]} dz[1] 。我们不需要对 x x x 求导,因为 x x x 是固定的,我们也不是想优化 x x x 。向后推算出 d a [ 2 ] da^{[2]} da[2] ,然后推算出 d z [ 2 ] dz^{[2]} dz[2] 的步骤可以合为一步:

d z [ 2 ] = a [ 2 ] − y , d W [ 2 ] = d z [ 2 ] a [ 1 ] T (3.40) dz^{[2]}=a^{[2]}-y,dW^{[2]}=dz^{[2]}a^{[1]T} \tag{3.40} dz[2]=a[2]y,dW[2]=dz[2]a[1]T(3.40)

(注意:逻辑回归中;为什么 a [ 1 ] T a^{[1]T} a[1]T 多了个转置: d w dw dw 中的 W W W (视频里是 W i [ 2 ] W^{[2]}_i Wi[2] )是一个列向量,而 W [ 2 ] W^{[2]} W[2] 是个行向量,故需要加个转置);

d b [ 2 ] = d z [ 2 ] (3.41) db^{[2]}=dz^{[2]} \tag{3.41} db[2]=dz[2](3.41)

d z [ 1 ] = W [ 2 ] T d z [ 2 ] ∗ g [ 1 ] ′ ( z [ 1 ] ) (3.41) dz^{[1]}=W^{[2]T}dz^{[2]}*g^{[1]'}(z^{[1]}) \tag{3.41} dz[1]=W[2]Tdz[2]g[1](z[1])(3.41)

注意:这里的矩阵: W [ 2 ] W^{[2]} W[2] 的维度是: ( n [ 2 ] , n [ 1 ] ) (n^{[2]},n^{[1]}) (n[2],n[1])

z [ 2 ] , d z [ 2 ] z^{[2]},dz^{[2]} z[2]dz[2] 的维度都是: ( n [ 2 ] , 1 ) (n^{[2]},1) (n[2],1) ,如果是二分类,那维度就是 ( 1 , 1 ) (1,1) (1,1)

z [ 1 ] , d z [ 1 ] z^{[1]},dz^{[1]} z[1]dz[1] 的维度都是: ( n [ 1 ] , 1 ) (n^{[1]},1) (n[1],1)

证明过程: 见公式3.42,其中 W [ 2 ] T d z [ 2 ] W^{[2]T}dz^{[2]} W[2]Tdz[2] 维度为: ( n [ 1 ] , n [ 2 ] ) 、 ( n [ 2 ] , 1 ) (n^{[1]},n^{[2]})、(n^{[2]},1) (n[1],n[2])(n[2],1) 相乘得到 ( n [ 1 ] , 1 ) (n^{[1]},1) (n[1],1) ,和 z [ 1 ] z^{[1]} z[1] 维度相同,

g [ 1 ] ′ ( z [ 1 ] ) g^{[1]'}(z^{[1]}) g[1](z[1]) 的维度为 ( n [ 1 ] , 1 ) (n^{[1]},1) (n[1],1) ,这就变成了两个都是 ( n [ 1 ] , 1 ) (n^{[1]},1) (n[1],1) 向量逐元素乘积。

实现后向传播有个技巧,就是要保证矩阵的维度相互匹配。最后得到 d W [ 1 ] dW^{[1]} dW[1] d b [ 1 ] db^{[1]} db[1] ,

d W [ 1 ] = d z [ 1 ] x T , d b [ 1 ] = d z [ 1 ] (3.43) dW^{[1]}=dz^{[1]}x^T,db^{[1]}=dz^{[1]} \tag{3.43} dW[1]=dz[1]xT,db[1]=dz[1](3.43)

可以看出 d W [ 1 ] dW^{[1]} dW[1] d W [ 2 ] dW^{[2]} dW[2] 非常相似,其中 x x x 扮演了 a [ 0 ] a^{[0]} a[0] 的角色, x T x^T xT 等同于 a [ 0 ] T a^{[0]T} a[0]T

由: Z [ 1 ] = W [ 1 ] x + b [ 1 ] , a [ 1 ] = g [ 1 ] ( Z [ 1 ] ) Z^{[1]}=W^{[1]}x+b^{[1]},a^{[1]}=g^{[1]}(Z^{[1]}) Z[1]=W[1]x+b[1],a[1]=g[1](Z[1]) 得到: Z [ 1 ] = W [ 1 ] x + b [ 1 ] , A [ 1 ] = g [ 1 ] ( Z [ 1 ] ) Z^{[1]}=W^{[1]}x+b^{[1]},A^{[1]}=g^{[1]}(Z^{[1]}) Z[1]=W[1]x+b[1],A[1]=g[1](Z[1])

Z [ 1 ] = [ ⋮ ⋮ ⋮ ⋮ z [ 1 ] ( 1 ) z [ 1 ] ( 2 ) ⋮ z [ 1 ] ( m ) ⋮ ⋮ ⋮ ⋮ ] Z^{[1]}=\left[\begin{matrix} \vdots & \vdots & \vdots & \vdots \\ z^{[1](1)} & z^{[1](2)} & \vdots & z^{[1](m)} \\ \vdots & \vdots & \vdots & \vdots \\ \end{matrix}\right] Z[1]=z[1](1)z[1](2)z[1](m)

注意:大写的 Z [ 1 ] Z^{[1]} Z[1] 表示 z [ 1 ] ( 1 ) , z [ 1 ] ( 2 ) , ⋯   , z [ 1 ] ( m ) z^{[1](1)},z^{[1](2)},\cdots,z^{[1](m)} z[1](1),z[1](2),,z[1](m) 的列向量堆叠成的矩阵,以下类同。

下图写了主要的推导过程:

d Z [ 2 ] = A [ 2 ] − Y (3.44) dZ^{[2]}=A^{[2]}-Y \tag{3.44} dZ[2]=A[2]Y(3.44) d W [ 2 ] = 1 m d Z [ 2 ] A [ 1 ] T (3.45) dW^{[2]}=\frac1mdZ^{[2]}A^{[1]T} \tag{3.45} dW[2]=m1dZ[2]A[1]T(3.45) d b [ 2 ] = 1 m n p . s u m ( d Z [ 2 ] , a x i s = 1 , k e e p d i m s = T r u e ) (3.46) db^{[2]}=\frac1mnp.sum(dZ^{[2]},axis=1,keepdims=True) \tag{3.46} db[2]=m1np.sum(dZ[2],axis=1,keepdims=True)(3.46) d Z [ 1 ] ⏟ ( n [ 1 ] , m ) = W [ 2 ] T d Z [ 2 ] ⏟ ( n [ 1 ] , m ) ∗ g [ 1 ] ′ ( Z [ 1 ] ) ⏟ ( n [ 1 ] , m ) (3.47) \underbrace{dZ^{[1]}}_{(n^{[1]},m)}=\underbrace{W^{[2]T}dZ^{[2]}}_{(n^{[1]},m)}*\underbrace{g^{[1]'}(Z^{[1]})}_{(n^{[1]},m)} \tag{3.47} (n[1],m) dZ[1]=(n[1],m) W[2]TdZ[2](n[1],m) g[1](Z[1])(3.47) d W [ 1 ] = 1 m d Z [ 1 ] x T (3.48) dW^{[1]}=\frac1mdZ^{[1]}x^T \tag{3.48} dW[1]=m1dZ[1]xT(3.48) d b [ 1 ] = 1 m n p . s u m ( d Z [ 1 ] , a x i s = 1 , k e e p d i m s = T r u e ) (3.49) db^{[1]}=\frac1mnp.sum(dZ^{[1]},axis=1,keepdims=True) \tag{3.49} db[1]=m1np.sum(dZ[1],axis=1,keepdims=True)(3.49)

吴恩达老师认为反向传播的推导是机器学习领域最难的数学推导之一,矩阵的导数要用链式法则来求,如果这章内容掌握不了也没大的关系,只要有这种直觉就可以了。还有一点,就是初始化你的神经网络的权重,不要都是0,而是随机初始化,下一章将详细介绍原因。

课程PPT

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


←上一篇↓↑下一篇→
3.9 神经网络的梯度下降法回到目录3.11 随机初始化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Zhao-Jichao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值