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

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

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

下图是逻辑回归的推导:

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

xwb}⇒z=wT+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}xwb​⎭⎬⎫​⇒z=wT+b⇒a=σ(z)⇒L(a,y)(3.38)

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

xwb}⏟dw=dz⋅x,db=dz⇐z=wT+b⏟dz=da⋅g′(z),g(z)=σ(z),dLdz=dLda⋅dadz,ddzg(z)=g′(z)⇐a=σ(z)⇐L(a,y)⏟da=ddaL(a,y)=(−ylog⁡a−(1−y)log⁡(1−a))′=−ya+1−y1−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=dz⋅x,db=dzxwb​⎭⎬⎫​​​⇐dz=da⋅g′(z),g(z)=σ(z),dzdL​=dadL​⋅dzda​,dzd​g(z)=g′(z)z=wT+b​​⇐da=dad​L(a,y)=(−yloga−(1−y)log(1−a))′=−ay​+1−a1−y​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

反向传播:

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

dz[2]=a[2]−y,dW[2]=dz[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]Ta^{[1]T}a[1]T 多了个转置: dwdwdw 中的 WWW (视频里是 Wi[2]W^{[2]}_iWi[2]​ )是一个列向量,而 W[2]W^{[2]}W[2] 是个行向量,故需要加个转置);

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

dz[1]=W[2]Tdz[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],dz[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],dz[1]z^{[1]},dz^{[1]}z[1],dz[1] 的维度都是: (n[1],1)(n^{[1]},1)(n[1],1) 。

证明过程: 见公式3.42,其中 W[2]Tdz[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) 向量逐元素乘积。

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

dW[1]=dz[1]xT,db[1]=dz[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)

可以看出 dW[1]dW^{[1]}dW[1] 和 dW[2]dW^{[2]}dW[2] 非常相似,其中 xxx 扮演了 a[0]a^{[0]}a[0] 的角色, xTx^TxT 等同于 a[0]Ta^{[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) 的列向量堆叠成的矩阵,以下类同。

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

dZ[2]=A[2]−Y(3.44)dZ^{[2]}=A^{[2]}-Y \tag{3.44}dZ[2]=A[2]−Y(3.44)dW[2]=1mdZ[2]A[1]T(3.45)dW^{[2]}=\frac1mdZ^{[2]}A^{[1]T} \tag{3.45}dW[2]=m1​dZ[2]A[1]T(3.45)db[2]=1mnp.sum(dZ[2],axis=1,keepdims=True)(3.46)db^{[2]}=\frac1mnp.sum(dZ^{[2]},axis=1,keepdims=True) \tag{3.46}db[2]=m1​np.sum(dZ[2],axis=1,keepdims=True)(3.46)dZ[1]⏟(n[1],m)=W[2]TdZ[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)dW[1]=1mdZ[1]xT(3.48)dW^{[1]}=\frac1mdZ^{[1]}x^T \tag{3.48}dW[1]=m1​dZ[1]xT(3.48)db[1]=1mnp.sum(dZ[1],axis=1,keepdims=True)(3.49)db^{[1]}=\frac1mnp.sum(dZ^{[1]},axis=1,keepdims=True) \tag{3.49}db[1]=m1​np.sum(dZ[1],axis=1,keepdims=True)(3.49)

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

课程PPT






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

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

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

    ←上一篇 ↓↑ 下一篇→ 4.5 搭建深层神经网络快 回到目录 4.7 参数 vs. 超参数 前向和反向传播 (Forward and Backward Propagation) 之前我们学习了构成深 ...

  2. 4.2 深层网络中的前向传播-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 4.1 深层神经网络 回到目录 4.3 核对矩阵的维数 深层网络中的前向传播 (Forward Propagation in a Deep Network) 跟往常一样,我们 ...

  3. 3.9 神经网络的梯度下降法-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.8 激活函数的导数 回到目录 3.10 直观理解反向传播 神经网络的梯度下降法 (Gradient Descent for Neural Networks) 在这个视频中 ...

  4. 3.11 随机初始化-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.10 直观理解反向传播 回到目录 3.12 总结习题 随机初始化 (Radom Initialization) 当你训练神经网络时,权重随机初始化是很重要的.对于逻辑回归 ...

  5. 2.19 总结-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.18 Logistic 损失函数的解释 回到目录 3.1 神经网络概览 文章目录 总结 习题 第 11 题 第 12 题 第 13 题 第 14 题 第 15 题 第 1 ...

  6. 3.12 总结-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.11 随机初始化 回到目录 4.1 深层神经网络 文章目录 总结 习题 第 21 题 第 22 题 第 23 题 第 24 题 第 25 题 第 26 题 第 27 题 ...

  7. 3.6 激活函数-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.5 向量化实现的解释 回到目录 3.7 为什么需要非线性激活函数 激活函数 (Activation Function) 使用一个神经网络时,需要决定使用哪种激活函数用隐藏 ...

  8. 3.5 向量化实现的解释-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.4 多个例子中的向量化 回到目录 3.6 激活函数 向量化实现的解释 (Explanation for Vectorized Implementation) 在上一个视频 ...

  9. 2.10 m 个样本的梯度下降-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.9 Logistic 回归的梯度下降法 回到目录 2.11 向量化 mmm 个样本的梯度下降 (Gradient Descent on mmm example) 在之前的 ...

最新文章

  1. lumen mysql 事务_简单几部搞定laravel/lumen跨库操作
  2. 微软洪小文:制造业是最先享受AI成果的领域
  3. java做的一个将中文转换成Unicode码的工具类【转载】做个标记,明天研究下
  4. cannot be deleted directly via the port API: has device owner network:floatingip
  5. Python二分查找/折半查找算法详解--(面试常考)
  6. python os.access_os.access(path, mode)
  7. netstat(win)
  8. cf有没有linux版本,急切求助万能的吧友 !!! Linux系统能玩穿越火线吗 好
  9. docker .env文件_基于Docker搭建Nacos集群
  10. HTML+CSS零基础学习笔记(二)
  11. PHP中英双语网站的设计思路
  12. win10解压安装mysql缺少MSVCR120.dll文件的问题
  13. 复利思维,静待时间的玫瑰慢慢绽放
  14. 苹果IOS隐藏复制链接等按钮失效及报错the permission value is offline verifying解决办法
  15. md5 java实现与在线工具结果不符_「md5在线解密」使用MD5在线加解密工具,对汉字进行加密,得到不同的结果 - seo实验室...
  16. 孤独星球android app,孤独星球免费版
  17. 【组合数学】指数生成函数 ( 指数生成函数概念 | 排列数指数生成函数 = 组合数普通生成函数 | 指数生成函数示例 )
  18. VMware中设置处理器数量的问题
  19. 【安卓学习之第三方库】 Rxpay学习:支付宝微信支付
  20. 流媒体直播防盗链安全控制

热门文章

  1. 2017-2018 2 20179214《网络实践攻防》第三周作业(二)
  2. ubuntu 查看网卡 数据包处理 速度
  3. Java反射 - 2(对象复制,父类域,内省)
  4. LeetCode 6. ZigZag Conversion
  5. SPC.NET,为5年的开发做个结尾
  6. win32汇编系统函数简单小示例图解
  7. Win32 汇编要点总结
  8. java异常处理学习总结
  9. Linux块设备驱动总结
  10. MaterialDesign动画