Adam is a gradient-descent optimizer for improving model parameters by repeatedly evaluating a likelihood, computing its gradients, and updating the parameters. section 3.3.2
A typical PyTorch training loop follows these steps:
- Create an optimizer over the parameter or model parameters to optimize. section 3.3.2
- Enable training mode for the model and likelihood. section 12.1.2
- Clear previous gradients, compute the negative likelihood loss, backpropagate, and call optimizer.step(). section 3.3.2
- Run enough iterations to inspect whether the loss and optimized values converge, then switch to evaluation mode. section 3.3.2
Optimizing a Gaussian-process mean
For a constant-mean GP, optimize only model.mean_module.constant with torch.optim.Adam(..., lr=0.01). A 500-step loop minimizes -mll(output, train_y), updates the constant, and records loss and parameter values for convergence checks. section 3.3.2
model.train() #1
likelihood.train() #1
losses = []
constants = []
for i in tqdm(range(500)):
optimizer.zero_grad()
output = model(train_x)
loss = -mll(output, train_y) #2
loss.backward() #3
losses.append(loss.item())
constants.append(model.mean_module.constant.item())
optimizer.step() #3
model.eval() #4
likelihood.eval() #4
Inspect the complete training loop, including gradient clearing, loss computation, backpropagation, parameter updates, and mode changes. section 3.3.2






