Skip to content

Adagrad

Gradient-Based

Adaptive Gradient Algorithm (AdaGrad) optimization algorithm.

Algorithm Overview

This module implements the Adaptive Gradient Algorithm (ADAGrad) optimizer. ADAGrad is a gradient-based optimization algorithm that adapts the learning rate to the parameters, performing smaller updates for parameters associated with frequently occurring features, and larger updates for parameters associated with infrequent features. It is particularly useful for dealing with sparse data.

ADAGrad's main strength is that it eliminates the need to manually tune the learning rate. Most implementations also include a 'smoothing term' to avoid division by zero when the gradient is zero.

The ADAGrad optimizer is commonly used in machine learning and deep learning applications.

Usage

python
from opt.gradient_based.adagrad import ADAGrad
from opt.benchmark.functions import sphere

optimizer = ADAGrad(
    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_iterint1000Maximum iterations.
lrfloat0.01Global learning rate.
epsfloat1e-08Small constant for numerical stability in division operations.
seedint | NoneNoneRandom seed for reproducibility.

Algorithm Metadata

PropertyValue
Algorithm NameAdaptive Gradient Algorithm
AcronymADAGRAD
Year Introduced2011
AuthorsDuchi, John; Hazan, Elad; Singer, Yoram
Algorithm ClassGradient-Based
ComplexityO(dim)
PropertiesGradient-based, Stochastic
ImplementationPython 3.10+
COCO CompatibleYes

Mathematical Formulation

Core update equations:

Gt=Gt1+gtgtxt+1=xtηGt+ϵgt

where:

  • xt is the solution at iteration t
  • gt is the gradient at iteration t
  • η is the learning rate
  • ϵ is a small constant for numerical stability
  • Gt is the sum of squared gradients up to iteration t
  • denotes element-wise multiplication

Constraint handling:

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

Hyperparameters

ParameterDefaultBBOB RecommendedDescription
max_iter100010000Maximum iterations
lr0.010.01-0.1Global learning rate
eps1e-81e-8Numerical stability constant

Sensitivity Analysis:

  • lr: High impact on convergence - controls step size
  • Recommended tuning ranges: η[0.001,0.1], ϵ[1010,106]

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 gradient accumulator
  • BBOB budget usage: Typically uses 70-90% of dim*10000 budget for convergence

BBOB Performance Characteristics:

  • Best function classes: Sparse gradients, convex functions
  • Weak function classes: Non-stationary objectives, dense gradients
  • Typical success rate at 1e-8 precision: 30-50% (dim=5)
  • Expected Running Time (ERT): Higher than Adam/RMSprop on most BBOB functions

Convergence Properties:

  • Convergence rate: Sublinear due to aggressive learning rate reduction
  • Local vs Global: Tends toward local optima (gradient-based)
  • Premature convergence risk: High - learning rates can become too small

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: Clipping to bounds (no explicit constraint enforcement)
  • Numerical stability: Epsilon added to prevent division by zero

Known Limitations:

  • Aggressive learning rate reduction can cause premature convergence
  • Accumulates all past gradients - learning rate monotonically decreases
  • Performance degrades on problems requiring many iterations
  • Not recommended for deep learning or non-convex optimization

Version History:

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

References

[1] Duchi, J., Hazan, E., & Singer, Y. (2011). "Adaptive Subgradient Methods for Online Learning and Stochastic Optimization." Journal of Machine Learning Research, 12, 2121-2159. http://jmlr.org/papers/v12/duchi11a.html

[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 code: Not publicly available
  • This implementation: Based on [1] with modifications for BBOB compliance

See Also

AdaDelta: Extension that addresses diminishing learning rates BBOB Comparison: AdaDelta often converges better on long optimization runs

RMSprop: Similar adaptive method using moving averages BBOB Comparison: RMSprop typically more stable than AdaGrad

Adam: Combines ideas from AdaGrad and RMSprop BBOB Comparison: Adam generally outperforms AdaGrad on non-convex problems

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

Related BBOB Algorithm Classes:

  • Gradient: Adam, AdamW, RMSprop, AdaDelta
  • 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: adagrad.py

Released under the MIT License.