Convergence Rates
Rates name how fast error shrinks: halving the leftovers, dividing by steps, or squaring the accuracy. The name predicts your compute budget.
Why Does This Exist?
"Gradient descent converges" promises nothing about Friday. Sublinear needs a million steps for ; linear needs 20; quadratic needs 3 squarings from . The rate is the budget, and picking Newton versus gradient descent without it is gambling.
Rates classify error recursions: sublinear -ish, linear , superlinear , quadratic . They rest on smooth convex geometry and explain the variants in gradient descent variants.
The one idea you need first
Error (or ) tracked per iteration. Strong convexity () plus smoothness () gives linear gradient descent with ; bare convexity gives ; Newton near a regular root gives quadratic.
Think of It Like This
Draining three tubs
Sublinear tub drains through a straw that narrows as it empties: fast at first, endless at the end. Linear tub drains a fixed fraction per minute: predictable halves. Quadratic tub doubles its drain width each minute: a few gulps and dry.
Condition number is the tub shape: stretched tubs drain linearly but slowly. Where it stops: tubs are deterministic, while stochastic drains add noise floors that no rate outruns without variance fixes.
How It Actually Works
Gradient descent on -smooth convex objectives gives , sublinear. Add -strong convexity: linear with per step ( steps per digit). Accelerated gradient lifts smooth convex to . Newton: quadratic once inside the basin (), e.g. . Lower bounds certify tightness: no first-order method beats on smooth convex objectives generally.
Worked example
Target . Sublinear : steps. Linear : , so 20 steps (and is still above target, so 20 is exact). Quadratic from with : , 3 squarings to pass the target. Gradient descent on (, ) with : exact in 1 step, the degenerate best case of linear with .
Code
Standard library only: three tiny computations that budget three regimes. Quote them before choosing the optimizer.
import math
print(math.ceil(1 / 1e-6)) # -> 1000000 sublinear steps to 1e-6print(math.ceil(math.log(1e-6, 0.5))) # -> 20 linear steps at 0.5^ke = 0.1for i in range(3): e = e**2 # quadratic squaringprint(f"{e:.0e}") # -> 1e-08 after 3 squaringsWatch Out For
Expecting linear rates without strong convexity
Plain convex objectives (logistic regression without regularization, Lasso) give sublinear theory, yet teams budget linear and declare a stall at . The algorithm is fine; the geometry never promised more.
Add strong convexity (regularize), accelerate (), or budget sublinear. If error falls like , the theory already told you.
Quoting quadratic from outside the basin
Newton far from the root diverges or cycles; quadratic speed starts only inside a neighborhood that shrinks with nonlinearity. Damped phases precede it, and skipping them explodes.
Globalize (line search, trust region) then enjoy local quadratic speed. If Newton jumps wildly, you are outside, not broken.
The Quick Version
- Sublinear : smooth convex default; a million steps per .
- Linear : needs strong convexity; 20 steps at .
- Quadratic : Newton inside the basin; 3 squarings from 0.1 to pass the target.
- Acceleration lifts smooth convex to ; nothing first-order beats it generally.
- Condition number sets linear speed; regularize or precondition stretched bowls.
- Stochastic noise floors need variance reduction before rates apply.