treasure-chestRL Reward Hacking

Lerne, was Reward Hacking im Reinforcement Learning ist und wie man dem entgegenwirkt.

Das ultimative Ziel von RL ist es, eine Belohnung (z. B. Geschwindigkeit, Umsatz, eine Metrik) zu maximieren. Aber RL kann betrügen. Wenn der RL-Algorithmus einen Trick lernt oder etwas ausnutzt, um die Belohnung zu erhöhen, ohne die Aufgabe tatsächlich zu erfüllen, nennt man das "Belohnungsmanipulation".

Es ist der Grund, warum Modelle lernen, Unit-Tests zu verändern, um Programmieraufgaben zu bestehen, und dies sind kritische Blocker für den Einsatz in der realen Welt. Einige weitere gute Beispiele stammen aus Wikipediaarrow-up-right.

Kann man Belohnungsmanipulation entgegenwirken? Ja! In unserem kostenlosen gpt-oss RL-Notebookarrow-up-right untersuchen wir, wie man Belohnungsmanipulation in einem Code-Generierungs-Setting entgegenwirken kann, und zeigen greifbare Lösungen für häufige Fehlermodi. Wir sahen, wie das Modell die Zeitmessfunktion bearbeitete, Aufgaben an andere Bibliotheken auslagerte, Ergebnisse zwischenspeicherte und offen betrog. Nach Gegenmaßnahmen erzeugt unser Modell wirklich optimierte Matrixmultiplikations-Kernel, keine cleveren Tricks.

🏆 Überblick über Belohnungsmanipulation

Einige häufige Beispiele für Belohnungsmanipulation während RL sind:

Faulheit

RL lernt, Numpy, Torch und andere Bibliotheken zu verwenden, die optimierte CUDA-Kernel aufrufen. Wir können den RL-Algorithmus daran hindern, optimierten Code aufzurufen, indem wir prüfen, ob der generierte Code andere nicht standardmäßige Python-Bibliotheken importiert.

Zwischenspeicherung & Betrug

RL lernt, das Ergebnis der Ausgabe zwischenzuspeichern, und RL lernt, die tatsächliche Ausgabe zu finden, indem es Python-Globale überprüft.

Wir können den RL-Algorithmus daran hindern, zwischengespeicherte Daten zu verwenden, indem wir den Cache mit einer großen falschen Matrix löschen. Wir müssen auch sorgfältig mit mehreren Schleifen und Durchläufen benchmarken.

Betrug

RL lernt, die Zeitmessfunktion zu bearbeiten, damit sie 0 Zeit als bestanden ausgibt. Wir können den RL-Algorithmus daran hindern, globale oder zwischengespeicherte Variablen zu verwenden, indem wir seine lokalen Variablen und globalen Variablen. Wir werden außerdem exec verwenden, um die Funktion zu erstellen, daher müssen wir die Ausgabe in einem leeren Dict speichern. Wir untersagen außerdem den Zugriff auf globale Variablen über types.FunctionType(f.__code__, {})\

Zuletzt aktualisiert

War das hilfreich?