Adversarial reward functions — operates at a different layer than → Counterexample resistance
Both remedies borrow the adversarial-ML toolkit to defend against reward hacking, but they intervene at different layers of the system and are complementary rather than substitutes. Adversarial reward functions attacks the outer loop: it turns the entire reward function into an active search agent that hunts for scenarios the ML system rates highly but a human would rate poorly, so the reward stops being a fixed target the policy can map out and exploit at leisure (concrete-problems, §"Adversarial Reward Functions:", p. 9). Counterexample resistance attacks the inner loop: it hardens whichever learned components sit inside the reward computation itself, such as a neural network scoring an abstract concept, against adversarial-example-style perturbations, using adversarial training or weight uncertainty (concrete-problems, §"Counterexample Resistance:", p. 10). A reward-search agent that is itself built from a vulnerable learned classifier gains little if that classifier can still be fooled by a crafted counterexample; counterexample resistance is what would make the inner reward-scoring components trustworthy enough for an adversarial reward function's search to mean anything.