Views
No views yet
experiments/rational_agents/research-notes/0028-fairness-grpo-v2.md; narrative hub: https://rational-agents-runs.sidmb.com/grpo-v2-lam1-two-attractors/.<arm>_checkpoint-<STEP>/ is a complete PEFT adapter (r32/α64, LoRA on q/k/v/o/gate/up/down) over Qwen/Qwen3-8B, thinking off, saved at global training step STEP. STEP is continuous within an arm across its resume segments (see "Training provenance"). Three arms trace the λ-mixture, the swept variable — seat i trains on R_i(λ) = (1−λ)·g(z_i) + λ·R_table, where g is the smoothed clipped log-Nash utility (g_floor = −17.5) and R_table is the mean over seats:| arm | λ | reward | checkpoints (global step) |
|---|---|---|---|
lam1 | 1.0 | pure table welfare | 5, 10, 15, 25, 30, 35, 40, 45, 50 |
lam05 | 0.5 | mixture | 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 |
lam0 | 0.0 | pure self-interest (selfish control, shaping off) | 5, 10, 15 |
instances_grpo_eval_v1):| step | 5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 |
|---|---|---|---|---|---|---|---|---|---|---|
| λ=1.0 | −0.052 | −0.143 | −0.147 | — | −0.226 | — | — | −0.453 | −0.641 | −0.746 |
| λ=0.5 | −0.058 | −0.046 | −0.058 | −0.151 | −0.267 | −0.240 | −0.445† | −0.173 | −0.271 | −0.369 |
| λ=0 | −0.028 | −0.075 | (partial‡) |
lam1_checkpoint-25): on the ultimatum family the policy learned a 100/0 split accepted every time, placing the responder exactly on its walk-away point (z<ε). Every closure-conditional guard reads this as perfect; only a share/dispersion term (max_share) sees it. Standing program rule: any below-threshold gate carries a share term beside the deal-rate floor.1from peft import PeftModel
2from transformers import AutoModelForCausalLM, AutoTokenizer
3import torch
4base = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-8B", dtype=torch.bfloat16, device_map="cuda")
5tok = AutoTokenizer.from_pretrained("Qwen/Qwen3-8B")
6model = PeftModel.from_pretrained(base, "siddharthmb/2026.RA.Fairness-GRPO-v2-Adapters", subfolder="lam1_checkpoint-25")experiments/rational_agents/grpo_v2/train.py), Qwen3-8B LoRA r32/α64, thinking off, g_floor=−17.5, GRPO groups=22 × k=8, frozen population-opponent zoo {bayes-rational, passive-gate, greedy-anchor}:1# λ=1.0 (arm lam1): steps 5-25 at groups=22; resumed from checkpoint-25 for the dense tail 30-50.
2python -m grpo_v2.train --lam 1.0 --steps 50 --groups 22 --k 8 --bank instances_grpo_v2_train \
3 --checkpoint-steps 5 10 15 25 30 35 40 45 50 --g-floor -17.5 \
4 --wandb-run-name grpo_v2_lam1 --wandb-group fairness-grpo-v2
5# λ=0.5 (arm lam05): --lam 0.5, same knobs; groups reduced 22→14→12 across resume segments (see provenance).
6# λ=0 (arm lam0): --lam 0.0 --shaping-weight 0 --steps 15 --checkpoint-steps 5 10 15 (selfish control, note 0050).groups) changed mid-arm. This is recorded because the GRPO group-relative baseline normalizes per-instance, so width does not confound the contrasts, but consumers comparing rungs should know it (0028 Amendments 9–11):wandb.ai/siddharth-stanford/rational_agents_fairness_grpo, group fairness-grpo-v2. Runs: grpo_v2_lam1 (npz11gav) → grpo_v2_lam1_resume25; grpo_v2_lam05 → grpo_v2_lam05_resume15 → grpo_v2_lam05_resume30b; grpo_v2_lam0./nlp/scr/siddharth/ii_mats/rational_agents/grpo_v2/{lam1,lam1_resume25,lam05,lam05_resume15,lam05_resume30b,lam0}/checkpoint-*experiments/rational_agents/results/fairness_grpo_v2/eval_*.json/nlp/scr/siddharth/ii_mats/rational_agents/grpov2eval_*.../grpo_v2/*/transcripts/; training telemetry .../*/steps.jsonlexperiments/rational_agents/self_benefit/LOG.md; note: research-notes/0028-fairness-grpo-v2.md; λ=0 control: research-notes/0050-lam0-selfish-control-prereg.md