Introduction
Models learn from labeled data (input → output). For generative AI, supervised learning is used in fine-tuning — training a pre-trained model on specific (prompt, response) pairs to improve instruction following.
# Example: Fine-tuning a transformer for summarization
# Pseudo-code (simplified)
for batch in supervised_dataset:
inputs = tokenize(batch["article"])
targets = tokenize(batch["summary"])
loss = cross_entropy(model(inputs), targets)
optimizer.step(loss)
Models find patterns in unlabeled data. Most pre-training of generative models is unsupervised — GPT predicts the next token, BERT predicts masked tokens. This allows training on vast amounts of raw text from the internet.
RLHF aligns generative models with human preferences through three stages:
# PPO update (simplified)
for step in rl_steps:
outputs = model.generate(prompts)
rewards = reward_model(outputs)
# KL penalty to prevent too much divergence
loss = ppo_loss(outputs, rewards, ref_logprobs)
optimizer.step(loss)
Pre-train a large model on a broad dataset, then fine-tune on a specific task. This is the dominant paradigm in generative AI — train once, adapt everywhere.