自动微分(Auto differentiation)

article/2025/3/1 15:21:38

1.自动微分是干什么的:

自动微分现在已经是深度学习框架的标配,我们写的任何模型都需要靠自动微分机制分配模型损失信息,从而更新模型。简言之,就是在模型更新计算梯度的时候会用到自动微分。

在数学和计算机代数中,自动微分有时称作演算式微分,是一种可以借由计算机程序计算一个函数导数方法。两种传统做微分的方法为:

  • 对一个函数的表示式做符号上的微分,并且计算其在某一点上的值。
  • 使用差分。(即数值微分)

使用符号微分最主要的缺点是速度慢及将计算机程序转换成表示式的困难,且很多函数在要计算更高阶微分时会变得复杂。

使用差分的两个重要的缺点是舍弃误差及数值化过程和相消误差。此两者传统方法在计算更高阶微分时,都有复杂度及误差增加的问题。自动微分则解决上述的问题。

2.现有四种微分方式:

  • Symbolic Differentiation(符号微分)
  •  Numerical Differentiation(数值微分)
  • Forward-Mode Autodiff(前向自动微分)
  • Reverse-mode Autodiff(反向自动微分)

其中,TensorFlow采用的是第四种微分方式

2.1 符号微分

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

 2.2 数值微分

在这里插入图片描述在这里插入图片描述

2.3 前向自动微分

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

稍微对上述性质做一下解释:

有一个dual数 \varepsilon,当函数变量为一元时:有    h(a+\varepsilon )=h(a)+{h}'(a)*\varepsilon 

                              当函数变量为一元时:有    h(a+\varepsilon ,b)=h(a,b)+ [ \frac{\partial }{\partial a}h(a,b) ]* \varepsilon

                                                                            h(a ,b+\varepsilon)=h(a,b)+ [ \frac{\partial }{\partial b}h(a,b) ]* \varepsilon 

在这里插入图片描述在这里插入图片描述

 2.4 反向自动微分

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

 第一次的正向计算穿过图就是从图底往上,即从n1,n2计算到n7 (根据各个节点的表达式,带入数值x=3,y=4计算得来)

​​​​​​​

3.一些链接:

TensorFlow的自动微分文档:梯度和自动微分简介  |  TensorFlow Core

4 关于自动微分当前的一些不足:

1. 在 ICLR 2020 的一篇 Oral 论文中,图宾根大学的研究者表示,目前深度学习框架中的自动微分模块只会计算批量数据反传梯度,但批量梯度的方差、海塞矩阵等其它量也很重要,它们可以在计算梯度的过程中快速算出来。目前自动微分框架(TensorFlow)只计算出梯度,因此就限定了研究方向只能放在梯度下降变体之上,而不能做更广的探讨。为此,研究者构建了 BACKPACK,它建立在 PyTorch 之上,还扩展了自动微分与反向传播能获得的信息。

 2. 稀疏图加速(未完)

参考链接:

1.https://blog.csdn.net/qq_36810398/article/details/88738239


http://chatgpt.dhexx.cn/article/hXQAAmrQ.shtml

相关文章

高数 | 【一元函数微分学】一元函数微分的本质 导数与微分的区别

一、微分的本质 微分本质是一个微小的线性变化量,是用一个线性函数作为原函数变化的逼近(或者叫近似)。 现在我们将 定义为dy。而 表示的是函数值的变化,显然dy的真正含义是对这种变化的逼近。也就是说我们定义微分,就…

图像微分

图像微分 考虑到图像中值离散一般为前后像素作差,这是一阶微分。应用中效果不佳,与此相比二阶微分效果较好,二阶微分是对一阶微分的再微分,数学表达为(考虑x方向时)f(x,y0)’f(x,y0)-f(x-1,y0) f(x-1,y0)’f(x-1,y0)-f…

什么是微分,dy又是什么

目录 1.dy的定义2.可微与可导的关系3.dy的几何意义4.微分的运算法则5.dy再探索6.线性近似 1.dy的定义 在介绍什么是dy之前,先回顾一下之前的一些概念: 设, y f ( x ) yf(x) yf(x), 若: lim ⁡ Δ x → 0 Δ y f ( x 0 Δ x ) − f ( x 0 …

微分是什么?

前文请查看: 微积分是什么?柯西的数列极限 最开始我们就提到了,曲线下微小的矩形是“微分”: 把这些“微分”加起来就是“积分”,就可以得到曲线下的面积: 上一章定义了极限,解决了微积分中的…

对微分的简单理解

目录: 一、一元函数的可微性二、偏导数三、二元函数的可微性四、 n n n 元函数的可微性五、向量函数的导数作者留言 研究生复试现场: T:“这位同学,请你解释一下微分是什么。”  S:“啊,老师,微分的定义是~~~~”  T:“嗯&#x…

【数学】微分(Differential)的定义,微分与导数的区别

本文会详细的定义微分,并结合导数的概念,详细的说明二者的差别。 如上图所示,对于函数yf(x)来说,在任意一点p(x, y)上,若x方向上有增量,则在y的方向上有增量,当时,导数的定义为 可见…

什么是微分?导数和微分的区别是什么?微分和积分的联系?

看之前推荐您阔以拿一只笔和一张纸,遇到看不懂的就画一画,增量啊什么的,会好理解很多。 先总的抽象地说一下微分是什么,假设有一个函数yf(x)。假设y轴上有一个增量,把这个增量叫做Δy。字面上理解,什么是增…

Python基础:Python中的序列索引详解

欢迎你来到站长在线的站长学堂学习Python知识,本文分享的是《Python中的序列索引》。 序列中的每一个元素都有一个属于自己的编号,我们称为索引(index)。从起始元素开始,索引值从0开始编号,持续递增。即下标…

python返回索引值_python取索引值

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 数据的一些细微区别num = num1 = num # 输出:10 type:intnum2 = num# 输出: type:list总结: 分片包括起始索引对应的元素,但不包括终止索引对应的元素,索引…

python字符串索引与切片

字符串是字符的“有序”集合,字符串中的每个 “字符/元素” 都拥有一个下标,而通过下标可以实现索引(index)与 切片(slice)两种方法,通过它们访问并获取其中的 字符/元素 . 一. 索引&#xff08…

Python通过索引获得字符串中的字符

一、索引的定义 进行索引时,在字符串(或值为字符串的变量)的末尾添加方括号"[" 和 “]”,并在方括号之间添加一个数字去访问某个字符,这个数字被称为索引。 二、索引的作用 索引告诉Python需要获取的是字符串…

python的索引和切片

一、索引和切片介绍 字符串可以定义为字符的有序集合,我们可以通过其位置获得他们的元素。在python中,字符串中的字符是通过索引提取的。 python偏移量是从0开始的,这样就会比字符串的长度len()小1。大家比较熟悉字符串的正偏移,…

【Python】索引+序列

索引 ‘’’ 这种双重抽象虽然看起来没必要,但是pandas索引的数据类型, 可以支持字符串、日期、任意排序的索引,以及重复的索引值。 索引是pandas的核心功能,在序列上的操作,可以按照索引进行查找。特别是时间序列的…

python中字典的索引_python字典索引

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 提到字典大家应该都不陌生,小学大家应该都用过。 ? 字典的前几页,一般是索引,可以按照拼音来检索,也可以按照偏旁部首来检索。 索引的好处就是可以加快检索…

python怎么建立索引_python建立索引

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 上个专题提到了如何利用python操作oracle数据库并监控想要的指标这个专题讲述如何讲这些监控数据保存在mysql中为日后所用----上节讲到建立一个mysql数据库并新…

Python字符串索引

Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。 str Runoob print (str) # 输出字符串 print (str[0:-1]) # 输出第一个到倒数第二个的所有字符 print (str[0]) # 输出字符串第一个字符 print (str[2:5]) …

python字符串-索引、切片、方法

总结(重点记): 一、索引、切片: 1、索引,从0开始,可为负数,超出范围则报错 2、切片,v[start:end],也可负数,但很少用,step步长,也很…

python的索引与切片

目录 1.一维数组的索引和切片 1.二维数组的索引和切片 在python的学习过程,有些同学对索引和切换会感到困惑,今天我们就来弄清楚它。 1.一维数组的索引和切片 如下图所示,该一维数组只有一个轴(维度),即轴…

python索引

#索引 作用:访问容器元素 str “齐天大圣” 获取第一个元素 print(str[0]) 获取第2个元素 print(str[1]) 切片 从容器中取出相应的元素 语法: 容器[(开始索引):(结束索引):(步长)] str1 "我叫齐天大圣" print(str1[0:2])#我叫 # 开始值默…

Python 索引

Python 索引 知识回顾,想回顾下python的序列结构有那些 1 列表(list) 2 元组(tuple) 3 集合(set) 4 字典(dict) 5 字符串(str) 一定要记住的是: 1 集合和字典不支持索引,切片,相加,相乘操作的 2 序列结构后面跟的字母,知道了字母我们很好记住怎样创建空的序列,以及它们…