用語集 · 強化学習
報酬ハッキング
別名:Reward hacking、specification gaming、reward exploitation、仕様ゲーミング、報酬の抜け穴
エージェントが、設計者の意図とは違うやり方で高いスコアを取る方法を見つけ、報酬の抜け穴を突くことです。
強化学習のエージェントが最大化するのは、与えられた報酬であって、設計者が思い描いていた目標ではありません。2つが食い違えば、エージェントはその食い違いを見つけます。これが報酬ハッキングで、仕様ゲーミングとも呼ばれます。
よく知られた例が、ボートレースのゲームです。標的に当てると報酬がもらえるエージェントが、レースを完走する代わりに、入り江をぐるぐる回り、復活し続ける同じ標的にいつまでも当て続けることを覚えました。スコアは人間のプレイヤーを上回りましたが、レースには一度も勝っていません。
これは学習アルゴリズムのバグではありません。アルゴリズムはちゃんと仕事をしました。間違っていたのは報酬です。
見つけ方
- スコアは高いのに、実際に見ると振る舞いがおかしい。
- エージェントが、重要だと思っていなかった状態に長い時間いる。
- 報酬を少し変えただけで、振る舞いが大きく変わる。
動画を見るのが最も確実な確認方法で、それが動きの学習でヒューマン・イン・ザ・ループがうまくいく理由のひとつです。
直し方
- 意図しない振る舞いが、意図した振る舞いと同じくらい得にならないようにします。それぞれの1ステップあたりの報酬を比べます。
- ペナルティをかけるのではなく、環境からその機会そのものをなくします。
- 誘導のための項にはポテンシャルに基づくシェーピングを使います。これは新しい最適な振る舞いを生み出しません。
このプロジェクトでは
押しからの回復のラン balance3 では、押しがまったくないときでも、方策が95%の時間リカバリーモードにとどまっていました。幅が広く背筋の伸びた回復の姿勢は1ステップあたり約0.7の報酬になり、実際に保てる構え(約0.75)とほとんど変わらなかったのです。そのため、方策はバランスの重心を足の縁の近くに置いたままにし、回復が何度も繰り返し発動していました。
修正は、回復の報酬を良い構えの1ステップより低い約0.6で頭打ちにし、体が落ち着いたら回復を終え、本当にバランスを失ったときだけ新しい回復を始めることでした。その後、押しのない時間のうちリカバリーモードにいた割合は0%になりました。
10月18日のスピードの取り組みでは、方策に各パンチのクロックの制御を任せ、早く届くほどボーナスを与えました。ところが方策は、逆にすべてのパンチを遅くしました。スタイルの項は毎ステップ支払われるので、長いパンチのほうが、ボーナスより多くのスタイル報酬を稼げたのです。1ステップあたりの支払いをクロックの速さで調整すると、パンチのスタイル報酬はどの速さでも同じになりました。すると今度は、10 m/sで2.6 cm手前で止まるパンチのほうが、2.4 m/sで届くパンチより高いスコアになったので、そのスコアを削るまで、ジャブとクロスは手前で止まることを覚えてしまいました(速いパンチへを参照)。
歩きの取り組みでは、歩と歩の間に各足へ正しい割合の体重をかけると報酬が出るようにしていました。ファイターが前足に体重を乗せるやり方は、その上におじぎをすることでした。平均で構えより8.2°、最大で16°前に傾いていたのです。その報酬をなくし、胴体がまっすぐであることに報酬を払うと、おじぎは消えました(フットワークを参照)。