Skip to content

Optimizers

The clorch.optim namespace provides standard optimization algorithms. These are thin wrappers around LibTorch's C++ implementations, offering high performance and low JVM overhead.

Standard Optimizers

SGD (Stochastic Gradient Descent)

(require '[clorch.optim :as optim])

(def opt (optim/sgd (nn/parameters model) 
                    :lr 0.01 
                    :momentum 0.9))

Adam

The most popular adaptive optimizer.

(def opt (optim/adam (nn/parameters model) 
                     :lr 0.001 
                     :betas [0.9 0.999]))

AdamW

A variant of Adam that decouples weight decay from the gradient update. Recommended for Transformer and LLM training.

(def opt (optim/adamw (nn/parameters model) 
                      :lr 3e-4 
                      :weight-decay 0.01))

Additional Optimizers

  • RMSprop: (optim/rmsprop params :lr 0.01 :alpha 0.99)
  • Adagrad: (optim/adagrad params :lr 0.01)

Lifecycle API

Resetting Gradients

Before computing the loss, always clear previous gradients.

(optim/zero-grad opt)

Updating Weights

After performing backpropagation (autograd/backward), update the parameters.

(optim/step opt)

Training Step Example

(defn train-step [model optimizer batch]
  (optim/zero-grad optimizer)
  (let [pred (nn/forward model (:data batch))
        loss (F/mse-loss pred (:target batch))]
    (autograd/backward loss)
    (optim/step optimizer)
    (t/item-float loss)))

Call train-step from the per-batch scope shown in Memory Management.