由于之前看的深度学习的知识都比较零散,补一下吴老师的课程希望能对这块有一个比较完整的认识。课程分为5个部分(粗体部分为已经看过的):

  1. 神经网络和深度学习
  2. 改善深层神经网络:超参数调试、正则化以及优化
  3. 结构化机器学习项目
  4. 卷积神经网络
  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. 吴恩达深度学习第1课第4周-任意层人工神经网络(Artificial Neural Network,即ANN)(向量化)手写推导过程(我觉得已经很详细了)

    学习了吴恩达老师深度学习工程师第一门课,受益匪浅,尤其是吴老师所用的符号系统,准确且易区分. 遵循吴老师的符号系统,我对任意层神经网络模型进行了详细的推导,形成笔记. 有人说推导任意层MLP很容易,我 ...

  2. 吴恩达深度学习第4课第3周编程作业 + PIL + Python3 + Anaconda环境 + Ubuntu + 导入PIL报错的解决

    问题描述: 做吴恩达深度学习第4课第3周编程作业时导入PIL包报错. 我的环境: 已经安装了Tensorflow GPU 版本 Python3 Anaconda 解决办法: 安装pillow模块,而不 ...

  3. 吴恩达深度学习第2课第2周编程作业 的坑(Optimization Methods)

    我python2.7, 做吴恩达深度学习第2课第2周编程作业 Optimization Methods 时有2个坑: 第一坑 需将辅助文件 opt_utils.py 的 nitialize_param ...

  4. 【Deeplearning.ai 】吴恩达深度学习笔记及课后作业目录

    吴恩达深度学习课程的课堂笔记以及课后作业 代码下载:https://github.com/douzujun/Deep-Learning-Coursera 吴恩达推荐笔记:https://mp.weix ...

  5. 深度学习 吴恩达深度学习课程2第三周 tensorflow实践 参数初始化的影响

    博主 撸的  该节 代码 地址 :https://github.com/LemonTree1994/machine-learning/blob/master/%E5%90%B4%E6%81%A9%E8 ...

  6. 吴恩达深度学习笔记(deeplearning.ai)之循环神经网络(RNN)(三)

    1. 导读 本节内容介绍普通RNN的弊端,从而引入各种变体RNN,主要讲述GRU与LSTM的工作原理. 事先声明,本人采用ng在课堂上所使用的符号系统,与某些学术文献上的命名有所不同,不过核心思想都是 ...

  7. 吴恩达深度学习第1课第3周编程作业记录(2分类1隐层nn)

    2分类1隐层nn, 作业默认设置: 1个输出单元, sigmoid激活函数. (因为二分类); 4个隐层单元, tanh激活函数. (除作为输出单元且为二分类任务外, 几乎不选用 sigmoid 做激 ...

  8. 吴恩达深度学习笔记(十一)—— dropout正则化

    主要内容: 一.dropout正则化的思想 二.dropout算法流程 三.dropout的优缺点 一.dropout正则化的思想 在神经网络中,dropout是一种“玄学”的正则化方法,以减少过拟合 ...

  9. Coursera 吴恩达 深度学习 学习笔记

    神经网络和深度学习 Week 1-2 神经网络基础 Week 3 浅层神经网络 Week 4 深层神经网络 改善深层神经网络 Week 1 深度学习的实用层面 Week 2 优化算法 Week 3 超 ...

随机推荐

  1. etcd部署说明

    etcd是一个K/V分布式存储,每个节点都保存完成的一份数据.有点类似redis.但是etcd不是数据库. 1.先说废话.之所以会用etcd,并不是实际项目需要,而是前面自己写的上传的DBCacheS ...

  2. 【最新】LuaJIT 32/64 位字节码,从编译到使用全纪录

    网上关于 LuaJIT 的讨论,已经显得有些陈旧.如果你对 LuaJIT 编译 Lua 源文件为具体的 32位或64位字节码,极其具体使用感兴趣的话,不妨快速读一下这篇文章.此文章针对尝试在 iOS ...

  3. easyui 上 datagrid 的表头的checkbox全选时 取消选中 disabled的checkbox

    业务需求: 正常情况下,easyui的全选checkbox会选择表中全部的checkbox包括行.及时对checkbox加了disable属性也没有效果.但是现在的业务是当对checkbox加了dis ...

  4. Linux——查看

    查看当前系统版本: lsb_release -a #没有装:yum install lsb 查看当前运行端口: netstat -atunlp #没有装:yum install net-tools - ...

  5. Thinkphp5 使用composer中seeder播种机

    前因: 前几天,客户要求做一个会员问答的系统,我就按流程做了,到了需要调用数据库数据时,觉得一个个添加又有点笨~ 解决过程: 后来查了查手册,看看国外blog案例,我搞出来了个不错的方法~~~ 我的使 ...

  6. 随机返回经典语句接口API

    api接口:https://www.liutianyou.com/api/?type=js&charset=utf-8 可以单独将上面链接,在浏览器中查看效果 ​ 这是get请求,参数:typ ...

  7. .Net Core如何在程序的任意位置使用和注入服务

    最近有人问我:我该如何在Startup类之外的地方注入我的服务呢,都写在startup里看着好乱:我该如何在程序的其他地方获取我注入的服务呢: 故我写了这篇博客,文中有不对的地方欢迎指正. 一.如何在 ...

  8. 详解PreparedStatement

    详解PreparedStatement /** * PrepareStatement 测试插入数据库 */ /** * 如果使用Statement,那么就必须在SQL语句中,实际地去嵌入值,比如之前的 ...

  9. 008---vim编辑器

    vim 编辑器 三个模式 三个模式之间切换 图 命令模式进入编辑模式 A:行末 a:向后 i:向前 I:行首 o:向上 O:向下 命令模式 复制 yy:复制光标所在行 4yy:向下复制四行 剪切(删除 ...

  10. 【EXCEL】XMLファイルを開く方法(XML文件打开方法)

    前言 XMLとは:Extensible Markup Language(エクステンシブル マークアップ ランゲージ)は.基本的な構文規則を共通とすることで.任意の用途向けの言語に拡張することを容易とし ...