Skip to content

test: Add comprehensive integration tests for Optimizers module [P0] #618

Description

@ooples

Overview

This issue tracks the implementation of comprehensive integration tests for the Optimizers module. This is a P0 (Critical Priority) module for training neural networks and optimization problems.

Parent Issue: #615

Current Status

  • Coverage: 7% (only scheduler integration tested)
  • Source Files: 42 files (40 optimizers + 2 base classes)
  • Test Files: OptimizerSchedulerIntegrationTests.cs (tests only Adam, AdamW, Lion with schedulers)

Module Location

src/Optimizers/

Missing Optimizer Tests (37 optimizers)

Gradient-Based Optimizers (Need Tests)

First-Order Methods:

  • GradientDescentOptimizer
  • StochasticGradientDescentOptimizer (SGD)
  • MiniBatchGradientDescentOptimizer
  • ModifiedGradientDescentOptimizer
  • MomentumOptimizer
  • NesterovAcceleratedGradientOptimizer (NAG)

Adaptive Learning Rate:

  • AdagradOptimizer
  • AdaDeltaOptimizer
  • RootMeanSquarePropagationOptimizer (RMSProp)
  • AdaMaxOptimizer
  • AMSGradOptimizer
  • NadamOptimizer
  • LAMBOptimizer
  • LARSOptimizer
  • FTRLOptimizer

Second-Order Methods:

  • NewtonMethodOptimizer
  • BFGSOptimizer
  • LBFGSOptimizer
  • DFPOptimizer
  • ConjugateGradientOptimizer
  • LevenbergMarquardtOptimizer
  • TrustRegionOptimizer

Proximal Methods:

  • ProximalGradientDescentOptimizer
  • CoordinateDescentOptimizer
  • ADMMOptimizer

Already Tested (3 optimizers)

  • AdamOptimizer (scheduler integration only)
  • AdamWOptimizer (scheduler integration only)
  • LionOptimizer (scheduler integration only)

Metaheuristic Optimizers (Need Tests)

  • GeneticAlgorithmOptimizer
  • ParticleSwarmOptimizer
  • DifferentialEvolutionOptimizer
  • SimulatedAnnealingOptimizer
  • AntColonyOptimizer
  • TabuSearchOptimizer
  • CMAESOptimizer (Covariance Matrix Adaptation)
  • BayesianOptimizer
  • NelderMeadOptimizer
  • PowellOptimizer

Test Categories Required

1. Convergence Tests

  • Test on simple quadratic function: f(x) = x^2
  • Test on Rosenbrock function (banana function)
  • Test on multimodal functions
  • Verify loss decreases over iterations
  • Compare convergence rate against reference implementations

2. Gradient Computation Tests

  • Verify gradient updates are applied correctly
  • Test with known gradients
  • Verify momentum accumulation
  • Test gradient clipping

3. Learning Rate Tests

  • Test with various learning rates
  • Verify learning rate decay/scheduling
  • Test warmup behavior
  • Test adaptive learning rate updates (for adaptive optimizers)

4. Algorithm-Specific Tests

SGD/Momentum:

  • Verify momentum accumulation formula
  • Compare against PyTorch optim.SGD
  • Test Nesterov momentum variant

Adam/AdamW:

  • Verify first and second moment estimates
  • Test bias correction
  • Verify weight decay application
  • Compare against PyTorch optim.Adam/AdamW

RMSProp:

  • Verify running average of squared gradients
  • Compare against PyTorch optim.RMSprop

Adagrad:

  • Verify accumulated squared gradients
  • Test numerical stability (epsilon)

Second-Order Methods:

  • Verify Hessian approximation (BFGS, L-BFGS)
  • Test line search behavior
  • Verify conjugate directions

Metaheuristic:

  • Verify population evolution
  • Test selection/crossover/mutation
  • Verify particle velocity updates

5. Edge Cases

  • Test with zero gradients
  • Test with very large gradients
  • Test with NaN/Infinity gradients
  • Test with single parameter
  • Test with many parameters
  • Test parameter bounds constraints

6. Serialization Tests

  • Save optimizer state (momentum buffers, etc.)
  • Load and continue training
  • Verify state is preserved correctly

7. Performance Tests

  • Measure convergence speed on benchmark functions
  • Compare memory usage
  • Test with large parameter counts

Mathematical Correctness Verification

SGD with Momentum

v_t = momentum * v_{t-1} + gradient
param = param - learning_rate * v_t

Adam

m_t = beta1 * m_{t-1} + (1 - beta1) * g_t
v_t = beta2 * v_{t-1} + (1 - beta2) * g_t^2
m_hat = m_t / (1 - beta1^t)
v_hat = v_t / (1 - beta2^t)
param = param - lr * m_hat / (sqrt(v_hat) + eps)

RMSProp

v_t = decay * v_{t-1} + (1 - decay) * g_t^2
param = param - lr * g_t / sqrt(v_t + eps)

Test Functions (Optimization Benchmarks)

  1. Sphere: f(x) = sum(x_i^2) - Simple convex
  2. Rosenbrock: f(x,y) = (1-x)^2 + 100*(y-x^2)^2 - Non-convex valley
  3. Rastrigin: f(x) = 10n + sum(x_i^2 - 10cos(2pi*x_i)) - Multimodal
  4. Ackley: Multimodal with many local minima
  5. Beale: Non-convex with steep walls

Priority Order

  1. Critical (Test First):

    • SGD (base optimizer)
    • Momentum
    • Adam (expand beyond scheduler tests)
    • AdamW (expand beyond scheduler tests)
    • RMSProp
  2. High:

    • Adagrad
    • NAG (Nesterov)
    • L-BFGS
    • AdaMax
  3. Medium:

    • All other gradient-based optimizers
    • Metaheuristic optimizers

Acceptance Criteria

  • All 40 optimizers have integration tests
  • Convergence verified on benchmark functions
  • Mathematical formulas verified against specifications
  • Comparison against PyTorch optimizers where applicable
  • Serialization works correctly
  • At least 80% code coverage
  • All tests pass on both net8.0 and net471

References

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions