Skip to content

NAdam

Gradient-Based

Nesterov-accelerated Adaptive Moment Estimation (Nadam) optimization algorithm.

Algorithm Overview

This module implements the Nadam (Nesterov-accelerated Adaptive Moment Estimation) optimization algorithm. Nadam combines Adam with Nesterov momentum, incorporating lookahead into the gradient computation which can lead to faster convergence.

Nadam performs the following update rule: m = beta1 * m + (1 - beta1) * gradient v = beta2 * v + (1 - beta2) * gradient^2 m_hat = m / (1 - beta1^t) v_hat = v / (1 - beta2^t) m_bar = beta1 * m_hat + (1 - beta1) * gradient / (1 - beta1^t) x = x - learning_rate * m_bar / (sqrt(v_hat) + epsilon)

where: - x: current solution - m: first moment estimate (exponential moving average of gradients) - v: second moment estimate (exponential moving average of squared gradients) - m_bar: Nesterov-corrected first moment estimate - learning_rate: step size for parameter updates - beta1, beta2: exponential decay rates for moment estimates - epsilon: small constant for numerical stability - t: time step

Usage

python
from opt.gradient_based.nadam import Nadam
from opt.benchmark.functions import sphere

optimizer = Nadam(
    func=sphere,
    lower_bound=-5.12,
    upper_bound=5.12,
    dim=10,
    max_iter=500,
)

best_solution, best_fitness = optimizer.search()
print(f"Best solution: {best_solution}")
print(f"Best fitness: {best_fitness:.6e}")

Parameters

ParameterTypeDefaultDescription
funcCallableRequiredObjective function to minimize.
lower_boundfloatRequiredLower bound of search space.
upper_boundfloatRequiredUpper bound of search space.
dimintRequiredProblem dimensionality.
max_iterintDEFAULT_MAX_ITERATIONSMaximum iterations.
learning_ratefloatNADAM_LEARNING_RATELearning rate (step size).
beta1floatADAM_BETA1Exponential decay rate for first moment estimates.
beta2floatADAM_BETA2Exponential decay rate for second moment estimates.
epsilonfloatADAM_EPSILONSmall constant for numerical stability.
seedint | NoneNoneRandom seed for reproducibility.

Algorithm Metadata

PropertyValue
Algorithm NameNesterov-accelerated Adaptive Moment
AcronymNADAM
Year Introduced2016
AuthorsDozat, Timothy
Algorithm ClassGradient-Based
ComplexityO(dim)
PropertiesGradient-based, Stochastic
ImplementationPython 3.10+
COCO CompatibleYes

Mathematical Formulation

Core update equations:

mt=β1mt1+(1β1)gtvt=β2vt1+(1β2)gt2m^t=mt1β1tv^t=vt1β2tm¯t=β1m^t+(1β1)gt1β1txt+1=xtαm¯tv^t+ϵ

where:

  • xt is the solution at iteration t
  • gt is the gradient at iteration t
  • α is the learning rate
  • β1,β2 are exponential decay rates
  • ϵ is a small constant for numerical stability
  • mt,vt are biased first and second moment estimates
  • m¯t is the Nesterov-corrected first moment

Constraint handling:

  • Boundary conditions: Clamping to [lower_bound, upper_bound]
  • Feasibility enforcement: Solutions clipped after each update

Hyperparameters

ParameterDefaultBBOB RecommendedDescription
max_iter100010000Maximum iterations
learning_rate0.0020.001-0.01Learning rate (step size)
beta10.90.9Decay for 1st moment
beta20.9990.999Decay for 2nd moment
epsilon1e-81e-8Numerical stability constant

Sensitivity Analysis:

  • learning_rate: High impact on convergence
  • beta1, beta2: Medium impact
  • Recommended tuning ranges: α[0.0001,0.01], β1[0.8,0.95]

COCO/BBOB Benchmark Settings

Search Space:

  • Dimensions tested: 2, 3, 5, 10, 20, 40
  • Bounds: Function-specific (typically [-5, 5] or [-100, 100])
  • Instances: 15 per function (BBOB standard)

Evaluation Budget:

  • Budget: dim×10000 function evaluations
  • Independent runs: 15 (for statistical significance)
  • Seeds: 0-14 (reproducibility requirement)

Performance Metrics:

  • Target precision: 1e-8 (BBOB default)
  • Success rate at precision thresholds: [1e-8, 1e-6, 1e-4, 1e-2]
  • Expected Running Time (ERT) tracking

Raises

ValueError: If search space is invalid or function evaluation fails.

Notes

  • Modifies self.history if track_history=True
  • Uses self.seed for all random number generation
  • BBOB: Returns final best solution after max_iter or convergence

Computational Complexity:

  • Time per iteration: O(dim) for gradient computation and updates
  • Space complexity: O(dim) for storing moment estimates
  • BBOB budget usage: Typically uses 50-65% of dim*10000 budget for convergence

BBOB Performance Characteristics:

  • Best function classes: Unimodal, moderately multimodal functions
  • Weak function classes: Highly multimodal with many local optima
  • Typical success rate at 1e-8 precision: 55-75% (dim=5)
  • Expected Running Time (ERT): Often faster than Adam, competitive with best

Convergence Properties:

  • Convergence rate: Faster than Adam due to Nesterov momentum
  • Local vs Global: Tends toward local optima (gradient-based)
  • Premature convergence risk: Low - momentum helps exploration

Reproducibility:

  • Deterministic: Yes - Same seed guarantees same results
  • BBOB compliance: seed parameter required for 15 independent runs
  • Initialization: Uniform random sampling in [lower_bound, upper_bound]
  • RNG usage: numpy.random.default_rng(self.seed) throughout

Implementation Details:

  • Parallelization: Not supported
  • Constraint handling: Clamping to bounds after each update
  • Numerical stability: Bias correction and Nesterov lookahead

Known Limitations:

  • Learning rate requires tuning
  • Gradient approximation via finite differences less accurate
  • May overshoot in some scenarios

Version History:

  • v0.1.0: Initial implementation
  • v0.1.2: BBOB compliance improvements

References

[1] Dozat, T. (2016). "Incorporating Nesterov Momentum into Adam." ICLR Workshop. http://cs229.stanford.edu/proj2015/054_report.pdf

[2] Hansen, N., Auger, A., Ros, R., Mersmann, O., Tušar, T., Brockhoff, D. (2021). "COCO: A platform for comparing continuous optimizers in a black-box setting." Optimization Methods and Software, 36(1), 114-144. https://doi.org/10.1080/10556788.2020.1808977

COCO Data Archive:

Implementation:

  • Original paper: Dozat (2016) - Stanford report
  • This implementation: Nadam with BBOB compliance

See Also

Adam: Base algorithm without Nesterov momentum BBOB Comparison: Nadam often converges faster than Adam

NesterovAcceleratedGradient: Classical Nesterov momentum BBOB Comparison: Nadam combines this with adaptive learning rates

AdamW: Adam with decoupled weight decay BBOB Comparison: Different optimization approaches for similar goals

AbstractOptimizer: Base class for all optimizers opt.benchmark.functions: BBOB-compatible test functions

Related BBOB Algorithm Classes:

  • Gradient: Adam, AdamW, AMSGrad, Adamax
  • Classical: BFGS, L-BFGS

Benchmark Performance

Interactive fitness landscape of a representative multimodal benchmark function (drag to rotate, scroll to zoom):

Run-based charts

Convergence, distribution and ECDF charts appear here once this optimizer is included in the benchmark suite.


Source Code

View the implementation: nadam.py

Released under the MIT License.