最近在上关于 自动求导 (Automatic Differentiation, AD) 的课程 (CS207),正好来回答一下。 其实不只是 TensorFlow,Pytorch 这些为深度学习设计的库用到 AD,很多物理,化学等基础科学计算软件也在大量的使用 AD。而且,其实TensorFlow、Pytorch 也并非只能用于deep learning,本质上他们是一种Tensor computation built on a tape-based autograd system --引自Pytorch

自动求导分成两种模式,一种是 Forward Mode,另外一种是 Reverse Mode。一般的机器学习库用的后一种,原因后面说。

Forward Mode

基于的就是就基本的 链式法则 chain rule,

这个 Forward Mode 就是用 chain rule,像剥洋葱一样一层一层算出来

为例。 我们可以把他的计算图画出来。

假如我要 计算

,可以根据上面的图得到一个表格

那么上面这个表里,每一步我们既要算 forward 的值

,也要算 backward 的值

有没有办法同时把这两个值算出来呢?

首先引入一个新的概念,二元数。二元数其实跟复数差不多,也是一种实数的推广。我们回忆一下,一个复数可以写成这样的形式:

对于复数的理解,一个比较直观的例子就是。本来实数都是在一个实数轴(x轴)的。复部

相当于多了一个 y 轴出来。

那么二元数是这个亚子,

这个二元数很神奇的一个性质是,你带着他做运算,得出来的二元部

前面的系数,就是导数。举个栗子, 我们要求

我们可以把

,所以

我们把上面的三角函数展开,

得到

可以看到,二元部

恰好就是原函数

的导数。

Reverse Mode

这个模式就比较简单和直接了。就是说,上面那个表里面,我每次只计算每个“小运算”的梯度(也是是那个图里面的每个节点),最后我再根据 chain rule 把“小运算”们的梯度串起来。其实 forward mode 和 reverse mode 并没有本质的区别,只是说,reverse mode在计算梯度先不考虑 chain rule,最后再用 chain rule 把梯度组起来。而前者则是直接就应用 chain rule 来算梯度。

下面总结一下 reverse mode 的流程:创建计算图

计算前向传播的值及每个操作的梯度

这里没有 chain rule 的事

比如这个操作是乘法

,那么我们只需要把

算出来就好了

反向计算梯度从最后一个节点(操作)开始:

根据 chain rule 逐层推进

假如有多条求导路径,我们要把他们加起来,例如

举个栗子,我们要计算函数

在点

的导数

首先还是先把计算图画出来

我们逐层的抽丝剥茧,

总结可以很清楚的看到,在训练人工神经网络时常用的 backpropagation 也是属于 reverse mode 的。

假如我们要计算的梯度的函数是

如果 n 是相对比较大的话,用 forward 比较省计算

如果 m 是相对比较大的话,用 reverse 比较省计算

python二元函数求导_tensorflow的函数自动求导是如何实现的?相关推荐

  1. tensorflow with求导_3.4tensorflow2.x自动求导原理函数详解

    自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: 1.1  tensorflow2.x自动求导 1.1.1         自动求导GradientTape类 GradientT ...

  2. html自动求平均值,教大家Excel自动求平均值的函数公式教程

    近日有关于Excel自动求平均值的函数公式教程的问题受到了很多网友们的关注,大多数网友都想要知道Excel自动求平均值的函数公式教程的具体情况,那么关于到Excel自动求平均值的函数公式教程的相关信息 ...

  3. 深度学习修炼(三)——自动求导机制

    文章目录 致谢 3 自动求导机制 3.1 传播机制与计算图 3.1.1 前向传播 3.1.2 反向传播 3.2 自动求导 3.3 再来做一次 3.4 线性回归 3.4.1 回归 3.4.2 线性回归的 ...

  4. minitorch系列记录——3. 自动求导

    参考: 文档地址: https://minitorch.github.io/module1.html github地址: https://github.com/minitorch/Module-1 参 ...

  5. 用numpy、PyTorch自动求导、torch.nn库实现两层神经网络

    用numpy.PyTorch自动求导.torch.nn库实现两层神经网络 1 用numpy实现两层神经网络 2 用PyTorch自动求导实现两层神经网络 2.1 手动求导 2.2 gradient自动 ...

  6. 机器学习 标量、向量、矩阵的求导 PyTorch自动求导

    1 说明 本文是学习Dive into Deep Learning中相应内容做出的总结和一些实现代码,原文链接:矩阵计算. 2 求导 学习PyTorch的自动求导之前首先需要知道求导的过程. 注意:可 ...

  7. python二元函数求导_用Excel和python实现二元函数梯度下降的人工智能,之用,excel,一元...

    梯度下降法和牛顿法的总结与比较 机器学习的本质是建立优化模型,通过优化方法,不断迭代参数向量,找到使目标函数最优的参数向量.最终建立模型 通常用到的优化方法:梯度下降方法.牛顿法.拟牛顿法等.这些优化 ...

  8. python高阶函数求导_Python---高阶函数

    # 高阶函数 # 变量可以指向函数 # 以Python内置的求绝对值的函数abs()为例,调用该函数用以下代码 print(abs(-10)) # 只写abs # 输出为: print(abs) #  ...

  9. python函数求导_python构建计算图1——简单实现自动求导

    机器学习和深度学习中比较重要的内容便是计算图,主流的框架如tensorflow,pytorch都是以计算图为主要框架.而计算图的核心便是自动求导. 所谓自动求导,就是在表达式或者网络结构确定之时,其( ...

最新文章

  1. WINCE6.0添加对viewrs(PDF,Word,Execel和PowerPoint)支持
  2. Tornado--基于H5图片的上传
  3. 【深度学习】利用CNN来检测伪造图像
  4. 23种设计模式之解释器模式
  5. php梯度区间计算,快速计算梯度的魔法--反向传播算法
  6. 自动完成下拉框 Select2 关键字搜索的实例(本地数据与异步获取)
  7. idea 自动导包_idea万能快捷键,你不知道的17个实用技巧!!!
  8. Qt——P10 自定义的信号和槽
  9. matlab调和均值滤波_MATLAB--数字图像处理 均值滤波
  10. Python文件输入输出
  11. 在vue中动态添加商品SKU
  12. Java中常见定时任务的实现方式
  13. Toshiba Folio + CWM +CM
  14. C/C++编码:无锁编程
  15. 微信小程序实现登录功能
  16. 硬盘MBR格式转换GPT
  17. ps中的颜色替换,通道的认识,颜色通道,复合通道,单色通道,通道抠图,滤镜,镜头校正滤镜,液化
  18. 电脑系统32位和64位有哪些区别
  19. 三、向量的加减乘除法
  20. 我的世界服务器怎么做无限的弓,我的世界无限弓箭怎么做?

热门文章

  1. [GAN]【学习笔记】关于Latent space入门
  2. 如何完成视频合并操作?这几个方法值得一试
  3. 小型企业局域网免费上网行为管理方案
  4. 第十四届蓝桥杯模拟赛(第一期)——C语言版
  5. Word使用技巧记录
  6. 线程同步常用方式与区别
  7. 硬盘格式化后数据恢复【图文教程】
  8. 这些年走走停停,停停走走,我过的大概还好
  9. python中wordcloud生成词云_python使用WordCloud生成词云
  10. 在ubuntu中,如何给一个移动固态硬盘安装ubuntu20.04