TY - UNPB
T1 - Efficient Dual-Numbers Reverse AD via Well-Known Program Transformations
AU - Smeding, Tom
AU - Vákár, Matthijs
PY - 2022/7/7
Y1 - 2022/7/7
N2 - Where dual-numbers forward-mode automatic differentiation (AD) pairs each scalar value with its tangent value, dual-numbers \emph{reverse-mode} AD attempts to achieve reverse AD using a similarly simple idea: by pairing each scalar value with a backpropagator function. Its correctness and efficiency on higher-order input languages have been analysed by Brunel, Mazza and Pagani, but this analysis used a custom operational semantics for which it is unclear whether it can be implemented efficiently. We take inspiration from their use of \emph{linear factoring} to optimise dual-numbers reverse-mode AD to an algorithm that has the correct complexity and enjoys an efficient implementation in a standard functional language with support for mutable arrays, such as Haskell. Aside from the linear factoring ingredient, our optimisation steps consist of well-known ideas from the functional programming community.
We demonstrate the practical use of our technique by providing a performant implementation that differentiates most of Haskell98.
AB - Where dual-numbers forward-mode automatic differentiation (AD) pairs each scalar value with its tangent value, dual-numbers \emph{reverse-mode} AD attempts to achieve reverse AD using a similarly simple idea: by pairing each scalar value with a backpropagator function. Its correctness and efficiency on higher-order input languages have been analysed by Brunel, Mazza and Pagani, but this analysis used a custom operational semantics for which it is unclear whether it can be implemented efficiently. We take inspiration from their use of \emph{linear factoring} to optimise dual-numbers reverse-mode AD to an algorithm that has the correct complexity and enjoys an efficient implementation in a standard functional language with support for mutable arrays, such as Haskell. Aside from the linear factoring ingredient, our optimisation steps consist of well-known ideas from the functional programming community.
We demonstrate the practical use of our technique by providing a performant implementation that differentiates most of Haskell98.
KW - automatic differentiation
KW - source transformation
KW - functional programming
U2 - 10.48550/arXiv.2207.03418
DO - 10.48550/arXiv.2207.03418
M3 - Preprint
SP - 1
EP - 33
BT - Efficient Dual-Numbers Reverse AD via Well-Known Program Transformations
PB - arXiv
ER -