0xzhang的博客

自动微分到可微编程—综述

· 0xzhang

SIG-可微编程技术沙龙回顾 | 从自动微分到可微编程--综述_哔哩哔哩_bilibili

编程语言LAB

涂玏(le)

2021-08-15

自动微分(Automatic Differentiation,AD),科学计算,物理建模/图形渲染,人工智能。

程序求导的基本方法§

导数的定义是通过极限的概念对函数进行局部的线性逼近。

常见的基本函数在数学上有对应的导函数,复合函数也有对应的求导规则。

1 数值微分(Numerical Differentiation)§

实现简单,精确度不足。(截断误差+舍入误差)

截断误差和舍入误差存在一个折中,h过小,舍入误差过大,h过大,截断误差过大。

2 符号微分(Symbolic Differentiation)§

优点在于精确度,缺点在于容易产生表达式膨胀问题。

很难分解出最简表达式。

3 自动微分(Automatic Differentiation)§

在表达式展开过程中完成一部分计算。

对中间微分结果进行复用,截断表达式展开的过程。

优点在于保证精确度的同时,避免了表达式膨胀。

业内自动微分方案§

19世纪50年代~

1 基本表达式法§

实现方式简单,但无法使用语言原生的表达式构建程序,微分过程不透明。

2 操作符重载法§

利用了现代语言特性,实现简单。

动态运行期计算的引入阻碍了编译器优化,且影响高阶微分的实现。

3 代码变换法§

用户使用简单,利于编译优化,实现难度较大。

可微编程§

Deep Learning est mort. Vive Differentiable Programming!

-- Le Cun

将微分技术与语言设计、编译器/解释器甚至IDE等工具链等深度融合。

Swift for TensorFlow§

  1. Differentiable protocol: 将数学中的微分概念抽象为语言中的protocol特性,任意扩展后的数据类型均可定义为“可微”
  2. Differentiable attribute: 允许用户通过语言中的attribute自定义微分规则。
  3. Differentiable type: 利用类型系统完成一部分基础的微分规则检查。

技术挑战和展望§

1 性能§

反向模式自动微分中如何确定checkpoint的策略。

2 易用性§