2026-08-14 –, Room 2
Information about the sensitivity (the derivative) of a function is of great use in, among many other things, non-linear optimization and root-finding algorithms.
In particular, second-order derivative information (curvature) can be used to accelerate such solvers, for example, the Newton method for optimization and Halley's method for root finding.
Automatic Differentiation (AD), where these sensitivities are effectively available "for free" (in terms of developer time investment), is therefore attractive since it can significantly reduce the time of an implementation. In addition, the performance cost of the AD may either be close to a hand-optimized implementation or not be significant compared to other parts of the full problem, making AD attractive even from a performance standpoint.
In Julia, there are many packages for AD, each with different trade-offs. They might use forward mode AD or reverse mode AD, they might be implemented using operator overloading or by using code inspection, or they might focus on a certain application like machine learning, etc.
HyperHessians.jl is a Julia package for forward mode AD that specializes in taking second-order derivatives (Hessians). It does this by using HyperDual numbers, which is an extension of Dual numbers. By adopting hyperdual numbers, we can show performance gains over traditional nested dual numbers for second-order derivatives, which is employed by, e.g., ForwardDiff.jl. In addition, HyperHessians.jl supports computing Hessian-vector products (Hvp) and quadratic forms (v'Hvp) at a much lower cost than computing the full Hessian, which is not available with straightforward usage of ForwardDiff.
In this presentation, I will go through some of the theory behind hyperdual numbers, how this theory is implemented in the HyperHessians.jl package, some of the implementation considerations, and present some benchmarks (both micro and real-world benchmarks) that show HyperHessians.jl has value as yet another AD package in the Julia AD ecosystem.
Software engineer at JuliaHub working on the language, releases and tooling.