2024-07-12 –, For Loop (3.2)
In the Julia community, there are a lot of packages specialized for single (i.e. not combined) methods of algorithmic differentiation (AD), like the well-known ForwardDiff.jl or ReverseDiff.jl. In contrast, the ADOL-C (https://github.com/coin-or/ADOL-C) package was aimed to build a general purpose AD package, which was originally written in C/C++. The newly developed package ADOLC.jl combines the various functionalities of ADOL-C with the convenient usability of Julia.
Calculation of exact derivatives is a cornerstone of scientific computing. It enables deep learning, solving non-linear partial differential equations, simulating models in quantum field theory or even quantify the sensitivity of a portfolio value with respect to a changing volatility, to mention just a few applications. The calculation of the derivatives becomes quickly very challenging, when derivatives of complex algorithms or higher derivative tensors are required. Therefore, there is a need for practical AD software packages to automatizes the calculation for the scientific computing community. The most known techniques are the forward and reverse mode which are efficient to calculate first derivatives in various situations. When it comes to second or higher-order derivatives, combinations of forward and reverse mode are mostly more efficient, limiting the use-case of packages that are based on merely one method. Additionally, instead of full matrices including all partial derivatives, many real-world algorithms only involve jacobian or hessian vector products. In the Julia community, there are a lot of packages specialized for single (i.e. not combined) methods of AD, like the well-known ForwardDiff.jl or ReverseDiff.jl. In contrast, the ADOL-C (https://github.com/coin-or/ADOL-C) package was aimed to build a general purpose AD package, which was originally written in C/C++. The newly developed package ADOLC.jl combines the various functionalities of ADOL-C with the convenient usability of Julia. ADOLC.jl is designed to enable applications that are unfamiliar with the AD methods, to leverage the right AD-mode in the right situations. To this end, ADOLC.jl includes functionalities for forward and reverse mode and an easy-to-use derivative driver which can switch the AD mode based on the dimensions of the input and output of the given function. Furthermore, there are drivers for Taylor series propagation, jacobian and hessian vector or matrix products, as well as drivers for arbitrary high derivative tensors, among others.
The interested reader is referred to the project’s GitHub: https://github.com/TimSiebert1/ADOLC.jl
In the talk, we will go through the most important functionalities of ADOLC.jl. The attendee will learn how to easily compute the derivatives of a given program in forward and reverse mode, as well as the corresponding higher-order derivatives. Since the computation of higher-order derivatives should exploit the symmetries of the partial derivatives, there will be a short explanation on how to obtain the tensor in a compressed matrix format and how to decompress it to the full tensor. In the end, it will be shown how to propagate a Taylor series. The low-level methods, directly translating the C/C++ functions and the more convenient higher-level functions, are presented. The low-level functions provide the advanced user more control, whereas the higher-level functions choose suitable low-level functions in different situations.
The main goals of the talk are:
- how to compute first-order derivatives in forward and reverse mode
- how to obtain higher-order derivative tensors
- how to do a Taylor series propagation
It has to be emphasized, that this package is a Julia wrapper of the C/C++ package ADOL-C. Thus, ADOLC.jl aims to directly translate most of the functions of ADOL-C to Julia. In addition, we focus on implementing higher level functions, which combines different translated functions to improve the usability. This will include for example, a derivative function which automatically selects the right mode for the evaluation from a user-defined function and a given derivative order.
The package aims to reduce the effort for users to use a lot of different methods from the AD world.
I am a mathematics student in the Master's program at the TU-Berlin and will graduate in spring 2024. In my master's thesis I am working on algorithmic differentiation. Part of the thesis is the development of the ADOLC.jl package, together with Andrea Walther and Jürgen Fuhrmann.
As a student assistant in the Remote Sensing Image Analysis group at the Department of Computer Science at the TU, I have already gained experience in training deep learning models in Python. A year ago, I came into contact with Julia through Jürgen Fuhrmann as part of a TU course. I am currently working at the Weierstrass Institute - Berlin as a student assistant.
My interests are the combination of mathematical theory and software development.