Skip to content

TransportMaps.jl

This is an implementation of triangular transport maps in Julia based on the description in [1]. For a comprehensive introduction to transport maps, see [2]. The theoretical foundations for monotone triangular transport maps are detailed in [1], [3]. For practical applications in structural health monitoring and Bayesian inference, see [4].

Authors

What are Transport Maps?

Transport maps are smooth, invertible functions that can transform one probability distribution into another [1]. The mathematical foundation builds on the Rosenblatt transformation [5] and the Knothe-Rosenblatt rearrangement [6]. They are particularly useful for:

  • Sampling: Generate samples from complex distributions by transforming samples from simple distributions

  • Variational inference: Approximate complex posterior distributions in Bayesian updating problems [4]

  • Density estimation: Learn the structure of complex probability distributions

Key Features

  • Polynomial Maps: Triangular polynomial transport maps

  • Adaptive Construction: Automatic selection of polynomial terms for efficient approximation

  • Multiple Rectifiers: Support for different activation functions (Softplus, ShiftedELU, Identity)

  • Quadrature Integration: Multiple quadrature schemes for map optimization

  • Optimization: Built-in optimization routines for fitting maps to target densities

  • Multithreaded evaluation for processing multiple points efficiently

  • Automatic Differentiation of target densities with DifferentiationInterface.jl

Installation

julia
using Pkg
Pkg.add("TransportMaps")

Quick Start Example

For a comprehensive introduction, see the page Getting Started with TransportMaps.jl, which demonstrates:

  • Creating polynomial transport maps

  • Setting up quadrature schemes

  • Optimizing map parameters

  • Generating samples from the learned map

Additional examples are available in the Examples section:

Further, the following manuals discuss the technical details of the implementation:

Package Architecture

The package is organized around several key components:

Map Components

  • PolynomialMapComponent: Individual polynomial components of triangular maps

  • with different polynomial bases:

    • HermiteBasis: Probabilists' Hermite polynomial basis

    • LinearizedHermiteBasis: Linearized Hermite basis for improved conditioning

    • CubicSplineHermiteBasis: Cubic spline basis with Hermite support

    • GaussianWeightedHermiteBasis: Hermite basis with Gaussian weighting

Transport Maps

  • PolynomialMap: Main triangular polynomial transport map

  • DiagonalMap: Convenience constructor for diagonal maps (no cross-terms)

  • NoMixedMap: Maps without mixed polynomial terms

  • LinearMap: Linear standardization map (mean/std)

  • LaplaceMap: Laplace approximation-based map

  • ComposedMap: Composition of linear and polynomial maps

Rectifier Functions

  • IdentityRectifier: No transformation (linear)

  • Softplus: Smooth positive transformation (log-sum-exp)

  • ShiftedELU: Exponential linear unit variant

  • ExpRectifier: Pure exponential transformation

Quadrature Schemes

  • GaussHermiteWeights: Gauss-Hermite quadrature points and weights

  • MonteCarloWeights: Monte Carlo integration

  • LatinHypercubeWeights: Latin hypercube sampling

  • SparseSmolyakWeights: Sparse grid quadrature for higher dimensions

Map Optimization

  • optimize!: Optimize map coefficients to minimize KL divergence

  • optimize_adaptive_transportmap: Adaptive refinement for map from samples

  • optimize_adaptive_transportmapcomponent: Adaptive refinement for map from density

Conditional Densities

  • conditional_density: Compute conditional densities π(xₖ | x₁, ..., xₖ₋₁)

  • conditional_sample: Sample from conditional distributions

  • multivariate_conditional_density: Multivariate conditional densities

  • multivariate_conditional_sample: Multivariate conditional sampling

API Reference