L'apprentissage auto-supervisé et l'avenir de l'IA
10 juin 2020
Intelligence Artificielle
Introduction et Apprentissage Supervisé
Très bien. Ma présentation se divise en deux ou trois parties. L'une porte sur l'état de l'art de l'apprentissage supervisé et de l'apprentissage par renforcement. La seconde partie concerne l'apprentissage auto-supervisé, qui est le titre de la conférence. J'inclurai une introduction à ce que j'appelle l'apprentissage basé sur l'énergie, qui est un cadre général pour aborder l'apprentissage en général. Bien mieux. C'est juste pour l'enregistrement, j'imagine. D'accord. Nous savons tous ce qu'est l'apprentissage supervisé. On m'a dit que vous saviez tous ce qu'est l'apprentissage supervisé. C'est la situation où l'on entraîne une machine en lui indiquant quelle est la bonne réponse pour un ensemble d'échantillons d'entraînement. Cela fonctionne vraiment bien si vous avez beaucoup de données. Cela fonctionne pour la reconnaissance d'images, la traduction, le traitement du langage naturel, la reconnaissance vocale et toutes sortes d'applications. Mais ce sont des applications où l'économie est telle qu'il vaut la peine d'étiqueter manuellement beaucoup de données. Dans ce contexte, l'apprentissage automatique revient essentiellement à trouver une bonne forme pour une fonction paramétrée, de préférence dérivable presque partout, de telle sorte qu'en utilisant un algorithme de type descente de gradient, vous puissiez ajuster les paramètres pour optimiser les performances du système. Si tout est dérivable ou presque dérivable, vous pouvez optimiser en utilisant le gradient ou le sous-gradient, et tout fonctionne. Il existe des garanties de généralisation si la capacité de la machine est limitée.
L'Apprentissage par Renforcement et ses Limites
Il existe une autre forme d'apprentissage dont je ne vais pas beaucoup parler, appelée apprentissage par renforcement. L'apprentissage par renforcement a connu de nombreux succès au cours des dernières années. Ces succès sont presque tous limités aux jeux ou aux environnements virtuels. Il existe également des applications de l'apprentissage par renforcement dans des situations où vous pouvez collecter beaucoup de données très rapidement pour avoir une adaptation rapide. Si vous voulez montrer du contenu aux gens et déterminer comment vous voulez classer ce contenu, il n'y a pas de fonction objectif dérivable car vous ne savez pas ce que les gens vont faire. Vous pouvez utiliser le fait qu'ils cliquent ou non sur un élément de contenu comme renforcement, puis optimiser la politique quant à ce que vous montrez aux gens pour maximiser cela. Mais ce sont seulement des situations où vous recevez beaucoup de retours. Sinon, cela fonctionne pour les jeux parce que vous pouvez amener les machines à apprendre à jouer à des jeux très rapidement afin qu'elles puissent jouer des millions de parties par jour en tournant en parallèle sur de nombreux ordinateurs. Vous pouvez entraîner des machines à jouer aux jeux Atari, au Go, à StarCraft et à Dota. C'est uniquement dû au fait que vous pouvez faire tourner ces jeux plus vite que le temps réel on de nombreuses machines. Si la machine devait fonctionner à la même vitesse que nous, ce ne serait tout simplement pas pratique. Il faudrait environ 80 heures aux meilleurs algorithmes actuels pour apprendre à jouer à un seul jeu Atari à un niveau de performance qu'un humain peut atteindre en environ 15 minutes. L'efficacité d'échantillonnage de ce type d'apprentissage par renforcement est horrible par rapport aux humains. Pour le Go, vous avez probablement entendu parler d'AlphaGo ou d'AlphaGo Zero de DeepMind, dont les détails ne sont pas entièrement divulgués et il n'y a pas de code open source. Il existe un système appelé ELF OpenGo, qui a été publié par Facebook. Celui-ci, vous pouvez simplement le télécharger et l'exécuter ou l'entraîner vous-même. Il est utilisé par beaucoup de personnes différentes qui s'y intéressent. Celui-ci a nécessité environ 20 millions de parties en auto-apprentissage tournant sur 2 000 GPU pendant deux semaines pour atteindre des performances surhumaines. Ce n'est pas bon marché en termes de calcul. Si vous deviez acheter cela sur un serveur de cloud computing, cela vous coûterait quelques millions de dollars. C'est plus de parties qu'une seule personne ne peut jouer dans une vie, probablement plus que ce que toute l'humanité a joué en plusieurs années. Il y a un article intéressant publié récemment par DeepMind, par le groupe d'Oriol Vinyals, sur AlphaStar, qui joue une seule carte sur StarCraft avec un seul type de joueur. L'entraînement pour cela a pris l'équivalent de 200 ans de jeu en temps réel, ce qui est définitivement plus que ce qu'un seul joueur de StarCraft a pu faire. Il n'y a pas encore d'article à ce sujet pour autant que je sache. Ils utilisent tous des architectures profondes et des réseaux convolutionnels avec une combinaison d'autres choses, comme des transformeurs dans StarCraft. Comme vous pouvez le constater, en termes d'efficacité d'échantillonnage, c'est très mauvais. C'est un énorme problème car cela signifie que nous ne pouvons pas vraiment utiliser l'apprentissage par renforcement autrement qu'en simulation pour entraîner des systèmes du monde réel comme une voiture autonome ou un robot qui saisit des objets, à moins d'avoir une salle pleine de robots s'entraînant toute la journée. Si vous utilisiez l'apprentissage par renforcement pour entraîner une voiture à se conduire toute seule, elle devrait rouler pendant des millions d'heures et causer des tonnes d'accidents. Ce n'est tout simplement pas pratique. Les gens le font en simulation. Cela fonctionne un peu. Les simulateurs ne sont pas très précis, il y a donc le problème du transfert de la simulation vers le monde réel. Il y a un grand mystère là-dedans : comment se fait-il que les humains puissent apprendre à conduire une voiture en environ 20 heures d'entraînement sans causer d'accident ? La réponse est que nous avons des modèles prédictifs internes du monde qui nous permettent de prédire que si nous conduisons près d'une falaise et que nous tournons le volant vers la droite, la voiture va faire une sortie de route et tomber, et rien de bon n'en sortira. Nous n'avons pas besoin d'essayer réellement pour prédire cela. Peut-être que la réponse est que les machines apprennent un jour à posséder ces modèles prédictifs du monde qui leur permettront de prédire les conséquences de leurs actions avant qu'elles ne se produisent et de planifier à l'avance. Dans une certaine mesure, l'essence de l'intelligence est la capacité de prédire.
Réseaux Convolutionnels et Vision par Ordinateur
Mais pour l'instant, restons-en à l'apprentissage supervisé. Qui ne sait pas ce qu'est un réseau convolutionnel ? Ne soyez pas timide. D'accord, c'est génial. Je peux sauter pas mal de choses. Un réseau convolutionnel est une architecture conçue pour reconnaître des données matricielles où il existe de fortes corrélations locales dans les caractéristiques et une sorte d'invariance par translation des statistiques du signal. C'est vrai pour les images, les signaux audio et fondamentalement tout ce qui se présente sous la forme d'une matrice où la localité dans la matrice a une signification. Les premières applications portaient sur la reconnaissance de caractères, mais nous avons rapidement réalisé que nous pouvions reconnaître plusieurs objets avec ces outils, pas seulement des objets uniques, mais en faisant l'équivalent du balayage d'un réseau convolutionnel sur une grande image. Comme toutes les couches sont des convolutions, vous n'avez pas besoin de recalculer explicitement le réseau convolutionnel à chaque emplacement. Vous agrandissez simplement chaque couche et faites de chaque couche une convolution. Les gens ont renommé cela réseaux entièrement convolutionnels par la suite, mais ce ne sont que des réseaux convolutionnels. Lorsque vous appliquez cela à des images naturelles, vous pouvez entraîner des systèmes comme celui-ci pour détecter des objets. Vous pouvez appliquer un réseau convolutionnel localement à une image pour qu'il étiquette chaque pixel de l'image avec la catégorie de l'objet auquel il appartient. Les réseaux convolutionnels ont chaque sortie du réseau avec une sorte de fenêtre d'influence sur l'entrée, qui dans ce cas est en fait assez large. Pour décider de la catégorie d'un seul pixel, le réseau regarde ici une large fenêtre contextuelle autour de ce pixel et vous donne un résultat. Cela se fait de manière convolutionnelle, c'est donc très peu coûteux. C'était un système construit il y a environ 10 ans et il pouvait fonctionner à environ 30 images par seconde sur du matériel spécialisé, un FPGA. Vers 2012 ou 2013, ces réseaux ont commencé à battre les autres méthodes de reconnaissance d'objets par une marge importante, en grande partie parce que les ensembles de données sont devenus plus grands. Ces systèmes sont assez gourmands en données. L'apparition d'ensembles de données comme ImageNet a permis d'exploiter réellement la capacité de ces réseaux. La deuxième chose a été la disponibilité des GPU, qui ont permis de faire fonctionner ces systèmes très rapidement. Il y a eu une inflation du nombre de couches utilisées dans ces réseaux au fil des ans, où certains des outils de base de la reconnaissance d'images aujourd'hui sont des sortes de réseaux convolutionnels structurants similaires à ResNet. ResNet est un réseau convolutionnel où chaque bloc possède des paires de couches : convolution, non-linéarité, convolution. Parfois, vous avez également un sous-échantillonnage ou un pooling. Ensuite, vous avez une sorte de connexion qui saute des paires de couches. Essentiellement, vous pouvez considérer la fonction de l'un de ces blocs comme calculant fondamentalement la fonction identité et ces couches calculent l'écart de la fonction de cette couche par rapport à l'identité. Cela semble être un gaspillage d'avoir juste une couche qui calcule la fonction identité, et ça l'est. En fait, beaucoup de couches dans ces systèmes ne font pas grand-chose. Vous pouvez vous en débarrasser après l'entraînement. Mais ce que cela fait, c'est que cela rend le système tolérant aux pannes. Si l'algorithme d'apprentissage se retrouve d'une manière ou d'une autre dans une situation où certaines couches meurent, ce n'est pas catastrophique car l'information passe toujours par la connexion de dérivation. Cette paire de couches se retire simplement du réseau, mais elle ne tue pas l'effort global. C'est l'un des avantages de ResNet. On peut considérer la longue succession de couches comme une sorte de raffinement progressif de la réponse et de nettoyage de la sortie ou de la représentation. Il y a eu des variantes de cela où vous avez des connexions de saut qui sautent plusieurs couches ; on appelle cela DenseNet. Je suis sûr que beaucoup de gens vous parleront des progrès de la vision par ordinateur, et il y a eu énormément de progrès au cours des dernières années avec des choses comme Mask R-CNN, qui est une sorte de système de reconnaissance d'images en deux étapes capable d'identifier chaque occurrence de chaque objet dans une image avec de très bonnes performances. Il y a quelques premières couches qui identifient des régions d'intérêt, puis vous appliquez un deuxième réseau neuronal aux régions d'intérêt qui ont été identifiées par le premier. Il existe également des systèmes en une seule étape appelés RetinaNet ou réseau de pyramide de caractéristiques. Vous pouvez voir cela comme suit, si vous voulez produire une carte dense de tout ce qui se trouve dans l'image. Pour chaque pixel de l'entrée, vous voulez donner la catégorie d'une instance ou une catégorie, qu'il s'agisse d'un objet ou d'une région d'arrière-plan. Vous avez un ensemble de couches où la résolution spatiale diminue à mesure que vous montez à cause du sous-échantillonnage. Ensuite, vous avez un réseau structuré de manière similaire qui va dans l'autre sens, de la basse résolution à la haute résolution, et vous avez des connexions de saut qui vont d'une carte dans la pyramide d'abstraction à la carte correspondante dans la sortie. Vous pouvez entraîner cela de bout en bout avec des architectures faiblement supervisées. Vous pouvez brancher des classificateurs prenant des entrées à différents niveaux du réseau. Cela fonctionne incroyablement bien. Voici les résultats de Mask R-CNN. Vous pouvez obtenir chaque instance de chaque objet délimitée avec une boîte. Les couleurs sont produites par le réseau et correspondent aux catégories. C'est assez incroyable de voir à quel point cela fonctionne bien.
Applications en Physique et Médecine
Voici les résultats sur ce réseau de pyramide de caractéristiques en une seule étape. Là encore, les couleurs indiquent les objets individuels, mais ce système étiquette non seulement l'objet mais aussi les régions d'arrière-plan. C'est une sorte de vision panoptique. Ces types d'architectures où vous avez un réseau convolutionnel avec une résolution décroissante suivi d'un autre avec une résolution croissante, que certains appellent réseau déconvolutionnel — il y a un article de 2011 de mon collègue Rob Fergus sur cette idée. Cette architecture est très utilisée dans la segmentation d'images, particulièrement pour des applications en analyse d'images médicales. Certains appellent ce genre d'architecture U-Net à cause de la forme. C'est sensiblement la même idée que celle que j'ai montrée auparavant, sauf qu'ici les couches de la partie à propagation avant du réseau sont dessinées d'un côté, puis la moitié augmentant la résolution est dessinée de l'autre côté avec des connexions de saut allant directement. Cela ressemble à un U. Mes collègues de NYU qui travaillent sur l'analyse d'images médicales utilisent cela avec des scanners IRM 3D. Le convnet ici est tridimensionnel. Les convolutions ont lieu en trois dimensions sur les trois dimensions spatiales. Chaque voxel est maintenant étiqueté comme l'une d'un certain nombre de catégories. Vous pouvez faire des choses comme segmenter les os de la hanche pour préparer une chirurgie de remplacement de la hanche. Cela fonctionne beaucoup mieux si vous utilisez la 3D plutôt que la 2D parce que vous obtenez la cohérence de toutes les tranches. Ce que vous voyez en haut sont des artefacts de la reconnaissance si vous utilisez la segmentation 2D ; si vous utilisez la 3D, vous obtenez beaucoup moins d'artefacts. La même équipe a appliqué cela aux mammographies. Ce sont des données 2D, mais vous avez plusieurs images provenant de plusieurs angles de vue. Voici une chose surprenante : l'application des convnets en physique, par exemple en astrophysique. C'est un article du Flatiron Institute à New York. Ils ont utilisé un réseau convolutionnel pour accélérer la résolution d'équations aux dérivées partielles. Ce sont des cosmologistes et ils s'intéressent aux conditions initiales du bébé univers qui causeront le type d'univers que nous observons aujourd'hui. Il faut simuler l'univers entier à sa naissance. On peut le faire en principe parce qu'on a la densité de matière, de matière noire et de photons, et on peut résoudre une équation aux dérivées partielles à chaque emplacement. Le problème avec cela, c'est que si vous voulez le faire à l'échelle de l'univers, cela prendrait trop de temps. Ils ont utilisé l'un de ces solveurs d'EDP pour résoudre ces équations sur de petits domaines quadridimensionnels d'espace et de temps. Ils entraînent un réseau convolutionnel à produire le même résultat, mais ce réseau convolutionnel a une grille plus grande. Un solveur d'EDP prend un voxel, regarde les voisins et le passe par une fonction qui calcule la nouvelle valeur pour le pas de temps suivant. C'est une opération de type convolution, sauf qu'elle peut être non linéaire. Ils ont entraîné un réseau convolutionnel avec une architecture U-Net afin qu'il puisse prendre en compte un contexte assez large. Il est entraîné pour produire le résultat que le solveur d'EDP produirait. Ils génèrent des données en exécutant le solveur d'EDP sur de petits domaines 3D. Une fois qu'ils ont ce réseau convolutionnel, ils peuvent l'exécuter à l'échelle de l'univers. Ce qu'ils obtiennent, ce sont des cartes de déplacement de densités. Ce sont des méthodes différentes, et les couleurs indiquent les erreurs. Voici leur méthode proposée comparée à ce que le solveur d'EDP ferait pour un domaine relativement petit. C'est une chose intéressante, qui consiste à utiliser les réseaux neuronaux ou l'apprentissage profond comme un modèle phénoménologique de quelque chose dont nous pourrions connaître la physique sous-jacente mais qui est trop coûteux en termes de calcul. On fait cela aussi pour prédire les propriétés de matériaux et la dynamique moléculaire. J'étais à Harvard il y a quelques semaines et j'ai parlé à des gens qui essaient d'utiliser les réseaux neuronaux pour prédire la propriété de certains solides. Si vous prenez deux couches de graphène et que vous tordez celle du dessus juste un petit peu, il y a un angle particulier auquel ce matériau devient un supraconducteur. Personne n'a la moindre idée de pourquoi. Il y a cette idée d'utiliser des réseaux neuronaux pour construire des modèles phénoménologiques de ces propriétés. Il y a un travail intéressant de Pascal Fua à l'EPFL pour prédire les propriétés aérodynamiques ou hydrodynamiques d'un solide en entraînant un réseau convolutionnel 3D. Vous fournissez la forme du solide au système et, en utilisant à nouveau le calcul de la dynamique des fluides pour générer des données, vous l'entraînez à produire les propriétés de cette forme. Par exemple, sa traînée ou sa portance. Comme c'est un réseau neuronal, il est dérivable. Maintenant, vous pouvez optimiser la forme en faisant une descente de gradient dans l'espace d'entrée. Vous pouvez optimiser la forme afin d'obtenir les propriétés que vous souhaitez, ce que vous ne pouvez pas vraiment faire avec un code de dynamique des fluides computationnelle classique. Il a d'ailleurs une startup qui travaille là-dessus.
Oui. Uh-huh. D'accord. Je disais pour le reste, pour moi, cela n'a rien à voir avec le réseau convolutionnel. Ils utilisent l'apprentissage supervisé et ils utilisent une technique particulière pour faire cela, qui est le réseau convolutionnel. Ils pourraient utiliser n'importe quoi d'autre. Mais ce qui m'ennuie un peu, c'est pour la physique parce que d'accord, vous faites une prédiction, vous avez un résultat, mais vous n'avez aucune idée si les prédictions sont correctes. Elles sont correctes sur vos données d'entraînement. Je doute que vous puissiez même dire qu'elles distinguent réellement les données d'entraînement et les données de validation. Peut-être qu'ils le font, mais j'en doute un peu. Et prédire des choses et tirer des conclusions sur l'univers à partir de quelque chose dont vous ne pouvez pas prédire si c'est correct est un peu impressionnant pour moi.
Eh bien, j'imagine qu'il faut vraiment connaître la physique sous-jacente pour pouvoir faire cette généralisation. On peut tester sur des domaines spatiaux relativement petits parce qu'on peut faire tourner le solveur d'EDP. On sait donc à quel point notre convnet est précis. La question est : quand on augmente la taille, est-il toujours précis ? Et il y a un acte de foi. Maintenant, pour votre commentaire disant que cela n'a rien à voir avec le réseau convolutionnel. Non, cela a beaucoup à voir avec le réseau convolutionnel parce que toutes ces EDP sont des opérations locales qui ressemblent essentiellement à des convolutions plus une chose non linéaire. Mais c'est une opération locale et c'est la même opération que vous faites partout dans le volume. C'est donc un réseau convolutionnel. C'est probablement l'une des utilisations les plus appropriées d'un réseau convolutionnel qu'on puisse imaginer.
L'Intelligence Générale et la Spécialisation Humaine
Donc bien sûr, il y a eu pas mal de progrès dans des choses comme les voitures autonomes, c'est un travail en cours. Ce sont en fait des vidéos qui datent de quelques années, je pense d'environ cinq ans, de celle-ci qui vient de Mobileye, qui est maintenant Intel et NVIDIA. Il y a énormément de travail sur les voitures autonomes, beaucoup d'ingénierie y est consacrée, mais tous les systèmes de perception utilisent une sorte de convnet pour traiter soit des images provenant de caméras, soit de divers autres types de capteurs comme le lidar. Tout cela est génial, tout est supervisé et renforcé, et une grande question que nous pouvons nous poser est la suivante : cela va-t-il nous amener à la possibilité de construire des machines vraiment intelligentes ? Des machines qui ont peut-être l'intelligence d'un chat domestique. Un chat domestique a plus de bon sens que n'importe quel système d'IA que nous pouvons construire aujourd'hui. Et la réponse est no. Nous avons besoin d'un progrès conceptuel significatif si nous voulons vraiment fabriquer des machines plus intelligentes que celles que nous avons aujourd'hui. Nous pouvons donc faire tout ce que nous avons sur la gauche, en supposant que nous y consacrions suffisamment d'efforts d'ingénierie, comme des voitures plus sûres, des voitures semi-autonomes, de meilleurs systèmes d'analyse d'images médicales, et des chatbots stupides qui sont divertissants. Mais nous ne pouvons pas avoir des choses où la technologie que nous avons n'est pas suffisante pour obtenir des machines qui ont du bon sens, pour construire des choses comme des assistants personnels intelligents qui nous aident vraiment dans notre vie quotidienne, répondent à toutes les questions que nous nous posons et être un peu plus comme des assistants humains. Nous ne pouvons pas avoir de chatbots vraiment intelligents ou de robots domestiques qui s'occupent de toutes les corvées de la maison. Nous n'avons pas vraiment de robots agiles et adroits ; ils sont agiles et adroits dans des situations très spécifiques, mais c'est très fragile. Et nous ne pouvons pas avoir d'intelligence artificielle générale parce que ce concept n'existe pas. Il n'existe pas d'intelligence générale. Et je déteste ce terme d'AGI. Il y a beaucoup de gens qui prétendent qu'ils vont arriver à l'AGI en augmentant l'apprentissage par renforcement, simplement en ayant plus de calculs. C'est complètement faux. Ces gens recherchent des investissements, ils sont donc prêts soit à se laisser bercer d'illusions, soit à déformer un peu la vérité. Mais à mon avis, nous n'y arriverons pas avec le type d'apprentissage actuel que nous utilisons. Et alors, pourquoi n'existe-t-il pas d'intelligence artificielle générale ? C'est parce qu'il n'y a pas d'intelligence générale. L'intelligence humaine est incroyablement spécialisée. Cela s'applique à tout le monde dans cette salle. Mais notre intelligence est super spécialisée. Nous avons été construits par l'évolution pour survivre dans notre environnement et nous avons cette sorte d'impression que notre intelligence est générale, mais nous sommes nuls dans beaucoup de tâches. En fait, beaucoup de tâches que les ordinateurs peuvent faire assez bien, nous sommes totalement nuls. Il y avait donc cette idée qu'avant AlphaGo, AlphaGo Zero, etc., les humains étaient les meilleurs joueurs de go au monde, qu'ils étaient très proches du joueur idéal. Appelons-le Dieu. Que l'on pouvait obtenir quelques pierres de handicap avec le joueur idéal et battre le joueur idéal. Il s'avère que non. Il s'avère que les meilleurs joueurs humains sont horribles. Les machines actuelles sont bien meilleures qu'elles ne le sont, avec une marge énorme. Donc, nous sommes nuls, nous sommes vraiment mauvais. Ce qui veut dire que cela ne fait pas partie des choses que l'évolution a intégrées dans notre cerveau pour pouvoir bien faire. Maintenant, le truc, c'est que la raison pour laquelle les gens pensaient qu'ils étaient très proches du joueur idéal, c'est parce qu'ils ne pouvaient pas imaginer des entités considérablement plus intelligentes. Et donc nous ne pouvons pas imaginer toutes les choses que nous ne sommes pas capables de faire. Et c'est pourquoi nous pensons que nous avons une intelligence générale. C'est juste que notre imagination pour les fonctions que nous devons être capables de faire est très limitée. Laissez-moi vous donner un autre exemple plus spécifique, certainement plus quantitatif. Votre nerf optique possède un million de fibres. Imaginez donc que nous prenions le million de fibres sortant de votre nerf optique qui va vers votre cerveau et imaginez qu'elles soient simplement binaires. Ce que vous voyez est donc juste une image binaire, un million de bits. Combien de fonctions de ce type existent ? Quelqu'un a-t-il une idée ? Combien de fonctions booléennes d'un million de bits existe-t-il ? Des suggestions ? Des idées ?
Deux à la puissance un million ?
Oui, vous vous trompez d'un facteur énorme. Mais c'est un bon début. Vingt-cinq, oui.
Deux à la puissance deux à la puissance un million.
Deux à la puissance deux à la puissance un million, c'est la bonne réponse. Vous avez donc deux à la puissance un million de configurations d'entrée d'un million de bits. Et pour chacune de ces configurations, vous avez un bit de sortie; c'est la table de vérité d'une fonction booléenne particulière. Le nombre de configurations de deux à la puissance un million de bits est donc de deux à la puissance deux à la puissance un million. C'est un nombre incroyablement grand. C'est juste un nombre ridiculement grand. Maintenant, parmi toutes ces fonctions, quelle proportion pensez-vous que votre cerveau peut réellement calculer ? Votre cortex visuel possède entre dix et cent milliards de neurones. De l'ordre de dix à la puissance quatorze synapses. Disons que chaque synapse peut stocker dix bits. Cela fait donc dix à la puissance quinze bits dans tout votre cortex visuel. C'est ce qui détermine la fonction de votre cortex visuel. Cela signifie que le nombre de fonctions que votre cortex visuel peut éventuellement mettre en œuvre est de deux à la puissance dix à la puissance quinze. C'est beaucoup moins que deux à la puissance deux à la puissance un million. Il n'y a pas de comparaison. Donc le nombre de fonctions que votre cortex visuel peut mettre en œuvre par rapport à toutes les fonctions possibles n'est qu'une infime partie. Nous sommes super spécialisés. En particulier, si je vous joue un tour et je vous coupe le nerf optique—je ne vais pas le faire—et je place un dispositif entre votre rétine et votre cerveau qui permute tous les pixels de votre rétine avec une permutation aléatoire, mais fixe. Donc maintenant, il n'y a plus de cohérence spatiale dans le signal que vous recevez dans votre cortex visuel. Je ne pense pas que vous puissiez apprendre la vision parce que votre cortex a des connexions locales pour exploiter la corrélation locale et maintenant vous brisez cette corrélation locale en faisant cette permutation; vous ne pouvez plus voir. Vous pourriez voir à une résolution très basse parce que les couches supérieures ont un grand contexte, mais qu'est-ce qui est vrai ?
Oui, l'affaire des connexions locales est importante et nous indique que vous ne pourriez pas faire de choses rétinotopiques dans le cerveau, ce n'est pas si grave parce que tout est connecté et en fait le fait que ce soit rétinotopique n'est pas si grave.
C'est rétinotopique, donc la connexion entre le nerf optique et le cortex visuel est rétinotopique, ce qui signifie que la topologie est préservée. Les connexions sont en grande partie locales. Il existe des connexions à longue portée, mais elles ne sont qu'en petit nombre. Et donc vous n'avez pas une énorme bande passante de communication pour la longue portée. Vous avez de gros faisceaux de connexions allant des couches inférieures aux couches supérieures, de V1 à V2 et de V2 à V4. Une fois que vous arrivez aux couches supérieures, la distribution spatiale n'est plus représentée. C'est comme un convnet où vous avez du pooling. Dans les couches supérieures, vous n'avez pas besoin de cette organisation, mais le temps que vous y arriviez, la résolution spatiale est perdue. Nous pouvons faire l'expérience en fait; ce serait amusant.
L'Apprentissage chez les Bébés et les Animaux
La question suivante est de savoir comment les humains et les animaux apprennent si vite. Je ne sais pas combien d'entre vous étaient ici hier à l'inauguration, probablement pas beaucoup, mais il y a cette idée que les humains apprennent d'une manière très différente du renforcement ou de l'apprentissage supervisé. Et j'appellerai cela plus tard l'apprentissage auto-supervisé, mais ce n'est qu'une hypothèse. Les bébés apprennent des concepts et des faits de base sur le monde essentiellement par l'observation au cours des premières semaines et des premiers mois de la vie. Emmanuel Dupoux a élaboré ce tableau qui montre à quel âge les bébés apprennent différents concepts. Des choses comme être capable de faire la différence entre un objet animé et inanimé apparaissent vers trois mois, et la notion de permanence de l'objet, le fait qu'un objet caché derrière un autre existe toujours, les notions de solidité, de rigidité, de stabilité, et puis la physique intuitive comme la gravité et l'inertie apparaissent vers huit mois. Donc si vous montrez à un bébé de six mois le scénario où vous mettez une petite voiture sur une plateforme et vous la poussez hors de la plateforme et elle ne tombe pas, à six mois ils ne sont pas surpris. Ils se disent juste que c'est comme ça que le monde fonctionne, c'est une chose de plus qu'ils doivent apprendre. Après neuf mois, ils ont appris que les objets ne sont pas censés flotter dans l'air, qu'ils sont censés tomber. Vous pouvez mesurer combien de temps ils le fixent et avec quelle attention. C'est ainsi que vous savez si un concept a été appris ou non. Si un concept est violé par une scène particulière, le bébé va être vraiment surpris et vous pouvez mesurer le degré de surprise. Alors, comment se fait-il que les bébés apprennent cela juste par l'observation ? Les jeunes bébés sont complètement démunis; ils observent, ils n'ont pas vraiment de moyen d'affecter le monde physique qui les entoure. C'est donc un type d'apprentissage différent de l'apprentissage par renforcement ou supervisé. Et il n'y a pas que les bébés; la plupart des animaux apprennent ce genre de choses. C'est un bébé orang-outan; on lui montre un tour de magie où un objet est retiré d'une tasse, mais il ne voit pas ça et maintenant la tasse est vide et il court sur le sol en riant. Donc évidemment, son modèle du monde inclut la permanence de l'objet et les objets ne sont pas censés disparaître comme ça. Quand nous voyons quelque chose qui nous surprend, nous rions ou nous avons peur, parce que voici quelque chose que nous n'avons pas prédit et qui peut nous tuer.
L'Apprentissage Auto-Supervisé et les Modèles d'Énergie
Il y a donc toutes sortes de concepts comme celui-ci. La raison de cette animation est que ces concepts très basiques comme le fait que le monde est tridimensionnel, que nous pouvons peut-être apprendre en nous entraînant simplement à prédire des choses très simples. Donc si j'entraîne mon cerveau ou une machine d'apprentissage à prédire à quoi le monde va ressembler quand je déplace ma tête ou la caméra de quelques centimètres vers la gauche, la vue du monde change en fonction d'un mouvement de parallaxe selon la profondeur. Et donc si je m'entraîne à prédire à quoi le monde va ressembler quand je déplace la caméra, je peux peut-être déduire automatiquement que chaque objet dans le monde a une profondeur parce que c'est l'explication la plus simple de la façon dont les choses changent. La notion de profondeur pourrait simplement émerger du fait de s'entraîner à prédire à quoi le monde ressemble quand on bouge la tête. Une fois que vous avez cela, vous avez des bords d'occlusion et vous voyez des objets. Et puis il y a un tas de systèmes de vision faiblement supervisés qui exploitent ce genre de propriété. Une fois que vous avez des objets qui peuvent bouger indépendamment des autres, vous avez des objets d'arrière-plan, la notion d'obstacle, et la localisation. On pourrait donc penser que des concepts comme celui-ci sont construits de manière hiérarchique en s'entraînant à prédire et en trouvant de bonnes représentations qui permettent de faire un bon travail de prédiction. Ce n'est donc pas supervisé; ce serait une forme d'apprentissage non supervisée. Et cela a conduit certains d'entre nous à... c'est donc une blague d'Alyosha Efros : la révolution ne sera pas supervisée. L'avenir est dans une nouvelle forme d'apprentissage qui permettra aux machines d'accumuler toutes ces connaissances de base sur le fonctionnement du monde, principalement par l'observation et un peu par l'interaction, mais surtout sans supervision et sans renforcement. C'est donc peut-être le salut, l'apprentissage auto-supervisé. Le concept de base est que je vous donne un morceau de données, disons un morceau de vidéo, et je vais masquer un morceau de cette vidéo, peut-être la deuxième moitié, et je vais entraîner une machine à prédire le futur de la vidéo à partir du passé et du présent. Le concept général de l'apprentissage auto-supervisé est que vous avez un morceau de données, vous en masquez un morceau et vous demandez à la machine de prédire le morceau qui est masqué. Si le morceau masqué est toujours le même, vous pouvez utiliser une sorte d'architecture de prédiction pour cela. Mais le plus souvent, vous ne savez pas quel morceau va être masqué. Par exemple, en ce moment, vous ne voyez pas mon dos, mais vous pouvez avoir une bonne idée de ce à quoi il ressemble; peut-être que votre cerveau essaie inconsciemment de prédire à quoi le monde ressemble de dos, et une fois que je me retourne, votre croyance est mise à jour. Vous pouvez entraîner votre modèle. Il en va de même pour toutes sortes de parties de la scène ici qui sont actuellement cachées. Ce principe consistant à apprendre à prédire des choses que l'on finira par voir est une bonne chose. L'avantage de ceci est que la quantité d'informations que vous donnez à la machine à chaque étape est énorme. Vous demandez de prédire chaque pixel dans un tas de cadres dans une vidéo, ce qui est beaucoup d'informations, bien plus que l'étiquette d'une image. Cela signifie que vous mettez beaucoup plus de contraintes sur les paramètres de la machine, ce qui signifie que vous pouvez entraîner une machine à apprendre beaucoup de connaissances avec un nombre relativement restreint d'échantillons, et de plus ces échantillons sont gratuits. Essentiellement, dans l'apprentissage auto-supervisé, il y a énormément de retours que vous donnez à la machine. Vous lui donnez un morceau de vidéo et ensuite vous lui dites : prédis tous ces pixels. C'est une quantité énorme d'informations. Il y a un problème technique avec cela. Dans l'apprentissage supervisé, vous donnez une quantité relativement faible de retours ; vous dites à la machine que c'est la classe numéro trois sur mille. Et je devrais dire tout de suite que la raison pour laquelle les réseaux neuronaux fonctionnent si bien sur ImageNet est parce qu'il y a mille catégories. Avoir un problème avec beaucoup de catégories aide beaucoup à construire de bonnes représentations. L'apprentissage par renforcement a un retour très faible ; vous ne dites à la machine qu'une fois de temps en temps qu'elle a bien fait ou mal fait. Il n'y a absolument aucun moyen pour une machine d'apprendre quoi que ce soit de complexe sans beaucoup d'interactions en utilisant l'apprentissage par renforcement de base. C'est ce que la théorie de l'apprentissage appelle la complexité de l'échantillon. Il est tout à fait évident qu'il n'y a aucun moyen d'apprendre des choses complexes sans des tonnes d'interactions quand on ne donne qu'une valeur scalaire de temps en temps comme retour. Le chemin vers l'intelligence de niveau humain passera peut-être par l'apprentissage par renforcement, mais ce ne sera pas suffisant. Cela m'a conduit à cette analogie de l'intelligence comme un gâteau : si l'apprentissage auto-supervisé est le gros du gâteau, l'apprentissage automatique est dans la même situation embarrassante que la physique, où les physiciens n'ont aucune idée de ce qu'est 95 % de la masse de l'univers. Nous ne connaissons que les 5 % qui sont de la matière et de l'énergie réelles. Ici, c'est la même chose; nous pouvons faire la cerise, mais nous ne pouvons pas vraiment cuire le gâteau. Ce qui manque, c'est la capacité d'apprendre des modèles prédictifs du monde. Si vous voulez entraîner un système à conduire une voiture, il doit avoir une sorte de modèle prédictif afin de ne pas essayer des choses stupides comme foncer dans un arbre. Il y a plusieurs années, mes collègues de Facebook ont mené une expérience où ils ont concocté des situations physiques simples où l'on empile des cubes et on entraîne une version vidéo de convnet pour prédire ce qui va arriver aux cubes. Ce que vous voyez ici, c'est ce qui se passe réellement, et c'est ce que le convnet produit. Les prédictions sont un peu floues parce qu'il n'y a aucun moyen de prédire exactement ce qui va se passer. Ce que le système produit est une prédiction qui est une moyenne de multiples futurs qui peuvent arriver. La façon de gérer l'incertitude va devenir le problème principal ici. Nous devons avoir des systèmes qui peuvent gérer et représenter l'incertitude dans la prédiction. Et c'est pour cette raison que je vais introduire la notion d'apprentissage basé sur l'énergie. Vous pouvez y voir une forme plus faible d'apprentissage consistant à apprendre des modèles probabilistes. La raison pour laquelle nous devons l'affaiblir est que dans les espaces continus de haute dimension, nous n'avons pas de bons moyens de représenter des distributions qui signifient quelque chose d'utile. Disons que notre monde entier se compose de deux variables scalaires, Y1 et Y2. Disons que j'observe Y2. Voici notre ensemble d'entraînement. Il y a une structure dans notre monde ici. Et si je vous donne une valeur de Y2, vous pouvez prédire que la valeur de Y1 sera par ici ou par là. 30 minutes, c'est parfait. Bon, il y a donc plusieurs prédictions possibles. Donc si vous entraînez un réseau neuronal pour faire une prédiction de Y1 en fonction de Y2, ça ne va pas marcher parce qu'il ne peut prédire qu'une seule sortie. Si vous entraînez le système avec les moindres carrés, ce qu'il va produire est la moyenne des deux. Ce n'est pas une bonne prédiction pour Y1 pour cette valeur de Y2. Ce sont ces prédictions floues dont je vous parlais. Alors, comment transformer une prédiction avec plusieurs sorties possibles en une architecture ? La proposition de modèles basés sur l'énergie est, si vous êtes un probabiliste, d'apprendre la densité de la distribution conjointe. Vous ne pouvez pas faire cela en un million de dimensions quand ces choses représentent des images naturelles. Donc, ce que je propose, c'est que nous apprenions une fonction d'énergie, considérez-la comme le log négatif d'une probabilité, mais elle ne sera pas normalisée. En ce sens, c'est un peu plus général que les approches probabilistes. Une fonction d'énergie appropriée capture la dépendance entre les deux variables et prend des énergies faibles sur les échantillons et des énergies plus élevées à l'extérieur. Si nous avons un système comme celui-ci, nous pouvons l'utiliser pour prédire : je vous donne une valeur de Y2, et puis par descente de gradient vous pouvez trouver les deux valeurs qui produisent une faible énergie sur la sortie. C'est ainsi que l'inférence fonctionne dans ces systèmes. Le système ne produit pas de sortie, il n'a que des entrées, et si je contrains la valeur de certaines entrées, je peux calculer la valeur des autres entrées qui minimisera l'énergie. Maintenant, la deuxième question est de savoir comment entraîner cette boîte qui produit cette fonction d'énergie. L'entraînement consistera à façonner la fonction d'énergie de manière à ce qu'elle prenne une faible énergie sur les billes bleues et une énergie plus élevée à l'extérieur. Si vous avez une fonction paramétrée qui produit une sortie scalaire, il est très facile de lui montrer un échantillon et de régler ensuite les paramètres pour que la sortie diminue. Maintenant la deuxième question est de savoir comment s'assurer que l'énergie est plus élevée à l'extérieur parce que si cette fonction d'énergie est plate, elle ne joue aucun rôle intéressant. Vous devez donc vous assurer que l'énergie est plus élevée en dehors de la région des données. La façon dont vous transformez un modèle basé sur l'énergie en un modèle probabiliste est par une distribution de Gibbs. Prenez votre fonction d'énergie et prenez l'exponentielle moins multipliée par une constante positive arbitraire, puis normalisez. Dans le cas discret, on appelle cela softmax ; dans le cas continu, on appelle cela une distribution de Gibbs. Dans le cas général, ce terme de normalisation est insoluble. Vous ne pouvez pas transformer l'énergie en une probabilité, et c'est pourquoi je plaide pour la manipulation de la fonction d'énergie sans passer par une densité parce que vous ne pouvez pas la normaliser. Bon, c'est donc le problème de l'apprentissage basé sur l'énergie. Il est possible de réinterpréter les algorithmes d'apprentissage classiques en termes de modèles de type énergie, comme l'ACP ou les K-moyennes. Voici deux exemples pour l'ACP et les K-moyennes. C'est en deux dimensions, et la fonction d'énergie pour l'ACP est juste l'erreur de reconstruction quadratique. Vous prenez un vecteur Y, projetez-le sur le sous-espace principal, puis multipliez par W transposé et vous obtenez une reconstruction du point original. C'est le sous-espace principal ici en noir, et l'énergie est l'erreur de reconstruction, qui est la distance entre le point original et sa projection. L'échelle de gris représente cette énergie. Évidemment, ce n'est pas une bonne représentation de cette variété de données. Les K-moyennes ont une fonction d'énergie qui est le minimum d'une fonction d'énergie sur une variable latente Z. Nous avons une fonction d'énergie qui est une erreur de reconstruction, donc la distance au carré entre un point de données Y et sa reconstruction. Sa reconstruction est le produit d'une matrice prototype multiplié par un vecteur Z qui est une variable latente, et ce vecteur Z est contraint d'être un vecteur one-hot. Et pour mesurer l'erreur de reconstruction d'un point particulier, vous déterminez quel prototype est le plus proche de lui. La minimisation par rapport au vecteur Z va déterminer quel prototype est le plus proche de Y. Maintenant la fonction d'énergie est définie comme le minimum de cette fonction d'énergie. Quand vous entraînez les K-moyennes sur cet ensemble de données, vous obtenez tout un tas de puits potentiels. L'énergie globale est le minimum de tous ces 20 bols quadratiques. C'est très beau en deux dimensions, mais ça ne passe pas très bien à l'échelle en haute dimension. Ce ne sont que deux exemples de méthodes d'apprentissage non supervisées classiques, mais j'ai dressé une liste de sept classes de méthodes différentes qui garantissent que l'énergie en dehors de la région des données est plus élevée. J'ai mentionné construire la machine de manière à ce que le volume de l'énergie faible soit constant, comme pour l'ACP ou les K-moyennes. Une autre consiste à rendre votre fonction d'énergie très flexible, mais vous la considérez comme le log d'une probabilité et vous faites le maximum de vraisemblance. Cela aura pour effet d'augmenter l'énergie des choses que vous n'observez pas, mais c'est très difficile parce que vous obtenez le log de ce terme de normalisation, qui est généralement insoluble. Il faut utiliser des approximations comme l'approximation variationnelle ou les méthodes de Monte Carlo. Une autre technique consiste à abaisser l'énergie des points de données, puis à augmenter l'énergie à des endroits choisis à l'extérieur. Les réseaux antagonistes génératifs sont une façon de faire cela. Considérez le discriminateur dans un GAN comme une fonction d'énergie. Supprimez l'exponentielle à la fin de votre discriminateur. Considérez ce score comme une énergie que vous allez essayer de rendre grande pour les mauvais échantillons et faible pour les bons échantillons. L'idée du GAN est d'entraîner un réseau neuronal qui va produire un mauvais échantillon dont on va augmenter l'énergie. C'est votre générateur. Nous avons un article sur ce sujet appelé GAN basé sur l'énergie. L'auto-encodeur de débruitage dit que je vais entraîner un système dynamique à partir d'un point situé en dehors de la région des données pour le ramener vers la région des données. Je prends un échantillon d'entraînement, je le corromps, et j'entraîne un réseau neuronal à le ramener. Cela va rendre l'énergie grande en dehors de la région des données. Ma préférée est la dernière. Et cette dernière dit que nous allons régulariser certains paramètres à l'intérieur du réseau de sorte que le volume de choses qui sont correctement reconstruites soit faible. Nous allons donc faire payer le système pour la reconstruction de trop de choses. Si vous faites le maximum de vraisemblance, vous considérez votre fonction d'énergie comme le log non normalisé d'une distribution de probabilité. Vous voulez maximiser la probabilité que votre modèle donne à vos points de données, or vous voulez minimiser le log négatif de la probabilité, et c'est la fonction objective que vous voyez ici. C'est le log de vraisemblance négatif d'un point de données. C'est la fonction objective que vous devez minimiser. Cela aura pour effet d'abaisser l'énergie des points de données, et cela aura pour effet d'augmenter l'énergie de chaque point de votre espace. Si vous calculez le gradient, une étape de gradient va pousser vers le bas sur le point de données, et le deuxième terme dit que je vais pousser vers le haut sur chaque point de l'espace avec une force proportionnelle à la probabilité que mon modèle donne à ce point. Les points qui ont une probabilité élevée vont être poussés vers le haut très fort. Vous ne pouvez pas calculer cette intégrale, donc vous devez l'approcher en utilisant des méthodes de Monte Carlo ou des approximations variationnelles. Mais vous n'avez pas besoin de faire tout cela.
Auto-encodeurs et Variables Latentes
Parlons maintenant des modèles à variables latentes. J'ai parlé de la méthode des K-moyennes où il y a cette variable Z que vous devez minimiser pour obtenir l'énergie de votre système. C'est un exemple d'une approche un peu plus générale. Vous avez un point de données Y que vous voulez reconstruire, et votre fonction d'énergie va être l'erreur de reconstruction. Vous allez reconstruire ce point de données en faisant passer une variable latente par une fonction de décodeur. Dans le cas le plus simple, c'est juste une simple matrice W. Puis vous calculez l'erreur quadratique entre le point de données et la multiplication d'une matrice par un vecteur latent. C'est comme les K-moyennes, sauf que nous ne contraignons pas ce vecteur à être one-of-K. Il y a un problème avec cela : s'il n'y a rien d'autre, il y aura toujours un Z qui reconstruira parfaitement n'importe quel Y que vous lui lancez. Ce n'est pas bon parce que cela signifie que votre fonction d'énergie va être plate égale à zéro partout. La question est maintenant de savoir comment s'assurer que l'énergie est élevée sur les points sur lesquels vous ne vous entraînez pas ? Ce R de Z ici est un régularisateur qui va vous faire payer pour avoir choisi un Z qui se trouve en dehors d'une petite valeur. L'astuce habituelle est le codage parcimonieux. Dans le codage parcimonieux, le régularisateur est simplement la norme L1 de Z. L'effet de ceci est de faire en sorte que la machine veuille rendre de nombreux composants de Z nuls. Vous essayez de reconstruire un point de données Y comme le produit d'un vecteur parcimonieux multiplié par une matrice. En supposant que W est connu, je vous donne un Y, vous trouvez le Z qui minimise la somme de ces deux termes. Cela va vous donner un vecteur Z qui est parcimonieux. Les régions de l'espace qui ont une faible énergie sont celles où l'énergie, une fois que vous avez minimisé par rapport à Z, est l'énergie de chaque point de données. Parce que Z est contraint d'être parcimonieux, une petite région de l'espace prend une faible énergie et à l'extérieur, elle est élevée. En ajustant le coefficient alpha ici, vous pouvez rendre la région de l'espace qui est correctement reconstruite aussi petite ou aussi grande que vous le souhaitez. Dans la forme générale, E de Y Z égale une fonction de coût qui mesure l'écart entre le point de données et une fonction de décodeur appliquée à Z. La fonction de décodeur est entraînable. Ensuite, vous avez un régularisateur qui limite essentiellement le contenu d'information de Z. Les K-moyennes font cela implicitement en restreignant Z à être une variable discrète. L'ACP ou des choses similaires à cela font cela implicitement en limitant la dimension de Z. Ignorez le bas pour l'instant. Si vous appliquez le codage parcimonieux à ce petit ensemble de données en spirale, voici la fonction d'énergie que vous obtenez. Chaque ligne que vous pouvez voir ici est un sous-espace linéaire différent, qui est en fait la sélection d'une colonne différente ou d'une paire de colonnes de la matrice W. Le tout s'adapte aux données, car le système est entraîné pour minimiser l'erreur de reconstruction plus le régularisateur sur les points de données. Comme il possède ce régularisateur, il donne une énergie élevée aux éléments extérieurs. Vous appliquez cela à MNIST, vous obtenez des choses comme ça. Ce sont les colonnes de la matrice W. Le codage parcimonieux reconstruit chaque chiffre de MNIST comme une combinaison linéaire d'un petit nombre de ces éléments. Chaque chiffre va être reconstruit comme une combinaison linéaire d'un petit nombre d'entre eux. Vous entraînez la matrice W dans le codage parcimonieux avec la descente de gradient. Vous devez contraindre la norme de ces vecteurs pour qu'ils restent dans une sphère. Sinon, ils explosent et la variable Z rétrécit. Vous devez contraindre ces vecteurs, the colonnes de W, à être bornés. En conséquence, le système identifie ces pièces qui doivent être combinées pour former des caractères comme de petits morceaux de traits. Certains de mes collègues de Facebook ont récemment utilisé l'un de ces systèmes à variables latentes où ils limitaient le contenu informationnel de la représentation latente en la rendant de faible dimension. Ils appellent cela Glo, génération par optimisation latente. Si vous vous entraînez sur des visages, vous obtenez des reconstructions de visages avec des vecteurs latents de dimension relativement faible. Vous pouvez interpoler dans cet espace latent d'un visage à un autre. Cela date de quelques années, mais c'est assez similaire aux GAN de l'époque. Il y a eu beaucoup de progrès dans les GAN, pas tellement dans cette approche particulière, mais c'est une façon intéressante d'aborder le problème. Il y a un problème avec le codage parcimonieux, c'est que si je vous donne un Y, vous devez exécuter un algorithme d'optimisation pour trouver le Z optimal qui minimise l'énergie. Cela peut être un peu coûteux. Voici une astuce : vous n'allez pas faire de la variable Z une variable latente sur laquelle vous devez optimiser. Vous allez simplement en faire la sortie d'un encodeur. Vous allez entraîner un réseau neuronal à prédire quel est le code optimal pour le codage parcimonieux. C'est ce qu'on appelle un auto-encodeur parcimonieux. Vous avez un morceau de donnée, passez-le par un encodeur, il prédit la valeur d'une variable. Cette variable est régularisée pour être parcimonieuse via ce R de Z, qui pourrait être une norme L1. Ensuite, vous reconstruisez la sortie. C'est un auto-encodeur régularisé. Il en existe deux formes. L'une où c'est juste un réseau neuronal avec un terme supplémentaire dans la fonction objectif. Il y a une autre forme où vous avez toujours Z comme variable latente, mais maintenant vous avez un troisième terme dans l'énergie qui vous fait payer pour avoir rendu Z trop différent de la sortie de l'encodeur. La procédure est la suivante : vous lui donnez un Y, trouvez le Z qui minimise la somme de trois termes : l'erreur de reconstruction, le régularisateur et l'erreur de prédiction. Une fois que vous avez ce Z, vous faites un pas de descente de gradient dans les paramètres de l'encodeur et du décodeur. Nous appelions cela autrefois la décomposition parcimonieuse prédictive. Il en existe une forme appelée LISTA. Si vous exécutez cet algorithme sur des patchs d'images naturelles, vous commencez par des caractéristiques aléatoires. Au fur et à mesure que l'apprentissage progresse, vous voyez des détecteurs de contours orientés. Il existe une forme convolutionnelle de ceci où la reconstruction consiste à prendre un ensemble de cartes de caractéristiques, à les convoluer avec un ensemble de noyaux et à additionner les résultats. Vous obtenez des filtres vraiment cool. Vous obtenez ces caractéristiques naturelles émergeant de manière totalement non supervisée de l'entraînement sur des patchs d'images naturelles. Il existe une formulation appelée l'auto-encodeur variationnel. Quand vous regardez ces articles, il y a tout un tas de bornes variationnelles et il est difficile de comprendre intuitivement ce qui se passe. Je vais formuler ce qu'est un auto-encodeur variationnel dans le contexte de ce modèle d'auto-encodeur régularisé basé sur l'énergie. Un auto-encodeur variationnel est un auto-encodeur. Vous lui donnez une donnée, la passez par un encodeur, vous prédisez un code, puis vous ajoutez du bruit à ce code d'une manière particulière. Vous ajoutez du bruit gaussien à ce code, puis vous passez par un décodeur et vous avez une erreur de reconstruction. Vous minimisez l'erreur de reconstruction en entraînant tout ce système. Dans l'espace des codes, chaque échantillon d'entraînement sera un point. Si vous ajoutez du bruit à chacun de ces points, vous transformez chacun de ces points en une boule floue. Si vous donnez ce point de données et ajoutez du bruit, lors de la reconstruction, the système va penser qu'il s'agissait de ce point-là. L'erreur de reconstruction ne sera pas très bonne car il va confondre un point de données avec un autre. Quand vous entraînez le système, toutes ces boules floues vont s'éloigner les unes des autres. Elles vont essayer de s'éloigner le plus possible les unes des autres pour minimiser la confusion. Cela ne vous aide pas ; cela rend simplement les poids de l'encodeur plus grands. Pour éviter cela, vous allez attacher chacune de ces sphères avec un ressort fixé au centre. Vous dites aux sphères qu'elles ne peuvent pas aller trop loin. Le système va essayer de trouver un compromis entre l'éloignement des boules et le fait de laisser certaines sphères s'interpénétrer tant que l'erreur de reconstruction n'est pas trop élevée. En fin de compte, il va essayer de trouver une sorte de structure dans l'espace latent qui organisera ces points afin qu'ils capturent la structure des données. Vous pouvez considérer cela comme une autre façon de limiter le contenu informationnel du code. C'est une autre façon de limiter le contenu informationnel du code. Vous pouvez le faire en imposant une faible dimension, la parcimonie, ou en ajoutant du bruit, tant que vous limitez la norme des points. C'est un peu plus formalisé dans un auto-encodeur variationnel où la taille de ces boules n'est pas fixe ; elle peut varier dans toutes les dimensions, mais il y a une fonction de coût qui vous fait payer pour la rendre significativement plus petite que un. Il y a un autre terme qui s'assure que la moyenne de tous ces points est centrée sur zéro. Un auto-encodeur de débruitage est cette idée où vous prenez des données d'entrée, les corrompez, les passez par un auto-encodeur et reconstruisez le point original sans corruption. Chacun de ces points est un échantillon d'entraînement corrompu. Vous prenez un point de données, le corrompez et entraînez un réseau neuronal à faire la correspondance de ceci vers ici. Vous voyez que le système a appris. Les points bleus se regroupent autour de la région de haute densité de données. La fonction d'énergie est juste l'erreur de reconstruction quadratique entre chaque point de l'espace et le point vers lequel il pointe. Il y a un problème : l'énergie est en fait nulle sur cette vallée, et c'est terrible. C'est un défaut des auto-encodeurs de débruitage ; cela peut créer des vallées dans des endroits où il ne devrait pas y en avoir. Mais cela fonctionne vraiment bien pour le traitement du langage naturel (NLP). BERT est un cas particulier d'auto-encodeur de débruitage où vous lui donnez un morceau de texte. La corruption consiste à masquer certains mots, généralement 15 %. Ensuite, vous entraînez un réseau neuronal transformeur à prédire les mots manquants. Il est facile de gérer l'incertitude dans la prédiction car à la sortie, vous avez un grand softmax qui vous donne une distribution de probabilité. Vous n'avez pas le problème que vous avez avec la prédiction de vidéo, qui est un espace continu de haute dimension. Il est facile de gérer l'incertitude dans un espace discret, c'est pourquoi cela fonctionne bien dans ce cas. Vous entraînez le système à faire de la reconstruction sur des tonnes de texte. À la fin, vous utilisez la représentation interne apprise par le réseau comme entrée pour une tâche supervisée en aval comme l'inférence en langage naturel, l'analyse syntaxique, le schéma de Winograd et toutes sortes de choses. Cela bat le record sur presque tous les tests de référence des ensembles GLUE et SuperGLUE. Les systèmes basés sur BERT, comme RoBERTa de Facebook, détiennent d'ailleurs le record. Il y a quelques jours, Microsoft a proposé une amélioration de RoBERTa qui a légèrement amélioré les performances. Cela fonctionne vraiment bien.
Applications en NLP et Conduite Autonome
Cela ne fonctionne pas sur les images. Si vous utilisez la même astuce sur les images — vous bloquez un morceau de l'image et demandez au système de le reconstruire — cela ne vous donne pas de caractéristiques très utiles au final pour la vision. Je vais m'arrêter ici. Je veux juste vous montrer un exemple simple de prédiction sous incertitude qui est intéressant. C'est un exemple d'entraînement de l'un de ces modèles prédictifs pour être un modèle direct pour un problème de contrôle de conduite automobile. Si vous conduisez une voiture, vous voudrez peut-être être capable de prédire ce que les voitures autour de vous vont faire. Ce n'est pas déterministe. Si vous êtes cette voiture, voici toutes les voitures autour de vous. Il peut être utile de prédire ce que les voitures autour de vous vont faire si vous voulez planifier une trajectoire qui évitera la probabilité d'accidents futurs. Une chose que vous pouvez faire est de prendre quelques images. Ce que vous allez entraîner est un grand réseau convolutionnel avec une variable latente pour prédire l'image suivante. C'est fondamentalement très similaire à un VAE dans ce cas, où vous obtenez l'état du monde, le passez par quelques couches d'un convnet, et ajoutez une variable latente ici qui passe par une autre paire de couches d'un réseau neuronal. Cette variable latente est de dimension relativement faible. Ensuite, vous passez par un décodeur pour prédire l'image suivante. Pour prédire la valeur de la variable latente, il y a en fait un encodeur. Bien sûr, le système pourrait tricher car il possède la réponse de la cible et il pourrait simplement utiliser la valeur de la cible pour prédire la variable latente. Cela ne serait pas très utile. Vous devez donc restreindre le contenu informationnel de cette variable latente. Vous faites cela en ajoutant du bruit, à la manière d'un VAE. C'est le genre de prédiction que vous obtenez si vous n'utilisez pas la variable latente ; vous la réglez sur zéro tout le temps. Vous obtenez des prédictions déterministes, mais elles deviennent floues très rapidement. Ce sont des prédictions multiples que vous obtenez en réalisant différents échantillons des variables latentes. Vous obtenez différents futurs en obtenez différents échantillons de la variable latente. Vous pouvez utiliser ce type de modèle comme modèle direct dans un système de contrôle où vous avez l'état du monde et l'action que vous entreprenez. Vous passez cela par votre modèle direct pour obtenir l'état suivant. Il prend un échantillon aléatoire de la variable latente pour faire cette prédiction. Vous pouvez exécuter cela sur plusieurs pas de temps. Il existe une fonction de coût qui mesure si la voiture est dans sa voie ou trop proche d'autres voitures. C'est dérivable. Par rétropropagation, vous pouvez propager le gradient à travers tout cela et entraîner un autre réseau neuronal appelé réseau de politique pour déterminer quelle est la meilleure action à entreprendre pour minimiser la valeur attendue du coût. Ce n'est pas de l'apprentissage par renforcement ; c'est entièrement de la rétropropagation dérivable. Si vous faites cela, cela ne fonctionne pas très bien. Vous devez régulariser le système en vous assurant qu'il reste dans des régions de l'espace où the modèle direct fait une bonne prédiction. Après avoir fait cela, vous exécutez le réseau de politique. Aucune planification n'est nécessaire au final. Le réseau de politique a déjà pensé à toutes les mauvaises choses qui pourraient arriver lorsqu'il s'entraînait. La voiture bleue ici se conduit toute seule dans le trafic. Le trafic ne réalise pas que la voiture bleue est là. La voiture jaune est une vraie voiture. La voiture bleue a commencé au même endroit mais a décidé de faire autre chose. Ici, elle se fait serrer, elle doit donc s'échapper car elle est invisible pour les autres voitures. C'est comme un film de James Bond. Je vais m'arrêter ici et vous remercier pour votre attention.