ADMM: The Alternating Direction Method of Multipliers
An optimization technique that splits a hard, coupled problem into two easier sub-problems, solves them alternately, and uses a running penalty term to nudge the two sub-solutions into agreement — useful for problems too tangled for proximal gradient methods alone.
Prerequisites: Proximal Gradient Methods, Duality and the Dual Problem
Proximal gradient methods work beautifully when a problem splits cleanly into "one smooth part plus one simple non-smooth part." Many real problems are messier: two (or more) pieces that are each individually easy to optimize, but are tangled together by a shared variable or a linking constraint, so neither piece can be solved in isolation. ADMM handles exactly this shape of problem — it lets you solve each piece using whatever specialized method fits it best, and separately manages the process of getting the two pieces to agree.
An analogy: two contractors coordinating on one wall
A kitchen renovation needs an electrician and a plumber to both work with the same wall cavity, but their plans conflict slightly — the electrician wants conduit routed where the plumber wants pipe. Rather than making one person solve both trades' problems jointly (hard), you let each work out their own ideal plan independently (easy), then compare the two plans, note where they disagree, and adjust each contractor's instructions slightly to nudge them toward a shared compromise. Repeat: each solves their own easy sub-problem again given the updated instructions, compare again, adjust again. After a few rounds, both plans converge to something they agree on. That back-and-forth, mediated by a running "disagreement penalty," is ADMM.
The method, one symbol at a time
Consider a problem of the form: minimize subject to (two variables tied together by a constraint that they must match). Introduce a "price" (a Lagrange multiplier) that penalizes disagreement between and , plus a fixed penalty strength . ADMM alternates three simple updates:
In plain English: first, solve for treating 's own difficulty as the only real problem, while lightly penalizing straying from 's current value (adjusted by the running disagreement tracker ). Then do the mirror-image update for using . Finally, update — the running record of how much and still disagree — which is added back into the next round's penalty, so persistent disagreement gets pushed on harder over time. Each of the - and -updates is, crucially, an easy problem on its own (often literally a proximal operator), even though the joint problem was hard.
Worked example 1: a toy 1-D split
Minimize and subject to , with , starting . The -update minimizes ; setting the derivative to zero, . The -update minimizes ; derivative zero gives ... rebalancing correctly: . Update . Repeating these three updates several more rounds, and both drift toward the true constrained optimum near (the midpoint-weighted compromise between pulling toward 3 and pulling toward 7), converging as the disagreement shrinks toward zero.
Worked example 2: lasso via ADMM
A common use is rewriting lasso, , by introducing a copy , splitting it into (smooth, easy: a linear-system solve) and (non-smooth, but its own proximal step is exact soft-thresholding). The -update solves a ridge-regression-like linear system each round; the -update is a one-line soft-threshold; and tracks the running gap between them. After enough rounds, and converge to the same sparse vector — each round used only operations (linear solve, soft-threshold) that are individually trivial, even though jointly minimizing directly is not.
What this means in practice
ADMM is the go-to tool when a portfolio, risk, or model-fitting problem naturally splits across teams, data sources, or structurally different penalty terms — for example, fitting a factor model with both a smoothness penalty and a sparsity penalty simultaneously, or distributed optimization across separate data shards that can't be pooled. It lets each sub-problem be solved with the specialized, fast method that fits it, rather than forcing one general-purpose solver to handle the whole tangled thing.
ADMM splits a coupled problem into two easy sub-problems tied together by a constraint, alternately solving each while a running penalty term (the dual variable ) nudges them into agreement — combining specialized, cheap solvers for pieces that would be hard to optimize jointly.
ADMM's convergence, while broadly reliable, can be very slow to reach high precision — it typically gets close to the right answer quickly but takes many more rounds to tighten the last few decimal places, unlike Newton-type methods near a smooth minimum. It's also sensitive to the choice of penalty strength : too small and the sub-problems barely talk to each other (slow convergence), too large and each round overcorrects, causing oscillation. Treating as a fixed, unimportant constant rather than tuning it is a common source of disappointing ADMM performance.
Related concepts
Practice in interviews
Further reading
- Boyd, Parikh, Chu, Peleato & Eckstein, Distributed Optimization and Statistical Learning via ADMM