Stochastic Gradient Descent (SGD) Optimizer #
Classical SGD optimizer with optional momentum and weight decay.
Variants #
- Standard SGD: θ = θ - lr * ∇θ
- SGD with Momentum: Uses exponential moving average of gradients
- SGD with Nesterov: Lookahead momentum variant
Usage Example #
-- Create optimizer
let opt := SGDConfig.default.withLearningRate 0.01 |>.withMomentum 0.9
-- Optimization step
let (newParams, newState) := opt.step params grads state
SGD optimizer configuration
- learningRate : Float
Learning rate (step size)
- momentum : Float
Momentum coefficient (0 = no momentum, typical: 0.9)
- weightDecay : Float
Weight decay (L2 regularization coefficient)
- nesterov : Bool
Use Nesterov momentum
- dampening : Float
Dampening for momentum (typical: 0 for standard momentum)
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Default SGD configuration (no momentum, lr=0.01)
Equations
Instances For
Create SGD with specified learning rate
Equations
- config.withLearningRate lr = { learningRate := lr, momentum := config.momentum, weightDecay := config.weightDecay, nesterov := config.nesterov, dampening := config.dampening }
Instances For
Create SGD with momentum
Equations
- config.withMomentum m = { learningRate := config.learningRate, momentum := m, weightDecay := config.weightDecay, nesterov := config.nesterov, dampening := config.dampening }
Instances For
Create SGD with weight decay (L2 regularization)
Equations
- config.withWeightDecay wd = { learningRate := config.learningRate, momentum := config.momentum, weightDecay := wd, nesterov := config.nesterov, dampening := config.dampening }
Instances For
Enable Nesterov momentum
Equations
- config.withNesterov = { learningRate := config.learningRate, momentum := config.momentum, weightDecay := config.weightDecay, nesterov := true, dampening := config.dampening }
Instances For
Equations
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Initialize SGD state for given parameter shapes
Equations
- Hesper.Optimizer.SGD.SGDState.init paramShapes = { momentumBuffers := Array.map (fun (size : Nat) => { toList := List.replicate size 0.0 }) paramShapes, step := 0 }
Instances For
Initialize SGD state from parameters
Equations
Instances For
Helper: Compute L2 norm of gradients (for monitoring)
Equations
- Hesper.Optimizer.SGD.gradNorm grads = (Array.foldl (fun (acc : Float) (grad : Array Float) => acc + Array.foldl (fun (acc2 g : Float) => acc2 + g * g) 0.0 grad) 0.0 grads).sqrt
Instances For
Helper: Compute parameter L2 norm
Equations
- Hesper.Optimizer.SGD.paramNorm params = (Array.foldl (fun (acc : Float) (param : Array Float) => acc + Array.foldl (fun (acc2 p : Float) => acc2 + p * p) 0.0 param) 0.0 params).sqrt