What it is. The foundation everything else builds on: replicate Bereket et al.'s result (via Shepard's LoRA branch) that GRPO with a log-score reward teaches Qwen3-4B to output a calibrated distribution over the four MedMCQA options instead of a single letter.

<hypotheses>{A: 0.40; B: 0.30; C: 0.20; D: 0.10}</hypotheses>

Reward is \( R = \log p(\text{gold}) \) — the categorical log-score over the four options. Training: GRPO, group size 16, effective batch 512, LoRA r=64 on Qwen3-4B with vLLM colocated for generation.

Results: replication achieved

Metric (4,183 val samples)Base Qwen3-4BShepard LoRA 240s (reference)Ours: LoRA 5e-6, 450s
Format rate0.8650.9980.994
Accuracy0.5560.5850.580
ECE0.1040.0190.034
Mean log-score−1.40−1.04−1.10
Our configsStepsECEAccFmtLog score
LoRA lr=5e-6 (reproduction)4500.0340.5800.994−1.100
LoRA lr=1e-5 cosine (3.75× faster)1200.0320.5500.966−1.272
Full FT lr=5e-6 (peaks then regresses)1000.0540.5530.977−1.233
LoRA vs full fine-tuning (also verified on GSM8K) LoRA improves monotonically with no regression — its implicit regularization prevents overspreading. Full FT peaks around step 100, then accuracy drops and ECE regresses, even with KL regularization. Working hypotheses: weight decay penalizes absolute weight norm rather than distance-from-base; harder optimization landscape; forgetting. Principled alternatives flagged: distance-to-base and KL-to-base regularization.

Hard-won technical lessons (inherited by every later project)

Code lives at the repo root (train.py, reward.py, patches.py, research_log.md). Status: complete; serves as the baseline-replication anchor for the paper.