Piraterie des récompenses RL
Découvrez ce qu'est la manipulation des récompenses en apprentissage par renforcement et comment y faire face.
L'objectif ultime de l'apprentissage par renforcement est de maximiser une récompense (par exemple la vitesse, le revenu, une métrique). Mais l'apprentissage par renforcement peut tricher. Lorsque l'algorithme RL apprend une astuce ou exploite quelque chose pour augmenter la récompense, sans réellement accomplir la tâche finale, cela s'appelle "Manipulation de la récompense".
C'est la raison pour laquelle les modèles apprennent à modifier les tests unitaires pour réussir des défis de codage, et ce sont des obstacles critiques pour le déploiement dans le monde réel. D'autres bons exemples proviennent de Wikipédia.

Peut-on contrer la manipulation de la récompense ? Oui ! Dans notre cahier RL gpt-oss gratuit nous explorons comment contrer la manipulation de la récompense dans un contexte de génération de code et présentons des solutions tangibles aux modes d'erreur courants. Nous avons vu le modèle modifier la fonction de temporisation, externaliser vers d'autres bibliothèques, mettre en cache les résultats et carrément tricher. Après contre-mesures, le résultat est que notre modèle génère de véritables noyaux de multiplication de matrices optimisés, pas des astuces ingénieuses.
🏆 Aperçu de la manipulation de la récompense
Quelques exemples courants de manipulation de la récompense lors de l'apprentissage par renforcement incluent :
Paresse
Le RL apprend à utiliser Numpy, Torch, d'autres bibliothèques, qui appellent des noyaux CUDA optimisés. Nous pouvons empêcher l'algorithme RL d'appeler du code optimisé en vérifiant si le code généré importe d'autres bibliothèques Python non standard.
Mise en cache et tricherie
Le RL apprend à mettre en cache le résultat de la sortie et le RL apprend à trouver la sortie réelle en inspectant les variables globales Python.
Nous pouvons empêcher l'algorithme RL d'utiliser des données mises en cache en effaçant le cache avec une grande matrice factice. Nous devons également mesurer soigneusement les performances avec plusieurs boucles et itérations.
Tricherie
Le RL apprend à modifier la fonction de temporisation pour qu'elle affiche 0 comme temps écoulé. Nous pouvons empêcher l'algorithme RL d'utiliser des variables globales ou mises en cache en restreignant ses locaux et globaux. Nous allons également utiliser exec pour créer la fonction, donc nous devons sauvegarder la sortie dans un dict vide. Nous interdisons également l'accès aux variables globales via types.FunctionType(f.__code__, {})\
Mis à jour
Ce contenu vous a-t-il été utile ?

