Matching Accuracy, Different Geometry: Evolution Strategies vs GRPO in LLM Post-Training
Organizations: Department of Industrial and Systems Engineering, University of Miami · Kempner Institute, Harvard University · Harvard University
Abstract
Evolution Strategies (ES) have emerged as a scalable gradient-free alternative to reinforcement learning based LLM fine-tuning, but it remains unclear whether comparable task performance implies comparable solutions in parameter space. We compare ES and Group Relative Policy Optimization (GRPO) across four tasks in both single-task and sequential continual-learning settings. ES matches or exceeds GRPO in single-task accuracy and remains competitive sequentially when its iteration budget is controlled. Despite this similarity in task performance, the two methods produce markedly different model updates: ES makes much larger changes and induces broader off-task KL drift, whereas GRPO makes smaller, more localized updates. Strikingly, the ES and GRPO solutions are linearly connected with no loss barrier, even though their update directions are nearly orthogonal. We develop an analytical theory of ES that explains all these phenomena within a unified framework, showing how ES can accumulate large off-task movement on weakly informative directions while still making enough progress on the task to match gradient-based RL in downstream accuracy. These results show that gradient-free and gradient-based fine-tuning can reach similarly accurate yet geometrically distinct solutions, with important consequences for forgetting and knowledge preservation. The source code is publicly available: https://github.com/Bhoy1/ESvsGRPO.
Figures & tables
| Task | Base | ES (iter=100) | ES (iter=300) | GRPO |
|---|---|---|---|---|
| Countdown | 20.5 | 75.1 | 78.6 | 74.5 |
| Math | 61.8 | 72.4 | 74.0 | 68.8 |
| Chemistry | 63.4 | 68.1 | 76.5 | 74.9 |
| BoolQ | 83.7 | 87.2 | 88.1 | 86.6 |
| Stage | ES (MMLU) | GRPO (MMLU) | ES (IFEval) | GRPO (IFEval) |
|---|---|---|---|---|
| Base model | 77.5 | 77.5 | 79.7 | 79.7 |
| After Task 1 (Countdown) | 77.0 | 77.0 | 80.0 | 80.6 |
| After Task 2 (Math) | 76.2 | 77.5 | 82.6 | 80.6 |
| After Task 3 (Chemistry) | 74.6 | 78.0 | 82.3 | 81.7 |
| After Task 4 (BoolQ) | 73.8 | 78.3 | 81.9 | 78.4 |
| (base final) | 3.7 | 0.8 | 2.2 | 1.3 |
| Checkpoint | ES norm | GRPO norm | Ratio |
|---|---|---|---|
| After Task 1 (Countdown) | 87.28 | 1.00 | 87 |
| After Task 2 (Math) | 122.76 | 1.15 | 107 |
| After Task 3 (Chemistry) | 149.99 | 1.65 | 91 |
| After Task 4 (BoolQ) | 173.00 | 1.84 | 94 |
| Stage | Sparsity ES | Sparsity GRPO | Stable Rank ES | Stable Rank GRPO |
|---|---|---|---|---|
| T0 Countdown | 3.8% | 88.0% | 1100 | 60 |
| T1 Math | 2.9% | 88.0% | 1090 | 70 |
| T2 Chemistry | 2.4% | 87.7% | 1084 | 89 |
| T3 BoolQ | 2.1% | 87.7% | 1078 | 103 |
Appendix figures & tables22 assets
Supplementary material from the paper’s appendix.
Appendix
| Stage | Countdown | Math | SciK | BoolQ |
|---|---|---|---|---|
| Base | 20.78 0.20 | 61.40 0.35 | 63.77 0.32 | 83.97 0.23 |
| After Countdown | 74.52 0.70 | 65.20 0.72 | 64.35 0.80 | 83.43 0.95 |
| After Math | 75.40 0.31 | 71.73 0.42 | 69.45 0.46 | 84.20 1.18 |
| After Chemistry | 72.67 1.03 | 71.40 1.40 | 74.85 1.01 | 84.03 2.29 |
| After BoolQ | 64.87 8.78 | 69.93 1.01 | 73.80 1.59 | 87.53 0.60 |
| Stage | Countdown | Math | SciK | BoolQ |
|---|---|---|---|---|
| Base | 17.22 2.11 | 66.20 4.01 | 62.77 0.68 | 85.20 1.39 |
| After Countdown | 69.17 4.86 | 67.27 6.47 | 60.58 4.85 | 85.52 1.78 |
| After Math | 70.32 3.49 | 69.80 5.89 | 61.63 2.03 | 85.57 1.69 |
| After Chemistry | 70.65 4.01 | 71.67 5.03 | 64.47 7.34 | 82.10 8.00 |
| After BoolQ | 70.50 3.77 | 74.27 5.80 | 66.08 7.05 | 89.80 1.31 |
| Stage | Countdown | Math | SciK | BoolQ |
|---|---|---|---|---|
| Base | 2.4 | 38.2 | 60.6 | 73.4 |
| After Countdown | 37.4 | 41.2 | 60.9 | 75.8 |
| After Math | 34.9 | 41.8 | 64.0 | 71.6 |
| After Chemistry | 29.3 | 41.0 | 65.9 | 68.8 |
| After BoolQ | 20.3 | 38.2 | 65.7 | 81.9 |
| Stage | Countdown | Math | SciK | BoolQ |
|---|---|---|---|---|
| Base | 1.8 | 39.4 | 61.5 | 73.4 |
| After Countdown | 37.8 | 42.2 | 62.6 | 75.3 |
| After Math | 40.8 | 42.0 | 62.4 | 75.9 |
| After Chemistry | 40.4 | 44.2 | 65.8 | 72.2 |
| After BoolQ | 40.3 | 46.4 | 67.0 | 83.0 |
| Config | ||
|---|---|---|
| 1 | 0.0005 | 0.00025 |
| 2 | 0.001 | 0.0005 |
| 3 | 0.0015 | 0.00075 |
| Config | Learning rate |
|---|---|
| 1 | |
| 2 | |
| 3 | |
| 4 |
| Eval. task | After Countdown | After Math | After Chemistry | After BoolQ |
|---|---|---|---|---|
| Countdown | 0.200 [0.187, 0.232] | 0.162 [0.124, 0.221] | 0.075 [0.074, 0.083] | 0.086 [0.047, 0.086] |
| Math | 0.062 [0.054, 0.071] | 0.080 [0.067, 0.088] | 0.041 [0.033, 0.042] | 0.043 [0.036, 0.054] |
| Chemistry | 0.137 [0.116, 0.143] | 0.313 [0.272, 1.276] | 1.100 [0.106, 3.062] | 0.103 [0.090, 0.649] |
| BoolQ | 0.135 [0.126, 0.137] | 0.170 [0.151, 0.227] | 0.096 [0.086, 0.127] | 0.102 [0.090, 0.122] |
| Eval. task | After Countdown | After Math | After Chemistry | After BoolQ |
|---|---|---|---|---|
| Countdown | 0.381 [0.293, 0.454] | 0.008 [0.006, 0.012] | 0.012 [0.004, 0.030] | 0.017 [0.005, 0.029] |
| Math | 0.050 [0.048, 0.056] | 0.009 [0.003, 0.010] | 0.010 [0.007, 0.016] | 0.006 [0.005, 0.011] |
| Chemistry | 0.012 [0.000, 0.115] | 0.010 [0.000, 0.019] | 0.117 [0.072, 3.738] | 0.056 [0.017, 0.105] |
| BoolQ | 0.051 [0.035, 0.061] | 0.010 [0.003, 0.010] | 0.038 [0.028, 4.431] | 0.239 [0.094, 0.322] |
| Stage | Countdown | Math | SciK | BoolQ |
|---|---|---|---|---|
| After Countdown | 0.206 0.023 | 0.062 0.008 | 0.132 0.014 | 0.133 0.006 |
| After Math | 0.436 0.032 | 0.178 0.021 | 0.755 0.477 | 0.355 0.079 |
| After Chemistry | 0.536 0.059 | 0.250 0.033 | 2.541 2.390 | 0.545 0.211 |
| After BoolQ | 0.551 0.112 | 0.288 0.028 | 2.013 1.781 | 0.545 0.158 |
| Stage | Countdown | Math | SciK | BoolQ |
|---|---|---|---|---|
| After Countdown | 0.376 0.081 | 0.052 0.004 | 0.040 0.066 | 0.049 0.013 |
| After Math | 0.420 0.113 | 0.069 0.018 | 0.087 0.129 | 0.072 0.025 |
| After Chemistry | 0.435 0.143 | 0.093 0.038 | 1.297 2.120 | 1.904 3.140 |
| After BoolQ | 0.435 0.115 | 0.091 0.024 | 1.282 2.062 | 0.194 0.063 |
| Stage | Countdown | Math | SciK | BoolQ |
|---|---|---|---|---|
| After Countdown | 0.069 | 0.020 | 0.074 | 0.236 |
| After Math | 0.071 | 0.038 | 0.127 | 0.536 |
| After Chemistry | 0.095 | 0.058 | 0.396 | 1.644 |
| After BoolQ | 0.170 | 0.066 | 1.362 | 1.788 |
| Stage | Countdown | Math | SciK | BoolQ |
|---|---|---|---|---|
| After Countdown | 0.072 | 0.011 | 0.094 | 0.312 |
| After Math | 0.081 | 0.012 | 0.107 | 0.347 |
| After Chemistry | 0.091 | 0.022 | 2.306 | 1.411 |
| After BoolQ | 0.099 | 0.023 | 2.330 | 1.717 |
| ES | |
|---|---|
| Noise scale ( ) | 0.0015 |
| Step size ( ) | 0.00075 |
| Population size | 30 |
| Batch size | 200 |
| Method | FLOPs | vs. GRPO |
|---|---|---|
| GRPO ( ) | ||
| ES (100 iter) | ||
| ES (300 iter) |
| Task | Answer format | Answer extraction and scoring | |
| Countdown | \boxed{expr} | 2,000 | Extract last \boxed{} via regex. Verify the expression contains only digits and ; each input number is used exactly once; and the evaluated result equals the target (tolerance ). |
| MATH | \boxed{ans} | 500 | Extract last \boxed{} with nested-brace handling. Normalize both prediction and gold by stripping LaTeX wrappers ( \text , \dfrac , currency/degree symbols). Compare as strings; on mismatch, convert fractions and decimals to floats and compare numerically (tolerance ). |
| SciKnowEval Chem. | "answer":"X" | 2,000 | Extract answer letter via regex cascade: (1) JSON-style "answer":"X" , (2) unquoted answer: X , (3) last standalone A/B/C/D token. Use the last match found. |
| BoolQ | \boxed{yes/no} | 2,000 | Extract last \boxed{} , normalize to lowercase. Accept {yes, true, 1} as positive and {no, false, 0} as negative. |
| Holdout tasks (not trained on; used to measure forgetting) | |||
| MMLU | "answer":"X" | 14,042 | Same regex cascade as SciKnowEval Chemistry. |
| Stage | Qwen3-4B | Llama-3.2-3B |
|---|---|---|
| T0 Countdown | ||
| T1 Math | ||
| T2 Chemistry | ||
| T3 BoolQ |