| you | loss.backward() + optimizer.step() — turning outcomes into weight moves |
| 8 games | one GRPO group (rollouts_per_example = 8); a real step runs 128 groups |
| reward − mean | advantage: each game scored against its own group's bar |
| your ▲▼ of ±0.3 | learning rate × gradient sign |
| “check vs GRPO” | the true policy gradient Σ adv·∇logπ over the whole group |
| reward curve | the training chart — jagged in real runs too; final ≠ best |