agecritique@gmail.com

Récompenser, punir, entraîner une machine : c’est quoi ?

Récompenser, punir, entraîner une machine : c’est quoi ?

Robot learning

Aujourd’hui, je vais encore vous parler, pour changer… d’intelligence artificielle. Oui je sais, encore, désolæ j’ai un peu l’impression de transformer cette rubrique Science en rubrique IA, mais j’espère laisser davantage la parole à mes comparses dans les prochains épisodes.

Si je veux encore une fois vous parler d’intelligence artificielle, c’est au départ en réaction à certaines questions que j’ai reçues sur ma dernière chronique, de l’épisode 3, sur les GANs. Dans cet article je parle notamment d’entraîner des réseaux de neurones, de les récompenser, etc. et on m’a demandé, “Alex, comment on fait pour récompenser un réseau de neurones ?” C’est une vraie bonne question, est-ce que je lui donne une friandise ? Est-ce que je le caresse ? C’est ce genre d’image que le terme évoque, comme si j’étais en train de dresser un chien. Et plus généralement, il y a autour de l’apprentissage tout un vocabulaire qui semble inspiré du comportement animal ou humain: on parle d’entraînement, de récompense, parfois même de punition, … Tout ce vocabulaire très inspiré du vivant peut causer des incompréhensions, et même parfois des fantasmes; est-ce que mon robot va se rebeller contre moi pour se venger des punitions que je lui ai infligées ? Comme on va le voir, non, et ce que je voudrais faire aujourd’hui, c’est démystifier un peu ce vocabulaire et vous expliquer un peu plus techniquement, tout en restant je l’espère le plus accessible possible, comment marchent réellement ces systèmes.

Revenons sur l’entraînement, la récompense, la punition. Si on utilise ces termes, ce n’est pas juste pour créer des fantasmes, c’est parce que le machine learning et l’IA moderne s’inspirent du vivant. Cela paraît logique : si on veut créer des systèmes intelligents artificiels, on va s’inspirer de ceux qu’on connaît déjà, à savoir les êtres vivants. On parle de bioinspiration. Concernant les systèmes d’apprentissage automatique, on les fait apprendre par essais et erreurs parce qu’on a constaté que c’est ce que font les humains et les animaux. Pour autant l’analogie et l’inspiration ont des limites; ce n’est pas parce qu’on parle d’entraînement ou de récompense qu’on reproduit tous les aspects du comportement animal

Donc au final, comment on fait apprendre un système d’intelligence artificielle ?

Eh bien avant que je vous parle d’intelligence artificielle et en particulier d’apprentissage automatique, il faut que je vous parle d’un autre sujet, qui a l’air beaucoup moins “glamour” mais qui en constitue le moteur: l’optimisation. L’optimisation, c’est un sous domaine des maths. On pourrait dire que c’est l’art et la technique de trouver le maximum ou le minimum d’une fonction. A quoi cela sert ? A résoudre des problèmes. Je vais vous donner quelques exemples pour y voir plus clair.

Imaginons que vous êtes un commercial d’une entreprise, vous circulez en voiture, et vous devez aller démarcher des clients à Paris, Bordeaux, Nantes et Toulouse. Vous pouvez organiser vos visites comme vous voulez, votre but est de visiter les quatre villes en perdant le moins de temps possible en voiture. Eh bien ceci, c’est un problème d’optimisation. Vous avez un ensemble de recherche, qui est constitué de tous les trajets possibles couvrant ces quatre villes (Paris, puis Bordeaux, puis Nantes puis Toulouse, Bordeaux, puis Paris, puis Nantes puis Toulouse, etc.), vous pouvez associer à chaque trajet une durée, et vous cherchez à minimiser cette durée, c’est à dire à trouver le trajet qui produit la valeur minimale de la durée. Pour l’exemple que j’ai donné la réponse est triviale (si on part de Paris: Paris, puis Nantes, puis Bordeaux puis Toulouse), mais si on a non pas 4 mais 10… ou 100… ou 1000 villes, trouver le trajet optimal avec certitude est en fait extrêmement difficile; c’est un problème d’optimisation très connu, le problème du voyageur de commerce.

Pour donner un autre exemple en dehors de l’IA: vous êtes ingénieur, vous concevez un pont, vous voulez qu’il soit le plus léger possible tout en étant assez solide pour soutenir le poids d’un train. Là on parle d’optimisation sous contrainte; on cherche à minimiser une quantité (le poids) tout en respectant une certaine règle (le pont doit – largement – soutenir le poids d’un train). Mais on a encore un ensemble de recherche (très grand, l’ensemble de toutes les structures de ponts possibles et imaginables) et dedans une ou des solutions optimales, que l’on cherche à trouver.

D’accord pour les voyageurs de commerce et les ponts, mais quel est le rapport avec l’intelligence artificielle ?

Le rapport, c’est que beaucoup de techniques d’intelligence artificielle, qui reposent sur l’apprentissage automatique, font appel à l’optimisation, et que généralement quand on parle d’”entraîner” un système ou de le faire “apprendre”, dans la pratique il s’agit souvent simplement de résoudre un problème d’optimisation.

Prenons mon exemple préféré: créer un programme capable de dire si une image représente ou non un chat, en utilisant l’apprentissage supervisé. Je reprends la façon dont je l’ai expliqué dans l’épisode 3: je vais prendre un programme capable d’apprendre, puis l’entraîner, c’est à dire lui montrer un grand nombre de photos en lui disant lesquelles contiennent ou non des chats, et le système va apprendre empiriquement à différencier les photos de chats de photos d’autre chose, et à généraliser.

Détaillons un peu tout cela:

  • Quand je parle d’un “programme capable d’apprendre”, c’est généralement ce qu’on appelle un réseau de neurones artificiels. Le nom vient du fait que ces programmes sont grossièrement inspirés du fonctionnement des neurones biologiques, mais leur fonctionnement exact n’est pas très important ici. Ce qui est important, c’est que ce sont des programmes capables de traiter des données (ici des images), de donner une réponse (ici une réponse binaire “oui” ou “non”), et surtout que leur comportement est entièrement déterminé par des paramètres, qui correspondent aux réglages de cette machine informatique. Vous pouvez vraiment y penser comme aux réglages d’une machine: selon la façon dont les paramètres sont réglés, votre programme détectera les chats, les cornemuses, les natures mortes, ou bien fera n’importe quoi.
    Dans les réseaux de neurones modernes il peut y avoir énormément de paramètres, jusqu’à plusieurs millions.
  • Quand je parle de dire au programme quelles photos contiennent ou non les chats: j’ai mes photos, dont je sais si elles contiennent ou non des chats, je peux essayer de les donner à mon système (dont les paramètres sont plus ou moins bien réglés), et voir ce qu’il raconte: parfois il réussira, et parfois il se trompera, il verra un chat là où il n’y en a pas, ou vice versa. Je vais tout simplement prendre ma collection de photos, la soumettre au système et compter les erreurs.

Et on voit le problème d’optimisation apparaître: j’ai ensemble de recherche (toutes les valeurs possibles des paramètres de mon programme), et je veux trouver la solution, le “réglage” de mon programme, qui minimise une quantité, les erreurs qu’il fait. Ce n’est pas fondamentalement différent de trouver le trajet le plus rapide entre des villes ou le pont le plus léger possible. La seule différence, c’est qu’au lieu de mesurer directement une quantité (le poids du pont, la durée du trajet) on mesure l’erreur que fait le système sur un jeu de données (la collection de photos). Quand on parle d’entraîner le système, c’est trouver petit à petit des valeurs des paramètres les meilleures possibles pour minimiser l’erreur, c’est à dire pour résoudre ce problème d’optimisation.

OK, et comment on le résout, ce problème d’optimisation ?

Ca, c’est le sujet d’une grande partie de la recherche actuelle en intelligence artificielle ! Il y a beaucoup de méthodes, qui dépendent du problème que l’on cherche à résoudre et de la façon dont on le pose. Je ne vais pas m’étendre dessus, c’est compliqué à expliquer sans rentrer dans des détails mathématiques, et je vous ai déjà assez parlé de maths.

D’accord, et quand on parle de récompenser ou punir une IA ou un robot ?

C’est simplement une métaphore pour parler de ce qui va être optimisé quand on fait apprendre le système. Une récompense c’est une grandeur que l’on cherche à maximiser, et au contraire une punition, c’est quelque chose que l’on cherche à minimiser, à éviter, comme les erreurs dans mon système avec les chats. C’est un vocabulaire qui est effectivement surtout utilisé en robotique et dans des domaines proches: par exemple si j’ai un robot piloté par un système apprenant et que veux qu’il apprenne à sortir d’un labyrinthe sans se cogner aux murs, je vais décider d’attribuer une récompense très élevée au fait d’atteindre la sortie et une punition (plus faible) au fait de taper un mur. Si j’optimise selon ces critères, j’obtiens un robot qui atteint la sortie en évitant les murs. Mais c’est entièrement moi qui ai fait ces choix, il n’y a aucun sens plus profond; si j’inverse la récompense et la punition je vais obtenir un robot qui reste dans le labyrinthe et va constamment percuter les murs.

Cette chronique est principalement une version développée de cette réponse Quora.