Steering RL Training: Benchmarking Interventions Against Reward Hacking

Reward Hacking RL mitigations

a blog post so not super thoroughly experimented, but still a good read (mats neel nanda)

Setup

Qwen3-4B direct mode, Leetcode medium to hard problems where

  • It’s possible to reward hack by modifying the run_tests function
  • the base weights for Qwen3 reward hack ~0% of the time, any reward hacking is a result of RL on the coding tasks
  • Not prompted to find the reward hack

  • They get the ground truth for reward hacking by just whether or not the model modified the run_tests function

RL Training

maximum completion length of 1,536 tokens.

GRPO for 200 steps with 16 generations per prompt, LoRA rank and alpha of 32, learning rate of 7e-5 and total batch size of 256. Each run took ~3 hours on 4xH200’s.

Main results

  • green bar is after RL in an environment without reward hack available, red is with available. Higher reward hacking, less coding performance
  • both penalty (providing a negative reward for reward hacking) and screening (throwing out the rollout during training if it reward hacked) get rid of reward hacking
  • compared knowing the ground truth about reward hacking, vs training a probe on the ground truth, vs having an AI judge (haiku though so weak af)
  • inoculation prompting sucks

Interesting takeaways:

  • There’s a lot of variance between different RL runs in terms of whether reward hacking happens. They use 3 different RL runs
  • The probe is better at preserving performance than a ground truth about reward hacking at matched accuracy
    • This is probably because of the finding that Goodfire had in their paper about how the probes capture when reward hacking would occur in a counterfactual rollout
  • Penalties are better than screening at getting rid of reward hacking (especially for worse monitors), while screening is better for preserving performance when the reward hacking labels are imperfect
    • both make sense: the latter is because you punish innocuous coding behavior in penalty
    • I would’ve liked to have seen monitors which don’t punish innocuous traces but do miss some reward hacking instances (adjusting the probe threshold for considering reward hacking, similar to goodfire )
  • the analogous thing to chain-of-thought obfuscation happens sorta, where the AI judge gets worse at catching reward hacking as it gets RL trained (e.g. if the answer becomes longer)
  • For penalty: the penalty needs to be large enough, otherwise the model might decide to reward hack anyways
  • For screening: rebalance your batches