MicrogradEx.Trainer (MicrogradEx v0.1.0)

Copy Markdown View Source

Small immutable training loops for MicrogradEx models.

train/3 follows the official micrograd demo rhythm: compute a scalar loss, run reverse-mode autodiff, and apply an SGD-style parameter update that returns a new model.

Summary

Functions

The learning-rate schedule used by the official micrograd demo.

Trains a model on a dataset or {xs, ys} examples.

Types

dataset_or_examples()

@type dataset_or_examples() :: MicrogradEx.Datasets.Dataset.t() | {list(), list()}

learning_rate()

@type learning_rate() :: number() | (non_neg_integer() -> number())

opts()

@type opts() :: [
  steps: pos_integer(),
  alpha: number(),
  batch_size: nil | pos_integer(),
  learning_rate: learning_rate(),
  seed: {integer(), integer(), integer()} | nil,
  log_every: pos_integer(),
  loss: :max_margin
]

Functions

official_micrograd_learning_rate(step)

@spec official_micrograd_learning_rate(non_neg_integer()) :: float()

The learning-rate schedule used by the official micrograd demo.

It preserves the original formula exactly:

1.0 - 0.9 * k / 100

Examples

iex> MicrogradEx.Trainer.official_micrograd_learning_rate(0)
1.0
iex> MicrogradEx.Trainer.official_micrograd_learning_rate(100)
0.1

train(model, dataset_or_examples, opts \\ [])

Trains a model on a dataset or {xs, ys} examples.

Options:

  • :steps - positive integer, default 100
  • :alpha - max-margin L2 regularization scale, default 1.0e-4
  • :batch_size - nil for full-batch or a positive integer
  • :learning_rate - non-negative number or one-argument function
  • :seed - deterministic mini-batch seed, default {1337, 1337, 1337}
  • :log_every - positive integer history cadence, default 1
  • :loss - currently only :max_margin

The final step is always present in history even when :log_every would otherwise skip it.