Class AdamOptimizer
java.lang.Object
deepnetts.net.train.opt.AdamOptimizer
- All Implemented Interfaces:
Optimizer, TrainingListener, Serializable, EventListener
public final class AdamOptimizer
extends Object
implements Serializable, Optimizer, TrainingListener
Implementation of Adam optimizer which uses an estimation of a gradient statistic (mean and variance) to adjust learning rate for each weight.
Adaptive Moment Estimation (Adam) is a method that computes adaptive learning rates for each parameter/weight.
Recommended(default) settings:
learningRate=0.001
epsilon=1e-8 small constant to prevent division by zero / ensure numerical stability
beta1=0.9 exponential decay rate for the first moment estimate(mean)
beta2=0.999 exponential decay rate for the second moment estimate(mean)
biasCorrection1=0.9 correct exp avg in initial iterations when it is 0
biasCorrection2=0.999 correct exp avg in initial iterations when it is 0
FORMULAS:
g(t) is a gradient at step t
m(t)=beta1*m(t-1) + (1-beta1)*g(t) estimate of a gradient mean using exponential moving average of gradients
v(t)=beta2*v(t-1) + (1-beta2)*g(t)^2 estimate of a gradient variance using exponential moving average of grad squares
-learningRate * m(t)
deltaWeight(t) = __________________________
sqrt(v(t))+epsilon
Paper: ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION https://arxiv.org/abs/1412.6980
- See Also:
-
Field Summary
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionfloatcalculateDeltaBias(float grad, int idx) calculateDeltaBias(Tensor1D grad) floatcalculateDeltaWeight(float grad, int... idxs) Smoothing term to prevent division by zero if sqr grad sum becomes zero 1e-8 should be also tried https://d2l.ai/chapter_optimization/adagrad.html 1e-6 The value to use is 1e-6, 1e-8, Keras uses 1e-7 for adamvoidhandleEvent(TrainingEvent event) Invoked when a training event occurs.voidsetLearningRate(float learningRate)
-
Constructor Details
-
AdamOptimizer
-
-
Method Details
-
calculateDeltaWeight
public float calculateDeltaWeight(float grad, int... idxs) Description copied from interface:OptimizerSmoothing term to prevent division by zero if sqr grad sum becomes zero 1e-8 should be also tried https://d2l.ai/chapter_optimization/adagrad.html 1e-6 The value to use is 1e-6, 1e-8, Keras uses 1e-7 for adam- Specified by:
calculateDeltaWeightin interfaceOptimizer
-
calculateDeltaBias
public float calculateDeltaBias(float grad, int idx) - Specified by:
calculateDeltaBiasin interfaceOptimizer
-
handleEvent
Description copied from interface:TrainingListenerInvoked when a training event occurs.- Specified by:
handleEventin interfaceTrainingListener- Parameters:
event- the training event
-
setLearningRate
public void setLearningRate(float learningRate) - Specified by:
setLearningRatein interfaceOptimizer
-
calculateDeltaWeight
- Specified by:
calculateDeltaWeightin interfaceOptimizer
-
calculateDeltaBias
- Specified by:
calculateDeltaBiasin interfaceOptimizer
-