python二元函数求导_tensorflow的函数自动求导是如何实现的?
最近在上关于 自动求导 (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的函数自动求导是如何实现的?相关推荐
- tensorflow with求导_3.4tensorflow2.x自动求导原理函数详解
自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: 1.1 tensorflow2.x自动求导 1.1.1 自动求导GradientTape类 GradientT ...
- html自动求平均值,教大家Excel自动求平均值的函数公式教程
近日有关于Excel自动求平均值的函数公式教程的问题受到了很多网友们的关注,大多数网友都想要知道Excel自动求平均值的函数公式教程的具体情况,那么关于到Excel自动求平均值的函数公式教程的相关信息 ...
- 深度学习修炼(三)——自动求导机制
文章目录 致谢 3 自动求导机制 3.1 传播机制与计算图 3.1.1 前向传播 3.1.2 反向传播 3.2 自动求导 3.3 再来做一次 3.4 线性回归 3.4.1 回归 3.4.2 线性回归的 ...
- minitorch系列记录——3. 自动求导
参考: 文档地址: https://minitorch.github.io/module1.html github地址: https://github.com/minitorch/Module-1 参 ...
- 用numpy、PyTorch自动求导、torch.nn库实现两层神经网络
用numpy.PyTorch自动求导.torch.nn库实现两层神经网络 1 用numpy实现两层神经网络 2 用PyTorch自动求导实现两层神经网络 2.1 手动求导 2.2 gradient自动 ...
- 机器学习 标量、向量、矩阵的求导 PyTorch自动求导
1 说明 本文是学习Dive into Deep Learning中相应内容做出的总结和一些实现代码,原文链接:矩阵计算. 2 求导 学习PyTorch的自动求导之前首先需要知道求导的过程. 注意:可 ...
- python二元函数求导_用Excel和python实现二元函数梯度下降的人工智能,之用,excel,一元...
梯度下降法和牛顿法的总结与比较 机器学习的本质是建立优化模型,通过优化方法,不断迭代参数向量,找到使目标函数最优的参数向量.最终建立模型 通常用到的优化方法:梯度下降方法.牛顿法.拟牛顿法等.这些优化 ...
- python高阶函数求导_Python---高阶函数
# 高阶函数 # 变量可以指向函数 # 以Python内置的求绝对值的函数abs()为例,调用该函数用以下代码 print(abs(-10)) # 只写abs # 输出为: print(abs) # ...
- python函数求导_python构建计算图1——简单实现自动求导
机器学习和深度学习中比较重要的内容便是计算图,主流的框架如tensorflow,pytorch都是以计算图为主要框架.而计算图的核心便是自动求导. 所谓自动求导,就是在表达式或者网络结构确定之时,其( ...
最新文章
- WINCE6.0添加对viewrs(PDF,Word,Execel和PowerPoint)支持
- Tornado--基于H5图片的上传
- 【深度学习】利用CNN来检测伪造图像
- 23种设计模式之解释器模式
- php梯度区间计算,快速计算梯度的魔法--反向传播算法
- 自动完成下拉框 Select2 关键字搜索的实例(本地数据与异步获取)
- idea 自动导包_idea万能快捷键,你不知道的17个实用技巧!!!
- Qt——P10 自定义的信号和槽
- matlab调和均值滤波_MATLAB--数字图像处理 均值滤波
- Python文件输入输出
- 在vue中动态添加商品SKU
- Java中常见定时任务的实现方式
- Toshiba Folio + CWM +CM
- C/C++编码:无锁编程
- 微信小程序实现登录功能
- 硬盘MBR格式转换GPT
- ps中的颜色替换,通道的认识,颜色通道,复合通道,单色通道,通道抠图,滤镜,镜头校正滤镜,液化
- 电脑系统32位和64位有哪些区别
- 三、向量的加减乘除法
- 我的世界服务器怎么做无限的弓,我的世界无限弓箭怎么做?