上一节中,看了一个例子,使用流程图来计算函数J,现在我们清理一下流程图的描述,看看如何利用它计算出函数J的导数。

下图是一个流程图,假设要计算J对v的导数,怎么计算呢?把v值拿过来,改变一下,那么J的值会怎么变呢?定义上,J=3vJ=3vJ=3v,现在v=11,如果让v增加一点点,如果到11.001,那么J的值就变为33.003,。当v增加0.001,最终结果是J上升到原来的三倍,所以J对v的导数就等于3,因为对于任何v的增量,J都会有3倍增量,而且这类似于在上一节中的例子,有f(a)=3af(a)=3af(a)=3a。

在反向传播算法中的术语,可以看到,如果想计算最后输出变量的导数使用你最关心的变量,对v的导数,那么我们就做完了一步反向传播。在这个流程图中是一个反向步。

看一下另外的例子,dJda\frac{dJ}{da}dadJ​怎么计算呢?换句话说,如果我们提高a的数值,对J的数值有什么影响?我们看一下这个例子,变量a=5,让它增加到5.001,那么对v的影响就是a+U,之前是11,现在变为11.001,J就变成33.003了。所以可以看到的是,如果让a增加0.001,J增加0.003,那么增加啊,也就是把这个5换成某个新值,那么a的该变量就会传播到流程图的最右,所以J最后是33.003,所以J的增量是3乘于a的增量,意味着这个导数是3。

要解释这个计算过程其中一种方法是,就是如果你改变了啊,那也会改变v,通过改变v,也会改变J。所以J值的净变化量,当你提升这个值,当把a值提高一点点,这就是J的变化量。

首先a增加了,v也会增加,v增加多少呢?增加了一个量,这取决于dvda\frac{dv}{da}dadv​,然后v的变化导致J也在增加,在微积分中这叫链式法则。如果a影响到v影响到J,当你让a变大时,J的变化量就是当你改变a时v的变化量乘于改变v时J的变化量,在微积分中这叫链式法则。

我们从计算中可以看到,如果让a增加0.001,v也会变化相同的大小,所以dvda=1\frac{dv}{da}=1dadv​=1。事实上,KaTeX parse error: Expected '}', got 'EOF' at end of input: \frac{dJ}{dv3,dvda=1\frac{dv}{da}=1dadv​=1,所以这个乘积为3,也就是dJda=3\frac{dJ}{da}=3dadJ​=3

这张小图展示了dJdv\frac{dJ}{dv}dvdJ​就是这个对这个变量的导数,这可以帮助你计算dJda\frac{dJ}{da}dadJ​,所以这是另一步反向传播计算。

现在介绍一些新的符号约定,当你编程实现反向传播时,通常会有一个最终输出值是你需要关心的,所以有很多计算尝试计算输出变量的导数。所以d(输出变量)\d(某个变量)的导数就用d(var)命名。在很多计算中你需要计算最终输出结果的导数,还有各种中间变量,比如a,b,c,u,v,当在软件里实现的时候,变量名叫什么?可以做的一件事是,在python中可以写一个很长的变量名,但变量名太长也不好,我们用d(J)/d(var),但因为你一直对d(J)求导,对这个最终输出变量求导,这里要介绍一个新符号。在程序里,当在编程的时候,在代码里,我们就使用变量名dvar来表示那个量,所以dvar在程序中表示导数。我们关心的最终变量J的导数有时候是L对代码中各种中间值的导数。

我们通过这个流程图部分完成的反向传播算法,在下面我们会看看这个例子剩下的部分。使用一张新的流程图,回顾一下,到目前为止,我们一直在往回传播,并计算出d(J)/d(v)=3,同理,可有d(J)/d(a)=3。

我们继续计算导数,我们看一下值u,dJdu\frac{dJ}{du}dudJ​是多少呢?通过和之前类似的计算,从u=6出发,令u增加到6.001,那么v之前是11,现在变成11.001了,J就从33变成33.003。所以J的增量是3倍,所以这就等于dJdu=dJdv∗dvdu=3\frac{dJ}{du}=\frac{dJ}{dv}*\frac{dv}{du}=3dudJ​=dvdJ​∗dudv​=3。

现在仔细看最后一个例子dJdb\frac{dJ}{db}dbdJ​,使用微积分的链式法则,这可以写成两者的乘积,dJdb=dJdu∗dudb\frac{dJ}{db}=\frac{dJ}{du}*\frac{du}{db}dbdJ​=dudJ​∗dbdu​,理由是,如果将b改变一点点,比如改为3.001,它影响J的方式是,首先影响u,它对u的影响有多大呢?u的定义是u=b∗cu=b*cu=b∗c,所以当b=3时u的值为6,现在u的值变为6.002,所以这告诉我们dudb=2\frac{du}{db}=2dbdu​=2,当b增加0.001时,u就增加2倍。所以dJdb=dJdu∗dudb=6\frac{dJ}{db}=\frac{dJ}{du}*\frac{du}{db}=6dbdJ​=dudJ​∗dbdu​=6。同理,可以推导得到dJdc=dJdu∗dudc=9\frac{dJ}{dc}=\frac{dJ}{du}*\frac{du}{dc}=9dcdJ​=dudJ​∗dcdu​=9。

本节的要点是,对于那些例子,当计算所有这些导数时,最有效率的办法是从右到左计算,跟着这个红色箭头走,特别是当我们第一次计算对v的导数时,之后在计算对a的导数时就可以用到,然后对u的导数,可以帮助计算对b的导数,然后对c的导数。

所以这是一个计算流程图,就是正向或者说从左到右的计算来计算成本函数,可能需要优化参数,然后反向从右到左计算导数。

吴恩达深度学习 —— 2.8 计算图的导数计算相关推荐

  1. 吴恩达深度学习 —— 3.8 激活函数的导数

    当你对你的神经网络使用反向传播的时候,你真的需要计算激活函数的斜率或者导数,我们看看激活函数的选择,以及如何计算这些函数的斜率. 可以看到很熟悉的sigmoid激活函数,所以对于任意给定的z值,也许这 ...

  2. 深度学习入门首推资料--吴恩达深度学习全程笔记分享

    本文首发于微信公众号"StrongerTang",可打开微信搜一搜,或扫描文末二维码,关注查看更多文章. 原文链接:(https://mp.weixin.qq.com/s?__bi ...

  3. 花书+吴恩达深度学习(二八)深度生成模型之有向生成网络(VAE, GAN, 自回归网络)

    文章目录 0. 前言 1. sigmoid 信念网络 2. 生成器网络 3. 变分自编码器 VAE 4. 生成式对抗网络 GAN 5. 生成矩匹配网络 6. 自回归网络 6.1 线性自回归网络 6.2 ...

  4. 花书+吴恩达深度学习(二二)自编码器(欠完备,DAE,CAE,PSD)

    文章目录 0. 前言 1. 欠完备自编码器 2. 去噪自编码器 DAE 3. 收缩自编码器 CAE 4. 稀疏自编码器 5. 预测稀疏分解 PSD 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞 ...

  5. 花书+吴恩达深度学习(十五)序列模型之循环神经网络 RNN

    目录 0. 前言 1. RNN 计算图 2. RNN 前向传播 3. RNN 反向传播 4. 导师驱动过程(teacher forcing) 5. 不同序列长度的 RNN 如果这篇文章对你有一点小小的 ...

  6. 吴恩达深度学习教程——中文笔记网上资料整理

    吴恩达深度学习笔记整理 内容为网上博主博文整理,如有侵权,请私信联系. 课程内容: Coursera:官方课程安排(英文字幕).付费用户在课程作业中可以获得作业评分,每门课程修完可获得结课证书:不付费 ...

  7. 吴恩达深度学习 | (12) 改善深层神经网络专项课程第三周学习笔记

    课程视频 第三周PPT汇总 吴恩达深度学习专项课程共分为五个部分,本篇博客将介绍第二部分改善深层神经网络专项的第三周课程:超参数调试.Batch Normalization和深度学习框架. 目录 1. ...

  8. 吴恩达深度学习笔记——神经网络与深度学习(Neural Networks and Deep Learning)

    文章目录 前言 传送门 神经网络与深度学习(Neural Networks and Deep Learning) 绪论 梯度下降法与二分逻辑回归(Gradient Descend and Logist ...

  9. 吴恩达深度学习 | (2) 神经网络与深度学习专项课程第二周学习笔记

    课程视频 第二周PPT汇总 吴恩达深度学习专项课程共分为五个部分,本篇博客将介绍第一部分神经网络和深度学习专项的第二周课程:神经网络基础.由于逻辑回归算法可以看作是一个单神经元(单层)的网络结构,为了 ...

最新文章

  1. 项目代码结构 Dao,Service,Controller,Util,Model 含义
  2. berkeley db mysql_BDB:源自 Berkeley DB,事务型数据库
  3. GCD介绍(三): Dispatch Sources
  4. PCB走线拐弯处锯齿显示与平滑显示
  5. Andoird --- Json 经典异常:org.json.JSONException: Unterminated string at character
  6. python项目之古诗文网
  7. 同步方法中的锁对象_互斥锁与读写锁:如何使用锁完成Go程同步?
  8. DirectUpdateHandler2 Solr commit
  9. python字符串可以使用+进行计算吗_python用正则对字符串进行运算
  10. 部署war包后,新增tomcat服务器,启动tomcat服务器报错解决方法
  11. centos7 编译安装 python3.5
  12. 业界首发|云原生领域首本架构白皮书重磅发布
  13. 用 python , opencv 打开网络摄像头读取图像
  14. dell初始linux密码,常用设备管理口默认用户名密码汇总
  15. 数组元素两两组合 php,js多个数组元素两两组合三三组合
  16. 【C语言典例】——day6:猴子吃桃
  17. 【整理】信用卡分期或者蚂蚁花呗实际利息超级计算方法
  18. 【学习点滴】linux调试工具、cmake和网络抓包
  19. 触动精灵 python_触动精灵远程Log模块
  20. 专业修图工具:Affinity Photo for mac

热门文章

  1. 类与类关系的UML图与代码表现
  2. Deno + Oak 构建酷炫的 Todo API
  3. Docker部署自己的短链接服务
  4. LSA类型讲解——LSA-1【1类LSA——Router LSA】详解
  5. k3 cloud 文件服务器搭建,k3cloud服务器推荐配置
  6. 深度行情模块添加【火币交易助手开发日记】
  7. Css+Div设置电脑端显示,手机端不显示代码
  8. 【C语言】输入一个正整数,判断其是否为素数
  9. C#LeetCode刷题-链表
  10. php 命令行打印换行符_如何在命令行输出中打印换行符