Yann LeCun

Modèles à base d'énergie et apprentissage structuré

10 mai 2016

Deep Learning / Intelligence Artificielle
Illustration de Yann LeCun

Introduction et contexte

Yann LeCun

Bien, nous allons commencer.

Yann LeCun

Je vais parler aujourd'hui des modèles à base d'énergie, des modèles qui permettent de faire de l'inférence, pas seulement des modèles entrée-sortie, mais un petit peu plus compliqués pour des situations un petit peu plus compliquées.

Yann LeCun

Suivi d'un séminaire par Gabriel Synnaeve, chercheur à Facebook AI Research, qui va nous parler de reconnaissance de la parole avec des réseaux de neurones et du deep learning.

Yann LeCun

Deux points communs avec lui, il travaille à Facebook aussi et il vient de débarquer de New York comme moi, donc il a eu une nuit très courte.

Yann LeCun

Alors commençons par...

Yann LeCun

C'est un petit peu ennuyeux ça. Est-ce que je peux m'en débarrasser ? Pas vraiment.

Yann LeCun

Bon, tant pis, on va faire avec. Ah, voilà.

L'idée de base des systèmes à base d'énergie

Yann LeCun

L'idée de base des systèmes à base d'énergie, c'est pour faire de l'inférence un petit peu plus complexe que dans les cas où le système est juste censé produire une seule sortie à partir d'une entrée.

Yann LeCun

Une situation typique, c'est quand on veut faire de la reconnaissance de la parole ou de l'écriture manuscrite ou de la traduction par exemple, ou des modèles de langage, des systèmes qui typiquement vous donnent une séquence de symboles par exemple, qui doit être structurée.

Yann LeCun

Et pour lequel il n'y a pas forcément une seule réponse. Pour la reconnaissance de la parole, il y a des mots qu'on ne comprend pas parfois, ou alors on peut avoir à produire des mots qui sont les bons substituts pour ce qui a été prononcé.

Yann LeCun

Certainement pour la traduction de langues, il y a toujours plusieurs traductions possibles pour chaque phrase dans une langue donnée. Donc il n'y a pas une seule réponse possible pour chaque entrée.

Yann LeCun

Dans ce cas-là, c'est un petit peu difficile d'entraîner un réseau feed-forward, un réseau qui prend une entrée et produit une seule sortie, si on a plusieurs alternatives possibles et surtout si la sortie est structurée.

Architecture des modèles à base d'énergie

Yann LeCun

Alors l'idée de base des modèles à base d'énergie, c'est d'avoir une fonction déterministe qui prend une entrée et donne une sortie.

Yann LeCun

Mais par-dessus, on va mettre un module à base d'énergie. Ce que fait ce module, c'est qu'il observe l'entrée venant soit directement, soit d'un réseau de neurones conventionnel ou n'importe quel autre réseau, et la sortie n'est pas une sortie directe, mais c'est une entrée du module.

Yann LeCun

Il y a possiblement aussi des variables latentes qui ne sont jamais observées, mais dont la valeur aiderait à produire la réponse, mais on va laisser ça de côté pour l'instant.

Yann LeCun

On va juste regarder ce module à base d'énergie comme un module avec deux entrées, une observée et une qui doit être inférée.

Yann LeCun

Le modèle produit une valeur scalaire indiquant la compatibilité entre ces deux valeurs observées, entre le X et le Y, entre l'entrée observée et la sortie que ce système est censé produire.

Yann LeCun

Conduisant à une inférence, on essaie de trouver la valeur de cette variable minimisant cette énergie, et ce serait le résultat.

Yann LeCun

Au lieu d'avoir une fonction produisant directement une sortie à partir d'une entrée, on a l'entrée et la sortie qui vont dans une fonction, on mesure la compatibilité et on fait une inférence et on minimise l'énergie par rapport à cette variable.

Historique et applications de l'apprentissage structuré

Yann LeCun

Alors c'est beaucoup utilisé sous différents noms dans le contexte de l'apprentissage automatique depuis des années maintenant.

Yann LeCun

Peut-être les premières applications de ça, c'était dans le contexte de la reconnaissance de la parole où on a vraiment besoin de chercher parmi toutes les transcriptions possibles pour trouver celle qui est la plus cohérente.

Yann LeCun

Donc ces systèmes d'inférence existent dans ces domaines. Très souvent, ils sont formalisés non pas par une énergie, mais par une probabilité.

Yann LeCun

On peut toujours prendre une énergie et puis la normaliser pour la transformer en une distribution de probabilité. Mais l'approche ici par l'énergie est plus générale.

Yann LeCun

Beaucoup de modèles utilisent ça, les perceptrons structurés, les champs de Markov conditionnels, et ainsi de suite.

Yann LeCun

Il y a quelques années, une dizaine d'années, j'ai créé un long tutoriel sur cette idea générale, une manière d'unifier tout ça.

Yann LeCun

Mais le premier modèle de ce genre remonte à bien longtemps, en reconnaissance de la parole à la fin des années 80. L'utilisation de réseaux de neurones pour l'apprentissage structuré remonte aux thèses de Bottou, Bengio et Haffner dans les années 90.

Yann LeCun

Plus récemment, ce qu'on appelle les réseaux de transformateurs de graphes qu'on utilise pour la reconnaissance de l'écriture manuscrite et plus récemment, le perceptron structuré, CRF, Max Margin Markov Nets, et ainsi de suite.

Yann LeCun

Eux n'utilisent pas de réseaux de neurones, mais ils utilisent des systèmes de classification plus conventionnels, de l'apprentissage superficiel donc, pas du deep learning.

Inférence et minimisation de l'énergie

Yann LeCun

Voici un prototype d'un système à base d'énergie qui prend une variable observée X, une entrée, et la sortie Y n'est pas une sortie, c'est une entrée aussi pour la fonction.

Yann LeCun

La fonction d'inférence consiste à trouver la valeur de Y minimisant cette fonction d'énergie. Pas d'apprentissage pour l'instant, on suppose qu'elle est donnée.

Yann LeCun

Donc là par exemple, pour faire de la classification d'images, on va essayer toutes les possibilités. On va donner à cette variable toutes les possibilités et on mesure l'énergie qu'on obtient pour chaque valeur et on prend le minimum.

Yann LeCun

D'accord ? Dans ce cas-là, animal.

Yann LeCun

Comme je l'ai dit tout à l'heure, ça peut s'appliquer dans beaucoup de domaines, particulièrement dans les cas où l'objet à produire est structuré, pour produire une image qui est le résultat d'une segmentation.

Yann LeCun

Si vous voulez que l'image respecte certaines contraintes, vous pouvez avoir ça dans la fonction d'énergie.

Yann LeCun

Par exemple, pour satisfaire le fait que le noyau d'une cellule est dans le cytoplasme, vous pouvez le faire à la main si vous voulez.

Yann LeCun

Ce modèle est largement utilisé pour enlever le bruit dans une image par descente de gradient typiquement, on cherche une image pour minimiser l'énergie, qui aura généralement deux termes.

Yann LeCun

Un disant que l'image ne doit pas être trop différente de l'image d'entrée observée qui est bruitée, et un autre terme disant que l'image doit être jolie. Ça peut être appris encore une fois ici.

Yann LeCun

Comme je l'ai mentionné tout à l'heure, pour l'écriture manuscrite ou la reconnaissance de la parole ou pour le traitement du langage naturel, le parsing et le reste.

Lien entre énergie et probabilités

Yann LeCun

Alors on peut toujours transformer des énergies en probabilités si vous aimez manipuler des probabilités.

Yann LeCun

Il est toujours possible de prendre ces fonctions d'énergie et de les transformer en probabilités de X connaissant Y à partir de l'énergie, mais l'énergie est un petit peu plus élémentaire, plus fondamentale.

Yann LeCun

On peut obtenir des probabilités à partir de l'énergie, l'inverse n'est pas toujours vrai.

Yann LeCun

Donc on prend l'énergie mesurant la compatibilité entre Y et X, on prend l'exponentielle, il y a un coefficient ici qui est au hasard, c'est un moins par convention.

Yann LeCun

Les petites énergies correspondent à des probabilités élevées. Cette convention est venue de la physique, de la physique statistique.

Yann LeCun

Pour obtenir, ça nous donne un nombre positif. Pour obtenir une probabilité conditionnelle qui est normalisée, on divise tout ça par la somme ou l'intégrale sur toutes les valeurs de Y dans un domaine du numérateur.

Yann LeCun

Donc maintenant si on intègre ça par rapport à Y, on se retrouve avec une intégrale par rapport à Y au-dessus, on a le même terme au-dessus et en dessous nous donnant 1, c'est aussi simple que ça.

Yann LeCun

Alors encore une fois par analogie avec la physique, c'est une distribution de Gibbs, l'inverse d'une température et ce terme est appelé la fonction de partition, le terme de normalisation donc.

Yann LeCun

Mais dans la plupart des cas en fait, on n'a pas vraiment besoin de produire des probabilités à partir de l'énergie, à moins qu'on veuille avoir des scores calibrés pour pouvoir calibrer plusieurs modèles ensemble sans les entraîner une nouvelle fois. J'y reviendrai plus tard.

Variables latentes et énergie libre

Yann LeCun

Alors très souvent les modèles à base d'énergie n'ont pas seulement deux variables, mais trois. Une observée, une qu'on est censé générer, prédire, qui est observée dans l'ensemble d'apprentissage mais pas dans un ensemble de test.

Yann LeCun

Enfin pas en utilisation réelle donc. Et parfois une variable latente que j'appelle Z ici, des variables qui ne sont jamais observées.

Yann LeCun

Ça a l'air mystérieux, mais je vous en dirai plus là-dessus plus tard. Par exemple, imaginons qu'on veuille entraîner un système de reconnaissance d'objets pour détecter, disons, des visages.

Yann LeCun

Et on a un réseau de neurones convolutionnel nous donnant un score disant s'il y a un visage à chaque point de l'image, convolution appliquée partout.

Yann LeCun

Pour entraîner un tel système, la sortie est binaire, un visage ou pas de visage. Mais il y a une variable latente qui est la position du visage.

Yann LeCun

Entraîner le système donc, il faut simultanément dire s'il y a un visage ou pas, mais il faut aussi trouver où est le visage. C'est comme une variable latente, ce n'est jamais dit par l'ensemble d'apprentissage, il ne vous dit pas où est le visage, il dit juste qu'il y a un visage dans l'image.

Yann LeCun

Et on peut voir cette position comme une variable latente, mais j'y reviendrai.

Yann LeCun

Les variables latentes peuvent être gérées simplement en englobant ce modèle à variable latente dans une plus grosse boîte qui effectue une inférence par rapport à Z. On peut donc écrire une nouvelle énergie qui est similaire à ce que les physiciens appellent l'énergie libre, qui dépend seulement de X et Y.

Yann LeCun

Et ce qu'on fait, ce que fait cette boîte, c'est qu'elle marginalise ou minimise par rapport à Z. Un exemple simple est la minimisation.

Yann LeCun

Une autre forme d'énergie libre. Ça correspond d'un point de vue probabiliste à marginaliser sur les variables Z, et c'est juste une inférence du maximum de vraisemblance.

Exemple : Reconnaissance de l'écriture manuscrite

Yann LeCun

Alors prenons un exemple un petit peu plus concret pour la reconnaissance de l'écriture manuscrite.

Yann LeCun

On nous donne un mot. Disons qu'on a une heuristique pour couper le mot en morceaux.

Yann LeCun

On ne va pas faire ça ici. On va utiliser une sorte d'heuristique pour segmenter le mot en morceaux.

Yann LeCun

Mais bien sûr, on ne peut pas savoir quels morceaux vont ensemble pour former un caractère avant de reconnaître le caractère. Donc il faut avoir plusieurs hypothèses sur la segmentation, représentées ici.

Yann LeCun

Chaque arc dans le graphe correspond à un morceau d'encre, à un certain ensemble de caractéristiques dans l'image. Chaque chemin dans ce graphe est tel que si on passe du nœud de départ au nœud final, on passe par tous les morceaux d'encre si vous voulez.

Yann LeCun

Donc on voit la séquence complète de toutes les composantes de l'image dans chaque morceau.

Yann LeCun

Le chemin en haut ici correspond à une segmentation extrême du mot dans lequel on a découpé tous les morceaux, et un autre chemin en bas mettant ensemble les deux premiers morceaux, et un autre chemin mettant les trois tout seuls, le 4, enfin les deux morceaux du 4 assemblés et le 2 tout seul, qui est le bon chemin dans ce cas-là.

Yann LeCun

On peut appliquer notre réseau convolutionnel préféré à chacune de ces composantes nous donnant un score pour chacune des 10 classes si on veut effectuer une reconnaissance de chiffres manuscrits, créant un graphe avec une structure similaire, mais les arcs sont maintenant étiquetés de 0 à 9 avec un score correspondant au score donné par le classifieur à cette catégorie spécifique.

Yann LeCun

Et maintenant ce qu'il va falloir faire, c'est chercher dans ce graphe pour trouver le chemin le plus court, le moins coûteux, où la somme d'énergies le long du chemin est la plus faible. Et ça nous donnera la réponse en fait.

Exemple : Détection de visages

Yann LeCun

Voilà l'exemple dont j'ai parlé tout à l'heure sur la détection de visages. On applique un réseau convolutionnel avec une fenêtre glissante sur une entrée.

Yann LeCun

Le système, on dit au système s'il y a un visage ou pas après l'apprentissage et le système doit inférer la position du visage. Et il fait ça en choisissant la position où le score actuel est le plus élevé ou l'énergie est la plus basse.

Yann LeCun

Une minimisation par rapport à la variable latente Z correspondant à la position du visage.

Yann LeCun

Ça nous donne une certaine flexibilité pour produire un système dont la production de la sortie n'est pas juste un calcul direct mais le résultat d'une optimisation, rendant le système plus puissant et flexible peut-être.

Reconnaissance de mots et Dynamic Time Warping

Yann LeCun

L'un des premiers exemples combinés avec des réseaux de neurones était un système pour la reconnaissance de mots produit par Xavier Driancourt et Léon Bottou en 1991.

Yann LeCun

Un papier qui est malheureusement passé inaperçu, mais ils étaient des pionniers pour entraîner un réseau de neurones avec un système de prédiction structuré pour reconnaître des mots.

Yann LeCun

C'est lié à ce que Gabriel nous dira dans le prochain séminaire. L'idée est que vous prenez une séquence de vecteurs représentant le signal du mot, très souvent une séquence de vecteurs où chaque composante indique l'énergie dans une bande de fréquence. Gabriel vous en dira plus.

Yann LeCun

On branche un réseau convolutionnel à ça, c'est un réseau convolutionnel effectuant des convolutions sur le temps dans ce cas-là, produisant lui-même une séquence de vecteurs caractéristiques en quelque sorte.

Yann LeCun

Mais bien sûr, si on veut entraîner le système à reconnaître des mots, chaque personne peut prononcer le mot à une vitesse différente, donc la longueur des mots est variable. Donc cette séquence sera de longueur variable, celle-ci aussi.

Yann LeCun

Le modèle de mot, donc on va faire une classification ici pour classer des mots, disons pour reconnaître des mots parlés de 0 à 9, un petit vocabulaire. On a besoin d'avoir un modèle pour chaque mot, et ce modèle pour chaque mot doit être robuste par rapport aux variations dans la vitesse de prononciation du mot.

Yann LeCun

La manière dont on peut faire ça est relativement classique, c'est ce qu'on appelle le dynamic time warping, c'est une technique datant des années 70 en reconnaissance de la parole. Les mots avec une séquence de vecteurs, mais ces vecteurs ne sont pas nécessairement successifs les uns avec les autres. On peut étirer la séquence pour l'aligner avec la séquence arrivant ici, l'aligner ou la contracter en fait.

Yann LeCun

On peut imaginer que c'est un peu similaire à une séquence de mots où l'énergie correspondant à la paire de cette séquence de vecteurs avec un modèle de mot spécifique serait la somme des distances entre les vecteurs.

Yann LeCun

C'est un peu comme si on avait des ressorts entre les vecteurs. Si on tire dessus, ça augmente l'énergie.

Yann LeCun

Donc pour chaque modèle de mot de 0 à 9, on essaie de trouver comment étirer les ressorts et le bon warping, le bon alignement temporel.

Yann LeCun

La position de ces variables, ce sont des variables latentes parce qu'on minimise par rapport à la position de ces vecteurs pour trouver la correspondance.

Yann LeCun

Donc le time warping, l'alignement temporel en quelque sorte, constitue les variables latentes dans cette inférence, et ensuite on regarde l'énergie la plus basse si pour tous ces modèles, l'énergie la plus basse est, disons, le mot 3 ou n'importe quel mot choisi pour la classification.

Yann LeCun

La question maintenant est de savoir comment on entraîne ça. Un peu plus de détails sur cette histoire d'alignement. Encore une fois, c'est classique en reconnaissance de mots avec le warping.

Yann LeCun

Ce qui est nouveau, ou ce qui était nouveau en 1991, c'était le fait d'entraîner un réseau de neurones à travers ce type de warping.

Yann LeCun

Donc ces histoires d'alignement en fait, c'est très simple à calculer parce que pour trouver l'énergie minimum dans un système avec des ressorts comme ça, dans un système simple à une dimension, c'est basé sur le chemin le plus court.

Yann LeCun

On prend la séquence de vecteurs ici, celle qu'on veut faire correspondre, on essaie de trouver le chemin dans un graphe allant de ce point-là à ce point-là et avec l'énergie minimum, faisant correspondre les vecteurs qui sont les plus proches les uns des autres et étirant le ressort le moins possible.

Yann LeCun

Donc c'est simplement un algorithme du plus court chemin sur un graphe.

Entraînement des modèles à base d'énergie

Yann LeCun

Et alors la question c'est comment on entraîne ça ? Donc l'idée est relativement simple.

Yann LeCun

Elle consiste dans ce cas-là, et c'est un exemple et ensuite je passerai à une situation un petit peu plus générale. Encore une fois, on prend la séquence de vecteurs acoustiques, on la met dans un réseau convolutionnel.

Yann LeCun

Ici c'est un time delay neural net. On récupère cette séquence de vecteurs caractéristiques, on a un modèle pour chaque mot ou plusieurs, au moins un modèle pour chaque catégorie.

Yann LeCun

On calcule la distance par time warping entre cette séquence et chaque modèle, nous donnant une minimisation par rapport à la variable latente avec ce time warping.

Yann LeCun

La manière dont on entraîne ça, c'est qu'il faut entraîner le modèle pour le mot correct avec le plus proche possible de la sortie du réseau et l'entraîner avec le plus proche possible de la sortie du bon modèle de mot, du bon template.

Yann LeCun

C'est assez simple, on peut obtenir un gradient de cette distance à travers le time warping par rapport à la sortie du réseau pour pouvoir rétropropager les gradients dans le réseau pour l'apprentissage.

Yann LeCun

Mais ça ne suffit pas. Si on fait seulement ça, minimiser la distance entre la sortie du réseau et le template, on arrive à une solution très simple, tous les templates vont aller au même endroit. Le réseau de neurones va ignorer complètement l'entrée et produirait une sortie constante égale à tous les templates.

Yann LeCun

Ça, ça minimise la fonction de coût qui consiste à minimiser la différence entre le bon modèle et la sortie du réseau. Donc ça ne marchera pas.

Yann LeCun

Donc il faut un autre terme dans la fonction de coût repoussant les modèles qui sont incorrects. Si un template gagne, disons que le mot 3 a été prononcé et le système en fait reconnaît 4.

Yann LeCun

Il faut donc non seulement tirer le bon template vers la sortie du réseau, mais il faut aussi repousser le mauvais template, l'éloigner de la sortie du réseau. Il faut au moins deux termes, un qui pousse et un qui tire pour éviter l'effondrement de tout ça.

Marginalisation et énergie libre

Yann LeCun

Alors un petit peu plus de détails sur cette histoire de marginalisation.

Yann LeCun

Comme je l'ai dit tout à l'heure, si on a une énergie qui est une fonction de trois variables, Z, Y, X, pour obtenir une distribution conditionnelle par rapport à une ou plusieurs variables, il suffit de normaliser par rapport à la variable à gauche, celles sur lesquelles on veut une distribution normalisée.

Yann LeCun

Avec cette intégrale au-dessus ici, si on intègre par rapport à Z et Y, on obtient 1. Donc la distribution doit être normalisée proprement. Pour éliminer cette variable Z, tout ce qu'on a à faire est équivalent à utiliser une énergie qui est de cette forme.

Yann LeCun

Si on a une énergie qui a cette forme et qu'on fait l'inférence par rapport à Y, c'est comme si on prenait le Y ici maximisant cette probabilité marginalisée sur Z.

Yann LeCun

Cette énergie en fait est une manière d'éliminer la variable Z, de manière probabiliste disons.

Yann LeCun

Et quand bêta tend vers l'infini, toute cette expression converge vers le minimum par rapport à Z. Un cas simple donc d'inférence du maximum de vraisemblance.

Paysage d'énergie et apprentissage

Yann LeCun

Maintenant comment entraîner un modèle à base d'énergie ? Il faut que si le système nous donne ou produit des énergies faibles pour le bon résultat et des énergies élevées pour les mauvais résultats.

Yann LeCun

Disons faible pour animal et élevé pour voiture et élevé pour camion. Mais la bonne réponse est animal. La machine, quand elle s'entraîne, doit baisser l'énergie pour animal et augmenter l'énergie pour voiture.

Yann LeCun

De manière à ce qu'après l'apprentissage, animal ait l'énergie la plus basse parce que le système produit la réponse avec l'énergie la plus basse. Donc il faut entraîner le système pour qu'il donne l'énergie la plus basse à la bonne réponse et l'énergie la plus élevée aux mauvaises réponses.

Yann LeCun

Donc on peut voir la fonction de coût qui est une fonctionnelle en fait, notée L ici. On a une famille de fonctions d'énergie paramétrées par des poids dans les réseaux de neurones ou autres.

Yann LeCun

Ces fonctions d'énergie dépendent de l'entrée et de la sortie. On a un ensemble d'apprentissage, une série de paires Xi, Yi, entrée et sortie désirées, et la fonction de coût L, qui est une fonctionnelle, prend la fonction d'énergie comme argument si vous voulez, et l'ensemble d'apprentissage.

Yann LeCun

Et il faut trouver, indirectement on peut voir ça comme une fonction de W. Ce qu'on veut trouver c'est un W qui minimise cette fonction de coût en quelque sorte. Mais il faut concevoir cette fonction pour qu'elle le fasse correctement, donnant une énergie faible à la bonne réponse et une énergie élevée aux mauvaises réponses.

Yann LeCun

On va prendre la fonction d'énergie pour tous les X possibles, pour les X observés, et on va prendre le Y désiré et nous dire si cette fonction de coût va minimiser l'énergie pour toutes les bonnes réponses et l'augmenter pour les mauvaises réponses. C'est une fonctionnelle sur les paramètres et non sur les données.

Yann LeCun

Alors dans le cas discret ici que je vous ai déjà montré, comme je l'ai dit, la fonction de coût doit pousser vers le bas l'énergie pour les bonnes réponses et vers le haut pour les mauvaises réponses.

Yann LeCun

Si la bonne réponse est ici, il faut changer les paramètres dans la fonction d'énergie pour que l'énergie pour la bonne réponse baisse et l'énergie pour les mauvaises réponses augmente, de manière à ce qu'on se retrouve avec un profil comme celui-ci où la bonne réponse est un minimum d'énergie.

Yann LeCun

Donc il y a quatre éléments à trouver pour entraîner une machine à base d'énergie. D'abord l'architecture pour E, contenant le réseau de neurones en fait.

Yann LeCun

L'algorithme d'inférence pour calculer Y à partir de X et de la fonction d'énergie. Pour un X donné, produire Y avec l'énergie la plus basse. Ce n'est peut-être pas si simple. Dans le cas de catégories discrètes c'est très simple, mais dans les cas où Y est une image disons, ça peut être assez complexe.

Yann LeCun

Dans le passé, les gens ont inventé beaucoup de méthodes pour la minimisation approximative, des fonctions compliquées en inférence probabiliste, mais elles peuvent être simplifiées.

Yann LeCun

Ensuite il faut choisir une fonction de coût qui va utiliser comme argument la fonction d'énergie, lui donnant la bonne forme pour chaque X, et bien sûr elle doit être optimisée par rapport aux paramètres.

Exemple de régression

Yann LeCun

La question est de savoir comment on peut concevoir la fonction de coût pour qu'elle fasse ce qu'on veut qu'elle fasse. Prenons un exemple, un exemple simple ici, un exemple de régression.

Yann LeCun

On prend une entrée qui est un scalaire, cette variable ici, appelons-la X, et une sortie Y, cette variable ici. Et on veut entraîner le système.

Yann LeCun

Donc les points bleus là, les billes bleues sont des échantillons d'apprentissage, tels que Y égale X au carré, c'est juste une parabole. On veut entraîner un réseau de neurones pour approximer cette fonction de cette manière à base d'énergie.

Yann LeCun

On conçoit une machine ici, sa fonction d'énergie calcule la compatibilité entre X et Y. Une manière simple de faire ça est de prendre la sortie du réseau de neurones, on calcule la distance entre la sortie de ce réseau de neurones avec l'entrée qu'on lui donne, et naturellement la meilleure valeur pour cette variable est celle qui minimise cette distance et elle égale la sortie du réseau de neurones.

Yann LeCun

C'est un exemple trivial, mais c'est juste pour vous donner une illustration. Et ensuite on entraîne le réseau de neurones pour minimiser cette énergie en moyenne dans l'ensemble d'apprentissage.

Yann LeCun

Et ici vous voyez une animation de cette fonction d'énergie en fonction du temps au fur et à mesure que l'apprentissage progresse. On commence avec une fonction d'énergie qui n'est pas très bonne, et au fur et à mesure que l'apprentissage progresse, le minimum d'énergie pour chaque valeur de X, pour une valeur particulière de X, le minimum par rapport à Y d'énergie est situé autour de l'échantillon d'apprentissage pour ce X ou autour de ce X.

Yann LeCun

D'accord ? Donc on entraîne une espèce de paysage d'énergie de manière à ce que le minimum d'énergie par rapport à Y soit là où on veut.

Yann LeCun

Et ça simplement en minimisant l'énergie moyenne dans l'échantillon d'apprentissage. Mais si on applique la même fonction de coût à cet exemple où on a deux réseaux de neurones parallèles, un prenant X et un prenant Y, on compare les sorties, encore une fois on calcule la distance entre les deux, une norme L1 dans ce cas-là, juste la valeur absolue de la différence, et c'est ça notre énergie.

Yann LeCun

Là ça ne marche pas. Si on minimise l'énergie moyenne ici, on se retrouve avec le problème de l'effondrement comme je l'ai dit tout à l'heure, signifiant que ces deux réseaux ignorent totalement les entrées, produisent tous les deux des sorties constantes, et ça va minimiser l'énergie moyenne mais ça ne résoudra pas le problème. On se retrouve avec une fonction d'énergie qui est plate et ça ne fera pas le travail.

Termes contrastifs et log-vraisemblance

Yann LeCun

Conduisant à cette idea d'avoir un terme contrastif, non seulement un terme qui pousse l'énergie vers le bas dans nos échantillons d'apprentissage, mais qui peut aussi pousser vers le haut l'énergie pour les mauvaises réponses.

Yann LeCun

Une manière spécifique de faire ça, je ne ferai pas tous les maths, mais juste pour vous montrer le résultat. C'est ce qu'on connaît, enfin dans certains contextes, comme la log-vraisemblance négative ou l'information mutuelle maximum, ça a différents noms dans différents contextes.

Yann LeCun

C'est la fonction de coût utilisée en logistique quand on fait du log softmax au-dessus d'un réseau de neurones pour la classification. C'est exactement cette fonction de coût qu'on utilise. Elle nous dit comme la moyenne d'échantillons d'apprentissage de l'énergie que le modèle donne à la bonne réponse, E de W.

Yann LeCun

La bonne réponse, et il y a un terme contrastif qui est l'intégrale pour toutes les sorties possibles de E, okay moins le coefficient, énergie de cette réponse. Encore une fois, on somme sur toutes les réponses possibles. Si la réponse est une variable discrète d'une catégorie, ça devient une somme tout simplement.

Yann LeCun

Et bien sûr, cette somme, enfin le log de cette somme exponentielle est une fonction décroissante de l'énergie, donc ça va pousser l'énergie vers le haut. Quand c'est minimisé, plus la valeur est élevée, plus c'est exponentiel avec un moins devant c'est petit, plus le plus petit est l'intégrale, minimisant notre fonction si on pousse tous ces Y.

Yann LeCun

C'est un exemple d'une fonction de coût qui tire l'énergie des bonnes réponses vers le bas, mais pousse l'énergie pour les mauvaises réponses aussi vers le haut. Ça peut être obtenu à partir du maximum de vraisemblance de tous les Y dans l'ensemble d'apprentissage par rapport à X. En prenant des logs et ainsi de suite, on arrive à cette fonction de coût.

Yann LeCun

Alors voilà comment ça marche en pratique. Dans les exemples que je vous ai montrés avec les deux réseaux de neurones parallèles, ici la fonction de coût pousse les billes bleues vers le bas mais pousse tout le reste vers le haut. Donc on voit une espèce de, c'est comme si on creusait une vallée dans la fonction d'énergie.

Perceptron structuré et fonctions de coût à marge

Yann LeCun

Alors voici une autre fonction d'énergie qui est largement utilisée aussi en traitement du langage naturel en tout cas, qui a été utilisée jusqu'à assez récemment. C'est ce qu'on appelle le perceptron structuré. La fonction d'énergie ici est l'énergie de la bonne réponse, l'énergie que notre modèle donne aux bons Y, moins l'énergie de la réponse produite par le système.

Yann LeCun

Si on prend le minimum de tous sur tous les Y, sans les autres variables, on obtient la réponse que Y produit dans le système. C'est le modèle d'inférence qui minimise l'énergie par rapport à Y.

Yann LeCun

Donc ça c'est l'énergie pour la bonne réponse et on essaie de minimiser la différence entre les deux, pour rendre ça le plus petit possible et ça le plus grand possible. Si le système produit la mauvaise réponse, l'énergie sera augmentée pour cette mauvaise réponse. Si c'est la bonne réponse, les deux termes sont alors égaux et rien ne se passe.

Yann LeCun

Ça marche. Le problème c'est qu'il n'y a pas de marge. On peut aboutir à un effondrement aussi avec ce type de fonction de coût où toutes les réponses ont en fait la même énergie.

Yann LeCun

Pour contrecarrer ce problème, on prend des fonctions de coût qui ont une marge. Voici un exemple. Une fonction de coût nous disant que l'énergie pour la bonne réponse doit être la plus petite possible, c'est un carré en front mais ce n'est pas nécessaire. Et on pousse l'énergie pour une réponse incorrecte, peut-être la plus menaçante, Y barre i ici.

Yann LeCun

Et on la pousse pour qu'elle soit au moins aussi grande que M, choisie arbitrairement. Ça va pousser l'énergie vers le haut jusqu'à ce qu'elle soit au moins aussi grande que M. Après ça, ça ne fait plus rien avec un coût quadratique.

Yann LeCun

Et là quand on fait marcher ça sur ce square-square loss ici par exemple, c'est correct avec l'énergie des échantillons d'apprentissage reste bas et le reste une énergie plus élevée.

Yann LeCun

Donc là la manière dont ce Y barre est choisi, il est choisi de manière à ce qu'il soit différent de Yi, le bon, en dehors d'un certain...

Yann LeCun

Au-delà d'une certaine distance de la réponse correcte, mais avec l'énergie minimum. La valeur de Y qui est la plus menaçante, si vous voulez. C'est la plus basse, mais incorrecte.

Yann LeCun

Alors, il y a tout un catalogue de ménagerie de fonctions de coût ou de perte diverses et variées qui ont été proposées par des gens dans le domaine de la reconnaissance de la parole en particulier. Elles sont toutes basées sur l'idée d'avoir deux termes. Un terme qui tend à minimiser l'énergie de la réponse correcte et l'autre qui pousse vers le haut les réponses incorrectes.

Yann LeCun

Voici une liste. Energy loss, c'est simplement la moyenne de l'énergie pour la réponse correcte. Ça ne marche pas, ça peut mener à un collapse. La question de savoir si ça peut mener à un collapse est indiquée ici. Si la marge est nulle, on n'impose pas qu'elle soit supérieure à zéro, auquel cas on peut avoir un collapse. Dans ce cas-là, du perceptron structuré, on peut avoir un collapse. Mais ces autres fonctions de perte ici sont toutes correctes, c'est-à-dire une marge qui force l'énergie pour les réponses incorrectes à être supérieure ou strictement supérieure à l'énergie pour les réponses correctes.

Yann LeCun

Alors, je ne vais pas rentrer dans le détail de toutes ces fonctions.

Graphes de facteurs et CRF

Yann LeCun

Alors, je vais maintenant rentrer un peu plus dans les détails de comment utiliser ça pour des applications particulières, par exemple pour la reconnaissance de mots, mais ça s'applique aussi à beaucoup de situations. Et vous en verrez plus avec Gabriel tout à l'heure.

Yann LeCun

Donc, pour faire la connexion, ceux d'entre vous qui connaissent les graphes de facteurs ou les CRF, il y a une connexion avec toutes ces choses-là. Un CRF est une sorte de graphe de facteurs. Alors, peut-être je peux vous expliquer ce que c'est qu'un graphe de facteurs. Un graphe de facteurs, c'est une fonction d'énergie qui est composée d'une somme. Alors, on les appelle facteurs parce qu'on peut penser, quand on parle de facteurs, qu'on parle de multiplication. C'est vrai dans le cas probabiliste, mais dans le cas de l'énergie, c'est additif. Les fonctions d'énergie sont des sommes de termes. Chaque terme dépend d'un sous-ensemble des variables Y ou Z ou parfois X, mais c'est moins important.

Yann LeCun

Et donc, chacun de ces carrés est un terme dans la fonction d'énergie, dans la somme. Et ces modèles, comme le CRF, passent par un extracteur de caractéristiques qui est fixe, pas d'apprentissage, qui produit un vecteur. Et ce vecteur, on en calcule une somme pondérée, le produit scalaire avec un vecteur de poids, ce qui nous donne un score, une énergie. Chaque boîte fait ça pour un sous-ensemble différent des variables Y. À quoi ça sert ? C'est pour produire des séquences de Y qui doivent obéir à une certaine structure. Imaginons que vous ayez un système pour la traduction de langues ici, et X est une phrase en anglais, disons, et Y doit être une phrase en français. Bien sûr, vous connaissez les dépendances des paires de mots qui doivent se suivre en français. On sait que certains mots peuvent en suivre d'autres et d'autres pas. On peut, en fait, implémenter ça en utilisant ce terme ici, ce facteur, qui va nous dire qu'on a le droit de mettre le mot noir après le mot chat, par exemple, ou carré après chat, c'est probablement peu probable.

Yann LeCun

Donc, ça nous permet d'imposer des structures sur des séquences de symboles. La différence entre ces modèles, c'est la fonction de perte utilisée. Les CRF utilisent la log-vraisemblance négative, la fonction dont j'ai parlé tout à l'heure. Les Max Margin Markov Nets utilisent des fonctions de perte en charnières. Et le perceptron structuré utilise la fonction de perte du perceptron. Et l'apprentissage porte sur ces poids. Donc, ce sont des modèles peu profonds, pas profonds, parce qu'il n'y a qu'une seule couche. La fonction d'énergie est une fonction linéaire dans les paramètres.

Yann LeCun

Mais rien ne nous empêche de rendre ces fonctions plus compliquées, en particulier de leur donner la structure d'un réseau de neurones ou d'un réseau profond compliqué, paramétré par des paramètres qui sont à l'intérieur. Notre fonction d'énergie est maintenant une somme de ces facteurs, mais chaque facteur est un réseau de neurones complet en quelque sorte. Alors, on peut entraîner ces choses-là avec plusieurs fonctions de perte, certaines que j'ai indiquées avant. Et en fait, ces modèles historiquement sont venus avant ceux-là. Les gens trouvaient ça un peu trop complexe.

Graph Transformer Networks (GTN)

Yann LeCun

Alors, ça nous permet de faire des choses amusantes qui peuvent être vues de différentes manières, mais une manière en particulier, c'est ce qu'on appelle les Graph Transformer Networks. Et on peut voir ça comme des réseaux multicouches où les variables d'état ne sont pas des vecteurs ou des tableaux comme dans les réseaux de convolution. Dans un réseau normal, les états internes, les entrées et les sorties sont des vecteurs. Dans les réseaux de convolution, ce sont des tableaux. Dans le cas des GTN, Graph Transformer Networks, les états internes de la machine sont des graphes. Des graphes qui sont étiquetés par des valeurs numériques, des images, des vecteurs, des scores, etc. Et chaque couche dans ce réseau transforme un graphe en un autre. Alors, ça semble un peu compliqué, mais on peut faire de la rétropropagation à travers ces structures pour généraliser la notion de réseaux de neurones à des choses plus complexes.

Étude de cas : Reconnaissance de chèques

Yann LeCun

Donc, c'est la même illustration que ce que je vous avais présenté avant, mais laissez-moi vous donner un exemple un peu plus compliqué. C'est l'architecture d'un système que mes collègues et moi avons construit à Bell Labs au début des années 80, utilisé pour un système de reconnaissance de chèques à la fin des années 80. Il lisait un pourcentage élevé de chèques aux États-Unis et il a été aussi déployé dans des distributeurs automatiques en France pour la lecture automatique de chèques. Les machines modernes utilisent d'autres systèmes de reconnaissance produits par une société française, mais c'est assez similaire à ce que je vais présenter ici. Donc, c'était parmi les premiers systèmes qui étaient capables de lire l'écriture manuscrite de manière fiable pour les chèques. On prend une image, on la passe à travers un segmenteur heuristique qui construit ce graphe de segmentation dont j'ai parlé avant, dans lequel chaque arc est étiqueté par un morceau de l'image, de telle sorte que chaque chemin dans ce graphe passe une fois et une seule fois par tous les morceaux d'encre, si vous voulez, sur l'image. Ici aussi, on peut séparer chacun des trois morceaux ici, ce qui nous donne un chemin dans le graphe où on a le 3, la partie gauche du 4 et la partie droite du 4. Un autre avec le 3, la partie gauche du 4 et séparément la partie droite du 4. Et le bon avec 3 et 4. Chaque chemin ici est une hypothèse, une interprétation, étiquetée par l'image. On applique son réseau de neurones préféré, ce qui nous donne un score pour chaque catégorie. Et on va produire un graphe exactement comme celui-là ici, dans lequel chaque arc a été remplacé par 10 arcs. Je n'en ai mis que deux ici. Et chacun est étiqueté par une catégorie et un score. C'est l'énergie qui sort du réseau de neurones. Une valeur basse correspond à un score élevé, si vous voulez. Et maintenant, la réponse que le système va générer est le chemin le plus court dans ce graphe. Le chemin de gauche à droite dans le graphe.

Yann LeCun

Pendant l'apprentissage, on dit au système que la réponse est 34. Parmi tous les chemins, on sélectionne ceux dont l'étiquette est 3 suivi de 4. Et il y en a deux dans ce graphe, celui-là et celui-là. Ensuite, on prend le meilleur des deux chemins, ici celui-là, et le coût sera de 0,7 parce qu'on a un coût, une perte de 0,1 et 0,6, ce qui nous donne une perte de 0,7. Donc, c'est le coût, l'énergie de la réponse correcte. On force le système à donner la réponse correcte et il nous donne le coût de la réponse correcte, l'énergie de la réponse correcte. Et on essaie de la rendre la plus basse possible.

Yann LeCun

Et par ailleurs, on va utiliser une fonction de perte du perceptron ici, disons libre, et le système va juste produire la réponse qu'il a envie de produire, celle qui a l'énergie la plus basse sans aucune contrainte. Bien sûr, l'énergie qui sera produite sera plus basse que l'énergie sous contrainte. C'est l'énergie du chemin avec l'énergie la plus basse. Dans le cas précédent, c'était l'énergie pour la réponse correcte qui avait l'énergie la plus basse. Si l'énergie était la même, la réponse serait la même. Donc, ça correspond à des opérations sur des graphes. Et ce qui est magique, c'est qu'on peut faire de la rétropropagation de gradients à travers tout ça. Si on a une fonction de perte qui est la différence entre ces deux pertes, pas une très bonne fonction de perte, il nous faut une marge, etc., mais juste pour expliquer simplement. Donc, on va calculer une fonction de perte qui est la différence entre l'énergie de la réponse correcte, l'énergie que le système vous donne quand on le force à produire la réponse correcte, et l'énergie donnée spontanément, ou l'énergie la plus petite possible de l'ensemble de la réponse. On peut très bien calculer le gradient de cette différence, qui est 0,1 dans ce cas-là, 0,7 d'un côté, 0,6 de l'autre. Et on peut calculer la différence, c'est juste 1. 0,7 par delta, celui-là ne bougera pas. Si on bouge ce 0,6 par delta, celui-là va changer par moins delta, ce qui nous donne un gradient de moins 1. Puisque ces nombres sont la somme de ces deux nombres, il suffit de copier le gradient. Dans le cours précédent, on a vu que si on a une opération de somme, quand on fait de la rétropropagation, c'est juste une copie du gradient. Donc, on peut avoir des gradients par rapport aux valeurs dans ces arcs. Et ici, on peut avoir des gradients par rapport aux valeurs dans les arcs copiés dans le graphe de sortie. Les autres ont un gradient de zéro. Si vous changez ces valeurs légèrement, ça n'aura aucun effet du tout sur la sortie. Alors, quand je dis gradient, c'est un sous-gradient en fait, parce que ces fonctions ne sont pas dérivables partout, il y a des arêtes. Quand une valeur passe en dessous d'une autre, tout d'un coup, l'une est activée et l'autre désactivée. Donc, il y a des arêtes dans ces fonctions. Donc, techniquement parlant, c'est un sous-gradient. Mais encore une fois, on peut faire de la rétropropagation à travers ça ici. Les arcs qui sont présents à gauche reçoivent un gradient de 1, ceux à droite reçoivent un gradient de moins 1, et ceux qui sont dans les deux, on fait la somme des gradients des deux moitiés, ce qui nous donne zéro, par exemple. Ce chemin-là, on le retrouve à gauche et à droite, et on finit with un gradient de zéro parce qu'un plus 1 et un moins 1, on les ajoute, ça fait zéro. Ce chemin-là est correct, il est dans la réponse correcte, mais pas dans la réponse incorrecte, recevant un gradient de plus 1. Ces deux chemins sont dans la réponse incorrecte, mais pas dans la réponse correcte, recevant un gradient de moins 1. Ce qui nous donne des gradients donc par rapport aux sorties de tous ces réseaux de neurones que l'on peut rétropropager à travers les réseaux de neurones, plusieurs copies du même réseau de neurones partageant tous les poids. Donc, rétropropagation à travers ça, addition de tous les gradients pour trouver les gradients par rapport aux paramètres. Le résultat que ça va donner, c'est que ce réseau de neurones va s'entraîner non seulement à reconnaître ces caractères dans la machine, ce qu'est la bonne segmentation. C'est une variable latente. On dit simplement à la machine, voici une séquence, voici les segmentations possibles, voici la bonne réponse, trouve la segmentation qui correspond à la meilleure réponse simultanément. On peut appeler ça de l'apprentissage structuré ou de l'apprentissage faiblement supervisé.

Questions et conclusion

Yann LeCun

Question.

Membre de l'auditoire

Off-mic in the auditorium.

Yann LeCun

Oui, alors ça, c'est le chemin dans ce graphe qui, d'une part, produit la réponse correcte, produit les étiquettes 3 et 4. L'observation qu'on a faite ici, c'est que parmi tous les chemins, on a choisi celui qui nous donnait la réponse 34, qui est la réponse correcte. Alors que celui-là, c'est le chemin de l'énergie minimum, le chemin le plus court. Enfin, le chemin où la somme des énergies est la plus basse. Éventuellement incorrect. Dans ce cas-là, encore incorrect.

Yann LeCun

Commentaire dans l'auditorium. C correspond à la contrainte. C'est le graphe de la contrainte.

Yann LeCun

Donc, on peut entraîner, ça veut dire que maintenant on peut entraîner un système au niveau d'un mot, pour donner la bonne réponse sans lui donner la segmentation exacte de tous les caractères dans le mot.

Yann LeCun

Alors, il y a tout un mécanisme général qu'on appelle les transducteurs, les transducteurs de graphes. Un ensemble d'opérations abstraites pour combiner des graphes. Par exemple, c'est l'opération dont on aurait besoin si on avait un ensemble de propositions d'interprétations, disons, d'une séquence de mots écrits ou de mots parlés. Et qu'on veut combiner ça avec un graphe correspondant à un dictionnaire, un modèle de langage. On a besoin de mixer ces deux graphes en disant que parmi tous les chemins dans ce graphe, je veux choisir celui qui est dans la langue. Et la combinaison de ces graphes est ce qu'on appelle une composition. Et ces graphes-là peuvent être appelés des accepteurs ou des transducteurs selon la manière dont ils sont construits. Et donc, la grosse question, c'est comment...

Yann LeCun

Dans l'ancien système, qui n'est plus beaucoup utilisé, et le nouveau pour entraîner des réseaux comme ça avec des systèmes de graphes par-dessus, écrit par Roland Collobert. Je crois qu'il a l'intention de le redistribuer en open source très bientôt. C'est ce qu'il utilise pour produire les systèmes de reconnaissance de la parole dont Gabriel va vous parler plus en détail. Donc, je vais m'arrêter là et passer la parole à Gabriel, et je vous remercie. On gardera quelques minutes pour une séance de questions-réponses à la fin.