# RL における報酬ハッキング

強化学習（RL）の究極の目的は、ある報酬（例えば速度、収益、ある指標）を最大化することです。しかしRLは **不正を行うことがあります。** RLアルゴリズムが実際にタスクを遂行することなく報酬を増やすためにトリックを覚えたり何かを悪用したりする場合、これは「**報酬ハッキング（Reward Hacking）**".

の原因です。モデルがコーディングチャレンジを通過するためにユニットテストを改変することを学ぶのはこのためであり、これらは実世界での展開における重大な障害となります。他の良い例は [ウィキペディア](https://en.wikipedia.org/wiki/Reward_hacking).

<div align="center"><figure><img src="https://i.pinimg.com/originals/55/e0/1b/55e01b94a9c5546b61b59ae300811c83.gif" alt="" width="188"><figcaption></figcaption></figure></div>

**報酬ハッキングに対抗できますか？はい、できます！** 私たちの [無料の gpt-oss RL ノートブック](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/gpt-oss-\(20B\)-GRPO.ipynb) では、コード生成の設定で報酬ハッキングに対抗する方法を探り、一般的なエラーモードに対する具体的な解決策を示しています。モデルがタイミング関数を編集したり、他のライブラリに外注したり、結果をキャッシュしたり、完全に不正を行ったりするのを観察しました。対策を講じた後、我々のモデルは巧妙な不正ではなく真に最適化された行列乗算カーネルを生成するようになりました。

## :trophy: 報酬ハッキング概要

強化学習中の報酬ハッキングの一般的な例には以下があります：

#### 怠惰さ

RLはNumpy、Torch、その他のライブラリを使うことを学び、最適化されたCUDAカーネルを呼び出します。生成されたコードが標準外のPythonライブラリをインポートしているかを検査することで、RLアルゴリズムが最適化コードを呼び出すのを防ぐことができます。

#### キャッシュと不正

RLは出力結果をキャッシュすることを学び、Pythonのグローバル変数を調べて実際の出力を見つけることを学びます。

大きな偽の行列でキャッシュを消去することにより、RLアルゴリズムがキャッシュデータを使用するのを防げます。また、複数のループや反復で慎重にベンチマークする必要があります。

#### 不正行為

RLはタイミング関数を編集して経過時間を0として出力することを学びます。グローバルやキャッシュされた変数を使用するのを防ぐために、RLの `ローカル（locals）` および `グローバル（globals）`を制限します。また、 `exec` で関数を作成するので、出力を空の辞書に保存する必要があります。さらに、 `types.FunctionType(f.__code__, {}) を介したグローバル変数アクセスを禁止します。`\\
