pub struct Adam {
pub lr: f32,
pub beta1: f32,
pub beta2: f32,
pub eps: f32,
pub weight_decay: f32,
/* private fields */
}Expand description
Optimizers for Func::train_step (re-exported from rlx_optim).
Available with the optim feature.
Bias-corrected first/second moment optimizer.
Per-tensor state: two f32 buffers (m, v) of the same shape as
the parameter.
Fields§
§lr: f32Learning rate. Typical: 1e-3 for from-scratch CNNs, 1e-4
for transformer fine-tuning.
beta1: f32First-moment EMA decay β₁ ∈ [0, 1). Default 0.9.
beta2: f32Second-moment EMA decay β₂ ∈ [0, 1). Default 0.999.
eps: f32Stability constant in the denominator. Default 1e-8.
weight_decay: f32L2 weight decay coefficient. Folded into the gradient
(the “classic Adam” rule); use crate::AdamW for decoupled
decay. Default 0.0.
Implementations§
Source§impl Adam
impl Adam
Sourcepub fn new(lr: f32) -> Adam
pub fn new(lr: f32) -> Adam
Construct with the given learning rate and the standard (β₁, β₂, ε) = (0.9, 0.999, 1e-8) defaults.
Sourcepub fn with_betas(self, b1: f32, b2: f32) -> Adam
pub fn with_betas(self, b1: f32, b2: f32) -> Adam
Override (β₁, β₂).
Sourcepub fn with_weight_decay(self, wd: f32) -> Adam
pub fn with_weight_decay(self, wd: f32) -> Adam
Override the L2 weight-decay coefficient.
Sourcepub fn current_step(&self) -> u64
pub fn current_step(&self) -> u64
1-based iteration counter. Starts at 1 (so the first call to
step() sees t=1), advances on Optimizer::end_iteration.
Trait Implementations§
Source§impl Optimizer for Adam
impl Optimizer for Adam
Source§fn set_lr(&mut self, lr: f32)
fn set_lr(&mut self, lr: f32)
lr (e.g. Adafactor’s relative
step size); every algorithm in this crate that has an lr field
overrides this to update it.fn step( &mut self, name: &str, _shape: &[usize], param: &mut [f32], grad: &[f32], )
Source§fn end_iteration(&mut self)
fn end_iteration(&mut self)
step], so most implementations leave this a no-op.Source§fn step_batch(&mut self, items: &mut [OptItem<'_>])
fn step_batch(&mut self, items: &mut [OptItem<'_>])
step per item — bit-identical to the per-parameter loop. Optimizers
whose parameter groups are independent (e.g. Muon on the 2-D weight
matrices vs AdamW on the embeddings/biases/norms) can override this to
run the groups on separate threads; because the groups touch disjoint
parameters and disjoint optimizer state, the result is bit-for-bit the
same as the serial loop — only the wall-clock (the CPU-side optimizer
bubble) shrinks toward max(group_times) instead of their sum.Source§fn lr_scale(&self, _name: &str) -> f32
fn lr_scale(&self, _name: &str) -> f32
1.0 for every name. Override when wrapping this crate to
support per-name LR schedules (e.g. embedding-vs-attention
splits, or the Gaussian-splat attribute-typed LR setup). The
CPU impls in this crate currently honor this only when the
caller passes a pre-scaled lr for the relevant call —
backends are encouraged to consult it inside their fused
kernel.Auto Trait Implementations§
impl Freeze for Adam
impl RefUnwindSafe for Adam
impl Send for Adam
impl Sync for Adam
impl Unpin for Adam
impl UnsafeUnpin for Adam
impl UnwindSafe for Adam
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more