吴恩达深度学习 反向传播(Back Propagation)公式推导技巧
由于之前看的深度学习的知识都比较零散,补一下吴老师的课程希望能对这块有一个比较完整的认识。课程分为5个部分(粗体部分为已经看过的):
- 神经网络和深度学习
- 改善深层神经网络:超参数调试、正则化以及优化
- 结构化机器学习项目
- 卷积神经网络
- 序列模型
第 1 部分讲的是神经网络的基础,从逻辑回归到浅层神经网络再到深层神经网络。
一直感觉反向传播(Back Propagation,BP)是这部分的重点,但是当时看的比较匆忙,有些公式的推导理解的不深刻,现在重新回顾一下,一是帮助自己梳理思路加深理解,二是记录下来以免遗忘。
1. 符号规定

图1 神经网络示意图1
一般计算神经网络层数时不包括输入层,因此图1中的网络层数 L 为4;
n[l] 表示第 l 层的神经元的数量,n[1] = n[2] = 5,n[3] = 3, n[4] =1,n[0] = nx = 3;
z[l] = W[l]·a[l-1] + b[l],w[l] 表示第 l 层的权重,b[l] 表示偏置;
a[l] 表示第 l 层中通过激活函数 g[l] 激活后的值,表示如下:a[l] = g[l](z[l])。
2. 核对矩阵维数
吴恩达老师推荐的小技巧,通过核对矩阵的维数可以有效地判断代码是否有错。核对矩阵维数对后面的反向传播公式的推导很有帮助。

图2 神经网络示意图2
举个例子:z[1] = W[1]·x+ b[1]
从图2可以看出:x 的维度是 (2,1),且 z[1] 的维度是 (3,1),由于等式两边维度一致,因此可以推出 W[1] 的维度为 (3,2),且 b[1] 也为(3,1)。从正面看,因为第 1 层有 3 个神经元,且有 2 个输入,因此每个神经元中的参数要分别与两个输入相乘,也很容易得出 W[1] 的维度。同理可以推出后面层的参数的维度,总结规律是:
W[l] = (n[l],n[l-1])
a[l] = (n[l],1)
z[l] = b[l] = (n[l],1)
dx 和 x 的维度相同
若有 m 个样本,将公式向量化之后只需将 a[l] 和 z[l] 改为大写,并将 1 改为 m 即可(对b,Python的广播机制将其维数从 1 变为 m )。
3. 前向传播和反向传播
3.1 前向传播
Input:a[l-1]
Output:a[l], cache(z[l]) (or W[l], b[l])
FP 的两个公式,比较简单,直接代入即可(主要根据这两个公式推导BP):
z[l] = W[l]·a[l-1] + b[l] --------- ①
a[l] = g[l](z[l]) ------------------- ②
3.2 反向传播
Input:da[l]
Output:da[l-1], dW[l], db[l]
BP的公式:
1. 首先求dz[l],由公式②,dz[l] = da[l]*g[l]'(z[l]),根据链式求导法则得出,因为*是元素对应相乘,所以两者顺序对结果不影响。
2. 再求dW[l],由公式①,dW[l] = dz[l]·a[l-1]T,因为乘积为点乘,因此两者顺序影响结果。此时,我们可以分析矩阵的维度来判断顺序以及是否要转置。dW[l] 为 (n[l],n[l-1]),dz[l]为 (n[l],1),a[l-1]为 (n[l-1],1),因此,要得到 dW[l] 的维度,应该将 dz[l] 放在前,并与a[l-1]T作点积运算。(注:吴恩达老师在讲课时,写的是a[l-1],我个人认为此处是笔误,欢迎大家讨论)
3. 同样根据公式①,容易得出:db[l] = dz[l]。
4. 最后,根据公式①,da[l-1] = W[l]T·dz[l],da[l-1] 的维度为 (n[l-1],1),W[l] 的维度为 (n[l],n[l-1]),dz[l]为 (n[l],1),显然需要将W[l]转置再与dz[l]作点积。
这样我们就得到的 Output 的三个值。
上面是我总结的关于方向传播中公式推导的一些技巧。可能是刚接触深度学习,对这些矩阵的维数以及是否要转置等等还不敏感,在找相关资料时也没有详细的解释(可能是因为太简单?...),于是自己梳理了一下。当然如果大家有更好的方法,望不吝赐教!
参考资料:http://mooc.study.163.com/course/2001281002?tid=2001392029#/info
吴恩达深度学习 反向传播(Back Propagation)公式推导技巧的更多相关文章
- 吴恩达深度学习第1课第4周-任意层人工神经网络(Artificial Neural Network,即ANN)(向量化)手写推导过程(我觉得已经很详细了)
学习了吴恩达老师深度学习工程师第一门课,受益匪浅,尤其是吴老师所用的符号系统,准确且易区分. 遵循吴老师的符号系统,我对任意层神经网络模型进行了详细的推导,形成笔记. 有人说推导任意层MLP很容易,我 ...
- 吴恩达深度学习第4课第3周编程作业 + PIL + Python3 + Anaconda环境 + Ubuntu + 导入PIL报错的解决
问题描述: 做吴恩达深度学习第4课第3周编程作业时导入PIL包报错. 我的环境: 已经安装了Tensorflow GPU 版本 Python3 Anaconda 解决办法: 安装pillow模块,而不 ...
- 吴恩达深度学习第2课第2周编程作业 的坑(Optimization Methods)
我python2.7, 做吴恩达深度学习第2课第2周编程作业 Optimization Methods 时有2个坑: 第一坑 需将辅助文件 opt_utils.py 的 nitialize_param ...
- 【Deeplearning.ai 】吴恩达深度学习笔记及课后作业目录
吴恩达深度学习课程的课堂笔记以及课后作业 代码下载:https://github.com/douzujun/Deep-Learning-Coursera 吴恩达推荐笔记:https://mp.weix ...
- 深度学习 吴恩达深度学习课程2第三周 tensorflow实践 参数初始化的影响
博主 撸的 该节 代码 地址 :https://github.com/LemonTree1994/machine-learning/blob/master/%E5%90%B4%E6%81%A9%E8 ...
- 吴恩达深度学习笔记(deeplearning.ai)之循环神经网络(RNN)(三)
1. 导读 本节内容介绍普通RNN的弊端,从而引入各种变体RNN,主要讲述GRU与LSTM的工作原理. 事先声明,本人采用ng在课堂上所使用的符号系统,与某些学术文献上的命名有所不同,不过核心思想都是 ...
- 吴恩达深度学习第1课第3周编程作业记录(2分类1隐层nn)
2分类1隐层nn, 作业默认设置: 1个输出单元, sigmoid激活函数. (因为二分类); 4个隐层单元, tanh激活函数. (除作为输出单元且为二分类任务外, 几乎不选用 sigmoid 做激 ...
- 吴恩达深度学习笔记(十一)—— dropout正则化
主要内容: 一.dropout正则化的思想 二.dropout算法流程 三.dropout的优缺点 一.dropout正则化的思想 在神经网络中,dropout是一种“玄学”的正则化方法,以减少过拟合 ...
- Coursera 吴恩达 深度学习 学习笔记
神经网络和深度学习 Week 1-2 神经网络基础 Week 3 浅层神经网络 Week 4 深层神经网络 改善深层神经网络 Week 1 深度学习的实用层面 Week 2 优化算法 Week 3 超 ...
随机推荐
- redux-saga框架使用详解及Demo教程
redux-saga框架使用详解及Demo教程 前面我们讲解过redux框架和dva框架的基本使用,因为dva框架中effects模块设计到了redux-saga中的知识点,可能有的同学们会用dva框 ...
- OC录制小视频
OC录制小视频 用 AVCaptureSession + AVCaptureMovieFileOutput 来录制视频,并通过AVAssetExportSeeion 手段来压缩视频并转换为 MP4 格 ...
- SQL Server 2012 - 动态SQL查询
动态SQL的两种执行方式:EXEC @sql 和 EXEC sys.sp_executesql @sql DECLARE @c_ids VARCHAR(200) SET @c_ids ='1,2' - ...
- 【mongdb主从复制和同步】
主从同步: Master: Slave: 副本集: #在卷本中加任意主机 #登录从 #登录主 #同步日志 #仲裁: 向集群中添加主机成为仲裁 #查看集群里的成员角色参数:
- Cab 安装不成功问题
使用 iexpress.exe 成功打包了cab文件. 可下面问题来了,用静态的html调用,提示安装. 确认安装之后,却提示找不到相应的*.ocx,导致无法安装文件到系统 分析具体原因:*.ocx ...
- ElasticSearch5插件安装
http://blog.csdn.net/napoay/article/details/53896348 #更新 sudo yum update -y sudo rpm -ivh http://dl. ...
- DXP常用的设置及快捷键
原文地址:http://www.cnblogs.com/NickQ/p/8799240.html 测试环境:Altium Designer Summer 16 一.快捷键 1.原理图和PCB通用快捷键 ...
- 用Turtle库画一个爱心
---恢复内容开始--- 用Python中的turtle库画一个爱心 这个学期,我学了Python语言,并学到其中的一个库:turtle库.用turtle库可以画一些你想画的图片,所以我就想画一个爱心 ...
- python网络编程之进程
一.什么是进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实 ...
- 网易云音乐API
网易云音乐API使用 封装了一些api调用 ZZRRegion/StNetease