Bonjour à tous, bienvenue pour cette session. Ne perdons pas de temps. On va parler de quatre sujets. Le premier sujet, c'est pourquoi l'âge du deep learning est arrivé ? Pourquoi maintenant ? Pourquoi depuis quelques années on ne parle que de ça ? Est-ce que c'est bidon ? Est-ce que c'est vrai ? Qu'est-ce qui fait que c'est vrai ? Ensuite, on va regarder un certain nombre d'applications du deep learning. Parce que la technologie pour la technologie, bon c'est bien. Mais on essaie de réaliser des applications. Donc je vais vous montrer un ensemble de projets, un ensemble d'utilisation. Pour commencer, j'aimerais juste rappeler deux ou trois définitions, pour être sûr qu'on parle tous bien de la même chose. L'intelligence artificielle, c'est concevoir des systèmes qui vont être capables de présenter des comportements de type humain. Par exemple, la capacité à parler, la capacité à comprendre le langage naturel, la capacité à interagir avec nous en langage naturel, la possibilité pour des machines de mener des raisonnements complexes, pas juste de suivre des instructions programmées par un développeur. Et idéalement, la capacité à prédire, la capacité à avoir de l'intuition et la capacité à trouver des solutions à des problèmes seuls, sans être explicitement programmés. L'IA est une science qui existe depuis des décennies et qui contient plein de sous-domaines. Et l'un de ces domaines, c'est le machine learning. La traduction française, apprentissage automatique, est plutôt bonne, puisque c'est exactement ce qu'on veut faire. Le machine learning, c'est permettre à des machines d'apprendre à partir de jeux de données sans être explicitement programmées. On ne va pas écrire du code explicite. On va utiliser des algorithmes standards qu'on va appliquer sur des jeux de données et la machine seule va apprendre à prédire ou à classer ce jeu de données. Et à l'intérieur du machine learning, il y a une sous-catégorie qui s'appelle le deep learning, qui vise elle aussi à permettre aux machines d'apprendre automatiquement, mais cette fois à apprendre sur la base de jeux de données très complexes, très peu structurés, où les features ou les variables ne sont pas explicites.
Pour faire du deep learning, il faut des algorithmes, mais il faut aussi des jeux de données. Il faut des jeux de données digitaux, ce qui pendant très longtemps a été un problème. Vous vous souvenez de la taille maximale du disque dur dans les années 90 ? Avoir des jeux de données digitaux tout court et avoir des jeux de données suffisamment gros pour permettre à des réseaux de neurones d'apprendre, c'est une des marques de fabrique du deep learning. L'indisponibilité de ces jeux de données ne permettait pas d'obtenir des résultats, même avec des algorithmes intéressants. Quand on a commencé à avoir des jeux de données digitaux, dans les années 90, 2000, des photos, etc., et qu'on a commencé à les appliquer sur des réseaux de neurones, on s'est trouvé confronté au problème de la puissance de calcul. Vous vous souvenez du processeur que vous aviez dans votre PC, même au début des années 2000 ? Cette combinaison des algorithmes et des jeux de données nécessite une puissance de calcul assez importante. Ce sont des opérations mathématiques qui ne sont pas hyper compliquées, mais qui se font à grande échelle. Et donc il faut de la puissance de calcul, et avec un CPU seul, on n'y arrive pas. On peut en mettre 1000 en parallèle, mais il faut encore en avoir 1000 en stock, il faut pouvoir gérer ces 1000 machines, etc. Le scaling des plateformes CPU sur l'apprentissage était un problème. Ce qui a tout changé, c'est l'apparition, l'utilisation des GPU. Ça a commencé au milieu des années 2000, ça s'est vraiment généralisé à la fin des années 2000, l'utilisation des GPU pour faire du calcul scientifique et en particulier pour faire du deep learning. Et ça, ça a vraiment été une étincelle qui a permis de commencer à travailler. Les chercheurs ont commencé à travailler, mais quid des ingénieurs, des développeurs, qui veulent intégrer de l'intelligence artificielle dans des applications de la vraie vie ? Pendant longtemps, ça a été compliqué, et puis progressivement, on a vu apparaître des outils, des librairies comme TensorFlow, MXNet, etc., qui ont ouvert au plus grand nombre, en tout cas à la communauté des développeurs, la possibilité de faire du deep learning sans être dans un labo de recherche et en utilisant des briques sur étagères.
Aujourd'hui, on a beaucoup de clients qui font du machine learning et de l'IA sur AWS. Je donnerai quelques exemples au fil de la présentation. C'est une présentation plutôt technique, donc je vais être un peu plus léger sur les cas d'usage, mais je vous donnerai les références pour en savoir davantage sur tous ces différents cas d'usage. Notre stack aujourd'hui ressemble à ça. Si vous avez assisté à la session d'Alexandre tout à l'heure, il a dû vous parler de la couche du haut. Lex, Polly, qui y était, juste par curiosité ? Ok, pas mal de monde, c'est ça, c'est bien. Il a dû vous parler de ces services-là, qui sont des services super simples à utiliser, qui ne nécessitent aucune expertise, en tout cas aucune expertise d'IA. On a une couche de services dont je ne vais pas du tout parler aujourd'hui, qui est la couche plateforme, la couche machine learning manager, Spark, MapReduce, etc., qui vous permet de vous débarrasser de l'infrastructure, mais d'avoir le contrôle sur la construction des modèles, etc. Et puis la couche dont je vais parler aujourd'hui, qui est la couche vraiment la plus basse en termes de soft, qui va vous permettre d'exécuter des modèles, d'entraîner et d'utiliser des modèles bâtis sur l'une ou l'autre de ces librairies open source. Et bien sûr, en bas, on a de quoi faire tourner tout ça. On a des instances CPU, des instances CPU plus GPU, des instances CPU plus FPGA, on est capable de faire des déploiements IoT et bien sûr on est capable de déployer des modèles aussi sur mobile.
Je dirais juste un mot de hardware avant de passer directement au deep learning. On a annoncé très récemment deux nouvelles familles d'instances. Par ordre chronologique, donc fin octobre, on a annoncé le support pour le nouveau GPU d'NVIDIA, le Volta, qui est un monstre absolu. On est le seul fournisseur cloud à en disposer aujourd'hui. Il est disponible dans trois tailles d'instances. Et en fait, oui, il y a deux jours, on est très heureux d'avoir lancé la nouvelle famille de processeurs Intel qui est basée sur l'architecture Skylake. Chez nous, c'est ce qu'on appelle la famille C5, qui vont vous fournir un gain significatif de performance par rapport à l'ancienne famille et qui ont un certain nombre d'optimisations matérielles, vectorielles pour les maths en général. Et bien sûr, on va mettre ça à profit pour du deep learning. Donc AWS, c'est pas juste du soft, c'est pas juste des services, c'est aussi beaucoup d'innovation hardware.
Passons à quelques exemples maintenant. Le hello world du deep learning, c'est de classer des images. On va faire un petit exemple. Là, j'ai pris deux images qui sont issues d'un dataset qui s'appelle ImageNet. Si vous faites du deep learning, vous connaissez forcément ImageNet. Ce sont deux beaux chiens. La question n'est pas est-ce que c'est le même chien, mais est-ce que c'est la même race de chien ? En termes de deep learning, est-ce que ces deux images appartiennent à la même catégorie ? Qui pense que c'est la même race ? Qui pense que ce n'est pas la même race ? Et qui n'a pas d'idée même si je lui laissais un quart d'heure pour réfléchir ? Et les autres se disent, mais pourquoi ça parle de chien cette question ? La réponse est non, ce n'est pas la même race. J'en sais rien. Ne culpabilisez pas si vous êtes trompé. J'ai fait ce test un peu partout où je passe. Et quand je le fais en Scandinavie ou au Canada, ils se trompent tout autant qu'en Italie ou ailleurs. So much pour les Nordics. Mais donc ce n'est pas le même chien. C'est compliqué, on pourrait en débattre pendant longtemps, mais c'est compliqué de classer des images.
Voici les résultats d'une compétition qui a lieu tous les ans, basée sur le dataset ImageNet, donc il y a 1,2 millions d'images et 1000 catégories. Le but est de construire un modèle qui classe le plus précisément possible les images. On a commencé en 2010 avec un taux d'erreur de 28%, et puis vous voyez au fil des années ça descend. On arrive à 2016 avec un peu moins de 3%, 3% d'erreur. Les barres rouges représentent le nombre de couches présentes dans le modèle qui a gagné, le nombre de couches de neurones. On part de zéro, enfin une seule couche en fait, et puis ça monte progressivement. On voit qu'il y a une corrélation entre la profondeur des réseaux de neurones et leur capacité à prédire correctement. 3% d'erreur, c'est bien, c'est pas bien ? À votre avis, un humain moyen, quel score ferait-il ? Un humain moyen dans un état normal, voilà, je vous donne 1,2 millions d'images à classer dans 1000 catégories, combien d'erreurs allez-vous faire ? En supposant que vous arriviez à rester concentré pendant 1,2 millions d'images, ce qui évidemment n'est pas le cas. Qui dit plus de 10% ? Qui dit moins de 3% ? Vous n'avez pas foi en la race humaine, c'est triste. La réponse est 5%, donc vous avez raison. Le taux d'erreur est de 5% en moyenne. En pratique, ça serait beaucoup plus. Et puis il y a une question à laquelle on ne répond pas, c'est combien de temps il vous faudrait pour classer ces 1,2 millions d'images en 1000 catégories. Sans doute beaucoup plus de temps qu'une famille de GPU affamée. Ce problème-là, aujourd'hui, est considéré comme résolu. On admet que les réseaux de neurones, aujourd'hui, sont capables de classer des images bien mieux que des humains.
Par exemple, on a Expedia. Leur problème est d'avoir sur les pages qui décrivent les hôtels les meilleures images possibles, celles qui mettent le plus en valeur l'hôtel, parce que ça a un effet sur la conversion. Ils ont 10 millions d'images sur 300 000 hôtels. Certaines images sont super, celles-là sont plutôt réussies, c'est plutôt ça qu'on a envie de montrer. Le réacteur nucléaire en arrière-plan, bon, c'est moyen. L'hôtel peut être sympa, mais je n'ai pas envie de voir ça de ma chambre. Quant à l'autre photo, j'en parle même pas. Ils ont pris un modèle de reconnaissance d'image qui était déjà entraîné, donc qui était sur étagère, et ils l'ont affiné sur un ensemble de 100 000 images. 100 000 images qu'ils ont annotées, enfin étiquetées, avec un score de qualité absolue de 0 à 10, et par catégorie de voyageurs. Si vous êtes un voyageur business et qu'il y a un business center dans l'hôtel, c'est peut-être important de montrer cette photo-là. Si vous voyagez avec vos enfants et qu'il y a un super club enfant, c'est aussi de montrer ça. Ils ont utilisé une librairie open source qui s'appelle Keras pour faire ça et ils ont fait tourner ça sur GPU, sur AWS. Ils sont arrivés à une précision très intéressante et ont intégré ce feature en production. Les images que vous voyez sont effectivement des images qui sont prédites et sélectionnées en temps réel par leur modèle.
Un autre exemple, Condé Nast, un très gros acteur, un très gros publisheur américain, avec des centaines de sites web. Ils ont fait une expérimentation où ils veulent reconnaître les sacs à main pour femmes dans les photos. Ils ont pris 17 000 images sur Instagram, de 7 marques. Ils ont pris un modèle pré-entraîné sur ImageNet, donc sur étagère, et l'ont affiné avec TensorFlow. Ils arrivent à des scores très corrects, de 78% à 97%. Ils ne se sont pas arrêtés là, ils ont voulu reconnaître la couleur des sacs aussi. Ils ont utilisé un modèle particulier qui leur dit, donc on voit bien le sac à main, et en fait il y a certaines zones du sac à main qui vont être beaucoup plus impactantes pour prédire que d'autres. Le carré rouge, c'est la zone qui permet au réseau de neurones de décider que c'est un sac. Une zone qui score très très haut dans le réseau et c'est cette zone de l'image qui permet au réseau de dire oui, c'est un sac Gucci ou un sac Chanel ou autre chose. Ils prennent cette zone-là et appliquent un algorithme de reconnaissance de couleurs. Ils sont capables de dire ensuite que la couleur, à 90%, ce sac est rose. Non seulement ils font de la classification, mais une fois qu'ils ont la classification, ils zooment sur les parties les plus importantes de l'image, telles que le réseau les comprend, pour aller en plus faire de l'extraction de couleurs.
Un autre exemple, la détection d'objets. C'est un peu différent de la classification. On va essayer de trouver dans une image tout ce qui est présent, donc on va mettre pour chaque objet ou chaque personne détectée, on va le localiser précisément, on a les coordonnées, on a la nature de ce qui est présent dans le rectangle et puis on a une probabilité. Il y a plein d'algorithmes qui savent faire ça, les single shot detectors, etc. Et là, vous avez deux exemples de projets open source qui sont basés sur MXNet et qui produisent ce genre de résultats. Vous pouvez récupérer ça et soit jouer avec, soit même vous en servir. Un cas un peu plus compliqué, la segmentation. La segmentation est une extension de la détection où cette fois on veut pas juste le rectangle, on veut vraiment les contours. Ici, c'est un exemple avec des véhicules et des piétons. On a le rectangle mais aussi les contours, parce que quand on conduit, les contours sont importants. C'est un projet open source que vous pouvez directement utiliser. Il a été réalisé par une société qui s'appelle Too Simple, qui est un de nos clients d'ailleurs. Ils s'intéressent aux voitures parce qu'ils font des systèmes de conduite autonomes. En juin, ils ont fait rouler un camion tout seul, de l'Arizona en Californie, basé sur un modèle entraîné avec MXNet. Il y a plus d'informations sur le lien d'Aureli. Vous voyez, on n'est pas juste sur des projets open source de gens qui jouent, on est aussi sur des applications réelles. Vous y aurez peut-être ça dans votre voiture prochainement.
Encore un autre exemple, la détection de texte et la reconnaissance de texte. On est loin de l'OCR traditionnel. Vous voyez qu'on est sur des formes de texte qui sont pas forcément linéaires, qui sont même ici très floues. Avec ce modèle, une fois de plus, basé sur MXNet, on arrive à des résultats intéressants. On peut aussi jouer avec les têtes des gens. Ici, un exemple de projet open source qui fait à peu près la même chose, capable de trouver des visages dans les photos et puis surtout de trouver tout un tas d'attributs pour les visages. C'est-à-dire, c'est un homme, c'est une femme, il a du maquillage, il sourit, etc. Si vous voulez bâtir votre propre recognition, pourquoi pas partir de ce projet-là. Et puis celui-là que j'ai trouvé récemment, qui est hallucinant, un détecteur de pose. En temps réel, on est à 10 ou 11 images par seconde. On est capable de trouver les articulations, les points, les parties clés du corps humain et de les suivre. On peut imaginer plein d'applications, de jeux vidéo en particulier. Un autre exemple de projet, un réseau de neurones basé sur MXNet avec un projet open source. Il y a d'autres exemples, si vous êtes curieux d'aller voir, il y a d'autres photos, d'autres animations sur le GitHub.
Encore un autre exemple, la traduction automatique. C'est basé sur un projet open source d'AWS qui s'appelle Sockeye. Ici, c'est un exemple de traduction anglais-allemand. On va construire des réseaux plutôt compliqués, on va les entraîner sur des datasets, une série de phrases en allemand, une série de phrases équivalentes en anglais, et puis le réseau de neurones va apprendre à faire la traduction automatiquement. La traduction automatique est un des grands cas d'usage du deep learning. Si on continue dans le langage, le traitement du langage naturel, le text-to-speech, avec écho ou sans écho, mais en tout cas avec des services de ce style. La capacité à comprendre ce qu'un humain dit, en extraire les informations importantes, construire des réponses, les prononcer de manière correcte dans tout un tas de langues différentes, etc. Sandra a dû vous parler de Polly qui supporte 24 langues et 50 voix. La voix que vous entendez quand vous parlez à un écho, c'est Polly qui la génère. Vous pouvez utiliser Polly pour l'intégrer aussi dans vos applications. Tout ça est aussi basé sur du deep learning.
Parlons rapidement d'AmixNet et puis après on plongera dans le code. AmixNet est un projet open source qui a démarré en 2015, une universitaire qui a été vite rejointe par pas mal d'acteurs de l'industrie, comme Too Simple, qui sont des gros contributeurs à MXNet. Le plus gros committeur dans MXNet est un développeur chez Apple, et je crois que dans les 10 plus gros committeurs, il y a 4 personnes d'AWS maintenant. Le projet a été accepté dans l'incubateur Apache, ce qui est une très bonne nouvelle parce que c'est un bon gage d'indépendance. MXNet n'appartient à personne, n'est gouverné par personne, en tout cas dans l'industrie. C'est Apache qui décide de ce qui sort. Ce qu'on aime dans MXNet, c'est plusieurs choses. C'est le fait qu'il y a un support multilingue, ce qui n'est pas forcément le cas de beaucoup de librairies qui vont marcher en C++ ou en Python et puis c'est tout. Parfois juste l'un ou l'autre. Dans MXNet, vous pouvez faire du C++, du Python, du Jupyter, du Scala, du Air et j'en oublie. Moi, je fais essentiellement du Python, donc c'est important pour nos clients d'avoir ce choix. C'est une librairie qui est optimisée en termes de mémoire, en termes de rapidité d'exécution, qui n'a pas juste été conçue pour des gros environnements cloud super puissants, mais aussi pour de l'IoT par exemple. J'ai une démo où je fais tourner un modèle sur un Raspberry Pi, il reconnaît des objets, il parle, etc. On peut tout à fait déployer du MXNet sur de l'IoT, ça marche très bien. Et puis, MXNet scale très bien, en tout cas mieux que les autres librairies que j'ai eues l'occasion de tester, notamment en training.
Ce slide n'a pour but que de vous dire, ici on est sur de l'API Python, le code Python que vous allez voir tout à l'heure, je crois que mon plus long code doit faire 100 lignes, c'est compact. On peut construire toutes les architectures de réseaux existantes. Vous avez vu le panorama des exemples que je vous ai donné tout à l'heure, tout ça est construit avec MXNet. Donc tous les cas d'usage que vous pouvez lire, tout ce qu'on peut construire en termes de réseaux de neurones, on pourra le construire avec MXNet. Tous les cas d'usage particuliers dont on a parlé tout à l'heure, ils rentrent très bien dans ces cases-là. Il n'y a pas besoin forcément d'avoir un gros serveur pour faire tourner MXNet, vous pouvez le faire tourner sur mon Mac, sur je vais le faire tourner sur mon Mac tout à l'heure. Un des trucs que moi j'aime bien dans les Mixnets, c'est que passer d'un GPU à un CPU, c'est aussi compliqué que ça. Si vous avez travaillé sur d'autres librairies, ce n'est pas forcément aussi simple que ça. Si vous voulez entraîner ou définir un réseau sur CPU, par défaut, vous ferez ça. Et puis si vous voulez le faire sur GPU, il vous suffit de rajouter ce paramètre GPU 0, et si vous voulez utiliser plusieurs GPU, vous utilisez plusieurs GPU. Vous passez de l'un à l'autre de manière super simple, ce qui est bien pratique parce que ça permet de développer quelque chose sur son poste où on n'a pas forcément de CPU. Vous prenez ce code, vous le mettez sur un serveur GPU, vous changez juste une ligne de code et c'est tout. Et automatiquement, il va utiliser le ou les GPU qui sont disponibles sur la machine. C'est un gros avantage.
J'ai parlé du scaling tout à l'heure, c'est un exemple de training de très gros modèles de classification d'image de 1 à 256 GPU. La courbe rouge est le scaling idéal. Le scaling idéal, c'est quand je mets 256 GPU, ça va 256 fois plus vite que quand j'en mets un. C'est le scaling linéaire. On voit que pour les réseaux complexes comme Inception ou ResNet, on est très très proche de l'idéal. On reste entre 88-92% même un peu plus de linéarité. Ce qui veut dire que si vous avez un très gros dataset que vous entraîniez jusque-là, peut-être sur un GPU, disons que ça prenait 16 jours, si vous mettez 16 GPU sur la tâche de training, ça va prendre un jour. Et si vous en mettez 32, ça risque de prendre une demi-journée. Ce scaling linéaire des Mixnet est une propriété qui est relativement unique et qu'on ne retrouve pas dans les autres librairies. Pour ceux de nos clients qui ont des très gros datasets, c'est évidemment un très gros avantage.
On va passer aux démos. J'ai quatre trucs à vous montrer, on va voir si on a le temps. De toute façon, quand ils me jetteront dehors, ils me jetteront dehors. On va faire une première démo où on va faire de la classification d'images avec un modèle pré-entraîné. Je vais prendre un modèle, je vais le charger, je vais lui balancer des images, on va voir ce qu'il se passe. Ensuite, je vais prendre un modèle pré-entraîné et je vais l'entraîner sur un sous-ensemble du dataset et on va voir ce qui se passe. Ensuite, on va faire un training à partir de zéro sur deux modèles. On va prendre un dataset d'image et puis on va voir si on arrive à l'apprendre correctement. Et puis on va faire un quatrième exemple qui est le projet que je mentionnais tout à l'heure qui s'appelle Sockeye qui fait de la traduction allemand-anglais. Je vais m'asseoir... Ça va être compliqué de tenir le micro. On va voir si ça marche. Oui ? Vous m'entendez ? J'ai l'air idiot, mais ça, j'ai l'habitude. En plus, c'est filmé. Super. Ah oui. Ouais, on va faire comme ça. Sinon, je vais parler très très fort. Sinon, je vais taper d'une main. Puis je vais faire des erreurs et puis vous vous moquerez de moi. Alors, en avant. Premier exemple, classification d'image. Là, je vais le faire localement. Je suis sur mon Mac qui n'a pas de GPU. Ah pardon, excusez-moi. Oui, il faudrait basculer. Est-ce qu'on y arrive ? Attendez, on va y arriver. C'est parce que c'est caché derrière quelque part. Voilà. Voilà. Ça devrait être mieux. Ok. On va s'assurer qu'on a quand même tout l'écran. Vous arrivez à lire au fond, ça va ? Ouais, c'est assez grand. Je suis local sur mon poste et on va regarder un peu de code. Je crois qu'il y a 60 lignes de code. Tout n'est pas vital, mais on va regarder les lignes importantes quand même. Le premier truc, c'est comment est-ce que je charge un modèle. Où est-ce que je trouve un modèle pré-entraîné ? Dans MXNet et dans d'autres librairies, il y a un truc qui s'appelle généralement le Model Zoo, qui est un ensemble de modèles qui sont pré-entraînés sur des datasets de classification souvent, et que vous pouvez juste télécharger et utiliser. C'est ce que j'ai fait ici, je l'ai téléchargé. Pour charger un modèle dans MXNet, c'est une ligne de code. Vous faites Load Checkpoint, le nom du modèle, et c'est tout. Vous récupérez le réseau, la définition du réseau, et puis les paramètres, donc les poids des neurones qui sont issus de l'entraînement antérieure. C'est tout. Charger un modèle pré-entraîné, une ligne de code. On va essayer de compter les vraies lignes de code. Le reste c'est du blabla. Ensuite, je prends donc mon réseau et je l'instancie. Je l'associe, donc ça fait deux lignes, je l'associe à la donnée que je vais lui balancer. Ma donnée, ça va être une seule image. Je vais prédire image par image. J'ai une image qui est composée de trois canaux. C'est une image couleur, donc rouge, vert, bleu. Chaque canal fait, chaque sous-image, si vous voulez, elle fait 224 x 224 pixels. Donc ma forme d'entrée, c'est une matrice à quatre dimensions, 1 x 3 x 224 x 224. C'est ça que le réseau va prendre en entrée. Je mets quelques paramètres et c'est tout. Ensuite il faut que je charge, donc cette donnée, cet exemple, ce réseau a été entraîné sur ImageNet, donc un million d'images, mille catégories. Donc la liste des catégories je l'ai dans un fichier texte, je l'ai chargé parce que j'en ai besoin, je vais les afficher tout à l'heure. Ensuite il va falloir que je prépare mon image, donc j'ai une image JPEG sur mon disque, il faut que je la charge, il faut que je la transforme en, donc le fichier JPEG, il faut que je le transforme en 1 x 3 x 224 x 224. Donc j'utilise OpenCV pour charger l'image, je remets rouge vert bleu dans le bon ordre parce que ça serait trop facile si elle était directement dans le bon ordre, je redimensionne en 224, 224, voilà, blablabla, et je retourne cet objet qui s'appelle dans MXNet un NDRay, donc qui est un tableau à N dimensions, enfin un tenseur pour utiliser un gros mot, donc un objet, un tableau à N dimensions qui va contenir mon image. Et donc dans cette image, j'ai quoi ? J'ai les valeurs des pixels pour rouge, vert et bleu. Donc ça c'est de la plomberie Python, ça n'a pas grand chose à voir avec MXNet. Et puis ensuite je vais prédire, voilà, donc je charge mon image, je la balance à travers le modèle avec l'API forward, donc là je prends l'image, boum, je la balance dans le réseau, je récupère la sortie, la sortie c'est quoi ? C'est les probabilités qui sont sur la couche de sortie du réseau, donc il y a 1000 catégories, possible donc sur la couche de sortie du réseau il y a 1000 probabilités chaque probabilité correspondant à une classe. Ok, bon moi ce qui m'intéresse c'est pas les 1000 probabilités c'est on va dire le top 5 donc je fais un peu de pitonnerie je trie les probabilités et je retourne les top 5. D'accord, vous inquiétez pas si vous comprenez pas tous les détails c'est pas très important ce qui est important c'est le truc global. Voilà et globalement je fais quoi ? Je fais ça trois fois donc j'initialise, je charge trois modèles que j'ai téléchargés qui ont des noms barbares c'est pas grave je les charge et puis ensuite je balance mon image à travers le réseau et puis je vais bien voir ce que ça veut dire. Il va m'afficher le top 5 catégorie. Donc vous voyez là je crois qu'il y a 64 lignes de code il y a franchement dix lignes de MXNet et le reste c'est de la pitonnerie. En Java il y aurait deux mille lignes. Alors on va essayer une image. Donc on va charger les trois modèles. D'après les trois réseaux, 96% pour celui-là, à peu près le même chiffre ici, c'est rigolo, et 82% pour celui-là, il y a un violon dans l'histoire. Bon. C'est quand même des scores très très hauts. Gardez à l'esprit, il y a 1000 catégories. Donc s'il y en a une qui tape 90%, c'est vraiment que c'est marquant. Alors c'est quoi cette image ? Oui. C'est mon fils. Des fois je les vois plus en photo qu'en vrai, mais bon ça va. C'est parce que je voyage. Donc là, le violon, on voit que ça tape très très haut dans les scores. On va essayer une autre image. Et là, vous voyez, c'est local. Je suis sur ma machine. Donc là, j'ai un brave CPU qui fait le travail et c'est relativement rapide. Donc là, ici, on me dit quoi ? On me dit stage 46%, électrique, guitare 24%. Voilà, Stage 87, Electric Guitar, 4%. Ici, Stage 45%, Electric Guitar, 43%. Il n'y a pas des trucs... Parfois, il y a des trucs stupides. Non, pas cette fois. Des fois, il me sort Banjo, des trucs comme ça. Non, là, ça a l'air plutôt sérieux. Bon, alors, on va regarder l'image. Alors, gardez à l'esprit... Oui ?
Alors, c'est ce que j'allais dire, merci pour la question, c'est que dans ImageNet, ce qui est le dataset qui a servi pour les trois modèles pré-entraînés, il y a des objets, des objets du quotidien, et des animaux. Alors, pour cette photo-là, ma mère dirait que... peut-être, il y avait une catégorie. Mais, bon, en ce qui me concerne, bon, non. Mais vous avez raison. Donc c'est d'ailleurs intéressant comme remarque, parce que ça prouve bien qu'un modèle, même un super modèle, il est aussi bon ou aussi mauvais que le dataset sur lequel il a été entraîné. Donc quand vous sélectionnez des trucs sur étagère, comprenez bien sur quoi ça a été entraîné. D'accord ? Oui ? Alors, il sort mille probabilités. Donc, ce n'est pas un single shot detector comme je l'ai montré tout à l'heure. Il sort mille probabilités sur la base de features qu'il observe. Alors, il y a un microphone quand même là. On le voit. Alors ici, on voit... walking stick par exemple qui est complètement bidon il a l'impression qu'il voit une canne, pourquoi ? parce que le stand, enfin le pied de micro c'est une forme très verticale, il aurait pu me dire bâton de ski ou un truc dans ce genre voilà parce qu'à un moment des formes qui se ressemblent c'est compliqué donc là on est vraiment sur la détection donc c'est un espèce d'indice de confiance qu'il y a ce truc là dans l'image c'est pas un single shot detector où il mettrait une boîte en disant là je vois le micro et là je vois la guitare et là je vois le spot. Alors, la somme des mille fait 1. D'accord ? Pour les spécialistes, il y a la fonction softmax sur la couche de sortie qui normalise les probabilités et qui s'assure que la somme des 1000 fait bien 1. Donc c'est vraiment des probabilités qu'on voit. C'est pour ça que quand il y en a un qui sort à 80%, ça veut dire qu'on est sûr, parce que 87 sur 100, sur une catégorie, effectivement, il reste 13% pour les 999 autres. Donc, OK ? Mais, bonne remarque. OK, donc voilà un premier exemple. Et donc, vous voyez, en très peu de code, on arrive à le faire. Alors, deuxième... Deuxième exemple, affiner un modèle existant. Alors ici j'ai entraîné un modèle from scratch sur un dataset qui s'appelle CIFAR-10. CIFAR-10 c'est 60 000 images très petites dans 10 catégories que vous voyez ici. Donc je l'ai entraîné, ça a pris quelques temps. J'ai entraîné un modèle ResNet qui est un bon modèle et j'arrive à une précision de 82%. C'est à dire que quand je passe à J'ai gardé 10 000 images pour la validation. Quand je passe les 10 000 images dans le réseau, j'ai une précision de 82%. C'est bien, c'est pas bien, on peut en débattre. C'est moyen, on va dire. Alors moi, mon problème du jour, c'est de reconnaître les voitures ou les chevaux. Je veux reconnaître l'un ou l'autre et je ne m'intéresse pas trop à... Donc si je passe que les échantillons voitures et chevaux, j'arrive à une précision de 88%. Donc c'est un peu mieux. Mais ce que je pourrais faire, c'est réentraîner mon modèle en disant finalement oublie qu'il y a 10 catégories. Tu vas garder tout ton training sauf le fait qu'il y a 10 catégories et je vais juste réentraîner sur les voitures et les... et les chevaux. Et on va voir ce qui se passe. Ok donc là j'utilise Keras avec MXNet comme backend. Donc d'abord je charge mon modèle pré-entraîné. Voilà je vais passer mes 1000 voitures et mes 1000 chevaux dans le modèle initial et je vois effectivement mon point de départ c'est 88%. Et ensuite ce que je fais c'est que je vais réentraîner juste la dernière couche du réseau. Je vais geler toutes les couches sauf la dernière et je réentraîne juste sur les voitures et les chevaux. D'accord ? Et je fais ça pendant 10 époques donc chaque époque durant 10 secondes. On peut imaginer que dans deux minutes on a un résultat. ResNet 50, 50. D'accord. Oui, il y a plein de versions. Il n'y a pas toutes les valeurs possibles. Et donc on voit, on a presque déjà une idée de résultat, parce qu'on voit qu'après la première époque, on a déjà une précision de 98. Ça veut dire qu'après, il me suffit de réentraîner juste la dernière couche pendant 12 secondes et je gagne 10 points de précision. C'est la technique à utiliser Expedia. Et c'est probablement la technique à utiliser Condé Nast également. Le fine-tuning, c'est une technique qui est hyper, hyper puissante. Parce qu'on bénéficie de tout l'entraînement préalable et finalement, on ne va réentraîner que les toutes dernières couches, et ici même juste la dernière couche du modèle, en lui disant, oublie qu'il y a 10 catégories, moi je te dis qu'il n'y en a que 2. Donc c'est évidemment plus facile de classer dans 2 catégories que de classer dans 10. Et donc ça va me donner cette précision supplémentaire. Et on va arriver à... Allez, il reste encore 20 secondes, j'ai encore 20 secondes de blabla à tenir. Et on arrive à 80... Je pense qu'on est presque à 99% de précision. Donc comment passer de 82 en général à 98 et presque 99 en deux minutes ? Comme ça. Fine tuning. C'est une arme de guerre, c'est l'arme de guerre du deep learning. Beaucoup de gens essaient d'entraîner à partir de zéro, etc. Je n'aurai pas le temps de vous le montrer, je vais juste sauter, mais vous aurez les slides et je vais vous montrer le contenu en ligne où vous pourrez voir les démos. Le fine tuning, c'est vraiment l'approche numéro 1 pour avoir des bonnes perfs. D'accord ? Oui ? Si on avait vu réellement les 10 catégories, on aurait pu en prendre sur 50 catégories, et ensuite réduire sur 10 ? Oui, c'est ça. Par exemple, on pourrait le faire sur ImageNet, on pourrait dire, je prends ImageNet avec les 1000 catégories, mais il n'y a peut-être que 10 catégories de chiens qui m'intéressent, donc je garde tout le training, sauf peut-être la dernière couche, je réentraîne le réseau juste sur ces 10 catégories là et vous allez voir la précision qui va flamber. Donc on passe de 82 en général à quasiment 99, 2 minutes de training sur GPU, un seul GPU. Alors je vais juste vous montrer, on a assez joué avec les images, je vais vous montrer Sokai. Là je l'ai fait sur un GPU. Le fine tuning c'est un seul GPU, il n'y a pas besoin de plus. Alors ici donc c'est un modèle, donc c'est ce projet open source qui s'appelle Sokai que j'ai installé. Là le réseau est prédéfini, je l'ai entraîné sur un jeu de données de news, en fait de titres d'articles. Il y a plusieurs millions de phrases en allemand, plusieurs de phrases équivalentes en anglais, ça a tourné à peu près 4-5 heures sur 8 GPU, donc c'est quand même plus lourd, enfin c'est gérable. Et donc après, on peut faire ça. Donc j'appelle, bon j'ai un petit script pour invoquer le réseau. Ça c'est des phrases que j'ai prises sur Wikipédia. Ah, ça a bien, pas du tout marché, non ? Intéressant. Serais-je au mauvais endroit ? Voilà, ça marche mieux. Donc une phrase allemande bien traditionnelle, ça marche bien. On va essayer d'en faire une deuxième. Voilà, donc c'est pas mal. Bon, c'est pas un anglais nickel, nickel, mais enfin, je ne l'ai pas entraîné non plus pendant des jours et des jours. On a des phrases qui sont quand même relativement complexes. Je vais peut-être monter un petit peu. Et vous voyez qu'on arrive à un niveau de précision qui est pas mal. Donc, si vous voulez, si vous avez une problématique de traduction automatique, voilà comment, avec un projet open source, vous arrivez à faire des trucs de bonne qualité. Voilà.
Alors on va conclure. Où est-ce que j'en suis ? Oui ? Alors oui, ce modèle-là, enfin Sokai, il travaille sur du texte. Donc c'est de l'apprentissage supervisé. Vous lui donnez les deux datasets, il apprend et puis il vous fait la traduction. Donc c'est un modèle pour une paire de langues. Si vous voulez de l'allemand au tchèque, c'est un autre training. Mais vous pouvez avoir un jeu de modèles et puis vous faire un Google Translate à vous comme ça. Alors il y a tous les liens, il y a quelques slides supplémentaires, il y a tous les liens là dedans, vous trouverez tout ça. Je voulais conclure, Alors j'utilise pas Saint-Exupéry, c'est rigolo. Adrien utilise Saint-Exupéry, moi j'utiliserai Bradbury, mais c'est bien. J'adore cette citation. Tout ce dont vous rêvez est de la fiction, tout ce que vous accomplissez, c'est de la science. Et donc au final, l'histoire de l'humanité, ça n'est que de la science-fiction. Et ces projets-là, tels qu'on les voit, et franchement, tous les jours, toutes les semaines, il y a de nouveaux projets qui sortent. Ils sont tous de plus en plus sophistiqués, tous de plus en plus temps réel. Et on arrive à des trucs vrais. Spectaculaire. Alors si vous voulez en savoir plus, bien sûr, alors vous trouverez là les services de haut niveau qu'Alexandre a décrit ce matin, le blog Amazon IA qui est pas mal, le site d'MXNet où vous trouverez les docs, le code, etc. On a sorti une autre API dans MXNet qui s'appelle Gluon, j'ai pas le temps d'en parler aujourd'hui mais qui est également très simple à utiliser. Je vous rappelle qu'il y a réinvent d'ici deux semaines. Il y aura beaucoup d'annonces hier, je peux au moins vous dire ça. Donc si ces sujets vous concernent et vous intéressent, suivez l'actualité de réinvent. Et donc ça c'est mon blog sur lequel je poste régulièrement des articles à Mixnet, beaucoup de tutos, tous les exemples que vous avez eus là et plein d'autres, beaucoup beaucoup plus détaillés, sont présents sur mon blog. Donc n'hésitez pas à aller jeter un oeil et aller lire ça. Et puis à me faire du feedback, c'est toujours intéressant. Et puis le tout dernier point, c'est que du 11 au 15 décembre, on va animer une série de webinaires en français sur le machine learning LIA. Donc il y aura deux webinaires par jour, chaque jour, donc ça fait 10. On parlera, donc c'est pour les débutants, pour les gens expérimentés, vous pourrez choisir parmi les 10 ceux qui vous intéressent le plus mais voilà les débutants sont les bienvenus on parlera du machine learning en général on parlera de Spark, on parlera de MXNet, on parlera de tous ces sujets donc ils sont gratuits donc voilà c'est pour tout le monde vous trouverez toutes les infos à cette URL n'hésitez pas à vous inscrire et puis vous pouvez poser des questions je sais pas s'il y a des gens qui suivent mes webinaires dans la salle il y en a au moins un ou deux que je connais là ils savent qu'on rigole bien généralement Voilà, donc si vous voulez participer à ça, vous êtes les bienvenus. Voilà, j'ai fini, merci beaucoup. S'il y a des questions, tant qu'on ne se fait pas jeter dehors, on va y répondre. Sinon, on prendra les questions à l'extérieur. Je resterai encore un petit peu pour ne pas gêner le speaker suivant. Voilà, merci beaucoup et puis bonne fin de journée.