Optimization1847foundational10 min read
Méthode Générale pour la Résolution des Systèmes d'Équations Simultanées
الطريقة العامة لحل جُمَل المعادلات المتزامنة
Cauchy, A.-L. — Comptes Rendus de l'Académie des Sciences
The problem
In the mid-19th century, astronomers needed to solve large systems of equations — six or more unknowns — arising from celestial mechanics. The existing algebraic methods were exact but impractical: the computation grew explosively with the number of variables. There was no systematic, iterative procedure that could find approximate solutions to general nonlinear systems while guaranteeing steady progress toward the answer.
The contribution
Cauchy proposed a breathtakingly simple idea: to solve f(x₁,…,xₙ) = 0 where f ≥ 0, compute the ∇f — the vector of partial derivatives pointing uphill — then take a small step in the opposite direction. Each step is guaranteed to reduce f (for a small enough step), so the iterates march steadily toward a solution. This is the method of steepest descent, the ancestor of every gradient-based in modern machine learning.
The impact
The most consequential idea in history. Every ever trained — every CNN, every Transformer, every language model — learns by some variant of Cauchy's 1847 insight: compute the gradient, step opposite to it, repeat. , , RMSProp, AdaGrad — all are descendants. is, at its core, Cauchy's hill-descent scaled to billions of parameters with providing the gradients.
Imagine you are a blindfolded hiker on a mountain, trying to reach the lowest valley. You cannot see the landscape, but you can feel the slope under your boots.
Your strategy is simple: at every step, feel which direction is steepest downhill, then take a small step that way. You don't need a map — just the local slope and the discipline to keep stepping downward.
That is exactly what Cauchy proposed in 1847: replace the mountain with a mathematical function, replace "feeling the slope" with computing the gradient, and replace each footstep with an update rule. The method works for any number of dimensions — even millions — which is why every neural network in the world learns this way today.
The problem: too many unknowns, too much computation
In Cauchy's time, astronomers wrestled with systems of equations arising from planetary motion — often six or more unknowns. Direct algebraic methods (like Gaussian elimination) worked beautifully for small systems, but their computational cost grew rapidly with size:
-
Direct methods require on the order of n³ arithmetic operations, where n is the number of unknowns. For n = 6, that's already 216 operations — done by hand.
-
No computers existed. Every multiplication was done with pen and paper. A method that required fewer total operations, even if approximate, was desperately needed.
-
Nonlinear systems — where variables multiply each other or appear inside trigonometric functions — had no general solution procedure at all.
Cauchy's insight was that you don't need to solve the system in one shot. You can creep toward the solution by repeatedly reducing a single scalar quantity: the value of a function that measures how far you are from the answer.
The idea: always step downhill
Cauchy's method starts from one critical observation from calculus: the gradient of a function at a point tells you the direction of steepest ascent. Therefore, the negative gradient tells you the direction of steepest descent.
Here is the full procedure:
- Start at an initial guess .
- Compute the gradient — the vector of all partial derivatives.
- Take a step in the opposite direction: .
- Repeat until the function value stops changing significantly.
The step size (called the in modern machine learning) controls how far you move per step. Too large and you overshoot; too small and you crawl. Cauchy recognized this tension and proposed choosing to minimize f along the descent direction — what we now call a .
The update rule
Before the formula: the goal of each iteration is to find a new point where the function value is lower than at . The strategy is to move in the direction that decreases f the fastest — the negative gradient. The remaining question is how far to move.
Think of it as a compass rule: the gradient says "uphill is that way," so you turn 180° and walk. The step size decides whether you take a cautious shuffle or a bold stride. Cauchy proposed choosing optimally at each step by minimizing as a function of — an exact line search. Modern deep learning typically uses a fixed or scheduled instead, because exact line search is too expensive with millions of parameters.
Why it works: guaranteed descent
The mathematical guarantee behind comes directly from the Taylor expansion. For a small enough step size :
Since , every step decreases (or at worst holds) the function value. The function keeps falling, step after step, until the gradient becomes zero — meaning you have reached a point where no direction leads downhill. That is a : a , a , or (if you're lucky) the .
Crucially, Cauchy showed that this works regardless of how many variables the function has. The gradient always exists for smooth functions, and the negative gradient always points downhill. The method scales to any dimensionality.
The weakness: zig-zagging on narrow valleys
Gradient descent has a well-known pathology: on functions shaped like a narrow valley (technically, when the eigenvalues of the matrix are very different), the method zig-zags back and forth across the valley instead of sliding along it.
This happens because the steepest local direction at the valley wall points across the valley, not along it. Each step overshoots the narrow axis and lands on the opposite wall. The iterates oscillate, making slow progress.
This zig-zag problem motivated 170 years of improvements: conjugate gradients (1952), Newton's method with Hessian, (1964), and modern adaptive optimizers like Adam (2014). All of them modify Cauchy's basic recipe to handle ill-conditioned landscapes better — but the core insight remains the same: use the gradient to decide where to step next.
The same idea in code
Simplified to show the idea — not the real implementation.
import numpy as np
def gradient_descent(f, grad_f, x0, lr=0.01, tol=1e-6, max_iter=1000):
"""Cauchy's 1847 algorithm in 10 lines.
f : objective function to minimize
grad_f : function returning the gradient ∇f(x)
x0 : starting point (numpy array)
lr : step size γ (learning rate)
"""
x = x0.copy()
for i in range(max_iter):
g = grad_f(x) # compute the gradient
if np.linalg.norm(g) < tol: # gradient ≈ 0 → stop
break
x = x - lr * g # the update: step opposite the gradient
return x
# Example: minimize f(x,y) = x² + 10y² (a narrow valley)
f = lambda x: x[0]**2 + 10*x[1]**2
grad_f = lambda x: np.array([2*x[0], 20*x[1]])
result = gradient_descent(f, grad_f, x0=np.array([5.0, 3.0]), lr=0.05)
print(f"Minimum at: {result}") # → close to [0, 0]
# Every neural network optimizer is a descendant of this loop.
# SGD adds noise (random mini-batches).
# Adam adds momentum and per-parameter adaptive rates.
# But the core is always: x ← x − γ · ∇f(x).From 1847 to today: the gradient descent family tree
Cauchy's original method spawned an entire family of optimization algorithms, each addressing one of its limitations. The genealogy connects directly to every optimizer used in deep learning today:
1847
Cauchy: Gradient Descent
The original method — move opposite the gradient with a step size chosen by exact line search. Simple, general, but slow on ill-conditioned problems.
1951
Robbins & Monro: Stochastic Approximation
Showed that gradient descent still works when gradients are noisy — the theoretical foundation for SGD. The step size must shrink over time.
1952
Hestenes & Stiefel: Conjugate Gradients
Eliminated zig-zagging by choosing each direction to be conjugate to the previous ones. Solved quadratics in n steps exactly.
1964
Polyak: Momentum
Added a "velocity" term that accumulates past gradients, helping the optimizer roll through narrow valleys instead of zig-zagging.
1986
Rumelhart, Hinton & Williams: Backpropagation
Made gradient descent practical for deep networks by efficiently computing ∇f via the chain rule — backward through every layer.
2011
Duchi et al.: AdaGrad
Gave each parameter its own adaptive learning rate based on accumulated squared gradients. Solved the problem of rare features in NLP.
2014
Kingma & Ba: Adam
Combined momentum with adaptive rates and bias correction. Became the default optimizer for deep learning.
Convergence: when does gradient descent find the answer?
The speed depends on the function's shape. For a convex quadratic , the error at step satisfies:
where is the of — the ratio of its largest to its smallest. The larger , the more elongated the contours and the worse the zig-zagging. For a well-conditioned function (), convergence is fast. For an ill-conditioned function (), convergence is painfully slow.
This is the fundamental trade-off: gradient descent is general (works on any smooth function) but first-order (uses only the gradient, not curvature information). Methods that use second-order information (Hessian) converge faster but are far more expensive per step.
Why this matters for deep learning
Every neural network loop is a direct descendant of Cauchy's algorithm:
- — compute the loss (how wrong the predictions are).
- — compute using backpropagation (the chain rule).
- Update — (Cauchy's step).
The plays the role of Cauchy's , the model parameters replace his variables , and the learning rate is his step size — except modern networks have billions of parameters instead of six, and the gradients come from mini-batches (stochastic gradient descent) rather than the full dataset.
The entire deep learning revolution rests on three legs: Cauchy's gradient descent (1847), Rumelhart/Hinton/Williams' backpropagation (1986) to compute the gradient efficiently, and hardware to execute the loop fast enough. Remove any one of these, and modern AI does not exist.
CitationCauchy, A.-L.. Méthode générale pour la résolution des systèmes d'équations simultanées. Comptes Rendus de l'Académie des Sciences, Paris, 1847.
Terms in this paper
- Gradient Descentالانحدار التدريجي
- Gradientالتدرج التفاضلي
- Learning Rateمعدل التعلم
- Convergenceالتقارب الحسابي
- Local Minimumالنهاية الصغرى المحلية
- Saddle Pointالنقطة السرجية
- Line Searchالبحث الخطي
- Condition Numberرقم الاشتراط