Differentiable programming is a programming paradigm in which a numeric computer program can be differentiated throughout via automatic differentiation.[1][2][3][4][5] This allows for gradient-based optimization of parameters in the program, often via gradient descent, as well as other learning approaches that are based on higher order derivative information. Differentiable programming has found use in a wide variety of areas, particularly scientific computing and artificial intelligence.[5] One of the early proposals to adopt such a framework in a systematic fashion to improve upon learning algorithms was made by the Advanced Concepts Team at the European Space Agency in early 2016.[6]
Most differentiable programming frameworks work by constructing a graph containing the control flow and data structures in the program.[7] Attempts generally fall into two groups:
A limitation of earlier approaches is that they are only able to differentiate code written in a suitable manner for the framework, limiting their interoperability with other programs. Newer approaches resolve this issue by constructing the graph from the language's syntax or IR, allowing arbitrary code to be differentiated.[7][9]
Differentiable programming has been applied in areas such as combining deep learning with physics engines in robotics,[12] solving electronic structure problems with differentiable density functional theory,[13] differentiable ray tracing,[14] image processing,[15] and probabilistic programming.[5]