1.自动微分是干什么的:
自动微分现在已经是深度学习框架的标配,我们写的任何模型都需要靠自动微分机制分配模型损失信息,从而更新模型。简言之,就是在模型更新计算梯度的时候会用到自动微分。
在数学和计算机代数中,自动微分有时称作演算式微分,是一种可以借由计算机程序计算一个函数导数方法。两种传统做微分的方法为:
- 对一个函数的表示式做符号上的微分,并且计算其在某一点上的值。
- 使用差分。(即数值微分)
使用符号微分最主要的缺点是速度慢及将计算机程序转换成表示式的困难,且很多函数在要计算更高阶微分时会变得复杂。
使用差分的两个重要的缺点是舍弃误差及数值化过程和相消误差。此两者传统方法在计算更高阶微分时,都有复杂度及误差增加的问题。自动微分则解决上述的问题。
2.现有四种微分方式:
- Symbolic Differentiation(符号微分)
- Numerical Differentiation(数值微分)
- Forward-Mode Autodiff(前向自动微分)
- Reverse-mode Autodiff(反向自动微分)
其中,TensorFlow采用的是第四种微分方式
2.1 符号微分
2.2 数值微分
2.3 前向自动微分
稍微对上述性质做一下解释:
有一个dual数 ,当函数变量为一元时:有
当函数变量为一元时:有
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