Skip to content

API Reference: optim

torchlight.optim implements SGD, Adam, and AdamW, plus LR schedulers.

from torchlight.optim import SGD, Adam, AdamW, StepLR, CosineAnnealingLR

Optimizer (base)

class Optimizer(parameters: Iterable[Parameter], defaults=None)
Method Description
zero_grad() zero the .grad of every parameter
step() apply one update per parameter
parameters the parameter list

All optimizers require a list of Parameter objects (use model.parameters()).

SGD

class SGD(parameters, lr=0.01, momentum=0.0, dampening=0.0, weight_decay=0.0, nesterov=False)
Argument Meaning
lr learning rate
momentum momentum factor (velocity)
dampening momentum dampening
weight_decay L2 penalty added to the gradient
nesterov use Nesterov momentum
opt = SGD(model.parameters(), lr=0.1, momentum=0.9)

Adam

class Adam(parameters, lr=0.001, betas=(0.9, 0.999), eps=1e-8, weight_decay=0.0)
Argument Meaning
lr learning rate
betas (beta1, beta2) moment decay factors
eps numerical stabilizer
weight_decay L2 (coupled) weight decay

Uses bias-corrected first/second moments.

AdamW

class AdamW(parameters, lr=0.001, betas=(0.9, 0.999), eps=1e-8, weight_decay=0.01)

Adam with decoupled weight decay (w *= (1 - lr * lambda)); default weight_decay=0.01, recommended for modern transformers.

Learning-rate schedulers

torchlight.optim ships with standard LR schedulers. Each wraps an optimizer, mutates its single global lr, and follows PyTorch's convention: the first .step() advances to epoch 0 (the base lr, no decay yet).

from torchlight.optim import SGD, StepLR, CosineAnnealingLR

optimizer = SGD(model.parameters(), lr=0.1)
scheduler = CosineAnnealingLR(optimizer, T_max=50, eta_min=0.001)

for epoch in range(50):
    ...
    optimizer.step()
    scheduler.step()

LRScheduler (base)

class LRScheduler(optimizer, last_epoch=-1)
Method Description
step() advance one epoch and call get_lr()
last_epoch current epoch index
state_dict() / load_state_dict(state) save / restore scheduler state

Override get_lr() in subclasses to define a schedule.

StepLR

class StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)

Multiply lr by gamma every step_size epochs.

MultiStepLR

class MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1)

Multiply lr by gamma at each epoch in milestones (a list of ints).

ExponentialLR

class ExponentialLR(optimizer, gamma, last_epoch=-1)

Multiply lr by gamma every epoch: lr = lr_0 * gamma ** epoch.

CosineAnnealingLR

class CosineAnnealingLR(optimizer, T_max, eta_min=0.0, last_epoch=-1)

Cosine decay from the base lr to eta_min over T_max epochs.

Scheduler lr at epoch e (e ≥ 0, η = eta_min, γ = gamma)
StepLR lr0 · γ^(⌊e/step_size⌋)
MultiStepLR lr0 · γ^(#{m ∈ milestones : m ≤ e})
ExponentialLR lr0 · γ^e
CosineAnnealingLR η + (lr0 − η) · (1 + cos(π·e/T_max)) / 2

Example

model = Sequential(Linear(4, 16), ReLU(), Linear(16, 1))
opt = AdamW(model.parameters(), lr=1e-3, weight_decay=0.01)
sched = CosineAnnealingLR(opt, T_max=100, eta_min=1e-5)

for epoch in range(100):
    opt.zero_grad()
    loss = loss_fn(model(x), y)
    loss.backward()
    opt.step()
    sched.step()