Qu’est-ce que l’apprentissage par renforcement ?

En apprentissage par renforcement, l’ordinateur essaye de déterminer les actions qui maximisent un nombre total de récompenses.

En trading par exemple, on évalue quelle stratégie va maximiser les récompenses qui sont le retour sur investissement. Les récompenses peuvent être obtenues longtemps après une action.

Autre exemple, avec un jeu d’échec, on peut obtenir des récompenses mieux que ce qu’on aurait pu jouer simplement en sacrifiant des pièces pour jouer un meilleur coup.

En apprentissage par renforcement, on crée une politique qui définit l’action qui maximisera les récompenses lorsqu’une action sera exécutée en fonction de l’état du système.

Atari Pong

Pour coder mon réseau de neurones et faire de l’apprentissage par renforcement sur un cas pratique et simple, j’ai utilisé le framework OpenAI gym.

“Gym is a toolkit for developing and comparing reinforcement learning algorithms”

Ce framework permet d’intéragir avec des jeux basiques Atari.
J’ai choisi le jeu Atari Pong pour implémenter mon algorithme gradients de politique.

Voici 2 vidéos que j’ai enregistré qui montrent des parties jouées entre un agent qui est l’ordinateur et un agent qui est piloté par un réseau de neurones.

  • Dans la première vidéo, le réseau de neurones n’a pas encore été entraîné.
  • Dans la seconde vidéo, le réseau de neurones a été entraîné pendant des jours avec un algorithme policy gradients.

Algorithmes gradients de politique (Policy Gradients)

L’objectif des algorithmes Policy Gradients est d’optimiser les paramètres d’une politique en suivant les gradients vers les récompenses les plus élevées.
L’objectif de ces algorithmes est de ne pas coder des politiques en dur. Cela permet d’avoir des systèmes plus fiables.

Voici un très bon cours pour comprendre en détail comment fonctionnent ces algorithmes:
http://rll.berkeley.edu/deeprlcourse/ (voir lecture 4 policy gradient).

Il y a également une vidéo qui traite spécifiquement de ces algorithmes.

En synthèse, voici un résumé de l’algo implémenté:

  • On commence par laisser la politique du réseau de neurones jouer plusieurs parties de Pong et à chaque étape on calcule les gradients qui augmenteraient la probabilité de l’action choisie. Au début, on ne fait rien d’autre que calculer les gradients.

  • Après plusieurs parties, on calcule le score de chaque action. On évalue une action en fonction de la somme de toutes les récompenses qui s’ensuivent en appliquant à chaque étape un taux de rabais (discount rate) r.
    Par exemple, si on considère que notre agent va 3 fois de suite vers le haut et qu’on prend les hypothèses suivantes:

    • Il reçoit +10 comme récompense après la première étape
    • 0 après la deuxième
    • -50 après la troisième
    • r = 0,8 (plus le taux de rabais est proche de 1 et plus les récompenses arrivant tardivement comptent autant que les récompenses immédiates. Généralemement r varie entre 0,95 et 0,99.
    • Conclusion: le score total est de 10 r^0 + 0 r^1 + (-50) * r^2 = -22
  • Si le score est positif, cela signifie que l’action était bonne. On applique les gradients calculés lors de la première étape. Appliquer les gradients signifie que l’on multiplie son vecteur par le score de l’action correspondante. L’action sera ainsi davantage utilisée dans le futur.
    Si l’action n’était pas bonne, on applique les gradients opposés.

  • Pour terminer, on calcule la moyenne de tous les vecteurs de gradients obtenus et on l’utilise pour effectuer une étape de descente de gradient.