摘要
自动微分(Automatic Differentiation,AD)是一种对计算机程序进行高效准确求导的技术,一直被广泛应用于计算流体力学、大气科学、工业设计仿真优化等领域。而近年来,机器学习技术的兴起也驱动着对自动微分技术的研究进入一个新的阶段。随着自动微分和其他微分技术研究的深入,其与编程语言、计算框架、编译器等领域的联系愈发紧密,从而衍生扩展出更通用的可微编程概念。本系列文章将对自动微分技术和可微编程的研究和发展进行概括综述。
本文将分为三部分,主要框架如下:
- 常见计算机程序求导方法介绍
- 业内自动微分和可微编程方案介绍
- 自动微分和可微编程待解决的问题和展望
往期系列文章:
其他精彩文章:
如果读者想了解更多有关可微编程相关的技术内容,欢迎加入编程语言技术社区 SIG-可微编程。
加入方式:文末有小助手微信,添加并备注加入 SIG-可微编程。
面临的挑战
在前两篇的文章中,我们分别介绍了自动微分的基本数学原理和业内主流的几种实现方案,并且以谷歌提出的 Swift for TensorFlow 项目为例对自动微分衍生出的可微编程概念进行了介绍。
在自动微分技术的演进过程中,我们认为主要在以下三个方面存在技术挑战,也是自动微分技术未来演进可以重点优化和改进的方向。
易用性
我们将易用性放在首位的原因是,自动微分本身的数学原理相对简单,但其实现的难点在于
- 理想中的自动微分是对数学表达的分解、微分和组合过程
- 实际中的自动微分是对程序表达的分界、微分和组合过程
而数学表达和程序表达之间存在显著的差异。
差异一:控制流
以下面这个递归计算过程为例,其数学表达为:
l 1 = x l n + 1 = 4 l n ( 1 − l n ) \begin{aligned} l_1 &= x \\ l_{n+1} &= 4l_n(1-l_n) \end{aligned} l