可微分编程是一种编程范型,在其中数值计算程序始终可通过自动微分来求导数。这允许了对程序中的参数的,通常通过梯度下降。可微分编程广泛用于各种领域,特别是科学计算和人工智能。各种尝试一般可归入两组之中:
- 基于静态、编译图的方式,比如TensorFlow 1、Theano和MXNet。它们意图允许良好的并易于伸缩成大系统,但是它们的静态本质,限制了交互性和能够轻易建立的程序类型,例如难于构建涉及循环或递归的那些程序,还有使得用户难以针对他们的程序进行有效的推理。
- 基于运算符重载、动态图的方式,比如PyTorch和针对NumPy的Autograd,TensorFlow 2也缺省使用了动态图方式。它们的动态和交互本质,使得多数程序可以更容易的书写和推理。但是它们导致了解释器开销,特别是在包含很多小运算的时候,和较弱的可伸缩性,并且缩减了来自编译器优化的利益,它直接工作在Julia的中间表示之上,但仍可以由Julia的JIT编译器进行优化,图像处理和概率编程。
参见
- 可微函数
- 机器学习
引用
评论 (0)