L'Apprentissage Profond et le Futur de l'IA
18 avril 2013
Intelligence Artificielle
Introduction et Présentation
Je n'ai pas besoin de le présenter. Il a en fait deux ensembles de labels. Un label est l'apprentissage profond, incluant Google Brain et les chats. C'est un ensemble. L'autre ensemble s'appelle Coursera, MOOC, Massive Online Open Courses. C'est aussi ce qu'il fait. Ces deux ensembles de labels sont utilisés pour décrire Andrew. Aujourd'hui, nous sommes très honorés d'inviter le professeur Andrew de l'université de Stanford à nous présenter un rapport. Accueillons-le.
Est-ce que ça marche ?
Peut-être que je vais crier jusqu'à ce que ça fonctionne. Merci à tous. Mon chinois n'est pas très bon, donc je vais parler en anglais.
Je pense qu'il y a quelques mois, j'ai donné une conférence chez Baidu en chinois. Et après, mon ami m'a dit : ne refais plus jamais ça.
Donc ce que je veux faire, c'est partager avec vous quelques idées sur l'apprentissage automatique qui me passionnent. Est-ce que ce n'est pas assez fort si je parle comme ça ? Est-ce que les gens m'entendent bien ?
D'accord. Et si je crie comme ça, est-ce que ça marche ? Très bien, je vais essayer ça. Donc ce que je veux faire, c'est partager avec vous quelques idées sur l'apprentissage automatique qui me passionnent.
Cette conférence porte sur l'apprentissage profond. Je suis curieux, combien d'entre vous ont suivi mon cours sur Coursera ou ont suivi l'un de mes... C'est incroyable. Merci de l'avoir fait. J'ai donné beaucoup de conférences, mais je n'ai jamais été dans une salle avec autant d'étudiants ayant suivi mon cours. Merci. Cela compte beaucoup pour moi.
Et ce que je veux faire, c'est partager avec vous quelques idées sur l'apprentissage automatique, à savoir l'apprentissage profond, dans lequel nous construisons des simulations cérébrales à grande échelle et les utilisons pour, nous l'espérons, rendre les algorithmes d'apprentissage bien meilleurs et plus faciles à utiliser, ainsi que pour réaliser des avancées révolutionnaires dans l'apprentissage automatique et l'IA.
Ce dont je vais parler n'est pas seulement ma vision, mais la vision partagée par de nombreux autres chercheurs. Et je pense que l'apprentissage profond est aussi notre meilleure chance de réaliser de réels progrès vers le grand rêve de l'IA. J'en dirai un peu plus à ce sujet vers la fin.
Les Défis de l'Apprentissage Automatique Traditionnel
Mais commençons par les bases. Que voulons-nous que les ordinateurs fassent de nos données ? Nous avons des images ou des vidéos et nous voulons qu'ils les étiquettent ou les marquent. Avec des données audio, nous voulons faire de la reconnaissance vocale. Avec des données textuelles, nous voulons faire de la recherche sur le Web, de l'anti-spam, de la traduction automatique, etc.
Il y a quelques années, en examinant le premier de ces problèmes, j'ai demandé à certains de mes étudiants à Stanford d'implémenter un algorithme d'apprentissage pour détecter les motos. En utilisant les techniques de pointe, ils ont implémenté un algorithme de vision pour détecter les motos. Et voici le résultat qu'ils ont obtenu.
On peut trouver des motos partout alors qu'elles n'existent pas. Est-ce que ça marche ? Test. Si je crie là-dedans, est-ce que ça fonctionne ?
Ça ne marche pas du tout, n'est-ce pas ? Le personnel devrait-il allumer ce micro ? En fait, est-ce que ça marche ? Si je tapote le micro, il semble se passer quelque chose, mais je pense que le volume de ce micro est très faible. Mais je suppose que si je le tiens comme ça et que je parle, vous m'entendez bien ? D'accord, essayons cela. Merci.
D'accord, donc pour toutes ces applications, je pense que l'apprentissage automatique est notre meilleure technique pour les construire. Mais c'est beaucoup de travail de faire fonctionner les algorithmes. Et chacune de ces lignes représente entre six mois et deux ans de travail pour un groupe allant d'une demi-douzaine à 50 ingénieurs.
Existe-t-il donc un moyen de rendre les algorithmes d'apprentissage plus faciles à utiliser et d'améliorer leurs performances ?
Dans cette conférence, je vais illustrer la plupart de ces idées à l'aide d'images et de sons parce que c'est facile d'en parler. Mais les idées sont générales et s'appliquent également à d'autres problèmes. Et vers la fin, je dirai aussi quelques mots sur le langage naturel et le texte.
Le Problème de la Représentation des Caractéristiques
Alors, pourquoi est-il difficile pour un ordinateur de regarder cette image et de comprendre de quoi il s'agit ? Cela semble si évident. En zoomant sur une petite partie de l'image où se trouve le carré rouge, là où vous et moi voyons une moto, un ordinateur voit une grille de valeurs d'intensité de pixels.
Le problème de la vision par ordinateur est donc de regarder tous ces chiffres et de dire qu'ils représentent le pot d'échappement d'une moto. Cela semble être un problème difficile à résoudre.
Dans le monde de l'apprentissage automatique, nous disons généralement que nous prenons les données, que nous les transmettons à l'algorithme d'apprentissage et que nous laissons l'algorithme se débrouiller. Mais en fait, cela ne fonctionne pas si bien que ça dans la plupart des cas.
Pour expliquer pourquoi, choisissons quelques emplacements de pixels et je vais tracer cette image sur ce graphique où cette image a un pixel un relativement sombre et un pixel deux relativement lumineux, de sorte que l'image de la moto apparaisse à cette position sur le graphique.
Faisons cela pour une image de moto différente qui a un pixel un lumineux et un pixel deux sombre, de sorte qu'elle apparaisse en bas à droite. Et si je fais cela pour quelques images qui ne sont pas des motos également, je pourrais obtenir ceci.
Si je fais cela pour davantage d'images de motos et sans motos, ce que je pourrais obtenir, c'est beaucoup d'exemples qui sont mélangés. Si vous fournissez cela comme données à votre algorithme d'apprentissage, il est très difficile pour l'algorithme de déterminer ce qui est une moto et ce qui n'en est pas une.
Ce qui se fait réellement en vision par ordinateur, c'est qu'au lieu de fournir les pixels bruts à l'algorithme, nous essayons généralement de trouver une représentation intermédiaire connue sous le nom de représentation de caractéristiques, et c'est celle-ci que nous fournissons à l'algorithme.
Dans cet exemple illustratif, si nous pouvions écrire un logiciel pour nous dire si une image contient ou non des roues ou un guidon, alors votre ensemble de données ressemblerait beaucoup plus à ce qui se trouve dans le coin inférieur droit, et il deviendrait beaucoup plus facile pour un algorithme de distinguer ce qui est une moto et ce qui n'en est pas une.
Mais l'histoire ne s'arrête pas là car nous ne savons pas vraiment comment écrire un logiciel pour nous dire s'il y a des roues ou un guidon dans une image. Ce qui se fait réellement, c'est que les gens écrivent des logiciels très complexes et opaques pour essayer de capturer des propriétés statistiques vagues d'une image.
J'en dirai plus à ce sujet dans un petit moment. Cette idée de calcul de caractéristiques est omniprésente dans l'apprentissage automatique, où pour les images, vous devez trouver des caractéristiques visuelles, pour l'audio, des caractéristiques sonores et pour le texte, des caractéristiques de langage naturel.
Étant donné que la représentation des caractéristiques est la lentille principale à travers laquelle nos algorithmes voient le monde, cela donne à cette représentation une certaine importance, et vous devez vous demander d'où viennent ces caractéristiques.
En vision par ordinateur, la réponse de pointe est qu'il y a eu des équipes de centaines ou de milliers de chercheurs qui ont passé des décennies à concevoir manuellement des caractéristiques visuelles.
L'image en haut à gauche, SIFT (S-I-F-T), est une capture d'écran de l'article le plus cité en vision par ordinateur au cours des 15 dernières années. Il s'agit d'un logiciel permettant de calculer des caractéristiques pour la vision par ordinateur.
Je connais l'auteur, David Lowe, et il a fallu littéralement 10 ans à David pour concevoir l'algorithme SIFT. J'ai lu l'article sur SIFT peut-être cinq ou six fois maintenant, et à ce jour, je n'ai toujours aucune idée de ce que fait l'algorithme.
La raison en est que David Lowe a mis 10 ans à peaufiner le pseudo-code jusqu'à aboutir à ce logiciel très complexe qui calcule des caractéristiques très utiles, mais il est très difficile de comprendre ce qu'il fait. Et c'est ainsi que l'on obtient les meilleures caractéristiques de la vision aujourd'hui.
Qu'en est-il de l'audio ? Même chose. Des équipes de centaines ou de milliers de chercheurs en audio ont conçu manuellement des caractéristiques pendant des décennies.
Les MFCC sont une caractéristique très utile, mais là encore, après avoir lu les articles pendant de nombreuses années, je ne suis toujours pas tout à fait sûr de ce qu'ils font. Et qu'en est-il du langage naturel ?
Même chose, n'est-ce pas ? En fait, une grande partie de la recherche actuelle sur le traitement du langage naturel vise ouvertement à trouver de meilleures caractéristiques. Pensez aux analyseurs syntaxiques. Pourquoi y a-t-il tant de travail sur l'écriture de meilleurs analyseurs ?
En réalité, peu m'importe de savoir si les syntagmes nounaux de mes phrases sont... Je n'ai pas besoin d'un logiciel pour me dire ça. Mais la raison pour laquelle nous passons autant de temps sur de meilleurs analyseurs, c'est dans l'espoir qu'ils génèrent des caractéristiques utiles pour améliorer ensuite les performances des applications en aval comme la recherche Web ou la traduction automatique.
Concevoir des caractéristiques est donc difficile, prend du temps et nécessite des connaissances d'expert. Si vous vous promenez dans la Silicon Valley ou dans l'industrie technologique de Pékin, l'essentiel de l'apprentissage automatique appliqué aujourd'hui consiste à essayer de concevoir manuellement de meilleures caractéristiques à intégrer dans votre application.
L'Inspiration Biologique : L'Hypothèse de l'Algorithme Unique
Alors, pouvons-nous faire mieux ?
La suite de ce dont je veux parler s'inspire de la biologie. Il y avait cette hypothèse fascinante selon laquelle la majeure partie de la façon dont nous comprenons les images, l'audio et le texte en tant qu'humains pourrait être due non pas à de nombreux algorithmes différents conçus manuellement, mais plutôt à un seul et unique algorithme.
Peut-être comme beaucoup d'entre vous, je traite l'inspiration biologique avec une bonne dose de scepticisme. Mais il existe cette hypothèse fascinante selon laquelle la majeure partie de la perception humaine pourrait être due à un seul algorithme d'apprentissage.
Cela nous donne l'espoir que si nous pouvons trouver une approximation de cet algorithme et l'implémenter dans un ordinateur, cela pourrait être un bien meilleur moyen de progresser dans la perception informatique.
Sur la figure, ce morceau de tissu cérébral rouge est votre cortex auditif, et vous l'utilisez pour comprendre les sons.
Des neuroscientifiques ont mené des expériences consistant à couper le fil chez un animal entre l'oreille et le cortex auditif et à recâbler le signal provenant des yeux pour qu'il soit acheminé vers le cortex auditif.
Il s'avère que si vous faites cela, le cortex auditif apprendra à voir. Ce sont des animaux qui peuvent accomplir des tâches visuelles en utilisant ce morceau de tissu cérébral rouge.
Sur cette figure, ce morceau de tissu cérébral rouge est votre cortex somatosensoriel, utilisé pour traiter le toucher. Si vous faites une expérience de recâblage neuronal similaire, votre cortex somatosensoriel apprendra à voir.
Il existe donc des preuves que, selon les données que vous fournissez au même morceau de tissu cérébral — qu'il s'agisse de vue, de son ou de toucher — le même tissu physique est capable de les traiter.
Si le même morceau de tissu cérébral peut traiter la vue, le son ou le toucher, alors il existe peut-être un algorithme sous-jacent capable de tout traiter en fonction des données qu'on lui fournit. Si nous pouvons découvrir et implémenter cet algorithme, cela nous permettra de faire beaucoup de progrès.
Il s'avère que cette hypothèse d'un algorithme d'apprentissage unique s'appuie sur de nombreuses autres preuves. En haut à gauche, on voit un système en cours de développement pour aider les aveugles à voir.
Le fonctionnement est le suivant : on fixe une caméra basse résolution sur le front d'une personne aveugle pour prendre une photo. On relie ensuite un fil à une grille d'électrodes sur la langue et on associe une image en niveaux de gris à un motif de valeurs de tension.
En 10 ou 20 minutes, vous apprendrez à voir avec votre langue. Il existe également des écoles qui forment les enfants aveugles à l'écholocalisation, où ils claquent des doigts et apprennent à interpréter les sons qui rebondissent sur l'environnement comme un sonar afin de pouvoir se déplacer sans rien heurter.
J'ai une ceinture haptique dans mon laboratoire ; vous la portez avec un anneau de vibreurs autour de la taille et vous la programmez pour que le vibreur orienté vers le nord vibre.
Il s'avère que, tout comme vous savez où se trouvent vos bras même les yeux fermés, si vous portez une ceinture haptique, en 5 ou 10 minutes, vous savez simplement où se trouve le nord. Enfin, on peut greffer un troisième œil à une grenouille et elle apprend à s'en servir.
Dans une mesure étonnamment large, on peut brancher presque n'importe quel capteur sur presque n'importe quelle partie du cerveau et le cerveau apprendra une représentation de caractéristiques appropriée. La question est donc : pouvons-nous amener un ordinateur à apprendre également des représentations appropriées de manière automatique pour n'importe quelle donnée qu'on lui fournit ?
Le Codage Parcimonieux (Sparse Coding)
Voici le formalisme mathématique. Étant donné un fragment d'image X de 14 par 14, vous pouvez le représenter à l'aide de 196 valeurs d'intensité de pixels bruts.
Le problème est le suivant : étant donné ce fragment d'image, pouvez-vous trouver une meilleure représentation — un meilleur vecteur de caractéristiques — que les simples valeurs d'intensité des pixels ?
Pour ce faire, je vais me tourner une dernière fois vers la motivation biologique. Il s'avère que lorsque vous voyez une image, la première chose que fait votre cerveau est de chercher des contours. Un contour est une région claire adjacente à une région sombre.
Dans votre cerveau en ce moment même, il y a probablement un neurone qui cherche un contour à 45 degrés et un autre neurone qui cherche un contour vertical.
Au lieu d'essayer de concevoir manuellement quelque chose pour imiter cela, je veux voir si nous pouvons trouver des algorithmes pour apprendre cela automatiquement.
J'ai commencé à travailler sur l'apprentissage profond quand j'ai découvert un algorithme appelé codage parcimonieux par deux neuroscientifiques, Bruno Olshausen et David Field. Ils ont publié ce résultat comme une tentative scientifique d'expliquer le traitement visuel précoce dans le cerveau.
Lorsqu'ils ont publié cet article, il s'agissait d'un résultat fondamental en neurosciences sur les mathématiques derrière la perception ; ils n'auraient jamais imaginé que cela serait utilisé comme un algorithme d'apprentissage automatique.
Mais il s'avère qu'il s'agit d'un algorithme d'apprentissage non supervisé — il apprend à partir de données non étiquetées — et il donne une très bonne explication du traitement visuel précoce.
Le codage parcimonieux prend en entrée M images, dont chacune est un fragment d'image de 14 par 14. Ce qu'il fait, c'est apprendre un dictionnaire de fonctions de base, de phi 1 à phi K.
Et il l'apprend de sorte que chaque exemple d'entrée X puisse être approximativement décomposé comme une somme pondérée de vos fonctions de base, sous la contrainte que ces poids, les coefficients AJ, soient principalement nuls.
La contrainte selon laquelle les AJ sont principalement nuls est appelée contrainte de parcimonie, d'où le nom de codage parcimonieux.
Je pense que c'est la seule équation que j'ai dans cette conférence. J'espère qu'elle vous a plu.
Pour expliquer la même chose en images, quand on soumet un ensemble d'images naturelles au codage parcimonieux, il apprendra un ensemble de fonctions de base, illustrées ici par les 64 fragments d'image en haut à droite.
Étant donné une nouvelle image de test, il sélectionnera un petit sous-ensemble — disons trois sur 64 — de mes fonctions de base et expliquera mon exemple de test comme une combinaison linéaire pondérée de celles-ci.
Quelques observations. Tout d'abord, le codage parcimonieux aurait pu choisir absolument n'importe quoi pour ces fonctions de base. C'est totalement sans contrainte.
Mais chaque fois que vous lancez un codage parcimonieux, vos fonctions de base ressembleront à des détecteurs de contours. En d'autres termes, le codage parcimonieux a 'inventé' la détection de contours.
Deuxièmement, dans cet exemple, le codage parcimonieux dit que cette image X est égale à 0,8 fois le contour 36, plus 0,3 fois le contour 42, plus 0,5 fois le contour 63.
Si vous représentez l'image par cette liste de nombres de A1 à A64, dont la plupart sont nuls, alors cette liste vous donne une meilleure représentation de l'image.
Cela vous donne une représentation de plus haut niveau, plus succincte. Il vaut mieux savoir où sont les contours dans l'image que de savoir où sont les pixels.
Alors, à partir de données non étiquetées, apprenons une représentation de plus haut niveau.
En résumé, le codage parcimonieux invente la détection de contours et apprend automatiquement à représenter une image en fonction des contours qui y apparaissent.
D'autres neuroscientifiques ont comparé les détecteurs de contours trouvés par le codage parcimonieux et ont montré qu'ils sont quantitativement similaires aux détecteurs de contours observés dans le cortex visuel primaire. Le codage parcimonieux donne donc une explication convenable du traitement visuel précoce dans le cerveau.
Et cela donne un ensemble de caractéristiques qui sont plus utiles pour la vision.
Application à l'Audio et au Toucher
C'était la vision. Qu'en est-il de l'audio ? Evan Smith, qui était postdoctorant à Stanford, a mené l'expérience suivante.
Il a appliqué le codage parcimonieux à des données audio, et il a appris 20 fonctions de base. Le codage parcimonieux a appris à expliquer des clips audio comme des sommes pondérées de ces fonctions de base.
Pour chacune de ces fonctions de base, il a trouvé la correspondance la plus proche dans le système de traitement auditif biologique d'un chat.
En bleu figurent les fonctions de base apprises par le codage parcimonieux, et les correspondances les plus proches en biologie sont superposées en rouge.
Ainsi, le même algorithme donne une très bonne explication pour le traitement visuel précoce et le traitement auditif précoce.
Certains de mes étudiants à Stanford ont appliqué cela pour expliquer le traitement somatosensoriel précoce, et le même algorithme donne une explication étonnamment bonne pour le traitement du toucher également.
Hiérarchies de Représentation et Réseaux de Neurones
Au-delà du codage parcimonieux, ce que nous pouvons faire, c'est appliquer cette idée de manière récursive pour construire des niveaux de représentation encore plus élevés.
Nous implémentons le codage parcimonieux avec un réseau de neurones artificiels. En gros, c'est une simulation de neurones cérébraux où chaque fonction de base correspond à ce qu'un neurone d'un cerveau artificiel pourrait faire.
Chaque neurone est comme un détecteur de caractéristiques cherchant un contour spécifique ou un fragment audio spécifique.
Avec une seule couche, nous pouvons passer des pixels d'entrée à une couche de neurones simulés qui sont des détecteurs de contours.
Ce que nous pouvons faire, c'est appliquer cette idée de manière récursive pour construire des couches de représentation de plus en plus élevées.
Lorsque vous appliquez une couche de codage parcimonieux, vous pouvez regrouper des pixels pour former des détecteurs de contours. Cette visualisation signifie que l'un de mes neurones simulés a appris à détecter des contours verticaux.
Si vous appliquez cet algorithme de manière récursive, vous pouvez alors apprendre à regrouper des contours pour former des modèles de parties d'objets, puis regrouper ces parties d'objets pour former des modèles complets d'objets.
Ces résultats ont été générés par un entraînement sur des photos de visages. Sur la deuxième couche, un neurone a appris à détecter des yeux. Sur la couche la plus élevée, un neurone a appris à détecter des visages.
Quelques détails techniques : les neurones de plus haut niveau examinent des régions de l'image bien plus vastes que les neurones de niveau inférieur. À mesure que vous montez, chaque neurone examine des régions de l'image de plus en plus grandes.
Chacun de ces neurones calcule en fait une fonction non linéaire très complexe. Les multiples couches de codage parcimonieux sont des détecteurs de caractéristiques qui deviennent de plus en plus complexes à mesure que l'on monte dans cette hiérarchie.
En s'entraînant sur des données non étiquetées, nous pouvons apprendre des détecteurs de caractéristiques très riches. Alors, à quoi cela sert-il ?
Supposons que vous vouliez reconnaître des motos. L'approche standard consisterait à collecter de nombreux exemples étiquetés et à appliquer un algorithme d'apprentissage supervisé avec des caractéristiques conçues manuellement.
Mais avec l'apprentissage profond, nous pouvons désormais augmenter notre ensemble de données avec une grande quantité de données non étiquetées provenant d'Internet.
Nous pouvons utiliser notre source infinie de données non étiquetées pour apprendre de meilleures caractéristiques comme des détecteurs de visages, de roues ou de routes. Après avoir appris un riche ensemble de caractéristiques, nous pouvons les utiliser avec une petite quantité de données étiquetées pour apprendre à classer les motos.
Nous avons testé cela sur le benchmark Hollywood 2, l'un des plus difficiles en vision par ordinateur, où la tâche consiste à reconnaître des activités telles que des gens qui s'embrassent, se prennent dans les bras, conduisent ou mangent dans des clips vidéo.
Au cours des dernières années, les chercheurs avaient conçu manuellement des caractéristiques et avaient progressé jusqu'à environ 47 % de précision.
L'un de mes étudiants a décidé qu'au lieu de concevoir manuellement les caractéristiques, il allait simplement essayer de les apprendre, et il a pu surpasser considérablement l'état de l'art précédent.
Plus largement, application après application dans l'audio, les images, la vidéo et le langage naturel, les algorithmes d'apprentissage profond pour l'apprentissage des caractéristiques ont fait tomber les records très rapidement.
De toute ma vie professionnelle, je n'ai jamais vu une seule technologie battre autant de records aussi rapidement. De nombreux groupes de recherche ont utilisé ces technologies pour pulvériser les benchmarks de façon incroyable.
L'un des groupes leaders en apprentissage profond se trouve chez Baidu, où Yu Kai dirige une équipe qui a pulvérisé des tons de records et permet aux produits de Baidu de bien mieux fonctionner.
L'Importance des Données et du Calcul à Grande Échelle
Il y a environ deux ans et demi, je me suis assis avec mes étudiants pour réfléchir à la manière de faire passer l'apprentissage profond au niveau supérieur.
Pour l'inspiration, nous avons regardé l'histoire de l'apprentissage automatique. Vers l'an 2000, la plupart des gens faisaient de l'apprentissage supervisé — l'apprentissage à partir de données étiquetées.
À l'époque, les débats portaient sur l'algorithme d'apprentissage qui était le meilleur.
Ma réflexion a été influencée par une étude de Banko et Brill en 2001, où ils ont comparé les effets de l'exécution de différents algorithmes sur différentes quantités de données.
Leur résultat a montré qu'à mesure que l'on donne plus de données aux algorithmes, les performances augmentent.
Très souvent, un algorithme soi-disant inférieur surpasse un algorithme soi-disant supérieur si l'on peut donner plus de données à l'algorithme inférieur et simplement passer à l'échelle supérieure.
Cela a conduit à un dicton selon lequel, souvent, ce n'est pas celui qui a le meilleur algorithme qui gagne, mais celui qui a le plus de données.
C'était le résultat en apprentissage supervisé. Qu'en est-il des algorithmes comme le codage parcimonieux où l'on peut apprendre à partir de données non étiquetées ?
Avec l'apprentissage de caractéristiques non supervisé, nous pouvons absorber autant de données non étiquetées que nous le voulons sur le Web.
Ce n'est donc plus celui qui a le plus de données qui gagne, mais celui qui a la capacité de calcul pour traiter les quantités de données essentiellement infinies que nous possédons tous désormais.
Adam Coates a mené une expérience comparant des algorithmes d'apprentissage de caractéristiques non supervisés. Les tendances sont claires : l'algorithme importe un peu, mais l'essentiel est la taille à laquelle on peut faire passer ces modèles.
Compte tenu de ces résultats, nous avons passé beaucoup de temps à réfléchir à la manière de construire des versions à très grande échelle de ces modèles d'apprentissage profond.
J'ai passé du temps à errer dans la Silicon Valley pour essayer de trouver où je pourrais avoir accès à suffisamment d'ordinateurs.
L'apprentissage profond combine souvent des données étiquetées pour apprendre des représentations de caractéristiques, puis des prédictions de classification.
Est-ce que ça marche toujours ? Très bien, c'est à peu près comme avant.
Quand on entend des gens donner des conférences sur l'apprentissage profond, les résultats supervisés et non supervisés sont souvent confondus. Cela rend parfois le discours plus attrayant, mais cela rend les résultats confus.
Je vais donc délibérément séparer ces deux choses et parler d'abord des applications exploitant beaucoup de données étiquetées, puis ensuite des résultats exploitant beaucoup de données non étiquetées.
Infrastructure Distribuée et Google Brain
En 2011, j'ai lancé un projet chez Google pour profiter de l'infrastructure réseau distribuée de Google afin de construire de très grands réseaux de neurones, en commençant par l'exploitation des données étiquetées.
Étant donné un réseau de neurones, nous prenions le modèle et le partitionnions afin que différentes parties résident sur différentes machines. Comme le nombre de connexions réseau transversales est relativement faible, il n'y a qu'une certaine communication entre les machines.
Au sein de chaque machine, nous exploitons en plus le parallélisme multicœur pour accélérer les algorithmes.
Avec cette forme de parallélisme, nous avons effectué l'apprentissage en utilisant la descente de gradient stochastique par mini-lots. Cela nous a permis de paralléliser nos modèles sur 100 machines — environ 1600 cœurs.
Mais ce n'était toujours pas suffisant. Nous voulions ajouter un autre niveau de parallélisme.
Nous avons pris le modèle et implémenté un serveur de paramètres, qui est un ensemble de machines assurant le suivi de tous les paramètres de l'ensemble de notre modèle.
Chaque copie du modèle téléchargera des paramètres depuis le serveur de paramètres, prendra des données et calculera une mise à jour de l'étape d'apprentissage.
Le serveur de paramètres prendra la mise à jour de mon modèle et l'ajoutera aux paramètres globaux, puis transmettra la nouvelle mise à jour et recommencera. C'est ainsi que l'apprentissage progresse.
Cela nous permet de créer plusieurs copies de travailleurs du modèle, chacune comprenant peut-être 100 machines. Chaque copie travaille en parallèle sur une partie différente des données.
En pratique, nous avons entre 10 et 50 travailleurs de modèle.
Un énorme avantage technique de cette configuration avec serveur de paramètres est que si l'un de mes modèles esclaves en bas tombe en panne, le reste peut continuer à fonctionner.
Un ordinateur de bureau tombe en panne en moyenne tous les trois ans.
Cela signifie que si vous travaillez sur un millier de machines, vous avez environ une machine qui tombe en panne chaque jour.
Avec cette architecture, si une machine est très lente ou tombe en panne, nous pouvons simplement écarter ce fragment et le reste du cluster peut continuer à progresser.
Quand on travaille avec des milliers de machines, il y a une grande variance dans les temps de réponse. Cette architecture nous rend beaucoup plus robustes face à cela.
En utilisant ce modèle, nous sommes capables de faire deux choses. Premièrement, nous pouvons entraîner des modèles massifs qui ne tiennent même pas dans la mémoire d'un seul ordinateur.
La deuxième chose qu'il permet est de fonctionner beaucoup plus rapidement. Nous avons constaté qu'en répartissant notre modèle sur dix mille cœurs, nous pouvons l'entraîner beaucoup plus vite que sur un seul GPU.
Applications Concrètes : Reconnaissance Vocale et Vision
À quoi cela sert-il ? Encore une fois, je vais séparer les résultats supervisés des résultats non supervisés.
Combien d'entre vous utilisent un téléphone portable Android ? Oh wow, plusieurs d'entre vous.
Si vous utilisez la reconnaissance vocale Android, elle est en fait construite sur cette architecture d'apprentissage profond que mon équipe a bâtie chez Google.
C'est vraiment le travail de l'équipe de Vincent Vanhoucke. Ils ont pu réduire le taux d'erreur sur les mots de la reconnaissance vocale de Google d'environ vingt pour cent en appliquant ces algorithmes d'apprentissage profond à des quantités massives de données vocales étiquetées.
Il est également utilisé dans Google Street View pour lire les plaques de rue. Il existe de nombreuses autres applications au sein de Google qui rapportent beaucoup d'argent et améliorent la vie des utilisateurs.
Qu'en est-il de l'apprentissage à partir de données non étiquetées ?
Nous avons vu ce résultat où plus nous pouvons faire passer à l'échelle nos modèles apprenant à partir de données non étiquetées, plus ils sont performants.
En vision par ordinateur, avant que je ne commence ce projet, les gens s'entraînaient souvent sur cinquante mille petites images. Les plus grands modèles avaient peut-être dix millions de paramètres.
En utilisant l'infrastructure cloud de Google, nous nous entraînions sur dix millions de grandes images. Au lieu de dix millions de paramètres, nous avons entraîné des modèles avec un milliard de paramètres — littéralement cent fois plus gros.
Une expérience amusante a consisté à entraîner cet algorithme sur des vidéos YouTube. Imaginez un cerveau de bébé simulé avec un milliard de paramètres ; nous lui avons fait regarder YouTube pendant une semaine.
Après une semaine, nous avons examiné notre réseau de neurones. Nous avions l'hypothèse qu'il apprendrait des détecteurs de caractéristiques pour les objets courants.
Les visages apparaissent fréquemment sur YouTube, et nous avons découvert que l'un des neurones était un détecteur de visages.
Ce neurone particulier réagissait le plus fortement aux visages. Nous avons également documenté que ce détecteur est assez invariant aux rotations et aux translations.
Qu'est-ce qui apparaît d'autre fréquemment sur YouTube ?
Des chats.
Des chats. Et voilà que nous avons trouvé un autre détecteur de caractéristiques qui avait appris à détecter les visages de chats.
Ce qui est remarquable, c'est que personne ne lui avait jamais dit ce qu'est un chat. Il avait inventé le concept de chat par lui-même.
Détecter des chats est une belle démonstration, mais à quoi cela sert-il ? Nous l'avons appliqué à la classification d'images. ImageNet est le plus grand benchmark, où la tâche consiste à décider à laquelle des vingt-deux mille classes d'objets appartient une image.
C'est une tâche très difficile. L'une des catégories est celle des pastenagues contre les raies manta.
Deux autres classes sont les triangles isocèles contre les triangles équilatéraux. La performance humaine sur cet ensemble de données pourrait être d'environ trente pour cent ; c'est très difficile.
Avant nos travaux, si vous deviniez au hasard, votre précision était de 0,005 %. L'état de l'art précédent était de 9,5 %.
Nous avons appris les caractéristiques à partir d'une tonne de vidéos YouTube non étiquetées et nous les avons combinées avec une petite quantité de données étiquetées. En faisant cela, notre précision a été de 21,3 %.
C'est une amélioration significative pour la détection d'objets en vision par ordinateur. Cette technologie est désormais déployée dans un certain nombre d'autres applications au sein de Google également.
Apprentissage Profond pour le Langage Naturel
Il y a un dernier point dont je veux parler : l'application de ces idées au langage naturel. Il y a des idées très intéressantes sur l'adaptation de ces algorithmes au langage, qui est l'une des applications les plus importantes de l'IA.
Les idées ici sont un peu différentes.
La première idée est d'apprendre des représentations de caractéristiques pour les mots.
Prenez un mot comme 'Lundi' ou 'Bretagne'. Une façon de le représenter est avec un vecteur 'one-hot', mais ce n'est pas une excellente représentation de caractéristiques.
Il existe de la littérature sur l'apprentissage de caractéristiques pour les mots, parfois appelées représentations distributionnelles. Pour chaque mot, nous allons trouver un vecteur de caractéristiques de faible dimension.
'Lundi' pourrait être représenté par une caractéristique similaire à 'Mardi' parce que ce sont des choses similaires. 'France' pourrait être représentée par un vecteur similaire à 'Bretagne'.
Maintenant, étant donné une phrase, vous représenteriez les mots à l'aide de ces vecteurs de caractéristiques que nous extrayons d'une table de correspondance.
En pratique, un vecteur de caractéristiques à cent dimensions est courant. Il existe différentes manières comme LDA, LSI ou des modèles de langage neuronaux pour trouver ces vecteurs.
Étant donné une phrase comme 'le chat s'est assis sur le tapis', nous extrayons une représentation de caractéristiques pour chaque mot.
L'approche directe consisterait à empiler un ensemble de neurones par-dessus pour apprendre des représentations pour différentes parties de la phrase.
Mais si un nœud voit les mots 'chat s'est assis sur', son travail est d'apprendre une représentation pour cette expression. Or, 'chat s'est assis sur' ne veut rien dire. Ce n'est pas une expression anglaise correcte.
Pour le langage, nous devrions concevoir un algorithme qui respecte la hiérarchie naturelle de la structure de l'arbre syntaxique.
Dans cette phrase, 'le chat' est une locution, 'le tapis' est une locution, 'sur le tapis' est une locution, et ainsi de suite.
Le rôle de ce nœud est d'apprendre une représentation pour 'sur le tapis'. C'est une expression anglaise correcte, et nous pouvons réfléchir à la manière d'en apprendre une bonne représentation de caractéristiques.
Nous avons tout appris sur les représentations utilisant des vecteurs de caractéristiques. Nous représentons les mots et les images avec des vecteurs de caractéristiques, nous allons donc représenter les locutions avec des vecteurs de caractéristiques.
Le travail de l'algorithme est de trouver un vecteur de caractéristiques pour représenter le sens de la locution 'sur le tapis'.
Ce que nous aimerions faire, c'est avoir un algorithme qui trouve pour 'le jour après mon anniversaire' une représentation similaire à 'Lundi' et 'Mardi'.
Et pour 'le pays de ma naissance', nous apprendrons une représentation proche de 'Bretagne' et 'France'.
Alors, comment faisons-nous cela ?
La façon dont nous allons apprendre ces représentations pour les locutions est d'utiliser un réseau de neurones.
Nous allons construire un réseau qui prend des nœuds enfants en entrée et produit deux choses.
Premièrement, il doit sortir un 'oui' ou 'non' pour nous dire si ces enfants doivent avoir un parent commun parce qu'ils forment une locution valide.
Deuxièmement, le réseau produit la représentation sémantique que vous voulez utiliser pour cette locution.
Étant donné une nouvelle phrase, vous pouvez appliquer le réseau et demander : 'est-ce que le chat est une locution ?'. La réponse est oui, et la représentation est peut-être le vecteur 5 2.
Est-ce que 'chat s'est assis' est une locution dans cet arbre syntaxique ? La réponse est non. 'Sur le tapis' est une locution, et sa représentation est 3 3.
Vous pouvez construire votre représentation couche par couche comme ceci jusqu'à ce que vous en ayez construit une pour tous les nœuds de votre arbre syntaxique.
J'ai fait cette animation comme si nous prenions ces décisions de manière gloutonne, mais vous pouvez en fait utiliser la programmation dynamique pour effectuer l'analyse syntaxique entièrement au sein du système.
Désormais, pour chaque mot et locution, nous avons un vecteur de caractéristiques représentant la sémantique.
Pour voir si celles-ci sont utiles, nous avons pris une phrase centrale — 'les deux ont subi de nouveaux coups hier' — et avons calculé sa représentation de caractéristiques.
Nous avons ensuite cherché dans notre corpus les phrases ayant la représentation de caractéristiques la plus similaire.
L'algorithme pense que 'frappé par toutes les turbulences' est similaire à la phrase centrale.
Il pense que 'Columbia Caroline du Sud' est similaire à 'mot inconnu Californie'. Même s'il n'a jamais vu ce mot auparavant, il sait qu'il s'agit probablement d'une ville aux États-Unis.
Voici quelques autres exemples. 'A refusé de commenter' est similaire à 'les termes de divulgation côtiers ont été retenus'. Ces deux expressions n'ont pas un seul mot en commun.
'Nous avons eu de la chance' est similaire à 'c'était chaotique'. Ces représentations de caractéristiques touchent à la fois à la syntaxe et à la sémantique.
Nous avons fait tout cela en anglais. Je pense que ces idées fonctionneront bien pour apprendre des représentations sémantiques pour le chinois également, ce qui serait très intéressant à essayer.
À quoi servent ces caractéristiques ? Le défi de la détection de paraphrase consiste à examiner deux phrases pour décider si elles signifient la même chose.
Au cours des dix dernières années, les chercheurs ont conçu manuellement une tonne de caractéristiques différentes et ont progressé jusqu'à environ 83 % de précision.
En utilisant cette représentation, nous sommes capables de surpasser immédiatement toute cette conception manuelle.
Nous avons appliqué cela à une tonne de tâches, de la classification de texte à la recherche de sentiments. Sur presque tous les benchmarks auxquels nous l'avons appliqué, cela a fonctionné incroyablement bien.
Un benchmark consiste à juger si un texte a un sentiment positif ou négatif.
C'est une tâche sémantique difficile car il existe des expressions comme 'pas bon', qui signifient quelque chose de totalement différent de 'bon'. L'algorithme doit apprendre automatiquement à combiner les mots pour trouver la bonne représentation.
Nous commençons donc à appliquer ces types de représentations à d'autres problèmes textuels également.
Philosophie et Avenir de l'Intelligence Artificielle
Pour conclure, je voudrais dire quelques mots sur ma philosophie et sur les raisons pour lesquelles ces algorithmes me passionnent.
Certaines personnes regardent une application et demandent quelle part de la performance est due à l'ingéniosité humaine par rapport aux données ou à l'algorithme d'apprentissage.
Pour de nombreux problèmes, les données et l'apprentissage contribuent davantage. Certaines personnes regardent un instantané et disent que nous devrions simplement investir davantage dans la conception manuelle.
Mais je pense qu'il est naïf de ne regarder qu'un seul instantané. Si au contraire vous regardez l'histoire,
L'ingéniosité humaine a lentement augmenté les performances, mais la contribution des données a augmenté à un rythme beaucoup plus rapide car nous avons tous accès à beaucoup plus de données aujourd'hui.
Les algorithmes continueront de s'améliorer, mais ils seront limités.
Le volume de données dont nous disposons croît si rapidement que je pense que les algorithmes qui comptent vraiment sont ceux qui peuvent continuer à exploiter ce volume massif.
Je pense que c'est le secret de la réussite de l'apprentissage profond : il s'agit d'une classe d'algorithmes qui exploitent d'énormes quantités de données et leurs performances s'améliorent à mesure qu'on leur en donne plus.
Personnellement, je me concentre sur les algorithmes capables d'exploiter le volume croissant de données, car c'est ce qui, selon moi, est crucial pour que votre travail reste pertinent.
L'apprentissage profond est l'idée d'apprendre nos caractéristiques plutôt que de les concevoir manuellement à l'aide de données étiquetées ou non étiquetées.
Il y a bien longtemps, quand j'étais à l'école secondaire, à quinze ou seize ans, j'ai toujours voulu travailler sur l'IA.
Je pensais que construire des machines intelligentes était la chose la plus cool qu'on puisse faire.
Puis je suis allé à l'université, j'ai appris à quel point l'intelligence artificielle est réellement difficile, et j'ai abandonné.
Le domaine de l'IA existe depuis plus de cinquante ans, et pendant la majeure partie de ce temps, nos progrès vers la construction de machines véritablement intelligentes ont été très limités.
Ainsi, pendant la majeure partie de ma vie professionnelle, j'étais en fait assez pessimiste quant au rêve de l'IA.
Ce n'est qu'il y a environ six ans, en découvrant les derniers résultats en neurosciences et en apprentissage automatique, que j'ai eu l'impression que nous avions peut-être une chance.
Ce ne sera pas facile, et cela pourrait prendre des décennies. Mais en voyant la capacité de nos algorithmes à faire des choses incroyables et à imiter le cerveau, j'ai l'impression que nous pourrions bien avoir une chance de progresser.
Merci beaucoup.
À court terme, je suis encouragé par le fait que les algorithmes d'apprentissage profond chez Google, Baidu et ailleurs nous aident déjà à faire fonctionner de nombreuses applications.
Ressources et Conclusion
Enfin, je sais qu'une conférence comme celle-ci est de très haut niveau. Quand vous rentrerez chez vous et vous demanderez comment faire fonctionner cela vous-même, une conférence n'est pas le meilleur support.
Mes étudiants et moi avons consacré beaucoup de travail à un tutoriel sur l'apprentissage profond. Si vous le suivez, vous aurez implémenté une série d'algorithmes de pointe et les aurez fait fonctionner par vous-même.
Récemment, grâce à Dongkan qui a recruté une équipe, il existe désormais une traduction chinoise de ce wiki également.
J'espère que pour ceux d'entre vous qui souhaitent poursuivre dans ce domaine, le suivi de ce tutoriel vous mettra à la pointe de l'actualité.
Sur ce, permettez-moi de vous dire merci beaucoup.