Decouverte du Deep Learning sur le Cloud AWS

December 14, 2017
Slides : http://chilp.it/3ab82b5 Dans cette session, nous vous présentons les bases du Deep Learning. En quoi diffère t-il du Machine Learning traditionnel ? Quels sont les principaux problèmes que le Deep Learning peut résoudre : vision artificielle, traitement du langage naturel, etc. ? Comment fonctionnent les réseaux de neurones ? Quelle infrastructure faut-il déployer pour les entrainer et les utiliser ? Toutes ces questions et d’autres sont abordées sans théorie et jargon inutiles, avec la participation d’une experte de la société NVIDIA. ✚ Retrouvez tous nos événements : https://aws.amazon.com/fr/events/ ✚ Rendez-vous sur notre site internet : http://amzn.to/2ktrf5g ✚ Suivez-nous sur Twitter : https://twitter.com/aws_actus

Transcript

Aujourd'hui, nous avons la chance d'avoir une invitée. Bonjour Myriam, je vais te laisser te présenter. Je suis Myriam Demout et je suis solution architecte, architecte de solutions chez Nvidia. Voilà, Nvidia qui fabrique entre autres des GPU, qui sont une arme de prédilection quand on fait du deep learning. On en parlera tout à l'heure. Au programme de cet après-midi, nous allons commencer par une introduction au deep learning et essayer de démystifier un peu ces sujets qui sont malheureusement souvent vulgarisés de manière assez incorrecte. Puis, nous allons rentrer progressivement dans les détails du deep learning. Qu'est-ce qu'un modèle de deep learning ? Comment l'entraîne-t-on ? Qu'est-ce qu'il faut pour l'entraîner ? Dans le deuxième webinar, nous rentrerons encore plus dans les détails. Nous étudierons une librairie open source qui s'appelle Apache MXNet, qui permet assez facilement de construire des modèles de deep learning et de les entraîner. Donc, les concepts généraux dans ce premier webinar, et du code, du code, et du code dans le deuxième webinar. Eh bien, allons-y. On va commencer par quelques définitions. Comme je disais à l'instant, on lit un peu tout et n'importe quoi sur l'IA et le deep learning depuis des mois. Donc, il est important de poser précisément les concepts. Ensuite, je voudrais revenir sur ce que j'appelle les 5 mythes de l'IA, qui sont 5 erreurs fondamentales ou 5 incompréhensions fondamentales que je constate régulièrement et auxquelles j'aimerais vraiment apporter des réponses. Ensuite, nous parlerons des bases du deep learning, et Myriam vous parlera également de la vision du deep learning qu'a NVIDIA. Pour ma part, je vous parlerai de la partie un peu plus théorique sur un modèle, comment on l'entraîne, etc. Nous conclurons avec des informations sur la dernière génération de GPU Nvidia qui s'appelle Volta, un monstre de puissance bien utile pour le deep learning et disponible sur AWS. Bien sûr, comme d'habitude, nous répondrons à vos questions. Les définitions, commençons par le commencement. L'intelligence artificielle est la discipline chapeau. C'est une discipline qui existe depuis un certain temps et dont l'objectif est de concevoir des systèmes capables de démontrer un comportement humain ou humanoïde. Par exemple, la capacité à comprendre le langage naturel, la capacité à parler, donc à comprendre le langage parlé et à s'exprimer également en langage naturel, la capacité à démontrer des raisonnements complexes au-delà d'une programmation explicite. Et puis, quand on parle de système prédictif, la capacité à démontrer une intuition, la capacité à prédire le futur de manière probabiliste, mais avec un niveau de précision le plus élevé possible. Cette discipline est vaste. Et à l'intérieur de l'intelligence artificielle, il y a un domaine qui s'appelle le machine learning, dont on a déjà pas mal parlé depuis le début de la semaine. Le machine learning, vous l'avez compris, c'est permettre aux machines d'apprendre des comportements à partir d'un jeu de données sans être explicitement programmées. On a vu par exemple comment faire de la classification, comment faire de la recommandation, comment faire de la régression, etc., juste en entraînant un algorithme sur un jeu de données. Et au sein du machine learning, il y a encore une autre discipline qui s'appelle le deep learning, qui a le même objectif, c'est-à-dire apprendre des comportements automatiquement sur la base d'un jeu de données. Mais à la différence du machine learning, quand on fait du deep learning, on travaille avec des jeux de données où les features, au sens machine learning du terme, ne sont pas explicitement définis. Quand on fait du machine learning, dans les exemples qu'on a pu faire jusqu'ici depuis le début de la semaine, on avait des données, on va dire en colonne, pour dire les choses simplement, avec une signification précise de chaque colonne, et on les combinait pour construire un modèle. Lorsqu'on travaille sur des images, de la vidéo ou de la voix, on n'a pas ces données structurées, on a des données non structurées, et il faut se débrouiller pour en extraire ce qui est intéressant. C'est le rôle du deep learning, et en particulier des réseaux de neurones, dont nous allons beaucoup parler aujourd'hui, d'identifier au sein du jeu de données quels sont les features qui sont importants et de les apprendre automatiquement. C'est vraiment là la différence entre le machine learning et le deep learning. Le deep learning va détecter et construire les features automatiquement, là où le machine learning avait besoin qu'on les lui prépare. En avant pour les cinq mythes de l'IA. Je sors ma masse et je vais essayer de frapper sur ces murs en espérant qu'ils tombent. Le premier mythe, c'est que l'IA est la mode, le parfum du mois, le plat du jour, tout ce que vous voulez. Et là, comment j'ai trouvé ces couvertures ? Vous pouvez faire le test, vous allez dans Google, vous tapez "AI Magazine Covers". Bon, alors ça, je l'ai fait il y a quelques semaines, vous en trouverez d'autres. Mais il y en a littéralement des dizaines, et il suffit de voir le kiosque au coin de la rue pour en voir d'autres. Généralement avec des robots, ce qui m'agace particulièrement, car la robotique et l'IA sont deux sujets complètement différents. Mais bon, on fait aussi cette confusion avec la robotique, passons. Et puis, au-delà des couvertures de magazines, on est bombardé d'infographiques. J'ai une saine détestation des infographiques. Ils ont tendance à polluer mon flux Twitter, mon flux LinkedIn. C'est la mode, le truc du moment. On a l'impression qu'on découvre ça. Et je pense que c'est une erreur fondamentale, car l'IA est un sujet qui date de la fin des années 50. C'est un sujet qui a 60 ans, qui est quasiment aussi vieux que l'informatique. La date de naissance de l'IA peut être placée en 1956 lors d'un séminaire organisé par John McCarthy et auquel a participé également Marvin Minsky, deux grands noms de l'IA qui ont ensuite fait des carrières prestigieuses. McCarthy a inventé le langage LISP, Minsky a fondé le laboratoire d'IA du MIT. C'est une anecdote amusante, il a conseillé Stanley Kubrick pour le design de l'IA qu'on voit dans "2001, l'Odyssée de l'espace", c'était en 68, ça date de l'IA. Accessoirement, les deux ont eu un Turing Award, qui est l'équivalent du prix Nobel pour l'IA. C'est scandaleux qu'il n'y ait pas de prix Nobel en informatique, ça viendrait peut-être un jour. En tout cas, vous voyez, cette discipline existe depuis des décennies. Elle a été menée par des grands visionnaires comme McCarthy, Minsky et d'autres. Il ne s'agit donc pas de découvrir en 2015, 2016, 2017, qu'il y a une discipline qui s'appelle l'IA et que peut-être c'est bien. Il y a des décennies de travail, des décennies de publications. Certes, les choses se sont accélérées depuis quelques années, et Myriam vous expliquera pourquoi tout à l'heure, mais en tout cas, c'est une discipline qui existe depuis des décennies. Le mythe numéro 2, qui est sans doute celui qui m'énerve le plus, c'est que l'IA est de la sorcellerie, du voudou, c'est compliqué. Le sous-titre de ça, quand on lit entre les lignes des gens qui essaient de vous expliquer que c'est très compliqué, très très très très compliqué, c'est que oui oui oui c'est très compliqué et que vous, vous n'êtes pas assez intelligent pour comprendre. C'est un argument qui me déplaît fondamentalement, d'autant plus que l'IA n'est absolument pas de la sorcellerie. L'IA, comme nous allons le voir tout à l'heure et dans les webinars qui vont suivre, c'est surtout du code. Oui, il y a un peu de maths, surtout quand on travaille dans les couches les plus basses, mais c'est surtout du code. On va utiliser des outils, des librairies comme MXNet, TensorFlow, hier on a utilisé Spark, Hadoop, etc. Et puis, ce sont des puces pour faire du calcul, soit des CPU comme la dernière génération d'Intel, les Skylake, soit des GPU comme le dernier GPU d'Nvidia, Volta, dont nous parlerons plus en détail tout à l'heure. Mais en aucun cas, ce n'est de la sorcellerie, ça reste de l'informatique. Si vous savez faire 50 lignes de Python, vous pouvez faire du deep learning. Il n'y a pas besoin de recourir à du jargon et du charabia pour dire que c'est trop compliqué pour vous, monsieur le client. Le mythe numéro 3, qui est finalement celui qui m'énerve le plus maintenant que j'y pense, c'est la fameuse licorne cognitive. Ce sont les belles promesses scintillantes qu'un seul système cognitif, un mot que je déteste, va résoudre automagiquement tous vos problèmes. Donc, venez, monsieur le client, jetez vos données dans notre chaudron cognitif, touillons un peu, et on va extraire de la valeur. Et puis, on sait tout faire. On sait tout faire, on sait faire de la CRM, on sait guérir le cancer, on sait gagner les jeux de télé, etc. Voilà, tout ça, ce sont des fausses promesses. Ce n'était pas vrai pour le big data, ce n'est pas vrai non plus pour l'IA. Aujourd'hui, il n'y a aucune technologie capable d'automatiquement résoudre vos problèmes et d'extraire de la valeur business de vos jeux de données. C'est juste que ça ne marche pas comme ça. Ces discours très marketés, pleins de paillettes, ne sont pas la réalité de l'IA aujourd'hui. L'IA, c'est un ensemble de problèmes. Vous l'avez vu, le machine learning et le deep learning ne sont qu'une petite partie de l'IA. Il y a plein d'autres domaines comme la vision artificielle, le texte-to-speech, le speech-to-text, le traitement du langage naturel, etc. Il y a toute une classe de problèmes qui nécessitent des outils et des algorithmes différents. Depuis le début de la semaine, nous avons vu que nous avons utilisé du Python, nous allons faire du MXNet, demain nous ferons autre chose. Il y a une palette d'outils, une stack assez riche qu'il faut savoir utiliser pour résoudre un problème ou un autre. Il n'y a pas de chaudron magique où on jette les données et on obtient des résultats en 15 secondes. Ne vous faites pas avoir, c'est vraiment une plaisanterie. Le mythe numéro 4, c'est que l'IA est réservée aux cas d'usage bizarres. On continue à faire de l'IT traditionnel pour les sujets de tous les jours, et puis, quand on a vraiment un problème bizarre, on essaie de faire de l'IA. C'est un non-sens, car l'IA est particulièrement performante sur des problèmes intuitifs. Un enfant de 5 ans peut reconnaître un chat, un chien, et un tigre sur une photo, trier des Lego par couleur, entourer les silhouettes des personnes et tracer des boîtes autour des objets. Ces comportements sont faciles à faire, mais difficiles à apprendre à un ordinateur et à résoudre de manière traditionnelle. L'IA est particulièrement performante pour traiter des problèmes que l'on peut résoudre intuitivement, mais à une échelle infiniment plus grande et plus rapide qu'un humain. Nous allons vous donner des exemples de ces services de haut niveau qui ont été annoncés à reInvent. Des services comme Recognition Video, capable de comprendre du contexte au sein d'un flux vidéo, Comprehend, capable d'extraire des concepts et des entités à partir d'un texte, Translate, qui fait de la traduction automatique, Transcribe, qui fait du speech-to-text. Ce sont des problématiques simples, un enfant de 7 ans sait faire du speech-to-text, vous lui faites une dictée, c'est ça. L'IA est capable de traiter ces problèmes à l'échelle et automatiquement, et c'est là qu'elle est particulièrement puissante. Le dernier mythe, c'est que l'IA n'est pas pour la production, c'est un truc de geek, de chercheur, de labo, et qu'on ne peut rien faire de sérieux avec tout ça. C'est une erreur, l'IA est du business. Elle peut être utilisée dans votre business, et elle est devenue un business en soi. Il suffit de voir le succès d'Nvidia depuis des années, qui existait bien sûr avant que le GPU devienne une arme de deep learning, mais l'ampleur prise par Nvidia est fortement liée à ce sujet. Il y a tout un écosystème qui se constitue autour de ça, et si vous êtes fournisseur de technologies ou de services, vous avez peut-être intérêt à vous y insérer. Sur AWS, nous avons aujourd'hui un grand nombre de clients qui font de l'IA. On pourrait évidemment parler de Netflix, qui personnalise l'artwork des films en fonction de vos goûts et de votre historique. FINRA, qui fait du machine learning à très grande échelle pour détecter des transactions financières suspectes. Duolingo, qui utilise Amazon Polly pour faire de la synthèse vocale. Capital One, qui a développé un chatbot pour permettre à ses clients de consulter leurs services bancaires via une interface vocale. Tous ces clients, dont la plupart des noms nous sont connus, sont en production aujourd'hui sur des solutions d'IA, soit de haut niveau, soit faites en interne. Il ne s'agit pas de prototypes ou de bricolage. Je vais passer la parole à Myriam, qui va nous parler de l'impact du deep learning dans l'industrie et de la contribution qu'Nvidia peut apporter à ses clients. En réalité, aujourd'hui, on peut voir le deep learning partout. Par exemple, la navette autonome qui circule à La Défense, c'est du deep learning. On le voit aussi utilisé par certains médecins pour la détection des cellules cancéreuses, l'imagerie médicale, et la tri des cellules pour savoir si elles sont cancéreuses ou non. On le voit dans les voitures autonomes, mais aussi dans les voitures qui se garent seules. On le voit dans la reconnaissance faciale quand vous postez une image et qu'on est capable de dire que vous êtes sur cette image sans que vous l'ayez dit. Il y a même une pub de téléphone portable, où le seul message est que l'appareil contient de l'intelligence artificielle, ce qui devient un argument de vente. Il y a aussi une nouvelle situation où l'IA devient un argument de vente pour des produits du grand public. C'est intéressant. Mais en plus de ça, on peut vraiment l'utiliser partout. Par exemple, un collègue avait des chats dans son jardin et a décidé d'utiliser un arrosage automatique pour les faire partir. Le problème, c'est que l'arrosage se déclenchait aussi quand il y avait du mouvement, et il se faisait arroser lui-même, ainsi que ses enfants et le facteur. Il a donc mis en place un deep learning pour entraîner un réseau de neurones à reconnaître les chats sur des images. Une fois entraîné, il a connecté le réseau à son arrosage automatique, et maintenant, quand les chats arrivent, l'arrosage se déclenche. C'est une application inattendue, mais cela montre que le deep learning est prêt à être utilisé dans le quotidien. Vous allez me dire que les réseaux de neurones existent depuis très longtemps, mais pourquoi maintenant ? C'est parce que même si on avait ces réseaux de neurones, on n'avait ni les données nécessaires pour les utiliser, ni la capacité matérielle pour faire les calculs nécessaires. Avec l'avènement du Big Data et l'arrivée des GPU capables de faire ces calculs, la conjonction de ces trois éléments a fait que le deep learning est ce qu'il est aujourd'hui. Comment ça marche ? Le deep learning, c'est apprendre des comportements sans être explicitement programmé. Avant, pour reconnaître une voiture, il aurait fallu qu'un expert vienne expliquer comment définir la voiture, les courbes, etc. Ça aurait pris beaucoup de temps et nécessité beaucoup de code spécifique. Avec le deep learning, on n'a plus besoin d'expliquer explicitement ce qu'est une voiture. On prend des photos de voitures, on les fournit au réseau de neurones, et on lui dit que c'est une voiture. On lui dit ce qu'on souhaite comme résultat, et on le laisse apprendre tout seul. C'est l'extraction automatique des features. L'avantage, c'est que par la suite, si on a besoin d'étendre ce domaine, on n'a pas besoin de réécrire un nouveau code. Le réseau est capable de reconnaître d'autres voitures, d'autres modèles, d'autres couleurs, etc. On peut généraliser à d'autres applications. Le deep learning se fait en deux phases. La phase d'apprentissage, appelée training, où on fournit au réseau de neurones des images et il doit apprendre à reconnaître des choses. La phase de prédiction, appelée inference, où il n'apprend plus et doit juste fournir un résultat. Par exemple, on lui montre de nouveaux échantillons et on lui demande ce que c'est. Si c'est un problème de classification, on voit encore un chat, et après, on déclenche l'arrosage automatique. Mais pourquoi les GPU ? Les GPU sont massivement parallèles et sont faits pour faire des calculs de matrices, ce qui est essentiel pour les réseaux de neurones. On voit sur le graphique des résultats du challenge ImageNet, où le taux d'erreur a considérablement baissé grâce aux GPU. En 2010, le taux d'erreur était de 28%, aujourd'hui il est de 2,25%, ce qui est mieux que l'erreur humaine de 5%. En 2010 et 2011, aucune équipe n'utilisait les GPU, mais à partir de 2015, toutes les équipes les utilisaient. C'est parce que les GPU sont incontournables pour paralléliser les gros calculs de matrice nécessaires pour le training sur de gros jeux de données. Ils sont très bons pour les opérations matricielles, et on peut les utiliser quel que soit le contexte et le niveau, grâce à des librairies de bas niveau comme cuDNN ou des frameworks comme MXNet, TensorFlow, Theano, Caffe, etc. Très bien, merci beaucoup Myriam pour cette première partie. Nous allons maintenant rentrer dans les bases du deep learning. Le deep learning, c'est le réseau de neurones, et il faut expliquer ce qu'est un neurone. Un neurone est une construction mathématique qui essaie d'imiter le neurone biologique. Un neurone biologique a des connexions, reçoit des entrées, et en fonction du poids associé à ces entrées, il est activé ou non, envoyant un courant électrique. Avec un neurone mathématique, on a des entrées associées à des poids, et on fait une opération appelée multiply and accumulate, où on multiplie chaque entrée par son poids et on fait la somme. Cette valeur brute est ensuite passée à une fonction d'activation, qui introduit une non-linéarité pour décider si le neurone est activé ou non. Il y a plusieurs fonctions d'activation. Par exemple, la fonction binaire, où si la valeur est négative, le neurone n'est pas activé, et si elle est positive, il est activé avec une valeur de sortie. Aujourd'hui, la fonction la plus utilisée est la ReLU, qui considère que si la valeur est négative, le neurone n'est pas activé, et si elle est positive, on renvoie cette valeur. C'est un neurone, et on combine ces neurones pour construire des réseaux de neurones. Voici un réseau simple avec une couche d'entrée, une couche cachée (fully connected), et une couche de sortie. Chaque neurone d'entrée est connecté à tous les neurones de la couche intermédiaire, et chaque neurone de la couche intermédiaire est connecté à toutes les sorties. Pour faire du deep learning, il faut beaucoup de données. On construit un dataset avec des échantillons, où chaque échantillon a un certain nombre de features correspondant au nombre de neurones sur la couche d'entrée. On a une matrice X qui contient les échantillons d'entrée, et pour chaque échantillon, on a un label. Dans un problème de classification, chaque label correspond à une catégorie, et il faut autant de neurones de sortie que de catégories. Lorsqu'on travaille avec des catégories, on utilise du one-hot-encoding, où on transforme les labels en vecteurs. Par exemple, si y1 est égal à 2, on met un 1 à la position 2 du vecteur, et 0 partout ailleurs. Si on essaie de voir notre réseau en action, on place un échantillon sur la couche d'entrée et on s'attend à avoir des probabilités sur la couche de sortie. Par exemple, si un échantillon doit avoir 100% de chance d'être de la classe numéro 2, le réseau doit apprendre cela. On mesure la précision, qui est le nombre de prédictions correctes divisé par le nombre total de prédictions. On ne le fait pas échantillon par échantillon, mais pour des groupes d'échantillons. On entraîne batch par batch, donc 32 par 32 ou 64 par 64. On prend 64 échantillons, on les fait passer dans le réseau, on additionne toutes les erreurs, et on a une erreur globale pour le batch. Le but du processus d'entraînement est de minimiser cette erreur pour que la valeur prédite soit la plus proche possible de la valeur attendue. On ajuste les poids progressivement, comme on le faisait avec les télés analogiques. On tourne un peu à droite, un peu à gauche, jusqu'à ce qu'on se rapproche de la bonne image. En deep learning, on ajuste des dizaines, des centaines de millions de paramètres automatiquement. Le processus de training se déroule ainsi : on découpe le dataset en batch, on prend un premier batch, on le fait passer dans le réseau, on mesure l'erreur totale de ce batch, et on applique l'algorithme de backpropagation qui ajuste automatiquement les poids couche par couche dans une direction qui réduit l'erreur. On fait cela pour chaque batch, et progressivement, on se rapproche des bonnes valeurs de poids. Une fois qu'on a fait cela pour tout le dataset, c'est ce qu'on appelle une époque. On peut faire 10, 20, 50, 100, 200 époques. Cela explique pourquoi ces entraînements prennent du temps et nécessitent de la puissance de calcul. Les paramètres importants lors de l'entraînement sont la taille de batch, le nombre d'époques, et le learning rate, qui détermine à quelle vitesse on ajuste les poids. Si on ajuste trop rapidement, on ne converge pas ; si on ajuste trop lentement, cela prend trop de temps. On utilise des algorithmes d'optimisation, comme SGD, qui calculent des gradients pour savoir dans quelle direction ajuster les poids. L'objectif est de minimiser la fonction d'erreur, qui est paramétrée par tous les poids du réseau. On fait cela des milliers de fois jusqu'à atteindre une erreur minimale. Pour savoir si l'apprentissage fonctionne, on utilise un jeu de données de validation à la fin de chaque époque. On passe ce jeu de données dans le modèle intermédiaire et on regarde son score, appelé validation accuracy. Si la validation accuracy monte puis commence à baisser, c'est un signe d'overfitting. On s'arrête à ce moment-là et on garde la version du modèle qui a la meilleure validation accuracy. Sur AWS, on fournit une image, la Deep Learning AMI, qui contient tous les outils et librairies préinstallés. On la trouve dans la Marketplace AWS, on choisit la taille et le type d'instance, et tout est prêt. Si c'est une instance GPU, les drivers Nvidia et les librairies CUDA sont déjà installés. Une des familles d'instances EC2 sur lesquelles on peut travailler est la famille P3, qui contient le Volta. Volta est la nouvelle architecture GPU avec des unités spéciales pour le deep learning, appelées Tensor Core. Ces unités permettent de calculer la multiplication de deux matrices et de les accumuler dans une troisième. Les deux matrices d'entrée sont de type FP16, mais l'accumulation peut se faire en 32 bits. Cela permet d'aller 60% plus vite sans perdre de précision. Les TensorFlow Core peuvent être utilisés via CUDA, cuDNN, cuBLAS, ou directement dans les frameworks optimisés. Pour le déploiement, on peut utiliser les instances P3 d'AWS, une DGX 1 Volta, ou une DGX Station Volta. La Titan V est une version grand public de Volta, très haut de gamme, qui convient aussi bien aux jeux vidéo qu'au deep learning. On peut utiliser Nvidia GPU Cloud (NGC) pour faciliter l'utilisation des GPU, avec des conteneurs optimisés pour les Tensor Core. Si vous voulez en savoir plus, vous pouvez consulter nvidia.com/dli en français, des QuickLab pour des formations en ligne, ou des workshops. Sur AWS, la page de haut niveau sur le machine learning, le blog d'IA, et la page dédiée au deep learning sur le site d'NVIDIA contiennent des informations supplémentaires. Mon blog sur Medium contient des articles et des tutos sur le deep learning et MXNet. Pour le sondage, 5 est la meilleure note, 1 la moins bonne. Si vous avez des questions, comme celle de Jonathan sur l'achat d'une Titan pour le deep learning, la réponse est non. Vous pouvez faire du deep learning sans GPU sur des petits datasets. Si vous avez un GPU Nvidia récent, vous pouvez l'utiliser avec MXNet, TensorFlow, etc. La solution Volta sur AWS coûte 3,30$ de l'heure pour une instance P3.2xlarge, et on peut utiliser des instances spot pour réduire les coûts. Pour la labellisation de datasets, vous pouvez utiliser des datasets publics comme ImageNet, des services comme Amazon Mechanical Turk, ou des outils de labellisation fournis par des startups. Merci beaucoup pour votre attention, et on se retrouve dans 4 minutes pour attaquer le code sur MXNet.

Tags

Deep LearningMachine LearningGPU ComputingNVIDIAArtificial Intelligence Myths