HyperAI超神经

可微分编程 Differentiable Programming

可微分编程 (Differentiable Programming) 是一种编程范式,其中数字计算机程序可以通过自动微分来完全微分。这允许对程序中的参数进行基于梯度的优化,这通常通过梯度下降,以及基于高阶导数信息的其他学习方法来完成。可微分编程已广泛应用于各个领域,特别是在科学计算和机器学习中。

可微分编程的方法

大多数可微分编程框架都是通过构建包含程序中的控制流和数据结构的图来工作的,通常分为两类方法:

  • 静态、编译的基于图的方法:例如 TensorFlow 、 Theano 和 MXNet 。它们往往允许良好的编译器优化和更容易扩展到大型系统,但它们的静态性质限制了交互性和可以轻松创建的程序类型(例如涉及循环或递归的程序),并且使用户更难以推理有效地了解他们的计划。一款名为 Myia 的概念验证编译器工具链就使用了 Python 的子集作为前端,并支持高阶函数、递归和高阶导数。
  • 运算符重载、基于动态图的方法:例如 PyTorch 和 NumPy 的 autograd 包。它们的动态性和交互性使大多数程序的编写和推理变得更加容易。

早期方法的局限性在于它们只能区分以适合框架的方式编写的代码,从而限制了它们与其他程序的互操作性。较新的方法通过根据语言的语法或 IR 构造图来解决此问题,从而允许区分任意代码。

可微分编程在传统应用之外的各个领域都取得了重大进展。例如,在医疗保健和生命科学领域,它被用于基于生物物理学的分子机制建模中的深度学习。这涉及在蛋白质结构预测和药物发现等领域利用可微分编程。这些应用程序展示了可微分编程在促进理解复杂生物系统和改进医疗保健解决方案方面取得重大进展的潜力。

参考来源

【1】https://en.wikipedia.org/wiki/Differentiable_programming