Adam's convergence proof was wrong, and the field kept using Adam
The 2018 counterexample that broke the proof drives Adam to the worst point of a one-dimensional convex problem, at hyperparameters no practitioner ever chooses.
Why this matters
Adam is the optimizer almost every deep-learning model is trained with, the routine that decides how far to nudge each weight after each batch of data. The 2015 paper that introduced it made two promises: it trained faster than the alternatives, and it came with a mathematical proof that it would converge. Three years later that proof was shown to be false, in a paper that won a best-paper award for showing it. The field kept using Adam anyway. By the end you will know what Adam actually computes, what its convergence guarantee claimed, exactly how the guarantee was broken, and why breaking it changed almost nothing.
- 01
- One gradient step drops the loss from 7.0 to 0.225: how a single weight update is computed from the gradient of the loss, the operation Adam rescales.
Every weight gets its own step size
Plain gradient descent subtracts a fixed multiple of the gradient from every weight: one step size, applied to all of them at once. Adam gives each weight its own step size, and tunes that step size from the weight's own history of gradients. Diederik Kingma and Jimmy Ba's 2015 paper builds it from two running averages.1 The first is an average of the gradient itself, m_t = \beta_1\, m_{t-1} + (1-\beta_1)\, g_t, which smooths the noisy per-batch gradient g_t into a steadier direction. The second is an average of the squared gradient, v_t = \beta_2\, v_{t-1} + (1-\beta_2)\, g_t^2, a per-weight record of how large that weight's gradients have recently been. Both start at zero, so both are biased toward zero for the first steps; the paper corrects that bias by dividing each by how much of the average has accumulated, giving \hat{m}_t and \hat{v}_t.
The update divides the smoothed gradient by the square root of the smoothed squared gradient, weight by weight.
- \hat{m}_tthe running average of the gradient: which way to move this weight.
- \hat{v}_tthe running average of its squared gradient: how large its recent gradients were.
- \alphathe base step size, the same starting scale for every weight.
A weight whose gradients have been large gets a small step, because its \sqrt{\hat{v}_t} is large; a weight whose gradients have been small gets a large step. That per-weight rescaling is what Adam adds. The recommended settings that ship with it are \alpha = 0.001, \beta_1 = 0.9, \beta_2 = 0.999, and \epsilon = 10^{-8}.1 The paper backed the method two ways. It reported that Adam trained faster than the competing optimizers on its experiments, and it proved Theorem 4.1, a bound on the regret. Regret is the running total of how much worse the algorithm's choices were than the single best fixed choice made in hindsight. The theorem bounds it by a quantity that grows like \sqrt{T} over T steps. The average regret then falls toward zero as training runs. A proof of that kind is what lets a method claim it converges rather than merely works. Adam's paper has since been cited past 170,000 times on one index, a scale almost no scientific paper of any field reaches.2
The models it called large
The experiments behind the empirical claim were small. Section 6 of the paper opens with the sentence “Using large models and datasets, we demonstrate Adam can efficiently solve practical deep learning problems,” and the word dates the paper: these were the models that counted as large in 2015.1 There are four of them, and the largest network in the paper is a multilayer perceptron with two hidden layers of a thousand units each.
| experiment | model | data |
|---|---|---|
| logistic regression | multiclass logistic regression | MNIST digits, and IMDB reviews as 10,000-word bag-of-words vectors |
| MLP | two hidden layers of 1000 ReLU units | MNIST digits |
| CNN | three convolutional stages, 5×5 filters | CIFAR-10, 60,000 labeled 32×32 images |
| VAE | one 500-unit hidden layer, 50-d latent | MNIST digits |
Every task ran on MNIST or CIFAR-10, datasets of tens of thousands of small images, in minibatches of 128.1 There is no language model here, and nothing within several orders of magnitude of the models Adam trains today. The method now used to fit networks with hundreds of billions of parameters was demonstrated on a handful of problems a laptop can run. Its lasting reputation rests on how well it held up as people scaled far past anything it was tested on.
The counterexample that broke the proof
In 2018 Sashank Reddi, Satyen Kale, and Sanjiv Kumar built a problem on which Adam converges to the wrong answer, and traced the failure to a specific mistake in Theorem 4.1's proof.3 The problem is as plain as an optimization problem gets. There is one number to choose, x, held between -1 and 1. Every third round the loss is C x for some constant C > 2, and on the other two rounds it is -x. Over any three rounds the gradients are +C once and -1 twice. They sum to C - 2 > 0, so the honest direction pushes x down toward -1, the optimum.
Adam does the opposite. Run it here with \beta_1 = 0 and \beta_2 = 1/(1 + C^2). The iterate walks up to x = +1, the single worst point in the domain, and its average regret never falls to zero.3 The reason is the per-weight rescaling. The one large gradient +C is divided by a large \sqrt{\hat{v}}, and the two small gradients -1 by a small one. The arithmetic leaves the rare up-step larger than the two down-steps that should cancel it. The correct total says go down. Adam goes up.
The flaw in the original proof sits in one quantity. Write \Gamma_t for the change in the inverse step size from one round to the next, \Gamma_t = \sqrt{V_t}/\alpha_t - \sqrt{V_{t-1}}/\alpha_{t-1}. For gradient descent and for AdaGrad this quantity is never negative, because their step sizes only shrink, and the 2015 proof assumed the same held for Adam. It does not. Adam's \hat{v} can fall when a large gradient ages out of the running average, which lets the inverse step size rise and \Gamma_t go negative. In the authors' words, “the proof in the original paper of ADAM erroneously assumes that \Gamma_t is positive semi-definite and is hence, incorrect.”3 Their fix, called AMSGrad, changes one line. It normalizes by the largest \hat{v} seen so far, \hat{v}_t = \max(\hat{v}_{t-1}, v_t). That forces the step size to only shrink and restores a valid \sqrt{T} regret bound.3
Why breaking it changed almost nothing
A disproven convergence proof and a published fix should have moved the field to the fix. It did not. AMSGrad is available in PyTorch as an argument on the Adam optimizer, and its default is off: the constructor ships the exact 2015 settings and treats the correction as an opt-in flag most users never set.4 Robin Schmidt, Frank Schneider, and Philipp Hennig then ran the largest standardized optimizer comparison to date: fifteen methods across eight tasks in more than fifty thousand runs. No single optimizer won everywhere. Plain Adam remained a strong default that the newer methods, AMSGrad among them, failed to consistently beat.5 The correct theoretical fix rarely changed the outcome on a real workload, so the field had little reason to switch.
The deeper reason it was safe to shrug is that the 2015 proof being wrong is not the same as Adam failing to converge. The counterexample runs at \beta_2 = 1/(1 + C^2), which for C = 3 is 0.1, against the 0.999 everyone actually uses. Later work closed the gap that opened. Yushun Zhang and colleagues proved in 2022 that Adam does converge to a neighborhood of critical points once \beta_2 is large enough, with a phase transition from divergence to convergence as \beta_2 rises. They also noted the flaw in Reddi's setup: it chooses the problem after the hyperparameters are fixed, whereas practice fixes the problem first and then tunes.6 Alexandre Défossez and colleagues gave Adam a separate convergence bound for smooth non-convex objectives with bounded gradients, though they observe that at the literal default parameters the clean bound does not close.7 The honest reading holds two facts at once: the specific theorem the 2015 paper led with was wrong, and Adam still converges under the large-\beta_2 settings practice runs.
The variant that did displace plain Adam changed something else entirely. AdamW, from Ilya Loshchilov and Frank Hutter, applies weight decay separately from the adaptive gradient step. For an adaptive method that is not equivalent to the usual penalty. The single change improved Adam's generalization enough to become the standard optimizer for training transformers.8 The correction that mattered in practice was about regularization, not about the convergence proof that a best-paper award had already broken.
The takeaway
Adam gives every weight its own step size, tuned from running averages of the gradient and its square, and the 2015 paper sold it with both a speed result on four small experiments and a convergence proof. Of those two promises, the proof was the one that broke. It assumed a quantity stays positive that Adam lets go negative, and a 2018 best-paper award built a one-number convex problem where Adam climbs to the worst point in the domain. Yet the field kept plain Adam. The fix rarely helped on real workloads. Later proofs gave Adam genuine guarantees under the settings people actually use. And its standing never rested on that proof to begin with. The one part of the paper that failed was the part fewest of its citations depend on.
- 01
- On the Convergence of Adam and Beyond: Reddi, Kale, and Kumar's counterexample and the AMSGrad fix, in full.
- 02
- Descending through a Crowded Valley: the fifteen-optimizer benchmark that found no method reliably beats a well-tuned Adam.
Sources
- arXiv · Kingma & Ba, “Adam: A Method for Stochastic Optimization” (ICLR 2015)
- Semantic Scholar · citation record for arXiv:1412.6980 (retrieved 2026-08-23)
- arXiv · Reddi, Kale & Kumar, “On the Convergence of Adam and Beyond” (ICLR 2018)
- PyTorch · torch.optim.Adam documentation
- PMLR · Schmidt, Schneider & Hennig, “Descending through a Crowded Valley” (ICML 2021)
- arXiv · Zhang et al., “Adam Can Converge Without Any Modification on Update Rules” (2022)
- arXiv · Défossez, Bottou, Bach & Usunier, “A Simple Convergence Proof of Adam and Adagrad” (TMLR)
- arXiv · Loshchilov & Hutter, “Decoupled Weight Decay Regularization” (ICLR 2019)