model card
Browse files
README.md
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: apache-2.0
|
| 3 |
+
tags: [reinforcement-learning, grpo, code-generation, mbpp, catastrophic-forgetting, ablation]
|
| 4 |
+
---
|
| 5 |
+
|
| 6 |
+
# Code RL learning-rate ablation (MBPP)
|
| 7 |
+
|
| 8 |
+
GRPO on MBPP at **three actor learning rates below the 1e-6 default** -- 6e-6,
|
| 9 |
+
3e-6 and 6e-7 -- each run twice: once with no replay, once with an SFT-replay
|
| 10 |
+
buffer (`hard_cooldown`, lambda=0.1). The question is where on the lr ladder the
|
| 11 |
+
run stops being stable, and whether replay moves that point.
|
| 12 |
+
|
| 13 |
+
The lr=1e-6 headline runs live in their own repos
|
| 14 |
+
(`RL-Forgetting-Experiments-3/code-q3_1p7b-nobuf`, `-replay-lam0p1`, `RL-Forgetting-Experiments-3/code-q25_3b-*`);
|
| 15 |
+
above this ladder, 1e-5 is a coin flip and 1e-4 / 1e-3 are reliably fatal for
|
| 16 |
+
both arms.
|
| 17 |
+
|
| 18 |
+
## Layout
|
| 19 |
+
|
| 20 |
+
One folder per ablation cell, named exactly as the local run directory, so a
|
| 21 |
+
point in any eval CSV maps to a folder here without a lookup table:
|
| 22 |
+
|
| 23 |
+
```
|
| 24 |
+
<model>_mbpp_<arm>_<lr>/
|
| 25 |
+
global_step_<N>/ a complete HF model directory (stride 30 + endpoint)
|
| 26 |
+
logs/ trainer logs
|
| 27 |
+
rollouts/ sampled rollouts
|
| 28 |
+
```
|
| 29 |
+
|
| 30 |
+
| folder | base model | arm | lr | checkpoints |
|
| 31 |
+
| --- | --- | --- | --- | --- |
|
| 32 |
+
| `qwen3_1p7b_base_mbpp_hardcd_lam0p1_lr3e6` | `Qwen/Qwen3-1.7B-Base` | replay buffer (lambda=0.1) | 3e-6 | 30-500 step 30 |
|
| 33 |
+
| `qwen3_1p7b_base_mbpp_hardcd_lam0p1_lr6e7` | `Qwen/Qwen3-1.7B-Base` | replay buffer (lambda=0.1) | 6e-7 | 30-500 step 30 |
|
| 34 |
+
| `qwen3_1p7b_base_mbpp_nobuf_lr3e6` | `Qwen/Qwen3-1.7B-Base` | no buffer | 3e-6 | 30-500 step 30 |
|
| 35 |
+
| `qwen3_1p7b_base_mbpp_nobuf_lr6e6` | `Qwen/Qwen3-1.7B-Base` | no buffer | 6e-6 | 30-500 step 30 |
|
| 36 |
+
| `qwen3b_mbpp_hardcd_lam0p1_lr3e6` | `Qwen/Qwen2.5-3B` | replay buffer (lambda=0.1) | 3e-6 | 30-300 step 30 |
|
| 37 |
+
| `qwen3b_mbpp_nobuf_lr3e6` | `Qwen/Qwen2.5-3B` | no buffer | 3e-6 | 30-300 step 30 |
|
| 38 |
+
| `qwen3b_mbpp_nobuf_lr6e6` | `Qwen/Qwen2.5-3B` | no buffer | 6e-6 | 30-300 step 30 |
|
| 39 |
+
| `qwen3b_mbpp_nobuf_lr6e7` | `Qwen/Qwen2.5-3B` | no buffer | 6e-7 | 30-300 step 30 |
|
| 40 |
+
|
| 41 |
+
```python
|
| 42 |
+
from transformers import AutoModelForCausalLM
|
| 43 |
+
m = AutoModelForCausalLM.from_pretrained(
|
| 44 |
+
"RL-Forgetting-Experiments-3/code-rl-lr-ablation", subfolder="qwen3_1p7b_base_mbpp_hardcd_lam0p1_lr3e6/global_step_500")
|
| 45 |
+
```
|
| 46 |
+
|
| 47 |
+
## Training
|
| 48 |
+
|
| 49 |
+
- Data: 320 MBPP problems, held out from both MBPP+ (378) and MBPP's canonical
|
| 50 |
+
test split (276), so both stay reportable.
|
| 51 |
+
- GRPO, 8 rollouts per prompt, batch 64, response length 3072; binary reward from
|
| 52 |
+
executing the generated program against the task's asserts.
|
| 53 |
+
- Replay arms additionally replay 128 past rollouts per step at weight
|
| 54 |
+
lambda=0.1, sampled by `hard_cooldown`.
|
| 55 |
+
- Everything except the actor lr is identical to the 1e-6 runs.
|
| 56 |
+
|
| 57 |
+
## Evaluation
|
| 58 |
+
|
| 59 |
+
MBPP+ (378 problems), n=160 samples, temperature 0.6, top_p 0.95, unbiased
|
| 60 |
+
pass@k. Scoring uses MBPP+'s full test suite (~108 tests/problem), which is
|
| 61 |
+
markedly stricter than MBPP's original 3 asserts.
|