Le deep learning et les réseaux neuronaux avec Python | Frank Kane | Skillshare

Vitesse de lecture


1.0x


  • 0.5x
  • 0.75x
  • 1 x (normale)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Le deep learning et les réseaux neuronaux avec Python

teacher avatar Frank Kane, Machine Learning & Big Data, ex-Amazon

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      Introduction du cours

      2:15

    • 2.

      Commencer et pré-requis

      11:40

    • 3.

      L'histoire des réseaux Neural artificiels

      11:14

    • 4.

      Hands-On dans la piste Tensorflow

      12:00

    • 5.

      Détails de Deep Apprentissage

      9:29

    • 6.

      Présentation de Tensorflow

      11:29

    • 7.

      Utiliser Tensorflow pour la reconnaissance à la main Partie 1

      13:11

    • 8.

      Utiliser Tensorflow pour la reconnaissance à la main partie 2

      12:03

    • 9.

      Présentation Keras

      13:33

    • 10.

      Utiliser Keras pour apprendre des affiliations politiques

      12:05

    • 11.

      Réseaux de neurale révolutionnaires

      11:28

    • 12.

      Utiliser CNN pour la reconnaissance d'écriture à la main

      8:02

    • 13.

      Réseaux Neural réalistes

      11:02

    • 14.

      Utiliser des RNN pour l'analyse du sentiment

      9:37

    • 15.

      Transfert d'apprentissage

      12:14

    • 16.

      Tuner des réseaux neurales : Taux d'apprentissage et Hyperparamètres taille par lots

      4:39

    • 17.

      Régulation en profondeur avec Dropout et s'arrêter

      6:21

    • 18.

      L'éthique du Deep Learning

      11:02

    • 19.

      Coders Auto-Encoders variationnels (VAE)

      10:23

    • 20.

      Vues : l'activation de la mode MNIST

      26:31

    • 21.

      Réseaux Adversarial génératifs (GAN)

      7:39

    • 22.

      Démos et formation en direct

      11:22

    • 23.

      GAN : s'activent avec MNIST

      15:20

    • 24.

      Introduction du projet d'apprentissage Deep Apprentissage

      4:48

    • 25.

      Solution de projet d'apprentissage Deep Learning profondeur

      4:29

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

4 273

apprenants

2

projets

À propos de ce cours

Il est difficile d'imaginer une technologie plus chaude que l'apprentissage en profond, l'intelligence artificielle et les réseaux neurales artificiels. Si vous avez une expérience Python sous votre ceinture, ce cours va mystifier ce domaine passionnant, avec tous les sujets principaux que vous devez connaître.

Nous couvrirons :

  • Réseaux neurales artificiels
  • Perceptions multicalques
  • Tensorflow
  • Keras
  • Réseaux de neurale révolutionnaires
  • Réseaux Neural réalistes
  • Coders Auto-Encoders variationnels (VAE)
  • Réseaux Adversarial génératifs (GAN)

Et ce n'est pas seulement la théorie ! En plus du projet de classe, vous allez obtenir main en main avec quelques activités et exercices plus petits :

  • Créer des réseaux neuraux pour la reconnaissance de l'écriture à la main
  • Apprendre à prédire le parti politique d'un politician en fonction de ses votes
  • Réaliser l'analyse du sentiment sur des critiques de films
  • Créer de manière interactive des réseaux neurones profondes et expérimenter différentes topologies
  • Créer des images synthétiques de vêtements

Quelques heures est Si vous avez peur par AI, la meilleure façon de dispel cette peur est de comprendre comment cela fonctionne et c'est ce ce ce cours vous offre.

Rencontrez votre enseignant·e

Teacher Profile Image

Frank Kane

Machine Learning & Big Data, ex-Amazon

Enseignant·e

Frank spent 9 years at Amazon and IMDb, developing and managing the technology that automatically delivers product and movie recommendations to hundreds of millions of customers, all the time. Frank holds 17 issued patents in the fields of distributed computing, data mining, and machine learning. In 2012, Frank left to start his own successful company, Sundog Software, which focuses on virtual reality environment technology, and teaching others about big data analysis.

Voir le profil complet

Level: Beginner

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. Introduction du cours: Bienvenue dans les réseaux neuronaux Deep Learning avec Python. Je suis votre instructeur, Frank Kane et moi avons passé neuf ans chez amazon dot com et je suis devi dot com construire et gérer certaines de leurs fonctionnalités les plus connues. Recommandations de produits. People Who Pot a également acheté des best-sellers et des recommandations de films que I. M. D. B. Toutes ces fonctionnalités nécessitaient l'application de techniques d'apprentissage automatique à des ensembles de données du monde réel , et que est ce que ce cours est tout au sujet. Je n'ai pas besoin de vous dire que l'intelligence artificielle, l'apprentissage profond et les réseaux neuronaux artificiels sont les compétences techniques les plus précieuses des orteils . ce moment. Ces domaines explosent avec des progrès dans de nouvelles opportunités. Le cours de courte durée abordera l'apprentissage profond. D' un point de vue pratique appliqué, nous ne serons pas encombrés dans la notation et les mathématiques, mais vous comprendrez les concepts derrière l'IA moderne et serez en mesure d'appliquer les principales techniques en utilisant les outils logiciels les plus populaires disponibles. Aujourd'hui, nous allons commencer par un rafraîchissement sur python et la bibliothèque Pandas au cas où vous en auriez un nouveau . Ensuite, nous allons couvrir les concepts derrière les réseaux neuronaux artificiels. Ensuite, vous plongerez directement dans l'utilisation de la bibliothèque Tensorflow pour créer votre premier réseau de neurones à partir de zéro et utiliserez la bibliothèque de caresses. Pour faciliter le prototypage des réseaux neuronaux, vous comprendrez et appliquerez le Perceptron à plusieurs niveaux, réseaux neuronaux profonds, convolution, tous les réseaux neuronaux et les réseaux neuronaux récurrents. À la fin de ce cours, à la fin, un projet final rapide vous permettra de pratiquer ce que vous avez appris. Les activités dans ce cours air vraiment intéressant. Vous allez effectuer une analyse du sentiment de reconnaissance de l'écriture manuscrite et prédire les partis politiques des gens en utilisant des réseaux neuronaux artificiels en utilisant une quantité étonnamment petite de code. Si vous êtes un développeur de logiciels ou un programmeur qui cherche à comprendre les développements passionnants dans un I ces dernières années et comment tout fonctionne, ce cours est pour vous allez transformer les concepts directement en code, utilisant python sans absurdité et sans prétexte académique. Construire un réseau neuronal n'est pas aussi difficile que vous le pensez. Tout ce que vous avez besoin d'une expérience préalable dans la programmation ou le script pour réussir dans ce cours, le format général de ce cours est d'introduire le concept à l'aide de diapositives et exemples graphiques. Ensuite, nous allons regarder le code python qui implémente le concept sur certaines données réelles ou fabriquées . Vous aurez ensuite quelques idées sur la façon de modifier ou d'étendre le code vous-même afin d' obtenir une expérience pratique avec chaque concept. Le code de ce cours est fourni sous la forme d'un fichier cahier python eye, ce qui signifie qu'en plus de contenir du code python de travail riel que vous pouvez expérimenter , il contient également des notes sur chaque technique que vous pouvez garder autour de référence future. Si vous avez besoin d'un rappel rapide sur le fonctionnement d'une certaine technique, vous trouverez ceci un moyen facile de vous rafraîchir sans regarder une vidéo entière. 2. Commencer et pré-requis: Il est difficile de penser à un sujet plus chaud que l'apprentissage profond, et c'est ce dont nous allons parler en profondeur et en pratique pendant les prochaines heures, vous montrer comment fonctionnent les réseaux neuronaux. Réseaux neuronaux artificiels, perceptres, perceptres multicouches. Et puis nous allons parler de sujets plus avancés comme les réseaux neuronaux convolutionnaires et les réseaux neuronaux récurrents. Rien de tout cela ne signifie probablement rien pour vous en ce moment. Mais l'essentiel est que si vous avez été curieux de savoir comment l'apprentissage profond et les réseaux neuronaux artificiels fonctionnent, vous comprendrez que d'ici la fin de ces prochaines heures. Alors considérez cela comme un apprentissage profond pour les gens pressés. Je vais te donner assez de profondeur pour être dangereux. Et il y aura plusieurs activités pratiques et exercices pour que vous puissiez réellement obtenir une certaine confiance et appliquer ces techniques et vraiment comprendre comment elles fonctionnent et à quoi elles servent. Je pense que vous trouverez qu'il y a beaucoup plus facile à utiliser et vous pourriez avoir pensé. Alors plongons et voyons de quoi il s'agit. Cette section de mon plus grand cours d'apprentissage automatique et de science des données est également disponible en tant que cours autonome. Donc, si vous êtes nouveau à ce cours ici, vous devrez installer le matériel de cours et un environnement de développement si vous voulez suivre les activités pratiques de cette section Deep Learning. Si vous êtes nouveau et sur plus à point immédiat Sun Dash, soft.com slash machine dash apprentissage point HTML. Faites attention aux majuscules et aux tirets en tout cas. Et vous devriez aller à cette page ici. Vous trouverez ici un lien pratique vers le matériel du cours. Il suffit de télécharger cela et de le décompresser. Cependant, vous le faites sur votre plateforme et rappelez-vous où vous l'avez mis. Et notre environnement de développement pour ce cours sera Anaconda, qui est un environnement Scientific Python 3. Vous pouvez l'installer à partir d'ici c'est un logiciel libre. Assurez-vous d'installer la version 3.7 ou plus récente de Python. Une fois Anaconda installé, vous devrez installer le package TensorFlow. Donc, sur Windows, vous le feriez en allant à l'invite Anaconda. Alors allez à Anaconda dans votre menu Démarrer et ouvrez Anaconda Prompt. Sur macOS ou Linux, vous allez simplement à une invite de terminal et tout serait déjà configuré pour vous. À partir de là, vous devez taper Conda, installer TensorFlow, et laisser cela fonctionner pour installer le framework TensorFlow que nous allons utiliser dans Anaconda. Si vous avez un GPU NVIDIA, vous pouvez obtenir de meilleures performances en disant GPU attaché au fluide tenseur, mais cela entraîne parfois des problèmes de compatibilité. Ne fais pas ça à moins que tu saches ce que tu fais. Vous n'avez pas besoin d'installer pi dot plus pour cette section particulière de la caméra de cours pour le faire, cela fait également partie des instructions de configuration pour le parcours plus grand. Et vous devez également comprendre comment démarrer réellement les ordinateurs portables une fois que vous les avez installés. Donc, à partir de cette invite Anaconda, cette même invite Anaconda dont nous avons parlé plus tôt pour lancer l'un des ordinateurs portables de ce cours, vous devez d'abord changer votre répertoire où vous avez installé le matériel du cours. Donc, pour moi, je les ai mis en C colon cours ML. Et si je fais un DIR, vous verrez que tout le matériel du cours est ici. De là, si je tape dans le cahier Jupiter, Jupiter est orthographié drôle avec un y. Cela devrait lancer votre navigateur web avec un répertoire de tous les différents cahiers qui font partie de ce cours. Donc, quand je dis dans ce cours pour ouvrir, par exemple, je ne sais pas tensorflow point PY et être le TensorFlow Notebook, vous feriez simplement défiler vers le bas jusqu'à cette liste, ouvrir TensorFlow point IPO, enB. Et en haut, ça devrait venir. Lorsque vous avez terminé d'expérimenter et de jouer avec ce bloc-notes, vous pouvez simplement aller dans Fichier, Fermer et Arrêter pour en sortir. Lorsque vous avez fini avec Jupiter entièrement pour cette session, juste quitter et cela arrêtera tout pour vous. D' accord, donc avec ça hors du chemin, passons à autre chose. Parlons de certaines des prérequis mathématiques dont vous avez besoin pour comprendre l'apprentissage profond. Ce sera la partie la plus difficile du cours, en fait juste une partie du jargon mathématique que nous devons nous familiariser avec. Mais une fois que nous avons ces concepts de base bas, nous pouvons en parler un peu plus facilement. Pensez que vous trouverez que l'intelligence artificielle elle-même est en fait un champ très intuitif. Et une fois ces concepts de base abaissés, il est très facile de parler et très facile à comprendre. La première chose dont nous voulons parler est la descente en gradient. Il s'agit essentiellement d'une technique d'optimisation de l'apprentissage automatique pour essayer de trouver l'ensemble de paramètres le plus optimal pour un problème donné. Donc ce que nous sommes en train de tracer ici, essentiellement une sorte de fonction de coût, une mesure de l'erreur de votre système d'apprentissage. Et cela s'applique à l'apprentissage automatique en général, n'est-ce pas ? Comme vous devez avoir une sorte de fonction qui définit la proximité du résultat que vous voulez, votre modèle produit des résultats pour, n'est-ce pas ? Nous le faisons toujours dans le contexte de l'apprentissage supervisé. Nous allons alimenter notre algorithme ou modèle, si vous voulez, un groupe de paramètres, sorte de façons que nous avons réglé le modèle. Et nous devons identifier différentes valeurs de ces paramètres qui produisent les résultats optimaux. Donc, l'idée avec descente en dégradé est que vous choisissez juste un point au hasard et chacun de ces points représente un ensemble de paramètres. Votre modèle, peut-être que ce sont les différents paramètres d'un modèle dont nous avons parlé auparavant, ou peut-être que ce sont les poids exacts dans votre réseau neuronal, peu importe ce qu'il est, essayez un ensemble de paramètres pour commencer. Et nous mesurerons ensuite tout ce qui produit de l'air sur notre système. Et ce qu'on fait, c'est qu'on avance sur la courbe ici, non ? Donc, nous pourrions essayer un ensemble différent de paramètres ici. Encore une fois, juste un peu comme se déplacer dans une direction donnée avec des valeurs de paramètres différentes. Et nous mesurons ensuite l'erreur que nous obtenons de cela. Et dans ce cas, nous avons effectivement réalisé moins d'erreurs en essayant ce nouvel ensemble de paramètres. Donc nous disons, d'accord, je pense que nous allons dans la bonne direction ici. Changeons-les encore plus de la même manière. Et nous continuons à le faire à différentes étapes jusqu'à ce que finalement nous atteignions le bas d'une courbe ici. Et notre erreur commence à augmenter après ce point. Donc, à ce moment-là, nous saurons que nous avons réellement atteint le bas de ce gradient. Donc, vous comprenez la nature du terme ici, descente en gradient. Fondamentalement, nous choisissons un point au hasard avec un ensemble donné de paramètres que nous mesurons l'erreur de quatre. Et nous continuons à pousser ces paramètres dans une direction donnée jusqu'à ce que l'erreur se minimise et commence à revenir à une autre valeur, ok, et c'est ainsi que la descente en gradient fonctionne en un mot, ne va pas entrer dans toutes les mathématiques du noyau dur de celui-ci. Tout Le concept est ce qui est important ici, parce que la descente en gradient est la façon dont nous formons nos réseaux neuronaux pour trouver une solution optimale. Maintenant, vous pouvez voir qu'il y a quelques domaines d'amélioration ici pour cette idée. Tout d'abord, vous pouvez vraiment penser à cela comme une sorte de ballon roulant en descente. Donc, sur l'optimisation dont nous parlerons plus tard est en utilisant le concept d'un élan. Vous pouvez avoir cette balle gagner de la vitesse en descendant la colline ici, si vous voulez. Et ralentissez quand il atteint le fond et, vous savez, un peu plus bas là-bas. C' est une façon de le faire converger plus rapidement lorsque vous faites des choses, je peux rendre l'entraînement réel de vos réseaux de neurones encore plus rapide. Une autre chose qui mérite d'être évoquée est le concept de minima locaux. Et si j'ai choisi au hasard un point, puis je finis par ici sur cette courbe, je pourrais finir par m'installer dans ce minima ici, ce qui n'est pas le point de la moindre erreur. Le point de la moindre erreur dans ce graphique est ici. C' est un problème. Je veux dire, c'est un problème général dans la descente en gradient. Comment vous assurer de ne pas rester coincé dans ce qu'on appelle un minima local ? Parce que si vous regardez juste cette partie du graphique qui ressemble à la solution optimale. Et s'il se trouve que je commence par ici, c'est là que je vais rester coincé. Maintenant, il existe différentes façons de traiter ce problème. Évidemment, vous pouvez partir de différents endroits, alors essayez d'empêcher ce genre de choses. Mais en termes pratiques, il s'avère que les minima locaux ne sont pas vraiment importants quand il s'agit de former les réseaux neuronaux. C' est juste que ça n'arrive pas si souvent. Vous ne finissez pas avec des formes comme celle-ci dans la pratique. Donc, nous pouvons nous en sortir avec ne pas nous inquiéter autant à ce sujet. C'est très important. Bonne chose parce que pendant longtemps, les gens croient que l'IA serait limitée par cet effet minimum local. Et en pratique, ce n'est vraiment pas si important. Un autre concept, nous devons vous familiariser avec quelque chose appelé auto diff. Et nous n'avons pas vraiment besoin d'entrer dans les mathématiques hardcore du fonctionnement de l'auto def. J' ai juste besoin de savoir ce que c'est et pourquoi c'est important. Donc, quand vous faites une descente en gradient , vous devez savoir ce qu'est le gradient, n'est-ce pas ? Nous devons donc mesurer quelle est la pente que nous prenons avec notre fonction de coût, notre mesure de l'erreur, ou cela pourrait être une erreur standard moyenne pour tout ce que nous savons. Et pour le faire mathématiquement, vous devez entrer dans le calcul, non ? Si vous essayez de trouver la pente d'une courbe et que vous avez affaire à plusieurs paramètres et que nous parlons de dérivés partiels, non ? Les premiers dérivés partiels pour comprendre la pente dans laquelle nous nous dirigeons. Maintenant, il s'avère que c'est très mathématiquement intensif et inefficace pour les ordinateurs à faire. Donc, en faisant juste l'approche de la force brute à la descente en pente. Ça devient très cher très rapidement. diff automatique est une technique pour accélérer cela. Donc, spécifiquement, nous utilisons quelque chose appelé diff automatique en mode inverse. Et ce que vous devez savoir, c'est qu'il peut calculer tous les dérivés partiels dont vous avez besoin juste en traversant votre graphique dans le nombre de sorties plus une que vous avez. Et cela fonctionne très bien dans les réseaux neuronaux. Parce que dans un réseau de neurones, vous avez tendance à avoir un neurones artificiels qui ont beaucoup d'entrées, mais probablement une seule sortie ou très peu de sorties par rapport aux entrées. Donc, cela s'avère être un bon petit truc de calcul. C'est compliqué. Vous pouvez regarder comment cela fonctionne. C'est assez hardcore, mais ça marche et c'est ce qui est important. Et ce qui est également important, c'est que c'est ce que la bibliothèque TensorFlow utilise sous le capot pour implémenter sa descente en gradient. Donc, encore une fois, vous n'aurez jamais à implémenter la descente en dégradé à partir de zéro ou implémenter le scratch différent automatique. Ils sont tous cuits dans les bibliothèques que nous utilisons. Des bibliothèques telles que TensorFlow pour faire de l'apprentissage profond. Mais ce sont des termes que nous jetons beaucoup autour. Il est donc important que vous sachiez au moins ce qu'ils sont et pourquoi ils sont importants. Donc, juste pour sauvegarder un peu, descente en gradient est la technique que nous utilisons pour trouver les minima locaux de l'erreur de ce que nous essayons d'optimiser pour donné un certain ensemble de paramètres. Et le diff automatique est un moyen d'accélérer ce processus. Nous n'avons donc pas à faire autant de maths ou calculs pour mesurer réellement ce gradient de descente de gradient. Une des choses dont nous devons parler, c'est Softmax. Encore une fois, les mathématiques sont, c'est tellement compliqué ici. Mais encore une fois, ce qui est vraiment important, c'est de comprendre ce que c'est et à quoi il sert. Donc, en gros, quand vous avez le résultat final d'un réseau neuronal, vous vous retrouvez avec un tas de ce que nous appelons des poids qui sortent du réseau neuronal à la fin. Alors comment on en fait usage ? Comment utiliser concrètement la sortie de nos réseaux neuronaux ? C' est là que Softmax entre en jeu. Fondamentalement, il convertit chacun des poids finaux qui sortent de votre réseau neuronal en une probabilité. Donc, si vous essayez de classer quelque chose dans votre réseau neuronal, par exemple, décidez si une image est une image d' un visage ou une image d'un chien ou une image d'un signe d'arrêt. Vous pourriez utiliser softmax à la fin pour convertir ces sorties finales des neurones en probabilités pour chaque classe, ok ? Et puis vous pouvez simplement choisir la classe, il a la plus forte probabilité. Donc, c'est juste une façon de normaliser les choses, si vous voulez, dans une gamme comparable. Et de telle manière que si vous choisissez réellement valeur la plus élevée de la fonction softmax parmi les différentes sorties, vous vous retrouvez avec le meilleur choix de classification à la fin de la journée. C' est donc juste un moyen de convertir la sortie finale de votre réseau neuronal en une réponse réelle à un problème de classification. Encore une fois, vous pourriez avoir l'exemple d' un réseau neuronal qui essaie de conduire votre voiture pour vous. Et il doit identifier des images de panneaux d'arrêt ou de signaux de signalisation ou de feux de circulation. Vous pouvez utiliser softmax à la fin d'un réseau neuronal qui prendra votre image et classé comme l'un de ces types sinusoïdaux, n'est-ce pas ? Encore une fois, juste pour récapituler, algorithme de descente dégradée pour minimiser les erreurs sur plusieurs étapes. Fondamentalement, nous commençons à un ensemble aléatoire de paramètres, mesurons l'erreur, déplacons ces paramètres dans une direction donnée, voyons si cela entraîne plus d'erreur ou moins d'erreur. Et essayez simplement de vous déplacer dans le sens de minimiser erreur jusqu'à ce que nous trouvions le bas réel de la courbe là, où nous avons un ensemble de paramètres qui minimise l'erreur de ce que vous essayez de faire. Auto diff est juste un calcul astuces pour rendre la descente en pente plus rapide. Il est plus facile de trouver les gradients dans descente de gradient juste en utilisant quelques astuces de calcul. Et Softmax est juste quelque chose que nous appliquons au-dessus de notre réseau neuronal à la toute fin pour convertir la sortie finale de notre réseau neuronal en un choix réel de classification, compte tenu de plusieurs types de classification à choisir. D' accord ? Ce sont donc les termes mathématiques de base ou termes algorithmiques que vous devez comprendre pour parler de réseaux neuronaux artificiels. Donc avec ça sous notre ceinture, parlons ensuite des réseaux neuronaux artificiels. 3. L'histoire des réseaux Neural artificiels: Nous allons plonger dans les réseaux de neurones artificiels et comment ils fonctionnent à un niveau élevé plus tard va effectivement nous salir les mains et en créer réellement quelques-uns. Mais nous devons d'abord comprendre comment ils fonctionnent d'où ils viennent. Donc, c'est plutôt cool. Je veux dire, tout ce domaine de l'intelligence artificielle est basé sur une compréhension du fonctionnement de notre propre cerveau. Donc, vous savez, pendant des millions d'années d'évolution, la nature a trouvé un moyen de nous faire réfléchir. Et si nous nous contentons d'inverser la façon dont notre cerveau fonctionne, nous pouvons avoir quelques idées sur la façon de fabriquer des machines qui le pensent dans votre cerveau. Plus précisément ton cortex cérébral, où je vis, tu penses qu'il se passe. Vous avez un tas de neurones, les cellules nerveuses individuelles de l'air, et ils sont reliés les uns aux autres par Exxon et les dendrites. Vous pouvez les considérer comme des connexions. Vous savez, des fils, si vous voulez, qui relient différents accents ensemble. Maintenant, un neurone individuel va déclencher ou envoyer un signal à tous les neurones qui est connecté quand assez de ses signaux d'entrée air activé de sorte que le niveau de neurone individuel est un mécanisme très simple. Tu as juste cette cellule. C' est un neurone qui a un tas de signaux d'entrée qui y sont entrés. Et si assez de ces signaux d'entrée atteignent un certain seuil, il déclenchera à tour un ensemble de signaux aux neurones qu'il, à son tour, est connecté à une houle. Mais quand vous commencez à avoir beaucoup, beaucoup, beaucoup de ces neurones connectés ensemble de nombreuses façons différentes avec des forces différentes entre chaque connexion, choses deviennent très compliquées. C' est donc une sorte de définition du comportement émergent. Vous avez un concept très simple, modèle très simple. Mais quand vous empilez assez d'entre eux ensemble, vous pouvez créer un comportement très complexe à la fin de la journée, ce qui peut donner un comportement d'apprentissage. C' est en fait cela fonctionne et non seulement fonctionne dans votre cerveau, mais aussi dans nos ordinateurs. Pensez à l'échelle de votre cerveau. Vous avez des milliards de neurones, chacun avec des milliers de connexions, et c'est ce qu'il faut pour créer un esprit humain. Et c'est une échelle dont nous ne pouvons encore rêver que dans le domaine de l' apprentissage profond et de l'intelligence artificielle. Mais c'est le même concept de base. Vous avez juste un tas de neurones avec un tas de connexions qui se comportent individuellement très simplement. Mais une fois que vous obtenez assez d'entre eux ensemble câblé assez complexe et façons, vous pouvez réellement créer des pensées très complexes, si vous voulez, et même la conscience. La plasticité de votre cerveau est essentiellement de régler où ces connexions vont et à quel point chacune est forte, et c'est là que toute la magie se produit, si vous voulez. De plus, nous examinons plus en profondeur la biologie de votre cerveau. Vous pouvez voir qu'à l'intérieur de votre cortex, les neurones semblent être disposés en piles ou colonnes corticales qui traitent l'information en parallèle. Ainsi, par exemple, dans votre cortex visuel, différentes zones de ce que vous voyez peuvent être traitées en parallèle par différentes colonnes ou colonnes corticales de neurones. Chacune de ces colonnes est à son tour, faite de ces nombreuses colonnes d'environ 100 neurones par plusieurs colonnes que l'air ensuite organisé en ces grandes colonnes hyper et dans votre cortex il y a environ 100 millions de ces nombreuses colonnes, donc encore une fois, ils s'additionnent rapidement. Maintenant, coïncidence, c'est un orteil d'architecture similaire. Comment fonctionne la carte vidéo, les trois cartes vidéo d dans votre ordinateur. Il a un tas de diverses unités de traitement simples, très petites qui sont responsables de l'informatique. Comment les petits groupes de pixels sur votre écran sont calculés à la fin de la journée, et il se trouve que c'est une architecture très utile pour imiter le fonctionnement de votre cerveau . Donc c'est une sorte d'accident heureux que les recherches qui se sont produites pour rendre les jeux vidéo comportent vraiment rapidement ou jouer à l'appel du devoir ou quoi que ce soit que vous aimez jouer se prêtent à la même technologie qui a rendu l'intelligence artificielle possible sur un grande échelle et à faible coût. Les cartes vidéo que vous utilisez pour jouer à vos jeux vidéo peuvent également être utilisées pour effectuer un Deep Learning et créer des réseaux neuronaux artificiels. Pensez à la façon dont serait mieux si nous avons fait des puces qui ont été conçues spécifiquement pour une simulation de réseaux neuronaux artificiels. Il s' avère que certaines personnes conçoivent des navires comme ça en ce moment. Quand tu regardes ça, ils pourraient même être une réalité. Je pense que Google travaille sur un tel que nous parlons, donc à un moment donné quelqu'un a dit, Hey, la façon dont nous pensons que les neurones fonctionnent est assez simple. En fait, ce ne serait pas trop difficile de reproduire cela nous-mêmes et peut-être essayer de construire notre propre cerveau. Et cette idée remonte à 1943 les gens viennent de proposer une architecture très simple où si vous avez un neurone artificiel, peut-être que vous pouvez mettre en place une architecture où ce neurone artificiel se déclenche si plus d'un certain de ses connexions d'entrée sont actives et quand ils ont pensé à cela plus profondément dans un contexte d'informatique, les gens se rendent compte que vous pouvez réellement créer des expressions logiques expressions booléennes en faisant cela. Donc, en fonction du nombre de connexions provenant de chaque neurone d'entrée et si chaque connexion active ou supprime l'honneur, et vous pouvez réellement faire les deux qui fonctionnent de cette façon dans la nature aussi bien. Vous pouvez effectuer différentes opérations logiques, sorte que ce diagramme particulier implémente une opération ou. Imaginez donc que notre seuil pour notre neurone était que si vous avez deux entrées ou plus actives , vous déclencherez un signal à tour. Dans cette mise en place ici, nous avons deux connexions au neurone A et nous tournons vers les connexions venant du neurone B. Si l'un de ces neurones, produire et signal d'entrée qui provoquera effectivement ni sur la mer à feu. Donc vous pouvez voir que nous avons créé une relation ou ici où si ni sur un ou un neurone B alimente le neurone, voir à des signaux d'entrée qui provoqueront qu'ils sont déloger un feu et produire une vraie sortie. Donc, nous avons implémenté ici l'opération booléenne C égale A ou B, en utilisant simplement le même câblage qui se produit dans votre propre cerveau, et je n'entrerai pas dans les détails, mais il est également possible d'implémenter et non de manière similaire. Ensuite, nous avons commencé à construire sur cette idée. nous créons quelque chose appelé l'unité de seuil linéaire, ou LTU 1957,nous créons quelque chose appelé l'unité de seuil linéaire, ou LTU. Cela vient de construire sur les choses en attribuant des poids à ces entrées. Donc, au lieu de simplement allumer et éteindre l'interrupteur est, nous avons maintenant la capacité du concept d'avoir des attentes sur chacune de ces entrées ainsi que vous pouvez accorder encore et encore. Cela travaille davantage à notre compréhension de la biologie. Différentes connexions entre les différents neurones peuvent avoir des forces différentes, et nous pouvons modéliser ces forces en termes de poids sur chaque entrée entrant dans notre neurone artificiel. Nous allons également avoir la sortie être donnée par une fonction étape. Donc, cela est similaire dans l'esprit à la façon dont nous l'utilisions auparavant. Mais au lieu de dire que nous allons tirer si un certain nombre d'entrées sont actives, eh bien, eh bien, il n'y a plus de concept d'actif, ne sont pas actifs. Il y a des poids qui arrivent. Ces pondérations pourraient être positives ou négatives. Donc, nous dirons que si certains de ces poids sont supérieurs à zéro, nous irons de l'avant et tirons tout seul hors de sa leçon ou de ses leçons. Zéro. On ne fera rien. Donc juste une légère adaptation au concept d'un neurone artificiel ici où nous introduisons des poids au lieu d'un simple interrupteur binaire sur et off est donc nous allons construire sur cela encore plus loin et créer quelque chose appelé le Perceptron. Et un perceptron n'est qu'une couche de plusieurs unités de seuil linéaires. Maintenant, nous commençons à entrer dans des choses qui peuvent réellement apprendre. Ok, Donc en renforçant les poids entre ces utilisations qui ont produit le comportement que nous voulons, nous pouvons créer un système qui apprend au fil du temps comment produire la sortie désirée. Et encore une fois, cela travaille davantage à notre compréhension grandissante du fonctionnement du cerveau dans le domaine des neurosciences. Il y a un dicton qui dit que les cellules qui tirent ensemble se connectent. Et c'est en quelque sorte parler du mécanisme d'apprentissage qui se passe dans notre perceptron artificiel ici, où si nous avons des poids qui mènent au résultat souhaité que nous voulons, vous savez, ils pourraient penser à ces poids à nouveau comme forces des connexions entre les neurones. Nous pouvons renforcer ces poids au fil du temps et récompenser les connexions qui ont produit le comportement que nous voulons. Ok, donc vous voyez, ici nous avons nos entrées en poids, comme nous l'avons fait dans les années précédentes. Mais maintenant, nous avons plusieurs groupes d'utilisation dans une couche, et chacune de ces entrées est câblé à chaque neurone individuel de cette couche, accord ? Et nous appliquons ensuite la fonction étape chacun. Peut-être que cela s'appliquera à, vous savez, les classifications. Peut-être que ce serait un perceptron qui essaie de classer une image en trois choses ou quelque chose comme ça. Une autre chose que nous avons présentée ici est quelque chose appelé le neutron de biais là-bas à droite. Et c'est juste quelque chose pour faire fonctionner les mathématiques. Parfois besoin d'ajouter un peu fixe, valeur constante qui pourrait être quelque chose d'autre que vous pouvez optimiser pour nous. Eh bien, c'est un perceptron. Nous avons pris notre réseau artificiel. Déplacez cela vers une unité de seuil linéaire. Et maintenant, nous avons mis plusieurs unités de seuil linéaires ensemble dans une couche pour créer un perceptron, et déjà nous avons un système qui peut réellement apprendre. Vous savez, vous pouvez essayer d'optimiser ces poids, et vous pouvez voir qu'il y a beaucoup de ce point si vous avez chacune de ces entrées allant à chaque LTU de votre couche, elles s'additionnent rapidement, et c'est de là que vient la complexité de l'apprentissage profond. Allons plus loin et nous aurons un perceptron multicouche. Il est annoncé qu'une seule couche de perceptron serait utilisée. Nous allons en avoir plus d'un, et nous avons maintenant une couche cachée au milieu là, sorte que vous pouvez voir que sont des entrées d'air entrant dans une couche en bas. La couche de sortie démarrée en haut, et entre les deux nous avons cette couche cachée de lt supplémentaire utilisé dans vos unités de seuil qui peuvent effectuer ce que nous appelons Deep Learning. Donc, ici, nous avons déjà ce que nous appelons aujourd'hui un réseau neuronal profond. Maintenant, il y a des défis à relever pour former ces choses parce qu'elles sont plus complexes. Mais on en parlera plus tard. Ça peut être fait. Et encore une fois l'orteil chose vraiment apprécier ici est ce combien de connexions il ya ? Donc, même si nous n'avons qu'une poignée de neurones artificiels ici, vous pouvez voir qu'il y a beaucoup de connexions entre eux, et il y a beaucoup d'opportunités pour optimiser les poids entre chaque connexion. Ok, donc c'est comme ça qu'un Perceptron multicouche fonctionne. Tu peux juste voir ça à nouveau. Nous avons un comportement émergent ici, et l'unité de seuil linéaire individuelle est un concept assez simple. Mais quand vous les assemblez dans ces couches et que vous avez plusieurs couches toutes connectées , vous pouvez obtenir un comportement très complexe car il y a beaucoup de possibilités différentes pour tous les poids entre tous ces différents connexions. Enfin, nous allons parler d'un réseau neuronal profond moderne, et vraiment, c' est tout ce qu'il y a. Tu sais, le reste de ce cours, on va juste parler de façons de mettre en œuvre quelque chose comme ça. OK, donc tout ce que nous avons fait ici, c'est que nous avons remplacé cette fonction étape par quelque chose de mieux. Nous parlerons des fonctions d'activation alternatives. Celui-ci illustre quelque chose qui s'appelle Rela you dont on parlera plus tard. Le point clé là-bas. Ceux qui une fonction étape a beaucoup de mauvaises propriétés mathématiques, surtout quand vous essayez de comprendre leurs pentes dans leurs dérivés. Il s'avère donc que d'autres formes fonctionnent mieux et vous permettent de converger plus rapidement lorsque vous essayez de vous entraîner. Un réseau neuronal appliquera également soft max à la sortie, dont nous avons parlé dans la conférence précédente. C' est juste une façon de convertir. Les sorties finales de notre réseau neuronal sont un réseau neuronal profond dans les probabilités d' où nous pouvons simplement choisir la déclassification avec la plus grande probabilité. Et nous allons également former ce réseau neuronal en utilisant une descente gourmande ou une variation de celle-ci. Il y a plusieurs d'entre eux à choisir. Nous en parlerons plus en détail. Peut-être que cela utilisera le diff automatique, dont nous avons également parlé plus tôt pour rendre cette formation plus efficace. Donc c'est à peu près tout. Vous savez, au cours des cinq dernières minutes que nous avons parlé, je vous ai donné toute l'histoire, peu près des réseaux neuronaux profonds dans le Deep Learning. Et ce sont les principaux concepts. Ce n'est pas si compliqué, non ? C' est vraiment la beauté de ça. C' est un comportement émergent. Vous avez des blocs de construction très simples. Mais quand vous mettez ces blocs de construction ensemble de manière intéressante, très complexe et franchement mystérieuse, des choses peuvent arriver. Donc je suis plutôt excité à propos de ça. Plongons dans plus de détails sur la façon dont cela fonctionne maintenant. 4. Hands-On dans la piste Tensorflow: Alors maintenant que nous comprenons les concepts des réseaux neuronaux artificiels et de l'apprentissage profond, nous allons le gâcher. C' est étonnamment facile à faire. Les gens derrière Tensorflow à Google ont créé un joli petit site Web appelé Playground dot tensor fluid out conscient qui nous permet d'expérimenter avec la création de nos propres réseaux neuronaux et vous n'écrivez pas une ligne de code pour le faire. C' est donc un excellent moyen de se mettre à la main et de ressentir comment ils fonctionnent. Alors nous allons plonger dans la tête sur le terrain de jeu dot tensorflow org et vous devriez voir un écran comme celui-ci que vous pouvez suivre ici ou juste me regarder le faire. Mais je vous encourage certainement à jouer avec cela vous-même et à avoir une sorte de, ah, ah, mains sur intuitives sur le fonctionnement profond de l'apprentissage. C' est une chose très puissante si vous pouvez comprendre ce qui se passe dans cette page Web. Donc, ce que nous essayons de faire ici est de classer un tas de points juste en fonction de leur emplacement dans cette image en deux D. Donc c'est notre formation, selon les données, si vous voulez. Nous avons un tas de points ici et ceux au milieu sont classés bleus, et ceux à l'extérieur sont classés comme orange. Notre objectif est donc de créer un réseau neuronal qui, sans connaissance préalable, peut réellement déterminer si un point donné doit être bleu ou orange et prédire avec succès quelles classifications devraient être. Alors pensez à ce sont nos données de formation. Ok, nous savons à l'avance quelles sont les bonnes classifications pour chacun de ces points. Et nous allons utiliser cette information pour former notre réseau neuronal à apprendre, j'espère, que choses au milieu devraient être bleues, et les choses à l'extérieur devraient être orange. Maintenant, nous avons un diagramme du réseau neuronal lui-même, et nous pouvons jouer avec ça. On peut le manipuler. Nous pouvons ajouter des couches pour enlever des couches. ADM ou neurones. Deux couches. Quoi que vous vouliez faire, examinons ce qui se passe ici. Donc, tout d'abord, nous sélectionnons l'ensemble de données avec lequel nous voulons jouer à l'endroit où il commence par cette valeur par défaut, qui s'appelle Cercle the Input Air. Simplement, les X et Y coordonnent la position verticale et horizontale de chaque point de données, sorte que notre réseau neuronal reçoit un point à classer. Tout ce qu'il a à travailler, ce sont ces deux valeurs, sa position horizontale et sa position verticale. Et le départ est également pondéré étant horizontal a vertical, nous pourrions donc définir la position de n'importe lequel de ces points en termes de résultat et position verticale. Par exemple, ce point aurait ici une position horizontale négative dans une position verticale d' environ cinq négatifs, puis nous le nourrissons dans notre réseau. Vous pouvez voir que ces notes d'entrée ont des connexions à chacun de ces quatre neurones et sont des couches cachées. Et nous pouvons manipuler les poids entre chacune de ces connexions pour créer l' apprentissage que nous voulons. Ceux-ci se nourrissent à leur tour dans deux neurones de sortie ici qui décideront finalement quelles classifications nous voulons à la fin de la journée. Alors gardez à l'esprit, il s'agit d'un problème de classification de Byeon Eri. C' est bleu ou orange, donc à la fin de la journée, nous avons juste besoin d'un signal unique, vraiment, et c'est ce qui vient dans cette sortie ici. Allons de l'avant, frappons le jeu et voyons ce qui se passe. Ce qui va faire ça a commencé tas d'itérations où il apprend de ces données de formation. On va continuer à l'alimenter à partir de cet ensemble de données d'entraînement. Et au fur et à mesure qu'il génère à travers elle, vous commencerez à renforcer les connexions qui conduisent aux classifications correctes via Grady au centre. Un mécanisme similaire, non ? Et si nous faisons cela assez de fois, il devrait converger vers un réseau neuronal capable de classer ces choses de manière fiable . Allons jouer. Il suffit de le regarder en action. Alors gardez un œil sur cette image à droite. Très bien, vous pouvez voir que nous avons déjà convergé vers une solution. Je peux aller de l'avant et faire une pause que maintenant et des trucs assez cool pour que vous puissiez voir qu'il a créé avec succès ce modèle où les choses qui s'intègrent dans cette zone centrale ici est classé bleu , et les choses à l'extérieur sont classées comme orange donc nous pouvons plonger dans ce qui s'est réellement passé ici. Ces épaisseurs de toutes ces connexions représentent leurs poids de sorte que vous pouvez voir les poids individuels qui sont câblés entre chacun de ces neurones. Nous commençons ici, vous voyez ces air plus ou moins également pondérés. Euh, eh bien pas exactement. De même, certains d'entre eux sont en quelque sorte faibles. Mais quoi ? Au moins deux est-ce que ce comportement est au milieu ? Nous commençons donc par des coordonnées X et Y pondérées également. Ceux-là vont à cette couche ici. Donc, par exemple, cette couche cachée ici, ce neurone dit que je veux attendre les choses un peu plus lourdement dans ce coin, ok ? Et les choses qui sont comme dans le coin inférieur gauche, pas tellement. Et puis l'autre est en train de ramasser des trucs en haut et en bas. Celui-ci est un peu plus diagonale en bas, non ? Et celui-ci est même mawr bas à droite lourde. Et si vous combinez ces choses ensemble, nous sommes allés avec ces couches de sortie qui ressemblaient à ceci. D' accord ? Et donc nous avons fini avec ces deux choses blobby où nous donnons un coup de pouce aux choses à droite et donnons un coup de pouce aux choses qui se trouvent en quelque sorte dans ce genre de choses. Ah, plus blobby zone circulaire. Et puis nous avons combiné ces ensemble, nous finissons avec notre sortie finale. Ça ressemble à ça. Maintenant, cela peut sembler différent d'une exécution à l'autre. Vous savez, il y a un hasard, un peu de hasard dans la façon dont tout est initialisé. Avons-nous même besoin d'un réseau neuronal profond pour le faire, bien qu'une chose d'optimisation est de supprimer les couches et de voir si vous vous en sortez avec. Peut-être qu'on n'a même pas besoin d'apprentissage profond. Je veux dire, vraiment, c'est une chose assez simple. Tu sais, les trucs au milieu sont bleus. trucs à l'extérieur sont orange. Allons de l'avant et retirons à nouveau l'un de ces neurones de la couche de sortie. Tout ce dont nous avons besoin est un achat un résultat de toute façon. Est-ce que ça peut encore marcher ? C' est le cas. En fait, c'est juste est rapide. Alors ai-je besoin de cette couche ? Allons de l'avant et enlever cette couche finale du tout fonctionne toujours, non ? Donc, pour ce problème très basique sur même besoin d'apprentissage profond. Tout ce que j'ai ici, c'est une seule couche. Donc c'est juste que ce n'est même pas un perceptron multicouche. C' est juste un perceptron. Ai-je besoin de neurones là-dedans ? Eh bien, je pense que oui, mais celui-là ne fait pas grand-chose bien. Tout ce qu'il fait, c'est de le faire passer, et les entrées qui y entrent ont été pondérées à peu près rien. Donc je ferais mieux de ne pas avoir besoin de celui-là. Débarrassez-vous de ça. Ça marche toujours. Ce n'est pas cool ? Je veux dire, pense à ça. Nous n'avons que trois neurones artificiels, et c'est tout ce qu'il faut pour faire ce problème. Je veux dire, comparez ça aux milliards de neurones qui existent dans votre tête. Maintenant, on ne peut probablement pas s'en sortir avec moins que ça. Allons de l'avant et essayons de faire tourner vers les neurones et voir ce qui se passe. Ouais, ça n'arrivera pas, non ? Donc, pour ce problème particulier, tout ce dont vous avez besoin est de trois neurones pour ne pas le couper. Jouons un peu plus. Essayons un ensemble de données plus difficile. Ok, donc voici un motif en spirale, et vous pouvez dire que ça va être plus dur parce qu'on ne peut pas juste dire que les choses dans ce coin vont être cette, euh, cette classification, comme nous avons besoin d'une façon beaucoup plus fine, comme identifier ces spirales individuelles. Et encore une fois, nous allons voir si nous pouvions simplement former et Earl Network à comprendre cette règle de son propre chef. Et, bien, évidemment, les tuners vont le couper. Revenons à quatre. Voyons si c'est suffisant. Je parie que ce n'est pas le cas. Vous pouvez voir que c'est essayer, mais c'est vraiment difficile. Nous pouvons laisser ça courir pendant un moment, et vous pouvez voir qu'il commence à y arriver. Vous savez, les zones bleues convergent sur certaines zones bleues, et c'est vraiment difficile, mais ce n'est pas assez de neurones pour arracher celui-ci. Allons de l'avant et ajoutons un autre calque. Voyons si ça aide. Vous pouvez voir qu'il fait des choses plus compliquées maintenant qu'il a plus de neurones pour travailler avec. Mais je ne peux toujours pas arriver là où ça doit être. Ajoutons quelques neurones de plus à chaque couche. En règle générale, vous pouvez soit ajouter plus de neurones à une couche. Ajoutez d'autres calques. Ça va produire les mêmes résultats. Mais cela pourrait affecter la vitesse à laquelle il converge, en fonction de l'approche à adopter. Juste fascinant. En regardant ce travail, n'est-ce pas ? C' est bon, celui-là est resté coincé. Il ne peut toujours pas l'arracher. Ajoutons un calque de plus. C' est en fait un modèle très commun. Vous verrez que vous commencerez avec beaucoup de couches au début et qu'ils les affinent comme vous allez. OK, donc nous allons aller à une couche d'entrée initiale de six neurones vers une couche cachée de quatre neurones, puis une couche de deux neurones qui finira par produire une sortie binaire à la fin. Eh bien, je crois que ça arrive là. Ici, Rio. Wow. Ok, donc, techniquement, c'est toujours un peu comme se raffiner, mais ça s'est bien fait. Je veux dire, maintenant c'est ce qu'on appelle l'ajustement dans une certaine mesure, tu vois ? Je veux dire, évidemment c'est le cas. Il est comme des vrilles d'air qui coupent par ici, et ça ne fait pas vraiment partie du modèle que nous recherchons. Mais ça va encore . Ces vrilles de l'air s'affaiblissent de plus en plus. Donc, vous savez, il n'a toujours pas assez de neurones pour faire exactement ce que nous ferions intuitivement. Mais je veux dire quand même, je veux dire, c'est un problème de classification assez compliqué. Il l'a compris et peut-être plus ajusté un peu. Mais j'ai compris, et tout ce qu' on a, c'est quoi, 12 neurones ici ? Je veux dire, c'est fou en ce moment. Une autre chose dont je veux parler ici aussi. est que cela illustre en quelque sorte le fait qu'une fois que vous entrez dans plusieurs couches, il devient très difficile de comprendre intuitivement ce qui se passe à l'intérieur du réseau neuronal. Ça devient un peu effrayant, tu sais ? Je veux dire, qu'est-ce que cette forme veut vraiment dire ? Je veux dire, une fois que vous avez assez de neurones, c'est un peu dur de l'orteil à l'intérieur de votre propre tête. Ce que les modèles représentent tous vraiment. Je veux dire, la première couche est assez simple. Tu sais, c'est en fait de diviser l'image en différentes sections. Mais au fur et à mesure que vous entrez dans ces couches cachées, choses commencent à devenir un peu bizarres quand elles sont combinées ensemble. Allons de l'avant et ajoutons un chemin de plus. J' aurais dû dire deux de plus à cette couche de sortie et ajouter une couche de plus à la fin. Voyons si cela aide les choses à converger un peu plus rapidement. Ouais, d'accord. Commencez à lutter un peu. Voyez ça comme si c'était en fait une forme de spirale qui se passe ici maintenant. Donc, avec ces neurones supplémentaires, il a pu faire quelque chose de plus intéressant. On a encore ça. Ah, ce petit pic ici qui fait la mauvaise chose, et il ne semble pas vraiment penser que sa sortie de celui-là a donné un peu plus chez l'Iran, bien qu'il puisse le comprendre. Ceux-ci sont également mal classés. Mais je trouve intéressant qu'il ait réellement créé un motif en spirale ici seul. Donc peut avec quelques neurones de plus ou une couche de plus, vous pourriez réellement créer une solution encore meilleure. Mais je laisserai ça comme un exercice pour vous. Maintenant, vous savez, pour jouer autour de ça, je vous encourage vraiment à tout gâcher et à voir quel genre de résultats vous pouvez obtenir. Ce motif en spirale est en particulier un problème intéressant. Expliquez juste certains des autres paramètres ici. On fait une classification ici. C' est là qu'on va faire tout au long de cette section. La fonction d'activation dont nous avons parlé de ne pas utiliser une fonction pas et d'utiliser autre chose , d'autres qui sont populaires Rally était en fait très populaire en ce moment de la fonction de réalisation dont nous n'avons pas encore parlé. Le taux d'apprentissage est juste fondamentalement la taille de l'étape dans l'ingrédient Descents que nous faisons , donc vous pouvez ajuster que si vous voulez, aussi, allons voir si vraiment bien fait une différence, je m'y attendrais pour juste, vous savez, affecter la vitesse. Oh, mon dieu. Regarde ça. C' est plutôt proche de ce qu'on veut, non ? Je veux dire, il y a en dehors de cette petite pointe ici qui n'est pas vraiment là un peu trop approprié pour aller là-bas. Mais nous avons créé cette forme en spirale juste à partir de cette poignée de neurones. Scott, je pourrais faire ça toute la journée, les gars. Et j'espère que vous allez, vous savez, juste joueur dehors ça C'est tellement amusant, et ça vous donne une telle compréhension concrète de ce qui se passe sous le capot. Je veux dire, regarde cette couche cachée ici. Allons là où ces formes en spirale commençaient à émerger et à se réunir. Et quand vous pensez au fait que votre cerveau fonctionne de la même manière, c'est littéralement mon emploi de toute façon. Gessez avec ça. C' est un exercice vraiment génial et j'espère que vous vous amusez avec. 5. Détails de Deep Apprentissage: d' accord. Je sais que vous avez probablement envie de plonger dans un code maintenant, mais il y a un peu plus de théorie que nous devons couvrir avec l'apprentissage profond. Je veux parler un peu de la façon dont ils sont formés et quelques conseils pour les régler maintenant que vous avez eu un peu d'expérience avec eux en utilisant le terrain de jeu Tensorflow . Alors, comment formez-vous un Perceptron multicouche ? Eh bien, il utilise une technique appelée propagation. Ce n'est pas si compliqué, vraiment. Au niveau conceptuel, tout ce que nous faisons c'est Grady en dissidence comme nous l'avons déjà dit, en utilisant cette astuce mathématique du mode inverse auto def. Pour que cela se produise efficacement à chaque étape d'entraînement, nous calculons simplement l'erreur de sortie pour les poids que nous avons actuellement en place pour chaque connexion entre chaque neurone artificiel. Et puis c'est là que la propagation du dos s'est produite. Comme il y a plusieurs couches à traiter, nous devons prendre cette erreur qui est calculée à la fin de notre réseau neuronal et propagée vers le bas dans l'autre direction, repousser à travers le réseau neuronal vers l'arrière, OK, Et de cette façon, nous pouvons répartir cette erreur à travers chaque connexion jusqu'aux entrées en utilisant les poids que nous utilisons actuellement à cette étape d'entraînement. Ok , concept assez simple. On prend juste l'air. Nous utilisons les poids que nous utilisons actuellement dans notre réseau neuronal pour propager cette erreur aux connexions individuelles. Et puis nous pouvons utiliser cette information pour modifier les poids à travers Grady et la dissidence pour essayer d'arriver à une meilleure valeur sur la prochaine passe à la prochaine époque, si vous voulez, si vous voulez, de nos laissez-passer d'entraînement. Donc c'est tout de retour. La propagation est que nous exécutons un ensemble de poids, nous mesurons l'erreur, nous répandons cette erreur. L' utilisation de ça attend les choses dans lesquelles il est, super, envoyé. Essayez-le encore et nous continuons à le faire encore et encore. Jusqu' à ce que notre système converge. Nous devrions parler un peu de la fonction d'activation. Donc, dans notre exercice précédent, en utilisant le terrain de jeu Tensorflow, nous utilisions la fonction d'activation tangente hyperbolique par défaut. Et puis nous passons à quelque chose appelé Rela, et nous avons vu que les résultats étaient un peu meilleurs. Qu' est-ce qui se passait là ? Eh bien, la fonction d'activation est juste la fonction qui détermine la sortie d'un neurone, compte tenu de certaines de ses entrées. Donc, vous prenez la somme de tous les poids des entrées entrant dans un neurone. La fonction d'activation est ce qui prend que certains et le transforme en un signal de sortie. Maintenant, comme nous avons parlé de retour dans la première conférence en utilisant une fonction étape est ce que les gens ont fait à l'origine. Mais cela ne fonctionne pas vraiment avec Grady et la dissidence parce qu'il n'y a pas Grady int là-bas. S' il s'agit d'une fonction étape, il n'y a pas de pente. C' est allumé ou éteint. Tu sais, c'est soit directement à travers, soit de haut en bas. Il n'y a pas de dérivé utile. C' est pourquoi les fonctions alternatives fonctionnent un peu mieux dans la pratique. Il y en a d'autres qui s'appellent la fonction logistique, la fonction tangente hyperbolique qui produit plus d'une courbe sinueuse. Si vous pensez à ce à quoi ressemble une tangente hyperbolique, c'est ah plus de Ah, il n'a pas que tranchant leur zéro l'origine, donc ça peut fonctionner assez bien. Il y a aussi quelque chose appelé l'unité linéaire exponentielle, qui est aussi un peu plus sinueuse. Ce que nous avons fini par utiliser , , c'était Rallo. Cela signifie unité linéaire rectifiée. Et c'est ce que ce graphique montre ici fondamentalement zéro s'il est inférieur à zéro, et s'il est supérieur à zéro, il monte à un angle de 45 degrés. Donc c'est juste, vous savez, vous obtenez le réel. Une partie de l'entrée attend comme sortie si cette sortie est supérieure à zéro. Ok, donc l'avantage que Rela a est qu'il est très simple, très facile et très rapide à calculer. Donc, si vous êtes inquiet de converger rapidement et que votre ressource informatique l'est, rela est un très bon choix. Maintenant, il existe des variantes de rela qui fonctionnent encore mieux si vous ne vous souciez pas tant l'efficacité quand on l'appelle rela fuite. Et tout ce qui est est au lieu d'être plat à gauche de zéro, il a en fait un peu d'une pente là aussi, une très petite pente et encore, c'est à des fins mathématiques d'avoir un dérivé significatif réel là pour travailler avec , sorte que peut fournir une meilleure convergence. C' est aussi quelque chose appelé rela bruyante, qui peut également aider à la convergence. Mais, ah, ces jours-ci vous crient. L' unité linéaire exponentielle produira souvent un apprentissage plus rapide. C' est en quelque sorte le Il gagne en popularité maintenant que les ressources informatiques sont de moins en moins préoccupantes maintenant que vous pouvez réellement faire un apprentissage profond sur un cluster de PC sur réseau dans le cloud. C' est donc ce que sont les fonctions d'activation. Vous pouvez également choisir différentes fonctions d'optimisation. Vous savez, nous avons parlé en termes très généraux de Grady et de la dissidence, mais il y a diverses variantes de Grady dans quelque chose que vous pouvez utiliser aussi. Nous avons parlé un peu plus tôt de l'optimisation mo mentum. Fondamentalement, l'idée est d'accélérer les choses, c'est que vous descendez une colline et ralentissez les choses à mesure que vous commencez à approcher ce minimum. C' est donc une façon de rendre le réseau à envoyer plus rapide en sautant les parties les plus raides de votre courbe d'apprentissage. Eh bien, je n'ai jamais utilisé la courbe d'apprentissage du mot dans le contexte. Mot signifie en fait quelque chose de mathématiquement significatif. Mais de toute façon, il y a aussi quelque chose appelé le Nesterov accéléré Grady dans, qui est juste un ajustement au-dessus de l'optimisation de l'élan. Fondamentalement, il regarde un peu vers l'avenir vers le Grady et devant vous pour tenir compte de cette information . Donc ça marche encore mieux. Il y a aussi quelque chose appelé RMS prop, qui utilise simplement un taux d'apprentissage adaptatif qui vous aide à vous orienter dans la bonne direction vers le minimum. Rappelez-vous comment la salutation à envoyé fonctionne. Il n'est pas toujours évident dans quelle direction vous allez aller, compte tenu d'un changement de paramètres. Donc notre pétrin est juste une façon plus sophistiquée d'essayer de trouver la bonne direction. Enfin, il y a quelque chose appelé Adam signifie esten ization adaptative moment. Fondamentalement, c'est l'optimiseur Mo mentum et RMS prop combiné type de vous donne le meilleur des deux mondes, et c'est un choix populaire aujourd'hui parce que cela fonctionne vraiment bien. C' est très facile à utiliser à nouveau la bibliothèque que vous allez utiliser pour ce truc pour un très haut niveau et très facile à utiliser. Donc, ce n'est pas comme si tu devais mettre en œuvre le deuil accéléré de Nesterov à partir de zéro . Tu vas juste dire que l'optimiseur est égal à Adam et qu'il en soit fini. Tu sais, c'est juste une question de choisir celui qui a du sens pour ce que tu essayes de faire. Faites vos propres compromis entre la vitesse de ah, convergence et les ressources de calcul et le temps nécessaire pour réellement faire cette Convergence. Parlons de surajustement aussi. Vous pouvez voir que vous finissez souvent avec des modèles comme celui-ci où vous savez que vous n' obtenez pas vraiment une solution propre. Vous savez, comme ces pointes bizarres parfois et parfois si vous laissez les choses aller un peu trop longtemps , ça finit par renforcer ces pointes. Vous savez, ces zones par-ajustées où vous n'êtes pas vraiment adapté au modèle que vous cherchez. Vous êtes juste adapté aux données d'entraînement qui vous ont été données. Ok, donc il y a des moyens de combattre ça. Et évidemment, si vous avez des milliers de poids à accorder, vous savez que ces connexions entre chaque neurone et chaque couche de vos neurones peuvent s'accumuler très rapidement. Il est donc très facile pour les orteils trop ajustés se produisent. Il y a des façons d'y faire face quand on parle d'arrêt précoce. Donc, dès que vous voyez que les performances commencent à baisser, cela pourrait être une façon de vous dire qu'il est peut-être temps pour vous d'arrêter d'apprendre . Vous savez, à ce stade, peut-être que vous êtes tout à fait prêt. Il y a aussi des termes de régularisation. Vous pouvez ajouter à la fonction de coût pendant l'entraînement. Vous savez que cela peut essentiellement aimer le virage de biais dont nous avons parlé plus tôt qui pourrait aider . Mais une technique étonnamment efficace est appelée abandon, et un Kennison est un exemple d'une idée très simple qui est très efficace. L' idée est juste d'ignorer, disons, la moitié des neurones au hasard à chaque étape d'entraînement, prétendre qu'ils n'existent pas tout. Et la raison pour laquelle cela fonctionne est parce qu'il force votre modèle à répandre son apprentissage. Si vous enlevez la moitié de son cerveau, si vous voulez à chaque étape d'entraînement, vous allez forcer la moitié restante de ces neurones à faire autant de travail que possible. Donc, cela empêche les choses où vous avez des neurones individuels prenant plus de travail qu'ils ne devraient. Vous avez même vu dans certains exemples que nous avons couru dans le terrain de jeu de Tensorflow, que parfois nous ne le faisons pas avec des neurones qui ont été à peine utilisés, et en utilisant drop out qui aurait forcé ce neurone à être utilisé plus efficacement. Concept donc très simple très efficace pour s'assurer que vous faites pleinement usage de votre réseau neuronal. Parlons de régler votre topologie une autre façon d'améliorer les résultats de votre réseau d' apprentissage profond est de jouer à des jeux avec le nombre de neurones que vous avez et le nombre de couches de neurones que vous avez. Une façon d'y faire face est juste l'essai et l'erreur. Tu sais, c'est ce qu'on a fait à Tensorflow Playground, mais tu sais, il peut y avoir une méthodologie. Et même vous pouvez commencer par la stratégie d'évaluation d'un réseau plus petit avec moins neurones dans les couches cachées, où vous pouvez évaluer un réseau plus grand avec plus de couches. Donc, en gros, vous voulez voir. Puis-je m'éloigner avec un réseau plus petit et toujours obtenir de bons résultats et juste continuer à le rendre plus petit jusqu'à ce que vous trouviez le plus petit, il peut être sûr, ou vous pouvez essayer de rendre votre réseau plus grand et plus grand et voir que vous savez à quel point il cesse de vous offrir plus d'avantages. Donc, vous savez, commencez à dimensionner les choses différemment et voyez ce qui fonctionne et ce qui ne fonctionne pas à nouveau. Il y a une sorte d'aspect effrayant comment tout ça fonctionne ensemble. Il est très difficile de comprendre intuitivement ce qui se passe à l'intérieur d'un réseau neuronal, un réseau d'apprentissage profond en particulier, donc parfois vous avez juste des orteils. Utilisez votre intuition pour essayer de régler la chose et obtenir le bon nombre de ressources est que vous avez besoin aussi, vous savez, vous savez, encore une fois dans les environnements informatiques modernes d'aujourd'hui. Parfois, tu ne t'en fous pas tant. C' est probablement bon. Les orteils ont un réseau neuronal profond qui a plus de neurones dont ils ont vraiment besoin, non ? Je veux dire, quel est le vrai coût de ça ces jours-ci ? Probablement pas beaucoup. Je dirai que plus de couches donneront souvent un apprentissage plus rapide que d'avoir plus de neurones et moins de couches. Donc, si vous vous souciez de la vitesse de convergence, ajouter plus de couches est souvent la bonne chose à faire. Ou vous pouvez également utiliser quelque chose appelé zoos modèle. Il y a en fait des bibliothèques de réseau neuronal pour excuser des problèmes spécifiques . Donc, si vous ne pensez pas être la première personne au monde à résoudre un problème de classification spécifique ou autre chose, vous essayez d'appliquer un réseau neuronal profond pour peut-être devrait en vérifier un. Les modèles sont là pour voir si quelqu'un a déjà trouvé la topologie optimale pour vous essayer d'atteindre au lieu d'essayer de réinventer la roue. Ok, les gens partagent ces choses pour une raison, et ça peut vous faire gagner beaucoup de temps. Donc c'est assez de théorie. Ça suffit de parler. Dans notre prochaine conférence, nous allons se salir les mains avec tensorflow et commencer à écrire du vrai code python pour implémenter nos propres réseaux neuronaux. 6. Présentation de Tensorflow: Si vous avez déjà fait des recherches dans le Deep Learning, vous avez probablement entendu parler de la bibliothèque TensorFlow. C' est un cadre très populaire développé par les gens de Google. Et ils ont eu la gentillesse de le rendre open source et librement disponible pour le monde entier. Parlons donc de ce qu'est TensorFlow et comment il peut vous aider à construire des réseaux neuronaux artificiels. La chose qui m'a surpris quand j'ai rencontré TensorFlow pour la première fois , c'était qu'il n'était pas vraiment conçu pour l'apprentissage profond au début, ni même pour les réseaux neuronaux en général. C' est un outil beaucoup plus général que Google a développé qui se trouve juste être utile pour développer l'apprentissage profond et les réseaux neuronaux. Plus généralement, il s'agit d'une architecture pour exécuter un graphique d'opérations numériques. Il ne s'agit pas seulement de réseaux neuronaux. Vous pouvez avoir n'importe quelle séquence d'opérations et définir un graphique de la façon dont ces opérations s'intègrent. Ce que TensorFlow fait en fait, c'est de savoir comment distribuer ce traitement sur les différents cœurs GPU de votre PC ou sur différentes machines d'un réseau. Et assurez-vous que vous pouvez faire des problèmes informatiques massifs de manière distribuée. À cet égard, cela ressemble beaucoup à Apache Spark. Si tu m'as suivi d'autres cours, tu m'as probablement entendu parler de Spark. C' est une technologie très excitante. Et Spark développe également ses propres capacités d'apprentissage automatique , d' intelligence artificielle et d'apprentissage profond. Donc, à certains égards, tensorflow est un concurrent d'Apache Spark. Mais il y a quelques différences clés dont nous devrions parler. Il ne s'agit pas seulement de distribuer des graphiques de calcul sur un cluster ou sur votre GPU. Vous pouvez également exécuter TensorFlow sur à peu près n'importe quoi. Donc, une chose qui est spéciale à propos TensorFlow est que je peux même l'utiliser sur mon téléphone si je le veux. Il n'est pas limité à l'exécution sur des ordinateurs d'un cluster dans un centre de données. C' est important parce que dans le monde réel, vous pourriez vouloir pousser ce traitement vers l'appareil de l'utilisateur final. Prenons l'exemple d'une voiture autonome. Vous ne voudriez pas que votre voiture s'écrase soudainement dans un mur juste parce qu'elle a perdu sa connexion réseau au Cloud. Maintenant, tu le ferais ? La façon dont cela fonctionne réellement est que vous pourriez pousser le réseau de neurones entraînés vers la voiture elle-même et réellement exécuter ce réseau neuronal sur l'ordinateur qui fonctionne intégré dans votre voiture. Parce que le levage lourd de l'apprentissage profond est la formation de ce réseau. Donc, vous pouvez faire cette formation hors ligne, pousser les poids de ce réseau vers votre voiture, qui est relativement petite. Et puis exécutez ce réseau neuronal complètement dans votre voiture elle-même. En étant capable d'exécuter TensorFlow et une variété d'appareils, il ouvre beaucoup de possibilités sur l'apprentissage profond à la périphérie, sur les appareils réels sur lesquels vous essayez de l'utiliser. Tensorflow est écrit en C plus sous le capot, tandis que Spark est écrit en Scala, qui s'exécute finalement au-dessus d' une JVM en descendant au niveau C Plus Plus avec TensorFlow, cela va vous donner plus de efficacité. Mais en même temps, il a une interface Python. Donc, vous pouvez lui parler comme vous le feriez n'importe quelle autre bibliothèque Python qui le rend facile à programmer et facile à utiliser en tant que développeur, mais très efficace et très rapide sous le capot. L' autre différence clé entre TensorFlow et quelque chose comme Spark est qu'il peut fonctionner sur des GPU. Un GPU est juste votre carte vidéo, la même carte vidéo que vous utilisez pour jouer à Fortnite ou tout ce que vous jouez. Vous pouvez réellement répartir le travail sur les cœurs du GPU de votre PC. Et c'est une configuration très courante d'avoir même plusieurs cartes vidéo sur un seul ordinateur et de l'utiliser pour obtenir plus de performances sur des clusters spécialement conçus pour le Deep Learning. De plus, TensorFlow est gratuit et il est fabriqué par Google. Juste le fait qu'il soit fait par Google a conduit à beaucoup d'adoption. Il existe des bibliothèques concurrentes sur TensorFlow, notamment Apache MXNet. Tensorflow en ce moment est toujours de loin le plus populaire. L' installation de TensorFlow est vraiment facile. Tout ce que vous avez à faire est d'utiliser les commandes Conda dans votre environnement Anaconda pour installer TensorFlow. Ou vous pouvez utiliser Anaconda Navigator pour tout faire via une interface utilisateur graphique. Il y a aussi un paquet GPU TensorFlow dash que vous pouvez installer à la place si vous voulez profiter de l'accélération GPU, si vous exécutez cela sous Windows, je n'y irais pas encore. J' ai eu des difficultés à faire fonctionner le GPU TensorFlow sur mon propre système Windows. Vous constaterez que beaucoup de ces technologies sont développées principalement pour les systèmes Linux fonctionnant sur un cluster. Donc, si vous exécutez sur un ordinateur spécialement conçu dans un cluster sur EC2 ou quelque chose qui est fait pour l'apprentissage profond. Allez-y et installez le GPU TensorFlow dash, bien qu'il soit probablement installé pour vous tous prêt. Parlons de ce qu'est TensorFlow. Qu' est-ce qu'un tenseur de toute façon ? Eh bien, c'est un autre exemple de terminologie prétentieuse fantaisie que les gens utilisent pour se faire paraître intelligents. À la fin de la journée, un tenseur est juste un nom fantaisie pour un tableau ou une matrice de valeurs. C' est juste une collection structurée de chiffres et c'est tout. C' est tout ce qu'un tenseur est. Utilisation. Tensorflow peut être un peu contre-intuitif, mais c'est similaire à la façon dont quelque chose comme Apache Spark fonctionnerait aussi. Vous n'exécutez pas les choses tout de suite. Au lieu de cela, vous créez un graphique de la façon dont vous voulez que les choses s'exécutent. Et quand vous êtes prêt à l'exécuter, vous dites, ok, TensorFlow va faire ça. Tensorflow va ensuite trouver le moyen optimal de distribuer et de paralléliser ce qui fonctionne sur l'ensemble de votre ensemble de GPU et d'ordinateurs de votre cluster. Jetons donc un coup d'oeil ici à l'application TensorFlow la plus simple au monde en Python. Tout cela va faire est d'ajouter un plus deux ensemble. Mais c'est un bon exemple illustré de ce qui se passe réellement sous le capot. Nous commençons par importer la bibliothèque TensorFlow. Nous allons l'appeler tf comme un raccourci. Nous allons commencer par dire qu'une variable de point égale à tf un nom de virgule est égal à a. Et tout ce qui fait est de configurer une variable dans TensorFlow, un objet variable qui contient une valeur unique et qui va par le nom d'un. Et tout ce qui fait est de configurer une variable dans TensorFlow, un objet variable qui contient une valeur unique et qui va par le nom d'un. nom est ce qui apparaîtra dans les outils de visualisation de votre graphique si vous utilisez ce genre de chose. Mais en interne affectera aussi cela à une variable en Python appelée a. Ensuite, nous mettons en place une variable B qui est assignée à la valeur deux et qui donne le nom B. Voici où la magie commence à se produire. Nous disons que F est égal à un plus b. Et vous pourriez penser que cela mettra le nombre trois dans la variable f, mais ce n'est pas le cas. F est en fait votre graphique. C' est la connexion que vous construisez entre les tenseurs a et b pour les additionner ensemble. Donc f égal à un plus b ne fait rien sauf établir cette relation entre a et B et leur dépendance ensemble sur ce graphique f que vous créez. Rien ne se passe en fait jusqu'à ce que nous ayons essayé d'accéder à la valeur de f, auquel points TensorFlow 2 utilise quelque chose appelé exécution désireuse pour exécuter réellement ce graphique à ce stade, il dira, d'accord, j'ai besoin de créer un graphique qui prend la variable a qui contient une et la variable B qui en contient deux et les ajouter ensemble. Il comprendra comment distribuer cette opération incroyablement compliquée. Je suis sarcastique, à travers tout votre groupe. Et cela finira par imprimer la valeur trois sous la forme d'un nouveau tenseur. Nous venons donc de créer la façon la plus compliquée imaginable de calculer un plus deux. Mais s'il s'agissait de tenseurs plus grands traitant de jeux de données plus volumineux ou, par exemple, d' un grand tableau ou d'une matrice de poids dans un réseau neuronal, cette distribution du travail devient importante. Donc, bien que l'ajout de 1 plus 2 n'est pas un exercice utile à faire avec le TensorFlow. Une fois que vous mettez cela à l'échelle nombreuses connexions dans un grand réseau neuronal, il devient très important de pouvoir distribuer ces choses efficacement. Alors, comment étendons-nous cette idée aux réseaux neuronaux ? Eh bien, le truc avec TensorFlow est que ce n'est pas seulement fait pour les réseaux neuronaux, il peut faire des choses comme la multiplication matricielle. Et il s'avère que vous pouvez penser à appliquer tous les différents poids et sommes qui se sont produits dans une seule couche d'un perceptron et d'un modèle qui n'est qu'une multiplication matricielle. Vous pouvez simplement prendre la sortie de la couche précédente dans votre perceptron multicouche et faire une multiplication matricielle avec une matrice qui décrit les poids entre chaque neurone des deux couches que vous calculez. Ensuite, vous pouvez ajouter un vecteur qui contient également les termes de biais. Donc, à la fin de la journée, vous pouvez modifier ce diagramme fantaisie ici de ce à quoi ressemble un perceptron et simplement le modéliser comme une multiplication matricielle en addition vectorielle. Revenez en arrière et lisez votre algèbre linéaire si vous voulez en savoir plus sur la façon dont cela fonctionne mathématiquement. Mais c'est juste une opération de multiplication matricielle simple avec l'addition vectorielle à la fin pour les termes de biais. En utilisant les API de niveau inférieur de TensorFlow. Nous faisons cela de la manière la plus difficile, mais il y a des API de niveau supérieur dans TensorFlow qui rendent beaucoup plus simple et plus intuitif la définition de réseaux neuronaux profonds comme nous décrivons TensorFlow à un niveau bas en ce moment, son but dans la vie est juste de distribuer opérations mathématiques sur des groupes de nombres sont tenseurs. Et c'est à nous de décrire ce que nous essayons de faire en termes mathématiques. Il s'avère que ce n'est vraiment pas si difficile à faire avec le réseau neuronal pour nous de calculer un réseau complet d'apprentissage profond de bout en bout. Il y a plus qu'un simple calcul des poids entre différentes couches de neurones. Nous devons vraiment former cette chose d'une manière ou d'une autre et l'exécuter quand on a fini. Donc, la première chose que nous devons faire est de charger les données d'entraînement contenant les fonctionnalités sur lesquelles nous voulons nous entraîner et les étiquettes cibles. Pour former un réseau de neurones, vous devez avoir un ensemble d'entrées connues avec un ensemble de réponses correctes connues que vous pouvez utiliser pour réellement descendre, converger vers la bonne solution de poids qui conduisent au comportement que vous voulez. Après cela, nous devons associer une sorte d'optimiseur au réseau. Tensorflow rend cela très facile à faire. Il peut s'agir d'une descente en pente ou d'une variation telle que l'atome. Nous exécuterons ensuite notre optimiseur en utilisant nos données d'entraînement. Et encore une fois, tensorflow rend cela assez facile à faire aussi. Enfin, nous évaluerons les résultats de notre réseau de formation à l'aide de notre jeu de données de test. Pour récapituler à un niveau élevé, nous allons créer une topologie de réseau donnée et adapter les données d'entraînement en utilisant la descente de gradient pour converger réellement sur les poids optimaux entre chaque neurone de notre réseau. Lorsque nous avons terminé, nous pouvons évaluer les performances de ce réseau à l'aide d'un jeu de données de test qu'il n'a jamais vu auparavant et voir s'il peut classer correctement les données sur lesquelles il n'a pas été formé. Un autre. Gotcha. Lorsque vous utilisez des réseaux neuronaux, il est très important de vous assurer que vos données d'entrée sont normalisées, ce qui signifie que tout est mis à l'échelle dans la même plage. En règle générale, vous voulez vous assurer que vos données en entrée ont une valeur moyenne de 0 et une variance unitaire. C' est juste la meilleure façon de faire fonctionner mathématiquement les différentes fonctions d'activation. Ce qui est vraiment important, c'est que vos entités en entrée soient comparables en termes d'ampleur. Sinon, il est difficile de combiner ces poids ensemble de manière significative. Vos entrées sont toutes au même niveau au bas de votre réseau neuronal et s'insèrent dans cette couche inférieure, il est important qu'elles soient comparables en termes de grandeurs. Donc tu ne finis pas par fausser les choses en attendant les choses de façon bizarre. Par exemple, si j'ai déjà créé un réseau de neurones qui essaie de classer les gens en fonction de leur âge et de leur revenu. L' âge peut varier de 0 à 100 ans, mais le revenu peut varier de 0 à un million. Ce sont des gammes très différentes. Donc, ils vont conduire à de vrais problèmes mathématiques qu'ils ne sont pas réduits à la plage correcte au début. Heureusement, la bibliothèque Python scikit-learn a un paquet de scaler standard que vous pouvez utiliser qui le fera automatiquement avec une seule ligne de code. Tout ce que vous avez à faire est de vous en servir. Et de nombreux jeux de données que nous utilisons lors de la recherche seront normalisés pour commencer. Un que nous sommes sur le point d'utiliser son déjà normalisé, donc nous n'avons pas vraiment à faire ça. Mais plus tard dans le cours, je vais vous montrer un exemple d'utilisation réelle scalaire standard. Nous avons parlé de la façon dont tout cela fonctionne à un niveau bas. Et dans TensorFlow 2, il est toujours possible d' implémenter un réseau de neurones complet essentiellement à partir de zéro. Mais dans TensorFlow 2, ils ont remplacé une grande partie de cette fonctionnalité de bas niveau par une API de niveau supérieur appelée Keras. Il est utile de comprendre comment tout fonctionne sous le capot d'abord. Travaillons donc à travers un exemple simple d'un réseau neuronal utilisant les API de niveau inférieur. Ensuite, après cela, nous verrons comment l'API Keras simplifie les configurations communes de réseau neuronal et met en évidence une grande partie de cette complexité de votre part. 7. Utiliser Tensorflow pour la reconnaissance à la main Partie 1: Ok, alors jouons avec tensorflow en utilisant son AP de niveau inférieur, je Donc vous obtenez plus d'une appréciation de ce qui se passe sous le capot, si vous voulez. Sur Windows va commencer par aller dans notre menu Démarrer et trouver le groupe Anaconda trois. Et à partir de là, ouvrez votre anaconda. Invite sur le maquereau dans X, bien sûr, vous allez juste ouvrir un terminal, qui vous invite à être bon. La première chose que vous voulez faire est de vous assurer que vous avez réellement installé tensorflow lui-même . Donc, si vous n'avez pas déjà pris soin de ça, vous pouvez simplement dire que Kanda installe tensorflow. Et je l'ai déjà fait, donc je ne ferai rien pour moi. Mais si vous avez besoin de l'installer ou de le mettre à jour, cela vous invitera à le faire. Donnez ça une seconde juste pour tout vérifier, on dirait qu'on est bons. Suivant. Voulez-vous voir le dans le répertoire où vous avez installé le matériel du cours ? Donc, pour moi, ce sera le deux-points CD C, la barre oblique inverse, lecours ml, cours ml, et à partir du type de répertoire des matériaux du cours dans Jupiter avec un cahier de mensonge. Je devrais faire apparaître votre navigateur Web préféré à partir d'ici trouver le portable Tensorflow et aller avant et ouvrir cela et commençons à jouer, donc nous allons commencer par exécuter l'application tensorflow la plus simple du monde que nous avons regardé dans le diapositives allaient juste ajouter les nombres un plus deux Ensemble en utilisant tensorflow, nous commençons par importer la bibliothèque Tensorflow elle-même et lui donnerons le nom. TF, tant que raccourci, créera deux variables dans tensorflow une appelée AM une appelée Be the Variable A aura le numéro un associé à elle, et la variable B sera initialisée avec le nombre deux. Nous disons alors que F est égal à un plus. B, qui ne met pas le numéro trois dans F f représente juste le graphique que nous définissons . Cela dit F, représente l'addition de tout ce qui est dans A et B ensemble. Donc rien ne s'est réellement passé ici, sauf pour construire ce graphique. Ce n'est que lorsque nous disons l'impression de points TF à la recherche de la sortie de F que Tensorflow utilisera ce qu'on appelle l'exécution impatiente pour exécuter ce graphique et évaluer ses résultats. Donc, à ce moment-là, il se déclenche et dit, Ok, nous avons ce vaisseau construit de A et B A en contient un. B contient deux. Ajoutons-les ensemble et obtenons la sortie du graphique F et imprimez-le. Et il pourrait en fait distribuer ça sur un cluster entier s'il le fallait. Mais évidemment, pour juste ajouter un plus deux, il n'y a pas besoin de tout ça. Mais voyons si ça marche. Allez-y et appuyez sur Maj entrer dans ce bloc après avoir cliqué à l'intérieur de celui-ci, et nous devrions obtenir le numéro trois. Assez sûr pour certains des trois de la NBA. Hé, ça marche. Alors faisons quelque chose d'un peu plus intéressant. Faisons réellement la reconnaissance de l'écriture manuscrite en utilisant tensorflow. C' est un exemple assez commun à utiliser lorsque les gens apprennent tensorflow. Fondamentalement, c'est un ensemble de données de 70 000 échantillons d'écriture manuscrite où chaque échantillon représente quelqu'un qui essaie de dessiner les nombres zéro à neuf. Nous avons donc 70 000 images qui sont 28 sur 28 images de personnes dessinant le nombre zéro à neuf. Et notre défi est de créer un réseau neuronal qui regarde ces images et tente de déterminer quel nombre elles représentent. Maintenant, c'est un exemple très commun quand les gens apprennent le tensorflow peut-être un peu trop commun. Mais il y a une bonne raison à ça. Il est intégré dans le tensorflow. C' est facile d'envelopper la tête. C' est vraiment bon pour apprendre. Et notre petite torsion sur elle, que vous ne verrez pas dans beaucoup d'autres endroits, utilise en fait des yeux AP de niveau inférieur pour implémenter ce réseau neuronal pour commencer. Alors plongons ici. Alors passons en train de charger ces données et de les convertir au format dont nous avons besoin. La première chose que nous allons faire est d'importer les bibliothèques dont nous avons besoin, et nous allons utiliser numb pie et aussi tensorflow lui-même et le M. Cet ensemble de données lui-même fait partie des flux tenseurs carry stock data sets package donc nous importons juste que et que ces données soient accessibles à nous définiront certaines variables pratiques. Ici. Numb classes est 10 qui représente le nombre total de classifications pour chacune de ces images. Encore une fois, ceux-ci peuvent représenter les nombres zéro à neuf, et c'est un total de 10 classifications possibles. Nos caractéristiques sont 784 en nombre, et nous obtenons cela en disant que chaque image est une image 28 par 28, droite, donc nous avons 28 fois 28, soit 784 pixels individuels pour chaque image d'entraînement que nous avons . Ainsi, nos fonctionnalités d'entraînement sont chaque pixel individuel de chaque image individuelle que nous utilisons pour former notre réseau neuronal. Commençons par charger l'ensemble de données lui-même afin que nous dirons et Mr sur les données de chargement pour réellement récupérer ces données de TENSORFLOW. Et nous allons mettre l'ensemble de données résultant dans ces variables ici. Donc, la convention selon laquelle nous utilisons habituellement ce verset supplémentaire fait référence à vos données d'entité. C' est votre, ah, dans notre cas, les images elles-mêmes. Et pourquoi se réfère à vos étiquettes ? Donc, cela représentera si cette image représente les nombres zéro à neuf. De plus, nous divisons les choses en ensembles de données de formation et de test. Donc avec l'amnistie, nous avons 60 000 échantillons d'entraînement et 10 000 échantillons de test. Cela signifie que nous allons seulement former notre réseau neuronal à l'aide de ces 60 000 échantillons d' entraînement et que nous détenions un côté de 10 000 échantillons de test afin que nous puissions réellement tester le fonctionnement du réseau formé sur des données qu'il n'a jamais vues auparavant. C' est ainsi que nous évitons le surajustement. En fait, nous évaluons notre modèle sur la base de données que le modèle n'a jamais vues auparavant, sorte qu'il n'a pas eu la chance de s'adapter trop à ces données pour commencer. Ensuite, nous devons convertir cela en valeurs à virgule flottante 32 bits, car c'est ce que Tensorflow attend. Donc, nous commençons par créer ces rayons de bûcher engourdis des données d'entraînement et de test sous-jacentes et convertissons cela pour terminer peed off low 32 types de données. Nous aplatirons ensuite ces images afin qu'elles soient présentées en deux dimensions 28 par 28 images. Et il y a des façons de construire des réseaux neuronaux. Je peux gérer des données bidimensionnelles. On y arrivera. Mais pour l'instant, nous allons garder les choses simples et juste traiter. Chaque image est un tableau unidimensionnel ou vecteur ou tenseur, si vous voulez, Sénateur en 84 caractéristiques 184 pixels. Dans ce cas, la commande reshape est ce qui fait que Donc, en disant remodeler négatif un engourdi présente certaines fonctionnalités. Encore une fois, c'est 784 qui va aplatir ces rayons bidimensionnels jusqu'à une dimension 784 10 sirs. Donc ça va avoir un nouveau train X et un nouveau test X qui peut contenir ces capteurs une dimension de 784 pixels . Ensuite, nous devons normaliser nos données. Nous en avons parlé aussi dans les diapositives. Ainsi, les données brutes provenant de cet ensemble de données ont tous les représentants de pixels et la valeur entière comprise entre zéro et 2 55 zéro représente un pixel noir 255 représente un pixel blanc, et les valeurs entre les deux représentent différentes nuances de gris. Nous devons l'échelle jusqu'à la plage de 0 à 1. Donc, pour ce faire, très simplement, nous divisons tout par 2 55 nous avons fini. D' accord. Donc nous avons préparé, nettoyé et nettoyé nos données ici. Faisons d'autres trucs avec ça. Commençons par envelopper nos têtes autour de ce à quoi ressemblent ces données. C' est donc toujours une bonne idée de visualiser vos données avec lesquelles vous allez vous entraîner et de comprendre ses bizarreries et ses nuances avant d'essayer d'implémenter un algorithme. C' est ce que nous faisons dans cette fonction d'exemple d'affichage ici. Ça va nous prendre des commentaires. Un numéro spécifique d'un échantillon de nos données de formation que nous voulons examiner, et nous allons simplement en extraire l'étiquette. Alors pourquoi s'entraîner à nouveau ? Les étiquettes de formation sont-elles le nombre zéro à neuf que cette image représente ? Et puis nous allons remodeler ça en deux dimensions 28 par 28 minutes pour que nous puissions réellement l' afficher à l'écran. Nous allons lui donner un titre, montrera que les images en deux dimensions grande échelle et juste le montrer. Alors allons de l'avant et commençons ça. En fait, n'a pas lancé ce marché précédent avec, n'est-ce pas ? Donc, avant d'oublier, retournez à ce bloc où nous préparons nos données et changeons d'entrée pour exécuter cela. Et maintenant que nous avons fait cela, nous pouvons réellement visualiser les données que nous avons chargées Cliquez ici et déplacez Entrée. Et voici un exemple de point d'ensemble de données. Donc l'échantillon numéro 1000 est cette image ici, et nous pouvons voir qu'elle est censée représenter le nombre zéro et, bien, ça ressemble à un zéro. Ce n'est donc pas particulièrement difficile pour nous d'apprendre. Espérons que tu pourrais jouer ici. Essayez différents numéros d'échantillon est d'avoir une meilleure idée de ce que l'état est. Essayons 1500. Il s'avère que c'est le numéro neuf, euh un peu bizarre, donc ça pourrait être un petit défi. Et si, je ne sais pas, 1700. C' est le bon. On dirait un. Mais si vous continuez, vous savez, fouiller ici et à essayer différentes valeurs, vous finirez par trouver des valeurs bizarres. Par exemple, c'est un assez drôle à la recherche. Mais vous savez, vous pouvez voir qu'il existe une grande variété de capacités d'écriture manuscrite des personnes qui ont fait ces données de test . Donc c'est un bon moyen d'envelopper votre tête autour de ce que nous avons à faire. Aller à l'avant. Nous pourrions passer cette visualisation à l'étape suivante et visualiser réellement ces rayons unidimensionnels qui formaient notre réseau neuronal. Donc, cela nous donnera une meilleure image de l'entrée que notre réseau neuronal va voir et en quelque sorte nous faire apprécier juste ce qui se passe ici et comment cela est différent, ah, citation unquote le pense. Ce que nous allons faire ici, c'est remodeler tout en ramenant à des tableaux unidimensionnels de 784 pixels. Prenez ceci sur un de nos ensembles de données d'entraînement ici, et nous allons manger à travers les 500 premiers échantillons et pouvons commander huit images individuelles à cette image originale de zéro. Donc nous ne le sommes pas. Prenez essentiellement les 500 premières images d'entraînement, aplatifiez-les en tableaux unidimensionnels du voyage central pour les valeurs d'épître, puis combinez tout cela en une seule image bidimensionnelle qui tracera. Allons de l'avant et cliquez dessus et majuscule entrée pour l'exécuter. Et c'est intéressant. Donc, cela vous montre l'entrée qui va dans notre réseau neuronal réel pour chaque image individuelle pour les 500 premières images, et vous pouvez voir que votre cerveau ne fait pas un très bon travail du tout pour comprendre ce que ces choses représenter, n'est-ce pas ? Donc, chaque ligne de cette image représente les données d'entrée entrant dans notre réseau neuronal. Donc, notre réseau neuronal va être capable de prendre chacune de ces rangées de données une dimension et essayer de comprendre quel nombre représente dans l'espace bidimensionnel que vous puissiez voir qu'il pense au monde ou perçoit le monde. Recevoir ces images plus spécifiquement d'une manière très différente de celle de votre propre cerveau. Vous savez, c'est parfois une hypothèse dangereuse de penser que les réseaux neuronaux fonctionnent de la même façon que votre cerveau. Ils sont inspirés par votre cerveau, mais ils ne fonctionnent pas toujours de la même façon. Distinction si importante là. Bon, commençons à mettre en place notre réseau neuronal pour commencer par définir des paramètres ou des hyper paramètres, si vous voulez, qui ont défini comment l'entraînement fonctionnera réellement. Le taux d'apprentissage est fondamentalement à quelle vitesse va descendre à travers Grady et dissidence en essayant de trouver les valeurs d'automne. L' attente optimale pour nos étapes d'entraînement réseau neuronal est fondamentalement combien d'entraînement à Box va réellement mener combien de fois va réellement passer et itérer sur l' ensemble de ce réseau neuronal essayant de former les tailles de chauve-souris. Combien d'échantillons aléatoires seront prélevés à partir de nos données d'entraînement à chaque étape et déplacés vers le haut est à quelle fréquence affichera notre progression alors que nous formons ce réseau neuronal et soulignons Hidden représente combien de neurones cachés auront dans notre couche cachée de sorte que la couche intermédiaire des neurones et notre réseau neuronal auront 512 neurones à l'intérieur. Et tu peux jouer avec ce numéro. Voyez quel nombre vous convient le mieux. Ce sont tous des hyper paramètres, et le sale petit secret de l'apprentissage automatique est que Ah, beaucoup de votre succès dépend de la façon dont vous pouvez deviner les meilleures valeurs pour ceux-ci. Beaucoup de choses sont juste des essais et des erreurs, essayant de trouver la bonne valeur du taux d'apprentissage, le bon nombre de neurones cachés. Ces chiffres sont essentiellement déterminés par l'expérimentation. Donc, vous savez, ce n' est pas tout à fait la science exacte que vous pourriez penser que c'est ISS. Allons de l'avant et exécutons ce décalage de bloc. Entrez. Et nous allons également découper notre ensemble de données ici et le préparer pour la formation des utilisateurs tensorflow. Nous allons donc utiliser ah TFT ensemble de données obsolètes pour créer ce qu'on appelle un objet de jeu de données dans le tensorflow à partir de nos images d'entraînement et étiquettes de formation. Nous utiliserons ensuite cet ensemble de données pour créer nos lots individuels avec lesquels nous avons utilisé pour former le réseau neuronal. Donc mélanger 60 000 signifie que je vais mélanger les 60 000 images d'entraînement que je viens les mélanger au hasard. Je vais ensuite les regrouper en lots de 250 pré récupérer le 1er lot. Donc j'ai ça prêt à partir. C' est tout ce qui se passe ici. Maj Entrée. Bon, maintenant nous allons commencer à construire notre réseau neuronal lui-même commencera par créer les variables qui stockeront les poids et les termes biaisés pour chaque couche de notre réseau neuronal. Donc, nous commençons par, ah, initialiser toutes les variables avec des variables aléatoires juste pour nous assurer que nous avons un ensemble de paramètres aléatoires initiaux là pour nos pondérations. Nous voulons commencer par quelque chose, et faute de quelque chose de mieux commencera avec des valeurs aléatoires. En fait, votre choix de valeurs d'initialisation ah peut faire une grande différence dans la façon dont vos réseaux neuronaux fonctionnent. Il vaut donc la peine d'examiner comment choisir les bonnes valeurs initiales pour un type donné de réseau neuronal. Nous configurons nos poids ici pour la couche cachée, appellerons ces poids H et nous utiliserons notre fonction normale aléatoire que nous venons de définir ici. Pour initialiser ces pondérations aléatoirement et cachées comme vous pourriez vous en souvenir à nouveau, nous allons regarder ici à nouveau. Cinq ans 12. Donc, cela va créer 512 variables qui contenaient les poids pour les neurones cachés. Nous avons également besoin d'un ensemble de poids sur notre couche de sortie de 10 neurones de sortie. Donc, la sortie va être 10 neurones où chaque neurone représente la probabilité d' être que les classifications données zéro à neuf, nous avons également besoin d'avoir des biais associés à ces deux couches, donc être l'ensemble de avec notre couche cachée. Encore une fois, il y en aura 5 à 12. Et nous avons également des biais associés à sa couche de sortie de neurones ténor à la couche de sortie également. Ce seront des zéros initialisés. Ok, donc un peu différent là pour les biais par défaut. Nous voulons que nos préjugés soient nuls. Allons-y et exécutons ça. D' accord, aller de l'avant. 8. Utiliser Tensorflow pour la reconnaissance à la main partie 2: Maintenant, nous allons mettre en place la topologie de notre réseau neuronal lui-même. C' est ce que le réseau neuronal fait ici. Et comme nous l'avons dit dans les diapositives, vous pouvez définir ces réseaux neuronaux fantaisie est juste matrice simple, la multiplication et les fonctions d'addition ici, non ? Donc, nous allons commencer par dire TF dot Matt Mole. C' est juste une multiplication matricielle de nos neurones en entrée, qui est les 784 pixels bruts avec les 512 poids dans notre couche cachée de neurones là sorte que la multiplication matricielle multiplie chacune de ces valeurs d'entrée par les poids dans ce calque caché. Nous disons ensuite point TF ajouter à ajouter dans les termes biaisés, qui sont à nouveau stockés dans la variable B que nous venons de définir ci-dessus. Ok, ensuite, nous devons appliquer une fonction sigmoïde à la sortie de cette couche cachée. Donc c'est fondamentalement la fonction d'activation sur chaque caché ou sur Ok, c'est tout ce qui se passe. Ils sont très simples. La couche de sortie le fera à nouveau, donc nous allons dire, faire une multiplication matricielle donc nous allons dire, avec nos poids de sortie et la couche cachée, puis nous ajouterons ces biais de sortie à la fin aussi, et nous appellerons soft Max à réellement normaliser ces neurones de sortie à une probabilité finale de chaque classification individuelle. Tellement doux max encore. C' est juste une astuce mathématique pour prendre les sorties de ces réseaux neuronaux et convertir ces valeurs neuronales en ce que nous pouvons interpréter comme une probabilité que chaque classification individuelle que ces neurones représentent soit correcte. Allez-y et exécutez ça. Et c'est aussi rapide. Rappelez-vous encore que tout ce que nous faisons est de définir notre graphique. À ce stade, on ne s'entraîne pas encore ou ne dirige rien, mais ouais, tu prends le temps de nouiller sur ça ? Nous avons essentiellement construit les excuses du réseau neuronal lui-même. La prochaine chose que nous n'avions pas besoin de faire est de savoir comment réellement former ce réseau neuronal , non ? Donc, encore une fois, nous faisons ça à la dure, donc nous devons écrire ceci à la main. Nous commencerons par définir notre fonction de perte et son entropie croisée appelée. Fondamentalement, c'est une façon de faire Grady et la dissidence est de fournir une échelle arythmique log, et cela a pour effet de pénaliser les classifications incorrectes beaucoup plus que celles qui sont proches de la bonne réponse. C' est propriété pratique pour faire passer l'entraînement rapidement. Donc, dans cette fonction va passer dans les choses. Pourquoi ? Pred est les valeurs prédites qui sortent de notre réseau neuronal et pourquoi vrai sont les étiquettes vraies connues qui sont associées à chaque image. Nous devons donc parler d'un codage à chaud à ce stade. Nous parlons de cela quand nous parlons de l'ingénierie des fonctionnalités dans le cours, mais dans l'ordre peut comparer cette valeur connue que l'étiquette connue, qui est un nombre de 0 à 9 à la sortie de ce réseau neuronal. Rappelez-vous, la sortie du réseau neuronal est en fait 10 neurones différents où chacun représente la probabilité d'une classification donnée. Il compare effectivement cela à la valeur correcte connue. Nous devons convertir ce nombre correct connu dans un format similaire, donc nous allons utiliser un codage à chaud. C' est mieux compris avec un exemple. Donc, disons que nous savons que la réponse pour l'étiquette correcte connue pour une image est une. Nous serions un codage à chaud que comme un tableau de 10 valeurs ici, où chaque valeur représente la probabilité de ah, que les classifications données, puisque nous savons avec 100% de certitude que cette image était un. Nous pouvons dire que pour les classifications zéro, il y a 0 % de chance pour le classement, il y a 100 % de chances de ce point. Oh, et pour deux, ce sera zéro pour 30 ainsi de suite et ainsi de suite. Donc, c'est un codage à chaud. Vous créez simplement une représentation binaire d'une valeur entière, si vous voulez. Donc le numéro un est représentatif. 0100000 Chacun de ces emplacements dans le tableau représente une valeur de classification différente , ce qui rend juste plus facile pour les mathématiques de travailler et de construire des choses. Bon, donc nous commençons, comme l'encodage, cette étiquette connue pour un tableau codé et chaud . Nous faisons ensuite quelques écrêtage leur pour éviter quelques problèmes mathématiques numériques qui enregistrent zéro. Et puis nous pourrions juste comparer cela Ah, et calculer le terme réel d'entropie croisée en faisant réduire certains pour passer à travers l'ensemble de toutes les valeurs dans ce patch et en utilisant cette comparaison arythmique log comme nous avons dit de faire réellement croiser entropie sans propriété arythmique log. Alors allons de l'avant et ah, décalage, Entrée Pour le faire à nouveau, les choses clés ici sont réduites et réduisent certains, qui signifie que nous allons appliquer ceci sur tout le lot en une seule fois. D' accord. Ensuite, nous devons définir ce qu'on appelle un optimiseur, et dans ce cas, nous allons utiliser un Grady stochastique et une dissidence. Nous en avons déjà parlé, et nous utiliserons notre paramètre hyper de taux d'apprentissage, qui voudra encore une fois régler l'expérimentation plus tard. Teoh, définissez cet optimiseur. Nous devons écrire une fonction pour exécuter cette optimisation. Et encore une fois avec le niveau inférieur tensorflow ap yeux. On doit faire ça à la dure. On va utiliser une bande radiante pour faire ça automatiquement. Ce que cela fait, c'est que vous pouvez voir ici que c'est en fait appeler notre fonction de réseau neuronal qui définit la topologie de notre réseau neuronal. Nous allons calculer la fonction de perte sont la fonction d'entropie croisée que nous avons définie ci-dessus aussi bien. Donc, c'est tout lier ensemble et en fait nous permettant d'optimiser ce réseau neuronal au sein de cette seule fonction ici. Donc pas terriblement important de comprendre ce qui se passe ici à un niveau bas, vous pouvez en quelque sorte comprendre ici à travers les commentaires, nous, euh nous mettons à jour nos variables au fur et à mesure que nous le traversons. Marchez ici. Nous calculons les INT Grady puis nous mettons à jour nos poids et biais à l'étape d'entraînement facile. Donc ce code est ce qui est de calculer de nouveaux poids et biais à travers chaque passe d'entraînement à nouveau, Cela va être beaucoup plus facile en utilisant la caresse de niveau supérieur AP I Donc en ce moment nous vous montrons juste ceci pour vous donner une appréciation de ce qui se passe sous le capot. Allons de l'avant et changeons. Entrez celui-là aussi. Bon, maintenant on a tout ce dont on a besoin. Nous avons défini la topologie de notre réseau. Nous avons les variables définies pour nos pondérations et nos biais. Nous avons une fonction perdue définie, qui est l'entropie croisée, et nous avons une fonction d'optimisation qui lie tout ensemble appelé Run optimisation. Allons de l'avant et commençons à entraîner cette chose. C' est ce qui se passe ici. Oh, attends. Encore une chose. Nous avons aussi besoin d'une mesure de précision, donc une fonction de perte ne suffit pas. Nous voulons également afficher la précision réelle à chaque étape deux et tout ce que fait cette mesure de précision est dit, comparons l'argument maximum réel de chaque tableau de sortie qui va correspondre à notre seule valeur codée à chaud. Et comparez cela à la seule valeur connue, codéeet chaude , codée que nous avons pour cette étiquette. Donc c'est juste une façon de rester. On va appeler, me réduire à calculer la précision de chaque prédiction individuelle et à la moyenne sur l'ensemble des jours. C' est donc ce que fait notre mesure de précision ici aussi. Maj, entrez. Et maintenant, on peut le lancer pour que vous puissiez voir qu'on a fait tout le poids lourd. Maintenant, c'est assez simple de le faire. Donc, pour chaque étape d'entraînement, nous allons prendre un lot à partir de nos données d'entraînement. N' oubliez pas que nous avons créé ces lots plus tôt en utilisant un ensemble de données au cours des étapes de formation. Ça va être ah, 3000. Je crois qu'on l'a dit. Et pour chaque lot à chaque étape de l'entraînement, nous allons exécuter l'optimisation. Donc, c'est appeler cette fonction que nous avons qui a tout lié ensemble pour appliquer notre optimisation sur notre réseau neuronal dans le calcul des poids et des biais optimaux à chaque étape et oui, toutes les 100 étapes. C' est ce qu'est l'étape d'affichage. Nous mettrons nos progrès au fur et à mesure. Donc, tous les 1/100 époques, nous allons réellement, euh, exécuter notre réseau neuronal ici sur le lot actuel et obtenir un ensemble de prédictions pour ce lot de 250 valeurs là-bas et calculer l'entropie croisée sur cela pour obtenir un un instantané de notre fonction de perte actuelle et une précision de calcul à ce sujet également. Tash, vous obtenez une mesure de notre précision à chaque état afin que nous puissions voir cela converger au fil du temps pour chaque 100 pas tout au long de nos 3000 étapes d'entraînement ou cette boîte, si vous voulez. Allons de l'avant et donnons le coup d'envoi. Et c'est là que se passe l'action. Donc cela va itérer sur une boîte de plus de 3000 F et nous pouvons voir cette précision changer fur et à mesure que nous allons. C' est un peu intéressant de regarder ça parce que la précision fluctue un peu pendant que nous allons la peur Donc vous savez, vous pouvez dire ce genre de peut-être s'installer dans un petit minima local ici et travailler son chemin hors de ces et trouver de meilleures solutions au fil du temps. Mais au fur et à mesure, il commencera à converger vers de meilleures valeurs. Donc, vous savez, nous avons commencé avec Justin 84% de précision. En ce moment, nous sommes à environ 90 4%, mais c'est toujours un peu partout. Donnons-lui un peu plus de temps assez fermement dans les années 90 à ce stade. Donc c'est bien. 90 trois, je dirais jusqu'à 2000 cette boîte. Souviens-toi, on va monter à 3000 et encore, tu sais, tu vas juste devoir regarder ça et voir où ça commence à converger. Nous pourrions nous arrêter tôt pour savoir à quel moment nous arrêtons réellement d'obtenir une amélioration. Mais vous avez un peu besoin d'un globe oculaire du premier pour avoir une idée du nombre de variole dont vous avez vraiment besoin. On est presque là et on dirait qu'on ne va pas faire beaucoup mieux que 93% de précision. Donc nous l'avons là. Nous avons plus de 3000 cette boîte, nous avons fini avec une précision de 92,8% et cela est en fait rappeler l'utilisation de notre ensemble de données de formation. Il y a donc une possibilité que nous soyons trop ajustés ici pour vraiment évaluer à quel point ce modèle fonctionne. Nous voulons l'évaluer sur l'ensemble de données de test sur des données qu'il n'a jamais vues auparavant. Alors allons de l'avant et utilisons cet ensemble de données de test que nous avons mis de côté au début et exécutons le réseau neuronal dessus et appelons notre fonction de précision pour voir à quel point il fonctionne sur images de test de données qu'il n'a jamais vues auparavant. 93 %. Pas si mal, tu sais. Je veux dire, on pourrait faire mieux. Mais pour une prise très simple d'utiliser tensorflow et de mettre en place un réseau de neurones très simple avec une seule couche cachée, ce n'est pas trop mal. Nous ferons mieux tout au long du parcours. On va essayer différentes techniques, mais on recommence encore une fois. Il est bon de comprendre vos données, visualiser les choses, voir ce qui se passe réellement sous le capot. Jetons donc un coup d'oeil à certaines de ces images mal classées et obtenons une idée plus précise de la qualité de notre modèle. Jetons un coup d'oeil à quelques exemples d'images qu'il n'a pas classifiées correctement et voyons quel point ces erreurs sont pardonnables. C' est donc ce que fait cette fonction. Fondamentalement, nous passons par 200 images qui étaient connues pour être incorrectes. Jetant un coup d'oeil à la valeur prédite réelle, prenant ainsi art max sur le tableau de sortie de la couche de neurones de sortie. Et en comparant cela aux étiquettes correctes connues. Et, si ce n'est pas correct, imprimera avec l'étiquette d'origine et l'embout prédit de l'étiquette. Avoir une idée de ce qui se passe ici. Maj entrée. Très bien, donc ce sont des exemples assez désordonnés dans cet exemple. On savait que ce type essayait de dessiner cinq. On pensait que c'était 1/6. Ouais, je ne peux pas comprendre ça. Ouais, je veux dire, c'est vraiment un vilain cinq, et c'est une bonne affaire là-bas de dire que c'était un six. Donc c'est un cas où votre cerveau humain ne pourrait pas vraiment faire beaucoup mieux. Je ne comprendrais pas ça. C' est un cinq, comme ça ressemble à un squiggle. Celle-là, euh, notre meilleure hypothèse pour mon modèle était un six. La personne avait l'intention de quatre qui ne ressemble pas à un quatre pour moi. Je veux dire, on dirait que je ne sais pas ce qui est arrivé au bras du gars quand il le dessinait. Mais encore une fois, vous savez que cela vous permet d'apprécier à quel point ça marche ou pas. Ah, celui-là. Je ne sais pas comment notre modèle pensait que c'était un sept. C' est un six très bizarre, mais ressemble à un sept, mais ressemble à un sept, de toute façon, celui-là, aussi un peu méchant, ressemble à deux pour le cerveau. toute façon, celui-là, aussi un peu méchant, C' est vraiment drôle, écrasé, étrange à regarder, mais ah, c'est un exemple où votre cerveau fait un meilleur travail que le simple réseau neuronal. Mais dans l'ensemble, vous savez, ce sont en grande partie des erreurs pardonnables. Quelqu' un où j'ai foiré était des exemples assez bizarres et désordonnés comme, Qu'est-ce que c'est ? Je suppose que c'est censé être deux. On suppose que c'était un neuf. Tu sais, je pouvais vraiment voir ça aller de toute façon. Donc, euh, pas trop méchants, tu sais ? Quoi qu'il en soit, si vous voulez jouer avec, je vous encourage à le faire. Voyez si vous pouvez améliorer les choses. Donc, comme nous en avons parlé, il y a beaucoup de paramètres hyper différents ici pour jouer avec le taux d'apprentissage. Combien de neurones cachés avons-nous ? Et donc essayer différentes valeurs. Essayez différents taux d'apprentissage. Essayez plus de neurones, moins de neurones. Voyez quel effet qui vient de jouer avec elle. Parce que dans le monde réel, c'est ce que vous devez faire. Essayez d'ajouter un deuxième calque masqué même ou différentes tailles de lot ou un nombre différent de cette zone. Il suffit de se salir les mains et d'avoir une bonne idée de la façon dont ces différents paramètres affectent la sortie dans les résultats finaux que vous obtenez. Alors donne-lui un coup de feu. Et si vous pouvez obtenir une précision de plus de 93 %, nous aimerions en savoir plus dans les Q et A. 9. Présentation Keras: Nous avons donc examiné le développement de réseaux neuronaux en utilisant une sorte de tensorflow des yeux AP de niveau inférieur . Où au lieu de vraiment penser aux neurones ou aux unités, vous pensez plus à 10. Les sirs et la maitresse les facilitent et les multiplient directement ensemble, et c'est une façon très efficace de le faire. Mais ce n'est pas vraiment intuitif. Cela pourrait être un peu déroutant, surtout quand vous commencez à essayer d'implémenter un réseau neuronal en ces termes. Heureusement, il y a, ah, AP de niveau supérieur que j'ai appelé caresse qui est maintenant intégré dans Tensorflow. Il s'agissait d'un produit distinct qui était au-dessus de Tensorflow. Mais à partir de tensorflow 1.9, il a en fait été incorporé dans le tensorflow lui-même comme une alternative, niveau plus élevé a p I que vous pouvez utiliser. Et c'est vraiment sympa parce qu'il est vraiment conçu pour l'apprentissage profond. Donc, tout le code est très construit autour du concept de réseaux neuronaux artificiels, et il rend très facile de construire les couches de réseau neuronal et de les relier ensemble et d'utiliser différentes fonctions d'optimisation sur eux. C' est beaucoup moins de code et beaucoup moins de choses qui pourraient mal tourner. En conséquence, un autre avantage de la caresse dans, en plus de sa facilité d'utilisation est son intégration avec facilité. Psych Il a appris la bibliothèque. Donc, si vous êtes habitué à faire l'apprentissage automatique en python, vous utilisez probablement beaucoup d'apprentissage psychique et en utilisant la caresse. Vous pouvez réellement intégrer vos réseaux neuronaux profonds avec l'apprentissage psychique. Et vous avez peut-être remarqué dans notre conférence précédente que nous avons perdu sur le problème de faire réellement un test formé ou une validation croisée sur notre réseau neuronal parce que cela aurait été une sorte de grosse douleur dans les fesses, mais cela aurait été psychique, il apprend. Il est très facile de faire une validation croisée et, comme, d'effectuer une analyse et une évaluation appropriées de ce réseau neuronal. Il est donc plus facile d'évaluer ce que nous faisons et de l'intégrer à d'autres modèles ou même chaîne ah, réseau neuronal avec d'autres techniques d'apprentissage profond ou d'apprentissage automatique. Il y a aussi beaucoup moins à penser, et cela signifie que vous pouvez souvent obtenir de meilleurs résultats sans même essayer. Vous savez, avec tensorflow, vous devez penser à chaque petit détail à un niveau d'algèbre linéaire de la façon dont ces réseaux neuronaux sont construits parce qu'il ne supporte pas vraiment nativement les réseaux neuronaux hors de la boîte. Vous devez comprendre, comment puis-je multiplier tous les poids ensemble ? Comment ajouter les termes de biais ? Comment appliquer un optimiseur ? Comment définir une fonction de perte ? Des choses comme ça, alors que les carats peuvent s'occuper de beaucoup de ces détails pour vous. Donc, quand il y a moins de choses pour vous à foirer et plus de choses que vous pouvez supporter pour vous en termes d'optimisation des choses où vous essayez vraiment de faire souvent, vous pouvez obtenir de meilleurs résultats sans nous faire beaucoup de travail, ce qui est génial. Pourquoi est-ce important ? Eh bien, plus vite vous pouvez expérimenter et prototyper des choses, meilleurs seront vos résultats. Donc, s'il est beaucoup plus facile pour vous d'essayer différentes couches dans votre réseau neuronal, vous savez, différentes excuses, différents optimiseurs, différentes variations. Ce sera beaucoup plus facile et plus rapide pour vous de converger sur le type optimal de réseau neuronal pour le problème que vous essayez de résoudre. Alors que de Tensorflow est en train de poser un tas de barrages routiers pour vous en chemin. En fin de compte, vous n'avez que tellement de temps à consacrer à ces problèmes, est-ce pas ? Ainsi, plus vous pouvez passer de temps sur la topologie et le réglage de votre réseau neuronal, et moins sur sa mise en œuvre, meilleurs seront vos résultats à la fin de la journée. Maintenant, vous trouverez peut-être que Paris est finalement un outil de prototypage pour vous. Ce n'est pas aussi rapide que d'aller directement à Tensorflow. Donc, vous savez, parfois vous voulez converger sur la topologie voulue, puis revenir en arrière et implémenter cela à la couche tensorflow. Mais encore une fois, juste que l'utilisation du prototypage seul vaut bien la peine. Ça rend la vie beaucoup plus facile. Alors regardons de plus près. Et encore une fois la caresse est juste une couche au-dessus de tensorflow qui rend l'apprentissage profond beaucoup plus facile . Tout ce que nous devons faire, c'est commencer par importer ce dont nous avons besoin. Nous allons donc importer la bibliothèque de caresses et quelques modules spécifiques à partir de celle-ci. Nous avons ici les données d'amnistie que nous allons expérimenter avec le modèle séquentiel , qui est un moyen très rapide d'assembler les couches d'un réseau neuronal. Nous allons également importer les couches denses et décrochantes, de sorte que nous pouvons réellement ajouter de nouvelles choses à ce réseau neuronal pour le rendre encore meilleur et éviter tout ajustement excessif. Et nous allons importer l'optimiseur de problèmes RMS, qui est ce que nous allons utiliser pour notre Grady et la dissidence. Maj, entrez et vous pouvez voir qu'ils ont déjà chargé caresse juste en important ces choses. Il utilise Tensorflow est le backend. Allons de l'avant et chargeons l'ensemble de données d'amnistie que nous avons utilisé dans l'exemple précédent. La version de Paris est un peu différente, a en fait 60 000 échantillons d'entraînement contre 55 000 encore 10 000 échantillons de test, et ce n'est qu'une opération d'une seule ligne. Bon, donc maintenant nous devons, comme avant, comme avant, convertir ceci à la forme que Tensorflow attend sous le capot. Nous allons donc remodeler les images d'entraînement pour qu'elles soient 60 000 par 7 84 Encore une fois, nous allons toujours les traiter comme des images d'un D. Nous allons les aplatir tous en remorquant une rose D de 784 pixels pour chaque image 28 par 28 . Nous avons également notre ensemble de données de test de 10 000 images, chacune avec 784 pixels de paix et nous allons explicitement projeter les images comme des valeurs flottantes de 0,32 bit , et c'est juste pour rendre la bibliothèque un peu plus heureuse. De plus, nous allons normaliser les choses par 2 55 Donc, les données d'image ici sont en fait huit bits à la source, donc il 0 à 2 55 Donc, pour convertir cela en 01 ce que nous faisons, fondamentalement ici est la conversion en un nombre à virgule flottante d'abord de ce 0 à 2 55 imageur , puis le diviser par 2 55 pour re échelle que les données d'entrée 20 à 1. Nous avons déjà parlé de l'importance de normaliser vos données d'entrée, et c'est tout ce que nous faisons ici. Nous prenons simplement les données qui ont commencé comme 8 bits 0 à 2 55 données et les convertissons en valeurs à virgule flottante 32 bits entre zéro et un. Cela se passe toujours là comme avant, nous allons convertir les étiquettes ARD en un format chaud, donc c'est ce que trop catégorique fait pour vous. Il convertit simplement les données d'étiquette sur la formation et la date de test est définie. Teoh une chaude 0 10 valeurs. Allons de l'avant et exécutons ce bloc précédent là avant d'oublier et nous allons courir. C' est bien encore une fois. Je fais juste un quart de travail. Entrez après avoir sélectionné les blocs de code appropriés ici. Très bien, comme avant, visualisons certaines des données juste pour s'assurer qu'elles se sont chargées avec succès. C' est à peu près la même chose que l'exemple précédent. Nous allons juste examiner nos données d'entrée pour un numéro d'échantillon. 1234 et nous pourrions voir que sont une étiquette chaude ici montre un et la position pour et depuis nous commençons à le compter, 00123 Cela indique l'étiquette trois. Ce n'est pas Max. Cela nous ramène l'étiquette lisible par l'homme. Et en remodelant ce tableau de 768 pixels en deux D, nous pouvons voir que c'est la tentative de quelqu'un de dessiner le numéro trois. OK, jusqu'à présent, si de bonnes données Armor semblent avoir du sens et ont été chargées correctement. Souvenez-vous qu'à l'époque où nous avions affaire à la tensorflow, nous avons dû faire tout un tas de travail pour mettre en place notre réseau neuronal. Nous verrons à quel point c'est plus facile avec la caresse, tout ce que nous devons faire est de dire que nous mettons en place un modèle, un modèle séquentiel. Et cela signifie que nous pouvons ajouter des couches individuelles à notre réseau neuronal une couche à la fois , séquentiellement, si vous voulez. Nous allons donc commencer par ajouter une couche dense de 512 neurones avec une forme d'entrée de 784 neurones. Donc, c'est essentiellement notre première couche qui prend nos 784 signaux d'entrée de chaque image un pour chaque pixel et le nourrit dans une couche cachée de 512 neurones. Et ces neurones auront la fonction d'activation rela oh associée à, um Donc avec une ligne de code, nous avons fait beaucoup de travail que nous avons dû faire dans tensorflow avant, et puis en plus de cela mettra une activation soft max sur le dessus à une couche finale de 10 qui mappera à notre classification finale de ce qu'un nombre de ceci représente de 0 à 9. Ok, ce n'était pas si facile. Nous pouvons même nous demander de nous faire revenir un résumé de ce que nous avons mis en place juste pour nous assurer que choses ressemblent à ce que nous nous attendions. Et bien sûr, nous avons deux couches ici, vous savez, une qui a 512 et qui va ensuite à une couche de 10 neurones pour la classification finale. Et cela omet en quelque sorte la couche d'entrée. Mais nous avons cette forme d'entrée de 784 entités entrant dans cette première couche. Maintenant, vous vous souvenez peut-être aussi que c'était une sorte de douleur dans les fesses d'obtenir l'optimisation et la fonction perdue configurée dans Tensorflow à nouveau. C' est un paquebot en caresse. Eh bien, nous devons faire est de dire que sont perdus Fonction est catégorique entropie croisée, et il saura quoi faire là-bas. Nous allons utiliser l'optimiseur d'hélice RMS juste pour le plaisir. On pourrait utiliser n'importe lequel de ceux qu'on voulait. On pourrait juste voir Adam si tu le voulais. Ou il y a d'autres choix, comme Eight. Un diplômé SG peut lire sur ceux à ce lien ici si vous le souhaitez, et nous allons mesurer la précision au fur et à mesure. Donc c'est tout ce qui dit, Allons-y et frappons ça et ça va construire le graphique sous-jacent que nous voulons exécuter dans tensorflow. Bon, donc maintenant, on doit le faire fonctionner. Et encore une fois, ce n'est qu'une ligne de code avec caresse. Tout ce que nous avons à faire est de dire qu'ils allaient adapter ce modèle à l'aide de cet ensemble de données d'entraînement ces éléments d'air les entités d'entrée, les couches d'entrée qui allaient s'entraîner avec. Nous voulons utiliser des tailles de lot de 100. On va le faire 10 fois. Je vais définir le niveau de verbosité de deux parce que c'est ce qui fonctionne le mieux avec un cahier de nuit Python oeil et pour la validation, nous fournirons également l'ensemble de données de test. Donc, au lieu d'écrire cette grande fonction qui prend en considération l'apprentissage à la main comme nous l'avons fait dans la caresse tensorflow fait tout pour nous. Allons de l'avant et frappons, changeons, changeons, entrons et donnons un coup de pied à ce bureau. Eh bien, maintenant la caresse est plus lente que le tensorflow, et vous savez qu'elle fait un peu plus de travail sous le capot, donc cela prendra plus de temps, mais vous verrez que les résultats sont vraiment bons. Je veux dire, même sur cette première génération, nous avons déjà correspondu à la précision que nous avons obtenue après 2000 itérations dans notre implémentation de tensorflow codée à la main . Nous sommes déjà à Epoch 6 et nous approchons de 99 % de précision dans nos données d'entraînement. Gardez à l'esprit qu'il s'agit de mesurer la précision de l'ensemble de données d'entraînement, et nous sommes presque là, mais oui. Je veux dire, même avec seulement 10 ? La variole ? Nous avons fait beaucoup mieux que d'utiliser tensorflow. Et encore une fois, vous savez, caresse est en quelque sorte de faire beaucoup de bonnes choses pour vous automatiquement, sans vous faire même y penser. C' est le pouvoir de la caresse. Même si c'est plus lent, cela pourrait vous donner de meilleurs résultats en moins de temps à la fin de la journée. Maintenant, voici quelque chose que nous ne pouvions pas vraiment faire facilement avec le flux de transfert. C' est possible. Je ne pas entré parce que cette conférence était assez longue. C' est du waas ? Mais rappelez-vous que nous pouvons réellement intégrer la caresse avec l'apprentissage psychique afin que nous puissions simplement dire évaluation du point de modèle. Et c'est comme un modèle savant psychique. Comme faras Pythons concernent et mesurent réellement sur la base de nos données de test, définissez la précision et en utilisant l'ensemble de données de test comme référence, il avait un taux de succès de 98% en classifiant mal ces images, donc ce n'est pas mal. Maintenant, rappelez-vous, beaucoup de recherches vont dans l'optimisation de ceci, et ce problème d'ensemble de données dans 98% n'est pas vraiment considéré comme un bon résultat. Comme je l'ai dit plus tard dans le cours, nous parlerons de quelques meilleures approches que nous pouvons utiliser. Mais, hé, c'est beaucoup mieux que lors de la conférence précédente, n'est-ce pas ? Comme avant, allons de l'avant et jetons un coup d'oeil à certains de ceux qui se sont trompés juste pour avoir une idée de l' endroit où il a perturbé les choses qui sont. réseau neuronal a des défis. Le code ici est similaire. Nous allons juste passer par les premières images de test 1000 ici, et comme il a un taux de précision beaucoup plus élevé, nous devons aller plus loin là-dedans. Testé pour trouver des exemples de choses qui ont mal tourné va remodeler chaque donnée chaque image et faire un tableau de 784 pixels plat, qui est ce que le réseau de neurones attend est entrée. Appelez notre Max sur la classification résultante et un format à chaud et voyez si cette classification prédite correspond à l'étiquette réelle de ces données. Si ce n'est pas imprimé. Très bien, donc vous pouvez voir ici que ce modèle va vraiment mieux. Celui qui a dit que ça se trompe est plutôt bizarre. Ok, donc dans ce cas, on a prédit que c'était un numéro neuf. Et si je devais regarder ça moi-même, je pourrais deviner que c'était un neuf aussi. Il s'avère que cette personne essayait de dessiner le numéro 4, mais, vous savez, c'est un cas où même un cerveau humain commence à avoir des ennuis quant à ce que cette personne essayait d'écrire. Je ne sais pas ce que c'est censé être. Apparemment, ils essayaient de dessiner le numéro quatre. Notre meilleure hypothèse était le numéro six pas déraisonnable, compte tenu de la forme des choses. Voici quelqu'un qui essayait de dessiner, aussi. Mais ça ressemble beaucoup plus à un sept à nouveau. J' en serais trop sûr moi-même. Donc, vous savez, même si nous aplanissons ces données à une dimension, ce réseau neuronal que nous avons construit rivalise déjà avec le cerveau humain en ce qui concerne la reconnaissance de l' écriture manuscrite sur ces chiffres. Je veux dire, c'est un peu incroyable celle-là, et j'aurais probablement deviné un trois sur celui-là, mais encore une fois. Vous pouvez voir que la qualité des choses qui ont des problèmes avec est vraiment imprécise. C' est quoi, un scorpion ? Apparemment, c'était censé être un huit. Et notre meilleure hypothèse était deux. Mais c'est beaucoup Wow. Ok, oui, certaines personnes ne peuvent vraiment pas. Droit ? C' est un sept. Oui. Je veux dire, vous comprenez le point ici, donc juste en utilisant la caresse seule, nous avons obtenu une meilleure précision. Nous avons un meilleur résultat parce qu'il y a moins à penser. D' accord. Et vous pouvez probablement avoir des améliorations à ce sujet encore plus comme avant. Avec tensorflow. Je veux que vous retourniez voir si vous améliorez réellement ces résultats. Essayez d'utiliser un optimiseur différent de celui de RMS Prop try. Vous savez, différentes excuses. Et la beauté avec la caresse est qu'il est beaucoup plus facile d'essayer ces différentes excuses maintenant, non ? Carottes vient en fait dans sa documentation avec un exemple d'utilisation de l'amnistie, et c'est la topologie réelle qu'ils utilisent dans leurs exemples. Alors retournez en arrière. Essayez ça, voyez si c'est vraiment mieux ou pas. Voyez si vous pouvez améliorer les choses. Une chose que vous pouvez voir ici est qu'ils ajoutent réellement des couches de décrochage pour éviter le surajustement . Il est donc très facile d'ajouter ce genre de fonctionnalités ici. Fondamentalement, nous avons fait ici est à une même couche dense, 512 neurones cachés prenant les 17 84 caractéristiques. Et puis nous allons abandonner 20% des neurones que la couche suivante pour forcer l' apprentissage à être plus répandu et empêcher le surajustement. Cela pourrait être intéressant de voir si cela améliore réellement vos résultats sur l'ensemble de données de test en ajoutant ces couches de décrochage. Bon, alors va jouer avec cette mère, reviens. Nous ferons des trucs encore plus intéressants en utilisant la caresse. 10. Utiliser Keras pour apprendre des affiliations politiques: C' était beaucoup plus facile d'utiliser la caresse, n'est-ce pas ? Maintenant, les données M NIST dit, est juste un type de problème que vous pourriez résoudre le réseau neuronal. C' est ce que nous appelons classification multi-classes, multi-classes, parce que les classifications que nous avons ajustées vont du zéro au neuf. Donc, dans ce cas, nous avions 10 différentes valeurs de classification possibles, ce qui en fait un problème de classification multi-classes. Maintenant, basé sur la caresse est la documentation et des exemples. Ils ont des conseils généraux sur la façon de traiter différents types de problèmes. Voici donc un exemple de la façon dont ils suggèrent de mettre en place un problème de classification multi-classes en général. Donc vous pouvez voir ici que nous avons à lui des couches. Ici, nous avons une dimension d'entrée de nombreuses fonctionnalités que vous avez entrées dans le système. Dans cet exemple, il y en a 20, mais selon la nature de votre problème, il peut y en avoir plus. Il s'agit de mettre en place des couches de fonction d'activation rela, chacune avec 64 neurones chacun et encore, c'est quelque chose que vous voudriez un air, en fonction de la complexité de ce que vous essayez d'atteindre, il colle dans un pour jeter la moitié des neurones et chaque étape de trading à nouveau. C' est pour éviter le surajustement. Et à la fin, il utilise une activation soft max à l'une des 10 valeurs de sortie différentes dans cet exemple. OK, donc c'est comme ça qu'ils vont résoudre le problème d'amnistie dans leur propre documentation. Ils utilisent ensuite un optimiseur SG sur une fonction de perte d'entropie et de croix catégorique. Donc encore une fois, vous pouvez simplement vous référer à l'augmentation du carrousel pour un point de départ général quelque part orteil commencer à partir du moins quand vous abordez un type spécifique de problème à nouveau, le nombre réel de neurones et le nombre de couches, le nombre d'entrées et de sorties. Bien, évidemment, très dépendant du problème, vous essayez de le résoudre. Voici les conseils généraux qu'ils vous donnent sur ce que la fonction de perte correcte est pour commencer . Quel est le bon optimiseur pour commencer pourrait être un autre type de problème de classification est achat d'une reclassification ? Peut-être que vous essayez de décider si les images ou les gens sont des photos d'hommes ou de femmes peuvent essayer de décider si le parti politique de quelqu'un est démocrate ou républicain. Si vous n'avez pas l'un ou l'autre problème, alors c'est ce que nous appelons un problème de classification binaire, et vous pouvez le voir ici. Recommandation ici est d'utiliser une fonction d'activation sigmoïde à la fin au lieu de soft max , parce que vous n'avez pas vraiment besoin de la complexité de soft max si vous essayez juste , parce que vous n'avez pas vraiment besoin de la complexité de soft max si vous essayez justede passer entre zéro et un. Donc sigmoid est la fonction d'activation de choix. Dans le cas des classifications binaires, ils recommandent également l'optimiseur de prop RMS, et la fonction perdue dans ce cas sera l'entropie croisée binaire en particulier si peu de choses qui sont spéciales sur la classification binaire comme opposé à plusieurs classes. Enfin, je veux parler un peu plus sur l'utilisation de la caresse avec la psyché. Il apprend. Cela rend beaucoup plus facile de faire des choses comme la validation croisée. Et voici un petit extrait de code de ce que cela pourrait ressembler. Donc, voici une petite fonction qui crée un modèle qui peut être utilisé avec la psyché, il a appris. Fondamentalement, nous avons ah créer une fonction de modèle ici qui crée notre réseau neuronal réel. Nous utilisons donc un modèle séquentiel, mettant en place une couche dense avec quatre entrées et six neurones et cette couche qui se nourrit d' une autre couche cachée de quatre neurones. Et enfin, il va à un classificateur binaire à la fin avec une fonction d'activation sigmoïde . Donc, un petit exemple de mise en place d'un peu d'achat Eri classifications réseau neuronal. Nous pouvons alors mettre en place un estimateur en utilisant la fonction de classificateur de caresse, ce qui nous permet de récupérer un estimateur compatible avec la psych. Il apprend. Donc, vous voyez à la fin, nous sommes en fait passer cet estimateur dans la fonction de score croisé Val et qui permettra à la psyché d'apprendre à exécuter votre réseau neuronal comme c' était n'importe quel autre modèle d'apprentissage automatique intégré dans la psyché. Il apprend que signifie cross Val score peut automatiquement former votre modèle, puis évaluer ses résultats en utilisant une validation croisée prudente et vous donner des résultats très significatifs pour la façon dont il est précis dans sa capacité à prédire correctement les classifications pour données qu'il n'a jamais vues auparavant. Alors qu'est-ce que ces extraits sous notre ceinture ? Essayons, hum, ou exemple intéressant. Allons enfin au-delà de l'échantillon d'amnistie que nous allons faire est d'essayer de prédire les partis politiques du député en se basant sur leurs votes au Congrès en utilisant la bibliothèque de caresses . Essayons ça maintenant. Ce sera en fait un exemple que je vais vous donner pour essayer vous-même comme un exercice. Je vais t'aider à charger ces données et à les nettoyer. Mais après ça, je vais te laisser le soin d'implémenter un réseau neuronal avec caresse pour classer ces choses de nouveau, pour sauvegarder. Ce que nous allons faire, c'est charger des données sur un tas de votes du Congrès que divers politiciens ont fait. Et nous allons essayer de voir si nous pouvons prédire si un politicien est républicain ou démocrate, juste en se basant sur la façon dont ils ont voté sur 17 questions différentes. Et ce sont des données plus anciennes qui datent de 1984. Donc, vous devez certainement être d'un certain âge, dirons-nous, pour se souvenir de ce que ces questions étaient. Et si vous êtes de l'extérieur des États-Unis juste pour vous donner un bref aperçu de la politique américaine , il y a essentiellement deux principaux partis politiques aux États-Unis, les Républicains, qui ont tendance à être plus conservateurs, et les démocrates, qui ont tendance à être plus progressistes, et il est évident que ceux - ci ont changé au fil des ans. Mais c'est le repas actuel. Laissons donc nos exemples de données. Je vais utiliser la bibliothèque Pandas. Cela fait partie de notre environnement python scientifique ici. Pour charger réellement ces fichiers CSB ou simplement des fichiers de données de valeur séparés par des virgules et masser données, nettoyez un peu et obtenez dans une forme que la caresse peut accepter. Donc, nous allons commencer par importer. La Bibliothèque Panis appellera un PD en bref. J' ai construit ce tableau de noms de colonnes parce qu'il ne fait pas partie du fichier C S V , donc je dois le fournir à la main. Donc, les colonnes des données d'entrée seront le parti politique, républicain ou démocrate, puis une liste de votes différents sur lesquels ils ont voté. Ainsi, par exemple, nous pouvons voir si chaque politicien a voté oui ou non sur les groupes religieux et les écoles. Et mon très bref les détails de ce projet de loi étaient. Mais en les lisant, vous pouvez probablement deviner l'orientation vers laquelle les différents partis voteraient probablement . Alors allez-y et lisez ce fichier CSP. Utilisation de pandas lire voir fonction SV. Nous dirons que toutes les valeurs manquantes seront remplies avec un point d'interrogation et passeront dans un tableau de noms du nom de la fonction. Donc, nous savons quoi appeler les colonnes qui afficheront simplement le bloc de données résultant en utilisant la commande head. Alors allez-y, Hit , shift, entrez pour obtenir cela et nous devrions voir quelque chose comme ça est juste les 5 premières entrées. Donc, pour les 5 premiers politiciens à la tête de nos données, nous pouvons voir comment le parti de chaque personne est dans le label que nous avons attribué à cette personne, le label connu que nous allons essayer de prédire et leurs votes sur chaque question. Maintenant, nous pouvons également utiliser la fonction de description sur le bloc de données résultant pour obtenir un aperçu de haut niveau de la nature des données. Par exemple, vous pouvez voir ce lot de données manquantes, par exemple, même s'il y a 435 personnes dans le ont un groupe associé à eux. Sur Lee, 387 d'entre eux ont eu un vote sur le projet de loi sur le partage des coûts des projets d'eau, par exemple. Donc, nous devons gérer les données manquantes ici d'une manière ou d'une autre. Et la chose la plus simple à faire est de jeter Rose qui ont des données manquantes Maintenant, dans le monde réel, vous voudriez vous assurer que vous n'introduisez pas une sorte de biais involontaire en faisant cela. Vous savez, peut-être qu'il y a plus de tendance pour les républicains à ne pas voter que les démocrates ou vice versa . Si tel était le cas, alors vous risquez de biaiser votre analyse en jetant des politiciens qui n'ont pas voté dans chaque question réelle ici. Mais supposons qu'il n'y a pas de biais et que nous pouvons simplement aller de l'avant et abandonner ces valeurs manquantes . C' est ce que fait cette petite ligne ici. Il est dit : «  Déposez un en place. C' était vrai. Cela signifie simplement que nous allons supprimer toutes les lignes qui manquent des données de notre bloc de données de vote . Et puis nous allons décrire à nouveau et nous devrions voir que chaque colonne a le même nombre parce qu'il n'y a pas de données manquantes à ce stade. Donc nous avons ouvert les choses à 232 politiciens ici, pas idéal. Maisc' Mais ça qu'on doit travailler. La prochaine chose que nous devons faire est en fait masser ces données dans une forme que la caresse peut consommer . Donc Carris ne traite pas avec sage et fin. Il traite des nombres, alors remplacons tous les sages et se termine par ceux et zéros en utilisant cette ligne ici. Panis a une fonction de remplacement dandy pratique sur les trames de données qu'il peut utiliser pour le faire et de même remplacera les chaînes démocrate et républicain, également avec les nombres un et zéro. Donc, cela transforme cela en un problème de classification binaire. Si nous classons quelqu'un comme appartenant à l'étiquette un, et cela indiquera qu'ils sont démocrates et étiquetés zéro indiquera qu'ils sont républicains. Alors allons de l'avant et exécutons ce nettoyage de ces données, et nous devrions voir maintenant si vous allez de l'avant sur ce bloc de données à nouveau. Tout a été converti en données numériques entre zéro et un, qui est exactement ce que nous voulons pour l'entrée d'un réseau neuronal. Très bien, enfin, extrayons ces données dans, euh, num pie raise qu'on peut réellement nourrir pour caresser. Donc, pour ce faire, nous allons juste appeler des valeurs de points sur les colonnes qui nous tiennent à cœur. Nous allons extraire toutes les colonnes d'entités dans le tableau d'entités et toutes les étiquettes réelles dans les parties réelles dans tous les tableaux de classes. Alors allons-y et entrons pour le faire entrer et à ce stade, je vais te le remettre. Pour l'instant. Les extraits de code dont vous avez besoin étaient en fait couverts dans les diapositives juste avant de sortir sur ce bloc-notes ici. Donc il suffit de revenir à cela, et cela devrait vous donner les choses dont vous avez besoin pour travailler et en fait donner aux choses un aller ici. Donc, je veux que tu essaies toi-même. Maintenant, ma réponse est ici. Pas de regard. J' ai mis une petite frénésie là pour essayer de t'empêcher de faire défiler plus loin que tu n'aurais dû. Mais si tu veux mettre pause ici, on reviendra plus tard. Et vous pouvez comparer vos résultats aux miens. Ok, donc à ce stade, je veux que vous arrêtiez cette vidéo et que vous lui donniez un coup de main. Et quand vous pensez que vous avez quelque chose en marche ou si vous voulez juste ah, voulez sauter de l'avant et voir comment j'ai réussi à jouer à nouveau et je vais vous montrer tout de suite. D' accord. J' espère que tu as fait tes devoirs ici. Allons de l'avant et jetons un coup d'oeil à ma mise en œuvre ici encore. C' est à peu près tout droit. Tiré des diapositives que je t'ai montrées tout à l'heure. Tout ce qu'on va faire, c'est importer les trucs dont on a besoin de Caris ici. Nous utilisons le décrochage dense et séquentiel, et nous allons également utiliser le modèle croisé Val réellement évaluateur et illustre réellement l'intégration de caresse avec psychique appris comme nous avons parlé aussi. Donc, quand ont été interviewés avec, comme, il apprend que nous devons créer une fonction qui crée nos modèles. On peut passer ça dans Cross Val score. En fin de compte, nous allons créer un modèle séquentiel, et nous allons juste suivre le modèle que nous avons montré plus tôt de faire un problème de classification binaire . Donc, dans ce cas, nous avons 16 questions différentes sur lesquelles les gens ont voté. Nous allons utiliser une fonction d'activation rela avec une couche de 32 neurones. Et un modèle assez commun est de commencer avec un grand nombre de neurones et une couche et choses de fenêtre vers le bas que vous obtenez les couches supérieures. Donc nous allons distiller ces 32 neurones en une autre couche cachée de 16 neurones, et j'utilise le terme unités dans cet exemple particulier ici un peu d'un côté, chercheurs de Mawr et Mawr utilisent le terme unité au lieu de neurone. Et vous voyez cela dans certains des yeux AP et des bibliothèques qui sortent. La raison est que nous commençons à diverger un peu entre les réseaux neuronaux artificiels et comment ils fonctionnent et comment le cerveau humain fonctionne réellement dans certains cas amélioraient en biologie. Donc certains chercheurs s'opposent à appeler ces neurones artificiels parce que nous sommes en quelque sorte au-delà des neurones, et ils deviennent en quelque sorte leur propre truc à ce stade. Enfin, nous aurons une dernière couche avec un seul neurone de sortie. Car il y a une classification binaire avec une fonction d'activation sigmoïde pour choisir entre zéro et un, et nous allons utiliser la fonction binaire de perte d'entropie croisée l'Adam Optimizer et le lancer. À ce stade, nous considérons un classificateur de caresse pour exécuter réellement cela, et nous allons créer un objet estimateur à partir de cela que nous pouvons ensuite passer en psych. Il apprend le score croisé viale orteil, effectue effectivement K fold validation croisée automatiquement, et nous afficherons le résultat moyen lorsque nous avons terminé. Alors décalez, entrez et voyez combien de temps cela prend. En 1984, les politiciens n'étaient pas aussi polarisés qu'ils le sont aujourd'hui, donc ça pourrait être un peu plus difficile qu'aujourd'hui. Prédire réellement les partis de quelqu'un en fonction de leurs votes sera très intéressant pour voir si c'est le cas en utilisant des données plus modernes. Hey, on a déjà fait 93.9% de précision, et c'est sans même essayer trop dur. Donc, vous savez, nous n'avons pas vraiment passé du temps à régler la topologie de ce réseau. Tout peut être que vous pourriez faire un meilleur travail, vous savez, si vous avez obtenu un beaucoup meilleurs résultats, poster que dans le cours ici, je suis sûr que les étudiants aimeraient savoir ce que vous avez fait. Donc là, vous l'avez en utilisant des carats pour amore. Exemple intéressant. Prédire les partis politiques des gens en utilisant un réseau neuronal et aussi l'intégrer à psychique appris pour rendre la vie encore plus facile. C' est la magie de la caresse pour toi. 11. Réseaux de neurale révolutionnaires: Jusqu' à présent, nous avons vu la puissance de simplement utiliser un simple perceptron multicouche pour résoudre une grande variété de problèmes. Mais vous pouvez prendre les choses d'un cran. Sheikhoun organiser les réseaux neuronaux complexes Maura ensemble et faire des problèmes plus compliqués avec eux. Commençons donc par parler de convolution seule, réseaux neuronaux ou de CNN en bref. Habituellement, vous entendez parler de CNN dans le contexte de l'analyse d'images, et leur but est de trouver des choses dans vos données qui pourraient ne pas être exactement là où vous vous attendez. Donc techniquement, nous appelons cet emplacement de fonctionnalité. Dans la variante, cela signifie que si vous recherchez un modèle ou une fonctionnalité dans vos données, mais que vous ne savez pas exactement où se trouvent vos données, un CNN peut analyser vos données et trouver ces modèles pour vous où qu'ils se trouvent. Ainsi, par exemple, dans cette image ici, ce panneau d'arrêt peut être n'importe où dans l'image, et un CNN est capable de trouver ce panneau d'arrêt, peu importe où il se trouve. Maintenant, ce n'est pas seulement limité à l'analyse d'images. Il peut également être utilisé pour tout type de problème où vous ne savez pas où se trouvent les fonctionnalités que vous êtes dans vos tests de traduction automatique ou de traitement du langage naturel . Venez à l'esprit pour cela, vous ne savez pas nécessairement où le nom ou le verbe ou une phrase qui vous intéresse peut être dans un pourcentage de paragraphe et dire que vous êtes en train d'analyser, mais un CNN l'a confiné et le choisir pour vous. Analyse des sentiments. Une autre application de CNN afin que vous ne sachiez peut-être pas exactement où une phrase pourrait être qui indique un sentiment heureux ou un sentiment frustré, ou quoi ? Tout ce que tu cherches. Mais un CNN peut analyser vos données et les extraire, et vous verrez que l'idée derrière elle n'est pas vraiment aussi compliquée qu'elle en a l'air. C' est un autre exemple d'utilisation de mots fantaisistes. Teoh rend les choses plus compliquées qu'elles ne le sont vraiment. Alors, comment fonctionnent-ils ? Alors que la convolution de CNN, tous les réseaux neuronaux sont inspirés par la biologie de votre cortex visuel, elle prend des indices de la façon dont votre cerveau traite réellement les images de votre rétine, et c'est plutôt cool. Et c'est aussi un autre exemple de comportement émergent intéressant. Donc, la façon dont vos yeux fonctionnent, c'est que des groupes individuels de neurones servent une partie spécifique de votre champ de vision. Donc, nous appelons ces champs réceptifs locaux là juste des groupes de neurones qui ne répondent qu'à une partie de ce que vous êtes. Je vois que ce sont des sous-échantillons l'image venant de vos rétines et a juste des groupes spécialisés de neurones pour traiter des parties spécifiques du champ de vision que vous voyez avec vos yeux. Maintenant, ces petites zones se chevauchent pour couvrir l'ensemble de votre champ visuel, et c'est ce qu'on appelle la convolution. Convolution est juste un mot fantaisiste de dire que je vais diviser ces données en petits morceaux et traiter ces morceaux individuellement, puis ils vont assembler une image plus large de ce que vous voyez plus haut dans la chaîne. Donc, la façon dont ça fonctionne dans votre cerveau est que vous avez beaucoup de couches. C' est un réseau neuronal profond qui identifie diverses villes complexes d'entités, si vous voulez. Ainsi, la première couche dans laquelle vous entrez à partir de votre convolution, tout le réseau neuronal à l'intérieur de votre tête pourrait simplement identifier des lignes horizontales ou des lignes à différents angles ou, vous savez, des temps de coupe spécifiques des bords. Nous appelons ces filtres, et cela pourrait alimenter une couche au-dessus d'eux qui assemblerait ensuite les lignes qu'il identifiait au niveau inférieur en formes. Et peut-être qu'il y a un calque au-dessus qui serait capable de reconnaître des objets basés sur les motifs de formes que vous voyez. Et puis, si vous avez affaire à des images en couleur, nous devons tout multiplier par trois parce que vous avez en fait des cellules spécialisées dans votre droite assez pour détecter la lumière rouge, verte et bleue. Et nous devons les assembler ensemble. Ceux chacun sont traités individuellement à Donc c'est tout ce qu'un CNN est. Il est juste de prendre une source, image ou une source de toute sorte de données, vraiment la diviser en petits morceaux appelés convolutions. Ensuite, nous les assemblons et recherchons des modèles et des complexités de plus en plus élevées à des niveaux plus élevés dans votre réseau neuronal. Comment votre cerveau sait-il que vous regardez un panneau d'arrêt là-bas ? Parlons de ce langage et plus familier, si vous voulez. Donc, comme nous l'avons dit, vous avez des champs réceptifs locaux individuels qui sont responsables du traitement de parties spécifiques de ce que vous voyez et ces champs réceptifs locaux balayant votre image et ils se chevauchent les uns avec les autres à la recherche de bords. Vous remarquerez peut-être que votre cerveau est très sensible aux bords contrastés qu'il voit dans le monde a tendance à attirer votre attention, non ? C' est pourquoi les lettres de cette diapositive attirent votre attention car il y a un contraste élevé entre les lettres et le fond blanc derrière elles. Donc, à un niveau très bas, vous choisissez les bords de ce panneau d'arrêt et les bords des lettres sur le panneau d'arrêt Maintenant. . Ah, niveau plus élevé pourrait prendre ces limites et reconnaître la forme de cet arrêt dit par la Science. Oh, il y a un octogone là-bas qui signifie quelque chose de spécial pour moi. Ou ces lettres forment le mot stop. Cela signifie quelque chose de spécial pour moi aussi, aussi, et en fin de compte, qui sera mis en correspondance avec n'importe quel modèle de classification que votre cerveau a d'un signe d'arrêt. Donc, peu importe quel champ réceptif a ramassé ce panneau d'arrêt à une couche, il sera reconnu à un panneau d'arrêt. Et en outre, parce que vous traitez les données et la couleur, il pourrait également utiliser l'information que le signe d'arrêt est rouge et l'utiliser davantage pour aider à sa classification de ce que cet objet est vraiment. Donc quelque part dans ta tête, il y a un réseau neuronal qui dit, Hey, si je vois des bords arranger un motif octogone qui a beaucoup de rouge dedans et dit : Arrêtez au milieu. Cela signifie que je devrais probablement appuyer les freins de ma voiture et c'est un niveau encore plus élevé. Le cerveau bizarre fait en fait un raisonnement plus élevé. C' est ce qui s'est passé. Il y a un fil qui dit, Hey, il y a un panneau d'arrêt qui arrive ici. Je ferais mieux de freiner ma voiture. Et si tu conduis assez longtemps, tu ne penses même plus vraiment à ça. Aimez-vous C'est presque dur câblé, et cela peut être le cas de toute façon. Une convolution, tout réseau neuronal, une convolution artificielle. Tous les réseaux neuronaux fonctionnent de la même manière. Même idée exacte. Alors, comment construis-tu un CNN avec caresse ? Évidemment, vous ne voulez probablement pas le faire à la couche de tensorflow de niveau inférieur que vous pouvez. Mais CNN devient plutôt compliquée. Ah, la bibliothèque de niveau supérieur comme les carottes devient essentielle. Tout d'abord, vous devez vous assurer que vos données source sont des dimensions appropriées de la forme appropriée si vous voulez, et vous allez préserver la structure réelle de deux D d'une image. Si vous avez affaire à des données d'image ici, sorte que la forme de vos données peut être la fois la longueur, temps, le nombre de canaux de couleur et par canaux de couleur. Je veux dire, si c'est une image en noir et blanc, il n'y a qu'une seule couleur en noir et blanc, donc vous n'avez pas un canal de couleur pour une image en niveaux de gris. Mais s'il s'agit d'une image en couleur, vous auriez trois canaux de couleur un pour le rouge, un pour le vert et un pour le bleu, car vous pouvez créer n'importe quelle couleur en combinant le rouge, vert et le bleu ensemble. Ok, maintenant il y a quelques types spécialisés de couches utilisées par Carriacou lorsque vous avez affaire à convolution, tous les réseaux neuronaux, par exemple, il y a le type de couche converti en D qui fait le convolution réelle sur une image à deux D. Et encore une fois, convolution est juste de diviser cette image en petits sous-champs qui se chevauchent pour un traitement individuel. Il y a aussi une couche conv un D et une couche contre trois D disponibles. Vous n'avez pas besoin d'utiliser CNN avec des images comme nous l'avons dit. Il peut également être utilisé avec des données textuelles, par exemple. Cela pourrait être un exemple de données unidimensionnelles, et c'est aussi une escroquerie. Trois couches D sont également disponibles. Si vous avez affaire à trois données volumétriques D d'une sorte ou d'une autre. Donc, le grand nombre de possibilités il y a une couche spécialisée et une caresse pour CNN. Est-ce que Max met en commun à D ? Évidemment, c'est un D et trois D très dans ça aussi. L' idée est juste de réduire la taille de vos données vers le bas. Donc, si je prends juste la valeur maximale vue dans un bloc donné d'une image et la réduit à ces valeurs maximales, c'est juste un moyen de réduire les images de manière à réduire la charge de traitement sur CNN. Comme vous le verrez, CNN est très intensif en calcul, et plus vous pouvez faire pour réduire le travail, vous devez faire le mieux. Donc, si vous avez plus de données dans votre image que vous n'avez besoin d'un maximum, tirer deux couches D peut être utile pour distiller cela jusqu'à l'essence même de ce que vous devez analyser. Enfin, à un moment donné, vous devez alimenter ces données dans une couche plane de neurones, juste qu'à un moment donné va aller dans un perceptron, et à ce stade, nous devons aplatir ces deux couches D en une couche D pour que nous puissions simplement le passer dans une couche de neurones. Et à partir de là, il ressemble à n'importe quelle autre perception multi-niveaux. Donc la magie de CNN se produit vraiment à un niveau inférieur, vous savez. En fin de compte, il est converti en ce qui ressemble aux mêmes types de multi-couches Perceptron est que nous avons utilisé avant que la magie ne se produise et en fait traiter vos données l'impliquant et en les réduisant à quelque chose qui est gérable. Donc l'utilisation typique du traitement d'image avec CNN ressemblerait à ceci. Vous pouvez commencer par un calque de conto qui effectue la convolution réelle de vos données d'image. Vous pourriez suivre cela avec un maximum tirant deux couches D au-dessus de cela qui distillent cette image vers le bas réduit juste la quantité de données que vous avez à traiter. Vous pourriez alors faire une couche de décrochage en plus de cela, ce qui empêche tout ajustement excessif comme nous avons déjà parlé. À ce stade, vous pouvez appliquer une couche aplatie pour être en mesure de nourrir ces données dans un perceptron, et c'est là qu'une couche dense ou pourrait entrer en jeu. Si dense couche et caresse est juste un Perceptron, vraiment, vous savez, c'est une couche de, ah, couche cachée de neurones. À partir de là, il pourrait faire un autre passé de chute pour éviter davantage le surajustement et enfin faire un soft max pour choisir la classification finale qui sort de votre réseau neuronal maintenant. Comme je l'ai dit, CNN est notre calcul intensif. Ils sont très lourds et votre CPU, votre GP vous et vos besoins en mémoire mélangeant toutes ces données autour de l'impliquant s' additionne vraiment, vraiment rapide. Et au-delà de cela, il y a beaucoup de ce que nous appelons hyper paramètres beaucoup de boutons et de cadrans différents que vous pouvez régler sur CNN. Ainsi, en plus des choses habituelles, vous pouvez syntoniser comme la topologie de votre réseau neuronal ou ce qui optimise votre utilisateur, quelle fonction perdue à utiliser ou quelle fonction d'activation à utiliser. Il y a aussi des choix à faire au sujet des tailles de colonel. Quel est le domaine que vous impliquez réellement ? Combien de couches avez-vous ? Combien d'années avez-vous ? Combien de mise en commun faites-vous lorsque vous réduisez l'image ? Il y a beaucoup de différents ici qui est presque une quantité infinie de possibilités ici pour configurer un CNN et souvent. L' obtention des données pour former votre CNN est la partie la plus difficile. Donc, par exemple, si vous voulez Tesla, c'est en fait prendre des photos du monde autour de vous sur la route autour de vous et tous les panneaux de signalisation et les feux de circulation pendant que vous conduisez et chaque nuit ça envoie tous ces vers certains serveurs de données quelque part. Ainsi, Tesla peut réellement exécuter une formation sur ses propres réseaux neuronaux basés sur ces données. Donc, si vous claquez les freins pendant que vous conduisez une Tesla la nuit, cette information va être injectée dans un grand centre de données quelque part, et Tesla va craquer là-dessus et dire, Hey, y a-t-il un schéma ici pour être appris de ce que j'ai vu des caméras de la voiture ? Cela signifie que vous devriez claquer sur les pauses dans le cas d'une voiture auto conduite, et vous pensez à l'ampleur de ce problème, juste l'ampleur du traitement et de l'obtention et de l'analyse de toutes ces données qui deviennent très difficiles en soi. Maintenant, heureusement, le problème de réglage des paramètres n'a pas besoin d'être un SARD, comme je l'ai décrit pour l'être, il existe des architectures spécialisées de convolution, tous les réseaux neuronaux qui font quelques de ce travail pour vous. Donc, la recherche Lauder cherche à trouver les excuses et les paramètres optimaux pour un CNN pour un type de problème donné, et vous pourriez juste penser que c'est comme une bibliothèque à partir de laquelle vous pouvez puiser. Ainsi, par exemple, il y a l'architecture Lynette cinq que vous pouvez utiliser qui convient à la reconnaissance de l'écriture manuscrite . En particulier, il y en a aussi un qui s'appelle Alex Net, qui est approprié pour la classification des images. C' est un réseau neuronal plus profond que Lynette . Donc, dans l'exemple dont nous avons parlé sur la diapositive précédente, nous n'avions qu'un seul calque caché. Mais vous pouvez en avoir autant que vous voulez libérer en fonction de la quantité de puissance de calcul vous disposez. Il y a aussi quelque chose qui s'appelle Google Lynette. Vous pouvez probablement deviner qui est venu avec ça. C' est encore plus profond, mais il a de meilleures performances car il introduit ce concept appelé Module d'Inception. Ils regroupent essentiellement les couches de convolution, et c'est une optimisation utile pour la façon dont tout fonctionne. Enfin, le plus sophistiqué aujourd'hui est appelé rez Net qui signifie réseau résiduel. C' est un réseau neuronal encore plus profond, mais il maintient les performances par ce qu'on appelle sauter Connection. Il a donc des connexions spéciales entre les couches du Perceptron pour accélérer davantage les choses. C' est donc une sorte de construit sur l'architecture fondamentale d'un orteil de réseau neuronal, optimiser ses performances, et comme vous le verrez CNN, peut être très exigeant sur les performances. Alors avec ça, donnons-lui un coup de feu. Utilisons réellement un CNN et voyons si nous pouvons faire un meilleur travail en classification des images que nous ne l'avons fait avant d'en utiliser un. 12. Utiliser CNN pour la reconnaissance d'écriture à la main: et nous allons revisiter le problème de reconnaissance de l'écriture manuscrite M NIST où nous essayons classer un tas d'images de personnes dessinent le nombre est de zéro à neuf et voir si nous pourrions faire un meilleur travail de celui-ci. L' utilisation de CNN par rapport à CNN est mieux adaptée aux données d'image en général, surtout si vous ne savez pas exactement où se trouve la fonctionnalité que vous recherchez dans votre image. Nous devrions donc nous attendre à obtenir de meilleurs résultats ici. D' accord, donc on va commencer par importer tout ce qu'on a pu caresser sur l'importation de ce jeu de données qui jouaient avec le modèle séquentiel pour qu'on puisse assembler notre réseau neuronal . Et puis nous allons importer tous ces différents types de couches dont nous avons parlé dans les diapositives. La chute dense calme à De Max, tirant sur t et aplatir les types de couche, et dans cet exemple utilisera l'optimiseur d'hélice RMS. Allez-y et donnez le coup d'envoi. Et le reste ici pour charger les données d'entraînement et de test va ressembler à ça avant. Toujours en attente pour cela se soucie de s'initialiser là. Bon, donc ça devrait charger l'ensemble de données M nus, on va façonner l'état un peu différemment. Donc, depuis ah, convolution, tous les réseaux neuronaux peuvent traiter les données D dans toutes leurs deux gloire. Nous ne allons pas remodeler ces données en tableaux plats un D de 768 pixels. Au lieu de cela, nous allons le façonner dans le avec fois la longueur multipliée par le nombre de canaux de couleur. Donc, dans ce cas, nos données sont de nature en niveaux de gris. n'y a donc qu'un seul canal de couleur qui définit simplement l'obscurité des images du pixel spécifique. Et il y a plusieurs façons de stocker les données. Donc, nous devons gérer quelques affaires différentes ici. Il peut être organisé en tant que canaux de couleur selon la longueur des temps ou peut être avec les temps, durées de vie, canaux de couleur. Donc, c'est à quoi traite ce petit morceau de code ici. Mais de toute façon, nous verrons s'il s'agit d'un premier format de canaux ou non, et remodelons les données en conséquence. Et nous allons stocker cette forme dans cette chose appelée forme d'entrée. C' est la forme de nos données de test d'entrée et de nos données de formation, d'ailleurs. Comme précédemment, nous allons mettre à l'échelle ces données, donc elles sont présentées sous forme de données de huit bits, et nous devons les convertir en point flottant normalisé à la place. Nous allons donc convertir ces données en valeurs flottantes de 80.0.32 bits, puis diviser chaque pixel par 2 55 pour transformer cela en un nombre entre zéro et un. Allez-y, frappez, changez. Entrez là pour lancer ça, accord. Et comme avant, nous allons convertir les données de l'étiquette en un seul format catégorique, car cela correspondra bien à la sortie de notre réseau neuronal et rien de différent ici. Nous venons de revenir à une vérification de santé mentale pour nous assurer que nous avons importé nos données avec succès. Nous allons donc choisir un échantillon d'orteil d'entraînement aléatoire ici sur l'écran. Et il y a le seul format chaud des trois étiquetés 0123 C'est exact. Format lisible par l'homme. Trois. Et ça ressemble à ça. Bien sûr, cela ressemble au numéro trois, donc il semble que nos données soient en bonne forme pour le traitement. Alors maintenant, nous allons réellement mettre en place un CNN et voir comment cela fonctionne. Alors passons à travers ce qui se passe dans ce prochain bloc de code ici comme avant, nous commençons par mettre en place un modèle séquentiel qui nous permet juste de construire très facilement couches pour construire notre réseau neuronal ici. Et nous allons commencer par un calme au concessionnaire. Donc, ce que cette syntaxe signifie ici, c'est que notre convolution, tous les deux couches d va avoir 32 fenêtres ou 32 champs régionaux, si vous voulez, qu'elle utilisera pour échantillonner cette image avec et chacun de ces échantillons sera trois par trois de la taille du colonel. Il a également besoin de connaître la forme de vos données d'entrée que nous avons stockées précédemment que le PDG a gagné par 28 par 28 ou 28 par 28 par un, selon le format d'entrée. Là, nous ajouterons ensuite une seconde convolution. Tous filtrent au-dessus de cela pour identifier, espérons-le, les entités de niveau supérieur. Celui-ci aura 64 colonels, aussi une taille de trois par trois, et nous allons utiliser une fonction d'activation d'action jaune sur cela aussi. Donc nous avons construit des couches de convolution ici. Ah, et encore une fois vous voulez juste réutiliser toute recherche précédente que vous pouvez faire pour un problème donné. Il y a tellement de façons de configurer CNN que si vous commencez à partir de zéro, vous aurez beaucoup de mal à le régler, surtout si vous considérez combien de temps il faut pour générer entre chaque exécution. Ceux-ci sont très gourmands en ressources. Donc, je viens de prendre cela de l'exemple CNN qui vient avec la bibliothèque de caresses et d'en tirer ma topologie initiale. Donc maintenant que nous avons fait nos couches de convolution, nous allons faire un maximum de deux pieds, en fait réduire ça un peu. Donc, nous allons prendre une taille de pool de deux par deux et pour chaque bloc de deux pixels à ce stade, nous allons réduire cela à un seul pixel qui représente le pixel maximum trouvé dans ce pool. Notez donc que la taille de la piscine peut être différente de la taille de colonel sous-jacente de la convolution. Vous l'avez fait Donc vraiment, c'est juste une technique pour réduire vos données à quelque chose qui est plus gérable à ce stade. Va faire une chute passée pour éviter le surajustement. Nous allons ensuite aplatir ce que nous avons jusqu'à présent. Donc, cela prendra R deux données D et l'aplatira à une couche d. Et à partir de là, ça va ressembler à n'importe quel autre Perceptron multicouche comme on l'utilisait auparavant. Donc toute la magie de CNN s'est produite à ce stade, et maintenant nous allons juste la convertir en une couche plate que nous entrons dans une couche cachée de neurones. Dans ce cas, on aura encore 128 dans cette couche avec un rail. Votre fonction d'activation fera un dernier abandon passé pour éviter le surajustement et enfin choisir notre catégorisation finale du nombre zéro à neuf en construisant une couche de sortie finale de 10 neurones avec facilité. Fonction d'activation douce max sur elle. Bon, alors allons-y et laissons ça courir à nouveau. Rien ne se passe vraiment tant qu'on n'aura pas vraiment démarré le modèle, donc ça ne prend pas du tout de temps. Nous pouvons faire un modèle ce résumé juste pour vérifier que tout est comme nous l'avions prévu. Et vous pouvez voir que nous avons deux couches de convolution ici, suivies d'une couche de mise en commun, suivie d'une goutte d'aplatir. Et à partir de là, nous avons un abandon dense dans perceptron multicouche dense fait nos classifications finales. Très bien, enfin, nous devons compiler ce modèle avec un optimiseur spécifique et une fonction perdue. Dans ce cas, nous allons utiliser Adam Optimizer et l'entropie croisée catégorique parce que c'est la fonction de perte appropriée pour un problème de classification de plusieurs catégories. Et enfin, nous allons le faire maintenant. Comme je l'ai dit, l'air de CNN est très cher à courir. Donc, quand nous parlons de ce que fait cette commande, tout d' abord, rien d'inhabituel ici dit simplement que nous allons exécuter des lots de 32, ce qui est plus petit qu' avant, car il y a un coût de calcul beaucoup plus élevé de. Cela a vraiment dû courir 10 époques cette fois parce que encore, cela prend beaucoup de temps ou serait mieux. Mais il n'y a que tellement que nous avons le temps de faire le niveau de verbosité deux parce que c'est ce que vous voulez choisir pour courir dans un cahier python eye et nous allons passer nos données de test de validation A pour qu'il fonctionne avec nous ? Eh bien, maintenant, je ne vais pas vraiment lancer ça parce que cela pourrait prendre environ une heure à courir, et si vous n'avez pas la machine beefy, ça pourrait ne pas tout finir. Vous savez, si vous n'avez pas assez de RAM étaient assez de puissance CPU. Cela pourrait même être trop pour un système. Donc je vais sauter ici. En fait couru cela plus tôt et cela a pris environ 45 minutes. Mais vous pouvez voir qu'il a très rapidement convergé vers une très bonne vallée de la précision ici et qu'il était encore en augmentation. Donc, il aurait probablement été utile d'aller au-delà de 10 itérations de la formation ici. Mais même après seulement 10 à la boîte ou 10 itérations, nous avons fini avec une précision de plus de 99%. Et nous pouvons réellement évaluer cela en fonction de nos données de test et recréer cette précision de 99 %. Donc c'est un peu génial. Donc CNN vaut vraiment la peine de le faire si la précision est la clé et pour les applications où des vies sont en jeu, comme une voiture auto conduite, Évidemment cela vaut la peine de l'effort, est-ce pas ? Vous voulez une précision totale de détection s'il y a un panneau d'arrêt devant vous, haut Teeley , est-ce pas ? Même une erreur de 0,1 % sera inacceptable dans une telle situation. C' est donc le pouvoir de CNN. Ils sont plus compliqués de prendre beaucoup plus de temps pour courir. Mais comme nous l'avons dit, la puissance de tensorflow, qui caresse est en cours d'exécution sur le dessus des moyens que vous pourriez distribuer son travail sur un nuage entier d'ordinateurs dans un tableau entier de GP utiliser notre sur chaque ordinateur. Il y a donc des moyens d'accélérer cela. On ne profite pas de ça dans ce petit exemple. Ici, c'est juste une illustration. Donc là, vous l'avez, votre première convolution, tout réseau neuronal, et vous pouvez voir à quel point il est puissant et faire avec succès la classification d'image, entre autres choses. Si cool, passons ensuite à un autre type de réseau neuronal. 13. Réseaux Neural réalistes: Parlons d'un autre type de réseau neuronal, le réseau neuronal récurrent. À quoi servent nos fins ? Eh bien, quelques choses, essentiellement leurs premières séquences de données. Et cela peut être une séquence dans le temps, donc vous pouvez l'utiliser pour un traitement des données de série chronologique . Nous essayons de regarder une séquence de points de données au fil du temps et de prédire que le comportement futur est quelque chose au fil du temps. À son tour, donc ne sont pas basés sur des données séquentielles d'une sorte ou d'une autre. Quelques exemples de données sérieuses peuvent être les weblogs, où vous recevez différents accès à votre site Web au fil du temps, ou les journaux de capteurs recevaient des entrées différentes de capteurs provenant de l'Internet des objets. Ou peut-être que vous essayez de prédire le comportement des actions en regardant les informations historiques sur les opérations boursières . Ce sont toutes des applications potentielles pour les réseaux neuronaux récurrents car ils peuvent examiner le comportement au fil du temps et essayer de prendre ce comportement en compte lorsqu'il fait des projections futures. Un autre exemple pourrait être Si vous essayez de développer une voiture auto conduite, vous pourriez avoir un historique de l'endroit où votre voiture a été. Ses trajectoires passées, et peut-être que peut informer comment votre voiture pourrait vouloir tourner à l'avenir, sorte que vous pourriez prendre en compte le fait que votre voiture a été tourner le long d'une courbe pour prédire qu'ils devraient peut-être continuer à conduire le long d'une courbe jusqu'à ce que la route se redresse. Et un autre exemple. Ça n'a pas besoin d'être juste le temps. Il peut s'agir de n'importe quel type de séquence de longueur arbitraire. Donc quelque chose d'autre qui vient à l'esprit sont des langues, vous savez, phrases là, juste des séquences de mots, droite, sorte que vous pouvez également appliquer notre et extrémités à la langue ou à la machine. La traduction produit des légendes pour des vidéos ou des images. Ce sont là des exemples où l'ordre des mots dans la phrase peut être important, et la structure de la phrase et la façon dont ces mots sont réunis pourraient donner plus sens. Ensuite, vous pourriez obtenir en regardant ces mots individuellement sans contexte. Donc encore une fois, dans notre nn peut faire usage de cet ordre des mots et essayer d'utiliser cela dans le cadre de son modèle. Une autre application intéressante de sont une fin est la musique générée par la machine. Vous pouvez aussi penser à la musique comme du texte, où au lieu d'une séquence de mots ou de lettres, vous avez une séquence de notes musicales. Donc c'est un peu intéressant. Vous pouvez réellement construire un réseau neuronal qui peut prendre morceau de musique existante et en quelque sorte étendre sur elle en utilisant un réseau neuronal récurrent pour essayer d'apprendre les modèles qui étaient esthétiquement agréables à la musique dans le passé. Conceptuellement, c'est à quoi ressemble un neurone récurrent unique en termes de modèle. Donc ça ressemble beaucoup à un, euh, un neurone artificiel que nous avons regardé avant. La grande différence est cette petite boucle ici. Ok, alors maintenant, comme nous faisons une étape d'entraînement sur ce neurone, des données d'entraînement y sont introduites. Ou peut-être que c'est une entrée d'une couche précédente dans notre réseau neuronal, et il appliquera une sorte de fonction étape après quelque chose toutes les entrées dedans. Dans ce cas, nous allons dessiner quelque chose de plus comme une tangente hyperbolique parce que mathématiquement, vous voulez vous assurer que nous conservons une partie des informations qui arrivent et plus facilement. Maintenant, habituellement, nous allons juste sortir le résultat de cette sommation et cette fonction d'activation comme sortie de ce neurone. Mais nous allons aussi le nourrir dans le même neurone. Donc, la prochaine fois que nous exécutons une course, certaines données à travers ce magasin sur ces données de l'exécution précédente sont également additionnées dans les résultats. Ok, Donc, comme nous continuons à courir cette chose encore et encore aura quelques nouvelles données qui mélangées avec la sortie de la précédente course à travers ce neurone, et cela continue à se produire encore et encore . Ainsi, vous pouvez voir qu'au fil du temps le comportement passé de ce neurone influence son comportement futur , et il influence la façon dont il apprend. Une autre façon de penser à cela est de le dérouler à temps. Donc, ce que ce diagramme montre est le même neurone unique, juste trois étapes de temps différentes. Et quand vous commencez à creuser dans les mathématiques de la façon dont nos fins fonctionnent, c'est une façon plus utile d'y penser. Donc, nous considérons que c'est le temps, pas zéro. Vous pouvez voir qu'il y a une sorte d'entrée de données entrant dans ce neurone récurrent et qui produira une sorte de sortie après avoir passé par sa fonction d'activation. Et cette sortie est également introduite dans la prochaine étape de temps. Donc, si c'est le temps Étape 1 avec le même neurone. Vous pouvez voir que ce neurone reçoit non seulement une nouvelle entrée, mais aussi la sortie de l' étape de temps précédente et ceux se réunissent, la fonction d'activation est appliquée à elle, et cela obtient également la sortie. Et la sortie de cette combinaison est ensuite alimentée à l'étape de temps suivante appelée cette étape de temps où une nouvelle entrée pour le temps Étape deux est introduite dans ce neurone, et la sortie de l'étape précédente est également alimentée. Ils se réunissent, la fonction d'activation est exécutée et nous avons une nouvelle sortie. C' est ce qu'on appelle une cellule de mémoire car elle conserve la mémoire de ses sorties précédentes au fil temps. Et vous pouvez voir que même si ça se rassemble à chaque étape du temps, ces comportements antérieurs se diluent, non ? Donc, vous savez, nous ajoutons dans ce temps, étape à cette étape de temps et ensuite certaines de ces deux choses qui travaillent dans celle-ci, donc une propriété des cellules de mémoire est que le comportement plus récent a tendance à avoir plus d'un influence sur le comportement actuel que vous sortez d'un neurone récurrent, et cela pourrait être un problème dans certaines applications. Il y a donc des moyens de lutter contre cela dont nous pourrons parler plus tard. J' intensifie ça. Vous pouvez avoir une couche d'Irlande récurrente, donc vous n'avez pas besoin d'en avoir une seule, évidemment. Donc, dans ce diagramme, nous regardons quatre neurones récurrents individuels qui travaillent ensemble dans le cadre d'une couche, et vous pouvez avoir une entrée. Entrer dans cette couche est le trou qui est dépensé dans ces quatre neurones récurrents différents . Et puis la sortie de ces neurones peut ensuite être alimentée à l'étape suivante pour chaque neurone de cette couche. Donc tout ce qu'on fait, c'est, ah, échelle ça horizontalement. Donc, au lieu d'un seul Iran récurrent, nous avons une couche de quatre neurones récurrents dans cet exemple, où toute la sortie de ces neurones alimente le comportement de ces neurones dans la prochaine étape d'apprentissage. Ok, donc vous pouvez nous mettre à l'échelle pour avoir plus d'un neurone et apprendre des modèles plus compliqués conséquence, ne sont pas finis ouvrir un large éventail de possibilités parce que maintenant nous avons la capacité de traiter, pas seulement avec vecteurs d'informations instantanés statiques d'une sorte d'état. Nous pouvons également traiter des séquences de données, donc il y a quatre combinaisons différentes ici que vous pouvez traiter. Nous pouvons traiter des réseaux neuronaux de séquence à séquence. Si nous avons l'entrée est un temps de Siri ou une sorte de séquence de données. Nous pouvons également avoir une sortie qui est un temps Siri ou une séquence de données aussi bien. Donc, si vous essayez de prédire les cours des actions à l'avenir en fonction des transactions historiques, cela pourrait être un exemple de topologie séquence à séquence. Nous pouvons également mélanger et faire correspondre des séquences avec les anciens états statiques vectoriels que nous avions prédits en utilisant simplement Perceptron multicouche. On appellerait ça une séquence à vecteur. Donc, si nous commencions avec une séquence de données, nous pourrions produire juste un instantané d'un état. À la suite de l'analyse de cette séquence. Un exemple pourrait être de regarder la séquence des mots dans une phrase pour donner une idée du sentiment que cette phrase transmet depuis le dernier. Les gens en ont un exemple sous peu. Tu pourrais aller dans l'autre sens aussi. Vous pouvez passer d'un vecteur à une séquence, donc un exemple de cela serait de prendre une image, qui est un vecteur statique d'information, puis de produire une séquence à partir de ce facteur, par exemple, mots dans une phrase créant une légende à partir d'une image. Et nous pouvons changer ces choses ensemble de manière intéressante aussi. Nous pouvons avoir des encodeurs et des décodeurs construits qui alimentent les uns dans les autres. Par exemple, nous pourrions commencer par une séquence d'informations de, ah, phrase d'une langue, incarner ce que cette phrase signifie comme une sorte de représentation vectorielle et ensuite tourner cela dans une nouvelle séquence de mots dans une autre langue. C' est peut-être ainsi qu'un système de traduction automatique pourrait fonctionner. Par exemple, vous pouvez commencer par une séquence de mots en français, construire un vecteur qui incarne la signification de cette phrase et ensuite produire de nouveaux secrets de mots en anglais ou dans la langue que vous voulez. C' est un exemple d'utilisation d'un réseau neuronal récurrent pour la traduction automatique. Donc, beaucoup de possibilités passionnantes ici la formation sont et finissent comme CNN. C' est dur. D' une certaine façon. C' est encore plus difficile. La principale torsion ici est que nous avons besoin de retour propagation non seulement à travers le réseau neuronal lui-même dans toutes ses couches, mais aussi à travers le temps. Et d'un point de vue pratique, chacune de ces étapes de temps finit par ressembler à une autre couche de notre réseau neuronal pendant que nous essayons de former notre réseau neuronal et ces étapes de temps peuvent s'accumuler rapidement. Donc, au fil du temps, nous finissons avec, comme, un réseau neuronal encore plus profond et plus profond que nous devons former et le coût de réellement effectuer Grady et la dissidence sur ce réseau neuronal de plus en plus profond devient de plus en plus grand. Soto a mis une casquette supérieure sur ce temps d'entraînement. Lorsque nous limitons la propagation arrière à un nombre limité d'étapes temporelles, nous appelons cette propagation tronquée dans le temps. Donc juste quelque chose à garder à l'esprit lorsque vous vous entraînez dans R N N. Vous avez non seulement besoin de reproduire à travers la topologie de réseau neuronal que vous avez créée , vous avez également besoin d'une poche arrière propagée à travers toutes les étapes de temps que vous se sont accumulés jusqu'à ce point maintenant. Nous avons parlé plus tôt du fait que vous construisez à notre fin, l'état des temps anciens. Les étapes finissent par être diluées au fil du temps parce que nous continuons à nourrir dans le comportement de l' étape précédente de notre course à l'étape actuelle. Et cela pourrait être un problème si vous avez un système où l'ancien comportement n'a pas moins d'importance comportement plus récent. Par exemple, si vous regardez des mots dans une phrase, les mots au début de sa phrase peuvent même être plus importants que les mots vers la fin. Donc, si vous essayez d'apprendre le sens d'une phrase, la position du mot dans la phrase, il n'y a pas de relation intrinsèque entre l'endroit où ce mot est et l'importance qu'il pourrait être dans de nombreux cas. C' est donc un exemple de l'endroit où vous pourriez vouloir faire quelque chose pour contrer cet effet. Et une façon de le faire est quelque chose appelé la cellule L S. T. M. s'étend sur une cellule de mémoire à long terme, et l'idée ici est qu'elle maintient des idées distinctes à la fois à court et à long terme , et il le fait d'une manière assez complexe. , Heureusement, vous n'avez pas vraiment besoin de comprendre les détails minutieux de son fonctionnement. Il y a une image ici pour que vous regardiez si vous êtes curieux. Mais, vous savez, les bibliothèques que vous utilisez implémenteront cela pour vous. La chose importante à comprendre est que si vous avez affaire à une séquence de données où vous ne voulez pas donner un traitement préférentiel à des données plus récentes, vous voulez probablement utiliser une cellule L S T M au lieu d'utiliser simplement un r n n. Il y a aussi une optimisation sur les cellules L S T M appelées cellules G R U qui signifie unité récurrente fermée. C' est juste une simplification sur les cellules Ellis TM qui effectue presque une houle. Donc, si vous avez besoin de trouver un équilibre ou un compromis entre la performance en termes de fonctionnement de votre modèle et la performance en termes de temps qu'il faut pour l'entraîner, Aguiar que vous vendez pourrait être un bon choix. Leur formation est vraiment difficile. Si vous pensiez que CNN était dur, attendez jusqu'à ce que le magnétoscope se termine. Ils sont très sensibles à la topologie est que vous choisissez et le choix des paramètres hyper . Et puisque nous devons simuler les choses au fil du temps, et pas seulement à travers vous connaissez la topologie statique de votre réseau. Ils pourraient devenir extrêmement gourmands en ressources. Et si vous faites les mauvais choix ici, vous pourriez avoir un réseau récurrent ou un réseau qui ne converge pas tout. Vous savez que cela pourrait être complètement inutile, même après avoir couru pendant des heures pour voir si cela fonctionne réellement. Encore une fois, il est important de travailler sur des recherches antérieures. Essayez de trouver des excuses et des paramètres qui fonctionnent bien pour des problèmes similaires à ce que vous essayez de dio. Tout cela a beaucoup plus de sens avec un exemple, et vous verrez que c'est vraiment nulle part aussi difficile que cela puisse paraître lorsque vous utilisez la caresse Now. Je travaillais à IMDB, donc je ne peux pas résister à l'utilisation d'un exemple lié à un film. Alors plongons dans cette prochaine et voyons nos réseaux neuronaux récurrents en action 14. Utiliser des RNN pour l'analyse du sentiment: ce que nous allons faire ici, c'est essayer d'analyser les sentiments. Donc, cela va être un exemple d'une séquence à vecteur sont dans et problème où nous prenons la séquence de mots dans une critique de film écrite par l'utilisateur. Et nous essayons de sortir un vecteur qui est juste une seule valeur binaire de savoir si oui ou non cet utilisateur aime le film ou non où il a donné une note positive. Il s'agit donc d'un exemple de classification des sentiments à l'aide des données d'examen des utilisateurs de riel provenant de la BDIM. Et depuis que je courais, je suis le département d'ingénierie DVS. C' est un peu trop tentant pour moi de ne pas faire est un exemple ici. Maintenant, attention que vous donnez juste du crédit là où le crédit est dû. Ceci est tiré fortement sur l'un des exemples qui expédient avec caresse l' échantillon IMDb l s t M . J' ai en quelque sorte embelli là-dessus un peu ici, mais l'idée est qu'il dit de donner du crédit là où le crédit est dû et cela me réchauffe le cœur par la façon dont ils incluent l'ensemble de données IMDb dans le cadre de caresse libre à expérimenter. Donc c'est ah qui jaillit de bons souvenirs pour moi. J' ai aimé y travailler. Quoi qu'il en soit, ce n'est pas un autre exemple de la façon dont nous allons utiliser les cellules de mémoire à court terme L S t M car encore une fois, lorsque vous traitez de la séquence de données textuelles de mots dans la phrase, cela ne importe où dans la phrase ce mot est apparu. Vous ne voulez pas que la propriété des mots vers la fin de la phrase compte mawr vos classifications que les mots au début de la phrase. En fait, c'est souvent l'inverse. Nous allons donc utiliser une cellule L S T m pour essayer de contrer cet effet que vous voyez dans extrémités RN normales où les données sont diluées au fil du temps ou au fur et à mesure que la séquence progresse dans cet exemple. Alors nous allons juste plonger et voir comment ça marche. Commencera par importer tous les trucs dont nous avons besoin de Caris. Nous allons utiliser des modules de pré-traitement de séquence, modèle séquentiel afin que nous puissions intégrer différentes couches. Ensemble, nous allons introduire une nouvelle couche d'incorporation dans le cadre de notre et en plus de la couche dense que nous avions auparavant, nous allons importer le module LS tm et enfin importer l'ensemble de données IMDb et le navire est entré pour faire tout cela et obtenir la caresse initialisée. Et c'est fait maintenant. Maintenant, nous pouvons importer nos données de formation et de test. Comme je l'ai dit, Caris a un jeu de données dandy IMDb pratique préinstallé. Curieusement, il a 5000 examens de formation et 25 000 examens de tests, ce qui me semble à l'envers. Mais c'est ce que c'est. Le seul paramètre que vous voyez ici pour les mots engourdis, indique le nombre de mots uniques que vous souhaitez charger dans votre ensemble de données d'entraînement et de test . Donc, en disant des nombres équivaut à 20 000, cela signifie que je vais limiter mes données aux 20 000 mots les plus populaires et à l'ensemble de données. Donc quelqu'un utilise un mot vraiment obscur. Il ne va pas apparaître dans nos données d'entrée. Allons de l'avant et chargeons ça. Et comme il doit réfléchir, il ne revient pas instantanément, mais plutôt rapidement. OK, on était dans les affaires ici. Jetons un coup d'oeil à ce à quoi ressemblent ces données. Jetons un coup d'oeil à la première instance de données d'entraînement ici, et ce que diable, C'est juste un tas de chiffres. Ça ne ressemble pas à une critique de film pour moi. Tu peux être très reconnaissante envers les gens qui se soucient de faire ça pour toi. Donc, quand vous faites de l'apprentissage automatique en général, les modèles ne fonctionnent pas avec les mots. Ils travaillent avec des chiffres, non ? Nous devons donc convertir ces mots en nombre. D' une certaine manière est la première étape, et caress a déjà fait tout ce pré-traitement pour vous. Donc vous savez, le numéro un pourrait correspondre au mot le ou je n'ai aucune idée de ce qui correspond à, mais ils ont encodé chaque mot unique entre zéro et 20 000 parce que nous avons dit que nous voulions le plus mots populaires deux chiffres. Ok, donc c'est un peu dérisoire qu'on ne puisse pas lire ces critiques et obtenir une sorte de sens intuitif de ce que ces critiques disent. Mais ça nous fait économiser beaucoup de travail. Et je l'ai déjà dit que souvent une grande partie du travail dans l'apprentissage automatique n'est pas tant de construire vos modèles et de les ajuster. Il s'agit simplement de traiter et de masser vos données d'entrée et de s'assurer que vos données d'entrée semblent bonnes. Donc, même si cela ne ressemble pas à une critique de film. C' est une critique de film. Ils viennent de remplacer tous les mots par des nombres uniques qui représentent chaque mot. Nous pouvons également jeter un oeil aux données de formation. Donc, la classification de cette revue particulière était celle qui signifie simplement qu'ils l'aimaient . Donc, les seules classifications sont zéro et une qui correspond à un sentiment négatif ou positif pour cette révision. Ok, donc nous avons toutes les données d'entrée converties déjà au format numérique. C' est génial. Maintenant, il suffit d'aller de l'avant et de mettre les choses en place. Commençons par créer quelques vecteurs ont été entrés ici. Donc on va sortir nos données d'entraînement et de test ici. Nous allons appeler des séquences d'arrêt de séquence juste pour nous assurer que tout a une limite sur eux à 80 mots. Donc la raison pour laquelle nous faisons cela est parce que, comme nous l'avons dit, notre et finit peut exploser très rapidement. Vous devez vous propager à travers le temps. Nous voulons donc avoir une limite supérieure sur le nombre de fois où nous devons nous propager en arrière. Donc, en disant que Max Line est égal à 80, cela signifie que nous allons seulement regarder les 80 premiers mots de chaque revue et limiter notre analyse à cela. C' est donc une façon de tronquer notre propagation du dos à travers le temps. C' est une façon peu technologique de le faire, mais c'est efficace. Sinon, nous dirigerions ce truc pendant des jours. Ok, donc le seul point ici est de couper tous ces commentaires dans la formation et l'ensemble des données de test à leurs premiers 80 mots, qui ont encore été convertis en nombres pour nous déjà. Construisons le modèle lui-même. Hey, on ne s'est pas vraiment enfui. Courir. C' est allons-y. Ish frapper, déplacer, entrer dans ce bloc. Ok, maintenant on peut construire le modèle lui-même. Et pour un réseau de neurones si compliqué, je pense que c'est assez remarquable combien de lignes de code Zehr se passent ici. Alors parlons à travers. Cela va commencer par créer un modèle séquentiel, qui signifie que nous pouvons juste construire la topologie de notre réseau une étape à la fois ici, donc nous allons commencer avec quelques pré-traitement supplémentaire ont été utilisés a été appelé une couche d'intégration ici, et tout ce qui fait est de convertir notre date d'entrée des mots des 80 premiers mots et de donner un examen en vecteurs denses d'une certaine taille fixe. Donc, il va créer un vecteur dense d'une taille fixe de 20 000 mots et ensuite l'entonnoir dans 128 hit et neurones à l'intérieur de mon réseau neuronal. Donc, c'est tout ce que l'intégration de Layer fait est juste de prendre ces données textuelles d'entrée qui ont été encodées et de les convertir dans un format qui convient à l'entrée dans mon réseau neuronal . Ensuite, avec une seule ligne de code, nous construisons notre réseau neuronal récurrent. Donc nous disons juste, ajouter L S T M et nous pouvons passer en revue les propriétés ici une fois qu'ils voudront avoir 128 neurones récurrents dans cette couche Ellis TM. Et nous pouvons également spécifier des termes de décrochage juste dans cette même commande ici. Donc, nous pouvons dire que nous voulons faire une baisse de 20% et c'est tout ce qu'il y a à faire. Cette ligne de code met en place un réseau neuronal R l s T M avec 128 neurones récurrents et ajoute des phases d' abandon de 20% en une seule étape. Enfin, nous devons réduire cela à un seul neurone de sortie avec une fonction d'activation sigmoïde parce que nous avons affaire à un problème de classification binaire, et c'est tout. Nous avons donc défini la topologie de notre réseau avec seulement quatre lignes de code, même s'il s'agit d'un réseau neuronal très compliqué et récurrent utilisant des cellules L S T M et des phases de décrochage. Mais la caresse rend tout cela très facile à faire. Nous devons alors dire à caresse comment optimiser ce réseau neuronal, comment l'entraîner Donc nous allons utiliser l'entropie croisée binaire parce que c'est finalement un problème de classification binaire . Est-ce que la personne a aimé ce film ou non, va utiliser l'Adam Optimizer cette fois juste parce que c'est une sorte de meilleur des deux mondes pour Optimizers, et ensuite nous pouvons le lancer. Alors allons de l'avant et exécutons ces deux blocs précédents décalage, entrée, décalage, entrée et à ce stade, vous êtes prêt à réellement former votre réseau neuronal. Et nous allons juste marcher à travers ce qui se passe ici. C' est très similaire aux exemples précédents. Dans ce cas, nous allons utiliser des tailles de lot de 32 avis à la fois. Nous allons l'exécuter sur 15 étapes de formation ou un ensemble d'époques de couche de verbosité compatible avec les ordinateurs portables I Python et fournir la quarantaine de données de validation. Maintenant, encore une fois, je ne vais pas exécuter ça maintenant parce que ça prendra environ une heure. Comme je l'ai dit, notre et les extrémités sont difficiles. Ils prennent beaucoup d'informatique. La ressource l'est. Et puisque tout ce que je fais est d'exécuter ce processeur unique en ligne, je n'ai même pas de choses configurées pour utiliser mon GP. Vous êtes encore moins une grappe d'ordinateurs. Cela prend beaucoup de temps. Mais je l'ai fait plus tôt, et vous pouvez voir les résultats ici. Ainsi, plus de 50 Net box, vous pouvez voir que la précision qu'il mesurait sur les données d'entraînement commençait à converger. On dirait qu'après environ 13 étapes, il devenait aussi bon qu'il allait l'obtenir. Et puis de plus, nous pouvons réellement évaluer ce modèle compte tenu de l'ensemble des données de test. Alors allons de l'avant et appelons Evaluer à ce sujet avec nos données de test à nouveau en utilisant 32 lots et si nous devions exécuter cela nous verrions que nous finissons avec une précision de 81% sur notre modèle ici . Cela ne semble pas impressionnant, mais quand on considère que tout ce que nous faisons est de regarder les 80 premiers mots de chaque critique et d'essayer de comprendre juste en fonction de ce début. Qu' un utilisateur aime ou non le film, ce n' est pas trop mal. Mais encore une fois, reculez et réfléchissez à ce que nous venons de faire ici. Nous avons créé un réseau de neurones qui peut essentiellement lire les critiques de langue anglaise et déterminer une sorte de signification derrière eux. Dans ce cas, nous l'avons appris à prendre une séquence de mots au début d'un film, revoir cette route humaine et à classer cela comme une critique positive ou négative. Donc, dans un sens très réel, nous avons à un certain niveau dans un niveau très basique, enseigné à notre ordinateur comment lire. C' est cool ? Et la quantité de code que nous avons écrit pour le faire était minime, non ? Donc c'est une sorte de diffamation. C' est vraiment une question de savoir quelle technique utiliser pour construire votre réseau neuronal, fournir les données d'entraînement appropriées, puis votre réseau neuronal fait le reste. C' est vraiment un peu effrayant quand on s'assied et qu'on y pense de toute façon. Des trucs cool. C' est donc un excellent exemple de la puissance de la caresse et un excellent exemple d'une application d'un réseau neuronal récurrent n'utilisant pas l'exemple typique des données boursières ou quelque chose comme ça, mais plutôt pour l'analyse du sentiment où nous avons pris une séquence de mots et l'utiliser pour créer une classification binaire d'un sentiment basé sur cette séquence, donc des trucs amusants sont dans les extrémités et caresser. 15. Transfert d'apprentissage: le monde d'un oeil dans un temps étrange et passionnant. Avec l'apprentissage par transfert, il n'a jamais été aussi facile de déployer un modèle d'intelligence artificielle entièrement formé et de commencer à l'utiliser pour résoudre des problèmes réels. L' idée ici est d'utiliser des modèles pré-formés qui sont déjà là, disponibles sur Internet pour tout le monde à utiliser. Et pour beaucoup de problèmes courants, vous pouvez simplement importer un modèle pré-formé que quelqu'un d'autre a fait tout le travail acharné de rassembler et d'optimiser et de comprendre les bons paramètres et la bonne topologie et simplement les utiliser. Donc, par exemple, si vous essayez de faire la classification des images, il y a des modèles pré-formés là-bas que vous pouvez juste importer certains des meurtres appelés rez. Net Inception, Mobile Net dans Oxford c. G. Ou quelques exemples. Et ils viennent pré-formés avec une très grande variété de types d'objets. Donc, dans de nombreux cas, vous pouvez simplement libérer l'un de ces modèles hors du plateau, pointer une caméra vers quelque chose, et il vous dira ce qu'il est. C' est un peu bizarre. De même, pour le traitement du langage naturel, il existe des modèles pré-formés disponibles aussi, comme où Tyvek et gant que vous pouvez utiliser pour enseigner à votre ordinateur comment lire . Avec seulement quelques lignes de code. Maintenant, vous pouvez simplement les utiliser tels quels, mais vous pouvez aussi simplement les utiliser comme point de départ si vous voulez les étendre ou les développer pour des problèmes plus spécifiques. Donc, même s'ils ne résolvent pas le problème spécifique que vous essayez de résoudre, vous pouvez toujours utiliser les modèles pré-formés comme point de départ pour construire à partir de cela est, vous savez beaucoup plus facile à aller avec. Vous n'avez pas à perdre beaucoup de temps à essayer de trouver la bonne topologie et les bons paramètres pour un type de problème spécifique. Vous pouvez commencer avec eux tout ce qui est déjà compris tout cela pour vous et juste ajouter sur le dessus . C' est ce qu'on appelle l'apprentissage par transfert. Fondamentalement, nous transférons et le modèle de train existant de quelqu'un d'autre à votre application. Maintenant, vous pouvez trouver plus de ces modèles pré-formés et ce que l'on appelle les zoos modèles. Un populaire est appelé les modèles de café. Oh, et c'est ah, je ne suis pas sûr de penser à tout ça. Je veux dire, c'est super facile de déployer un I. Maintenant, comme vous le verrez bientôt dans notre exemple suivant, vous pouvez juste importer un modèle existant qui modélisent et commencent à l'utiliser avec, juste, vous savez, quatre ou cinq lignes de code. Vous n'avez plus besoin d'être vraiment, Ah, Ah, très bon développeur pour réellement utiliser l'IA pour des applications pratiques. Donc un endroit bizarre pour l'industrie d'être en ce moment et en quelque sorte ouvre beaucoup de possibilités intéressantes et potentiellement effrayantes. Comment les gens pourraient commencer à utiliser cette technologie quand il y a une telle barrière à l'entrée maintenant de réellement l'utiliser de toute façon, Plongons dans un exemple du monde réel, et je vais vous montrer à quel point c'est facile maintenant effrayant. Alors plongons dans l'apprentissage par transfert. Ouvrez le carnet d'apprentissage de transfert dans votre matériel de cours, et vous devriez voir cela, et vous verrez bientôt à quel point il est fou d'utiliser et à quel point il peut être bon. Donc on va utiliser le modèle résonant 50 ici. Ceci est utilisé pour la classification des images, donc c'est un moyen incroyablement facile d'identifier les objets dans des images arbitraires. Donc si vous avez, ah, une photo de quoi que ce soit peut venir d'une caméra ou d'une image vidéo ou qu'est-ce que vous avez ce comptel ? Qu' est-ce qu'il y a dans cette photo ? Assez fiable, il s'avère. Alors, amuse-toi un peu avec ça. Donc juste pour prouver un point, je vais essayer certains de mes électeurs de vacances ici avec ça. C' est donc nous allons être sûrs que les photos que je donne au résident 50 pour classer nos photos qu'il n'a jamais vues auparavant et voir ce qu'il pourrait en faire. Par exemple, j'ai pris cette photo d'un avion de chasse pendant que j'explorais les déserts de Californie. Nous allons juste courir que Ceci est inclus avec votre matériel de cours, et là nous avons une photo d'un avion de chasse. Donc, pour commencer, nous allons voir si le modèle résident 50 peut l'identifier et voir ce qui est impliqué dans revêtement de ça. D' abord. Nous avons juste besoin d'importer les modules dont nous avons besoin, nous devons donc importer à nouveau le modèle résident 50 qui est intégré dans la caresse, ainsi que plusieurs autres modèles aussi. Nous n'avons même pas à aller à la difficulté de le télécharger et de l'installer. Il est juste là et à partir de nous allons également importer pour gérer les outils de pré-traitement, fois de caress elle-même et fait partie du paquet Resident 50 lui-même. Nous allons aussi important, euh, euh, tarte, parce que nous allons utiliser la tarte engourdie pour manipuler les données de l'image dans un rayon plus élevé , qui est finalement ce que nous avons besoin de nourrir dans un neural réseau. Alors allons de l'avant et lançons ce bloc maintenant. Une sorte de limitation du modèle résident 50 est que vos images d'entrée doivent être à 24 par 2 24 résolution. Vous savez, c'est en partie pour s'assurer qu'il fonctionne efficacement. Il est également limité à l'une des 1000 catégories possibles, et cela pourrait ne pas sembler beaucoup. Mais je pense que vous serez surpris de voir combien de détails cela vous donnera sur ce qu'est la chose. Alors, continuons et rechargeons cette image. Cette fois, nous allons le réduire à 2 24 par 2 24 pendant que nous le chargeons, et nous allons le convertir en un pirate engourdi avec ces deux lignes de code, puis appeler l' entrée pré-processus de 50 modèles résidents pour faire quelque chose pour préparer données. Je suppose qu'il le met à l'échelle dans la plage qu'il veut et peut-être faire un pré-traitement de l'image elle-même pour le faire fonctionner mieux. C' est une sorte de boîte noire, et c'est un peu. Qu' est-ce qui est bizarre d'utiliser l'apprentissage par transfert ? Tu sais, tu es juste en train de croire qu'il fait ce qu'il faut. Mais d'un point de vue pratique, ce n'est pas une mauvaise chose pour Dio. Allons de l'avant et exécutons tout cela bien, donc il est pré-traité mon image. C' était plutôt rapide. Maintenant, nous allons charger le modèle lui-même. Une ligne de code est tout ce qu'il faut. Le modèle est égal à résident 50. Les pondérations qui s'y trouvent représentent qu'il va utiliser des pondérations apprises à partir de l' ensemble de données du réseau d'image . Ainsi, vous pouvez même utiliser des variations de résidents 50 qui ont été formés sur différents ensembles d'images . C' est potentiellement là. Alors allons de l'avant et chargeons le modèle et c'est fait. Donc maintenant, on peut juste l'utiliser. Donc, nous avons maintenant un modèle de classification d'image pré-formé ici avec une ligne de code, et nous pouvons simplement l'utiliser maintenant. Tout ce qu'il faut faire c'est appeler. Prédis-le dessus et on a fini que c'est tout. C' est vraiment si facile. Alors essayons ça. Nous l'avons fait. Ah, comme vous vous souvenez de notre image d'avion de chasse pré-traitée ici, dans le rayon X, et nous allons juste appeler des ponts opératoires modélisés et voir ce qu'il revient avec. Je reviendrai avec une classification et de traduire cela en quelque chose de lisible par l'homme appellera simplement la fonction de prédictions de décodage qui vient avec le modèle 50 résident également. C' est aussi facile que ça. Ok, littéralement deux lignes de code ici, non ? Nous décidons d'une ligne pour charger réellement le modèle 50 résident et transférer cet apprentissage à notre application, si vous voulez, en spécifiant un ensemble donné de poids qui a été pré-appris à partir d'un ensemble donné d'images. Et puis nous appelons, Prédisons sur ce modèle et nous avons fini. C' est ça. Laissons ça et voyons si cela fonctionne réellement. Wow. Ok, donc, ouais, c'est la meilleure prédiction était en fait un avion de guerre, et c'est exactement ce que c'est une photo, même si elle n'a jamais vu cette image avant, jamais. Et je n'ai rien fait pour m'assurer que la photo était comme sous le bon angle ou bien encadrée ou quelque chose comme ça ou, vous savez, pré-traitée. Avec beaucoup de contraste, cela fonctionne juste. C' est un peu effrayant. Bien. C' est un missile suivi d'un projectile. Et oui, il y avait aussi des missiles et des projectiles dans cet avion. Donc non seulement m'a dit que c'était un avion de guerre et m'a dit que c'était un avion de guerre qui avait des missiles dessus. Je veux dire, Wow, c'est dingue. Bien, non ? Essayons avec d'autres images. Peut-on juste avoir de la chance. Alors faisons un peu pratique. Ah, fonctionne ici pour le faire sur une image donnée plus rapidement. Donc, nous allons écrire une petite fonction de classification ici, et il commencera par afficher une image de la chose que nous commençons à classer ici. Il va ensuite abaisser cette image, en la ramenant à la dimension requise à 24 par 2 24 dimensions. Convertissez cela en bûcher engourdi, un pré traiter, puis appelez, prédites sur le modèle résident 50 et voyez ce qu'il revient avec. Donc maintenant, nous pourrions simplement dire classifier et quel que soit notre nom de fichier image est, et il nous dira quel ISS Donc, nous avons réduit notre peu de code ici à juste une ligne maintenant, donc je peux maintenant juste un hit shift entrer pour définir cette fonction. Et maintenant je pourrais juste dire, Eh bien, j'ai, fichier AH appelé Bunny Dodge a Pig et mon matériel de cours. Classons ce quart de travail. Entrez. Il y a une photo d'un lapin dans mon jardin que j'ai prise une fois, et bien sûr, la meilleure classification est le lapin suivi par les cheveux. Non seulement dire que c'est un lapin, c'est me dire quel genre de lapin je ne connais pas vraiment mon espèce de lapin, donc je ne sais pas si c'est vraiment un lapin en bois, mais ça pourrait être, tu sais à ta façon. C' est assez impressionnant. Je veux dire, ce n'est même pas un morceau important de cette image. C' est juste un peu comme s'asseoir là au milieu, ma pelouse. Ce n'est même pas si clair d'une photo non plus. Imaginez cette échelle de 2 à 24 par 2 24 Il n'y aura vraiment pas beaucoup d'informations là-bas, mais il est encore compris que c'est un lapin. Que diriez-vous d'une photo d'un camion de pompiers et ce n'est pas un camion de pompiers normal non plus. C' est comme dans ce même musée de l'aviation que j'ai pris une photo de cet avion de guerre de son ah , une sorte d'ancien camion de pompiers utilisé par l'armée de l'air. Mais quand même, le moteur de pompiers est la prédiction supérieure. Euh, wow, c'est plutôt cool. J' ai pris une photo de mon petit-déjeuner une fois dans un hôtel chic à Londres. Voyons ce que ça fait avec ça. Un petit déjeuner anglais complet . Quand on est à Londres, on doit manger. Ses Londoniens le font. En fait, je ne sais pas s'il a vraiment senti le petit déjeuner anglais là-bas, mais c'est toujours bon. Ah, oui. Donc il a compris qu'il y avait une table à manger sur cette photo. Il y a un plateau contenant ma nourriture. Un restaurant. Je veux dire, bien, c'était en fait un service de chambre, mais vous pourriez certainement imaginer que c'est dans un restaurant à la place. Donc, ouais, encore une fois, un travail impressionnant ici sur une photo aléatoire de vacances. Il n'a jamais vu cette photo avant. Je n'ai pas m' pensé à m'assurer que c'était une image qui fonctionnerait bien avec l'apprentissage automatique . Intelligence artificielle pour les classifications d'images. Continuons. Quand j'étais en Angleterre, j'ai visité des châteaux au Pays de Galles. Quand j'étais en Angleterre, Photo d'un casting vit Da Goto baleines. Les gars, c'est beau là-bas. Euh, ouais, c'est un château. C' est ça. Arrêtez la prédiction. La deuxième hypothèse était un monastère ou un palais. Les deux bonnes suppositions, mais oui, c'est un château. Et, vous savez, ce n'est même pas un château typique. Je l'avais encore compris. C' est des trucs incroyables. Bon, voyons si je peux le démonter. J' ai également pris un voyage au Nouveau-Mexique une fois et visité a été appelé le Very Large Array. Il s'agit essentiellement d'un ensemble de plats géants de radioastronomie avec seulement 1000 classifications . Je n'imaginerais pas que ça arriverait bien. Donc il y a une photo. C' est juste un tas de télescopes géants de radioastronomie. Et ça dit que c'est un radiotélescope. Euh, c'est ça ? C' est des trucs qui soufflent l'esprit, les gars. D' accord, un de plus. J' ai pris une photo du pont une fois et tu te souviens de ce qu'est Bridget. Pont de Londres. Apparemment Eso Ok, c'est quoi ce résident 50 un pont suspendu. Et aussi il y a apparaître dans une clôture de chaîne et de maillons de chaîne là-dedans aussi, pour une bonne mesure. Donc Ah, c'est assez impressionnant, non ? Je veux dire, donc si vous avez besoin de faire la classification des images. Vous n'avez même pas besoin de connaître les détails de la façon dont les réseaux neuronaux de convolution l fonctionnent, comment les accorder. Et, ah, vous savez comment, genre, construire les bonnes excuses et ça arrangé sur les bons paramètres hyper. Vous pouvez simplement utiliser le travail de quelqu'un d'autre déjà fait cela, et en utilisant des modèles suinte des modèles de café qui sont ailleurs pour beaucoup de problèmes communs , vous congeste se lever et courir dans quelques lignes de code. Il n'a jamais été aussi facile d'utiliser l'intelligence artificielle dans une application du monde réel maintenant. Donc, bien qu'il soit bon de comprendre les fondamentaux, surtout si vous allez faire quelque chose que personne n'a jamais fait auparavant pour des problèmes courants d' IA, il y a eu tellement de recherches ces dernières années qu'il y a de bonnes chances que quelqu'un a déjà résolu le problème que vous essayez de résoudre. Et vous pouvez juste réutiliser leurs résultats s'ils ont eu la gentillesse de les publier sur un modèle qui quelque part, Wow , donc oui, a essayé sur des photos de votre propre à mon Pas si vous avez juste jeter le cours et appelez ma fonction de classification dessus et voyez ce qu'il en fait. Amusez-vous simplement avec elle, et vous pouvez également essayer quelques modèles différents pour voir comment ils se comportent différemment. Resident 50 était en fait le modèle qui a fonctionné le mieux pour mes photos. Mais il y a d'autres modèles inclus avec caresse, y compris Inception et Mobile Net que vous voudrez peut-être essayer. Si vous voulez jouer avec eux, vous devrez revenir à la documentation ici. Il y a un lien vers ça ici. Vous devez savoir dans quelles dimensions d'image il attend l'entrée,par exemple, par exemple, ou quelqu'un qui travaille tous. Donc oui, je donne pour essayer et ah, mec, c'est de souffler des trucs. Les gars comme, euh, euh, s'asseoir là et laisser tomber dans le fait que c'est si facile d'utiliser AI en ce moment. 16. Tuner des réseaux neurales : Taux d'apprentissage et Hyperparamètres taille par lots: Parlons un peu de réglage de vos réseaux neuronaux. Ce n'est pas des choses qui sont généralement enseignées, mais je n'essaie pas de le transmettre du mieux que je peux. Parlons donc du taux d'apprentissage. Tout d'abord, qu'entend-on par taux d'apprentissage ? Eh bien, vous devez comprendre comment ces réseaux neuronaux sont formés. Ils utilisent une technique appelée descente en gradient ou quelque chose de similaire à la descente en gradient est différentes saveurs de celui-ci là-bas. L' idée de base est que nous commençons à un point aléatoire de poids dans notre réseau neuronal. Et nous venons d'échantillonner différentes solutions, différents ensembles de poids en essayant de minimiser certaines fonctions de coût que nous avons définies sur plusieurs époques. Ce sont donc les mots-clés là. Nous avons beaucoup d'époques, d'itérations sur lesquelles nous nous entraînons. À chaque époque, nous essayons un ensemble différent de poids sur notre réseau neuronal, essayant de minimiser une fonction de coût, ce qui pourrait être la précision globale de la façon dont il fait des prédictions sur notre ensemble de validation. Donc, nous devons avoir une sorte de rime et de raison quant à la façon dont nous faisons ces échantillons de différentes solutions, différents poids, si vous voulez, si nous devions faire bouillir cela en sorte de graphique en deux dimensions, peut-être que ça ressemblerait à quelque chose comme ceci, où nous échantillonnons juste différents points ici le long d'une courbe de solutions. Et nous essayons de trouver celui qui minimise la fonction de coût. Donc c'est l'axe y. Donc, ce que nous essayons de trouver est le point le plus bas sur ce graphique. Et nous essayons d'y arriver en l'échantillonnant à différents moments et en apprenant de chaque échantillon précédent. C' est ce qu'est la descente en pente. Le taux d'apprentissage dépend donc de l'écart entre ces échantillons. Donc vous voyez ici nous avons peut-être commencé ici et notre taux d'apprentissage a dit, Ok, je vais essayer un autre point ici et essayer encore ici, ainsi de suite et ainsi de suite jusqu'à ce que je trouve enfin point le plus bas le long de cette courbe et appelle que mon meilleur solution. Donc pas trop difficile de comprendre l'effet du taux d'apprentissage sur votre formation, n'est-ce pas ? Si vous avez un taux d'apprentissage trop élevé, vous risquez de dépasser entièrement cette solution. Alors imaginez que mon taux d'apprentissage était énorme et que je suis allé directement d'ici à ici. Ce point final pourrait me manquer. Ils le sont entièrement si mon taux d'apprentissage était trop élevé. Mais vous pouvez voir que si mon taux d'apprentissage est trop faible, je vais échantillonner beaucoup de points différents ici. Et cela va prendre beaucoup d'époques, beaucoup d'étapes pour trouver réellement la solution optimale. Si un taux d'apprentissage trop élevé pourrait signifier que je surpasse entièrement la bonne solution, mais trop faible pour le taux d'apprentissage signifiera que ma formation pourrait prendre plus de temps que nécessaire. Maintenant, le taux d'apprentissage est un exemple de ce que nous appelons les hyperparamètres. C' est l'un des boutons et cadrans que vous utilisez lors de l'entraînement votre modèle d'apprentissage profond qui peut affecter son résultat final. Et souvent, ces hyperparamètres peuvent avoir autant d'influence sur la qualité de votre modèle que la topologie du modèle, l' ingénierie d'entités que vous avez réalisée dans tout le reste. Donc, c'est juste une autre pièce du puzzle ici que vous devez arriver expérimentalement. En plus du taux d'apprentissage, un autre hyperparamètre important est la taille du lot, et c'est le nombre d'échantillons d'entraînement utilisés à chaque époque. Maintenant, vous avez martelé ça dans la tête les gars, parce que c'est un peu contre-intuitif. Vous penseriez qu'un gros lot serait une bonne chose, non ? Plus il y a de données, mieux c'est. Mais non, ce n'est pas comme ça que ça finit par fonctionner. Il s'avère que si vous avez une petite taille de lot, il a une meilleure capacité de sortir de ce que nous appelons minima locaux. Donc, dans cet exemple ici, vous pouvez voir que nous avons un minima ici, une sorte de plongeon dans le graphique ici, où nous avons une assez bonne, belle valeur de la fonction de faible perte ici, ce que nous essayons d'optimiser est assez bon ici. Mais il y a un risque pendant la descente en pente que nous soyons coincés dans ces minima locaux alors qu'en fait la meilleure solution est ici quelque part. Donc, nous voulons nous assurer que pendant le processus de descente en pente, nous avons une certaine capacité à nous sortir de cette chose et à trouver la meilleure solution. Il s'avère que les petites tailles de lot peuvent le faire plus efficacement que les plus grandes. Ainsi, une petite taille de lot peut sortir de ces minima locaux. Mais une grande taille de lot pourrait finir par être coincé là-dedans, comme en gros l'attendre si vous voulez. Ainsi, les tailles de lots trop grandes peuvent finir par être bloquées dans la mauvaise solution. Et ce qui est encore plus bizarre, c'est que vous allez généralement mélanger vos données au début de chaque période d'entraînement. Cela peut finir par se manifester comme obtenir des résultats très incohérents d'une exécution à l'autre. Donc, si ma taille de lot est juste un peu trop grande, peut-être que parfois je vais rester coincé dans ces minima et parfois je ne le ferai pas. Et je vais voir que dans les résultats finaux est de voir que d'une course à l'autre. Parfois, j'aurai cette réponse et parfois ils obtiendront cette réponse, d'accord. Donc martelé cela dans votre tête les gars est plus petites tailles de lot ont tendance à ne pas rester coincé dans les minima locaux, mais les grandes tailles de lot peuvent converger sur la mauvaise solution au hasard. Un taux d'apprentissage élevé peut finir par dépasser la bonne solution, mais de faibles taux d'apprentissage peuvent augmenter le temps de formation. Alors rappelez-vous ceci, écrivez-le, choses importantes et c'est encore une fois, c'est un exemple de choses que la plupart des gens viennent d'apprendre à la dure grâce à l'expérience, mais j'essaie de vous l'apprendre jusqu'à la frontière. 17. Régulation en profondeur avec Dropout et s'arrêter: Plongons dans les techniques de régularisation dans le monde des réseaux neuronaux. Qu' est-ce que la régularisation de toute façon ? Eh bien, fondamentalement, la régularisation est toute technique destinée à empêcher le suréquipement. Qu' est-ce que le suréquipement ? Eh bien, si vous avez un modèle qui est bon pour faire des prédictions sur les données sur lesquelles il a été formé, mais il ne fonctionne pas si bien sur les nouvelles données qu'il n'a pas vues auparavant. Ensuite, nous disons que ce modèle est surmonté. Cela signifie que ce sont des modèles appris dans vos données d'entraînement qui n'existent pas vraiment dans le sens général dans le monde réel. Donc, si vous voyez une précision élevée sur votre jeu de données d'entraînement, mais une précision moindre sur votre jeu de tests ou votre jeu de données d'évaluation. C' est la façon dont la nature vous dit que vous pourriez être surperformant. Reprenons un pas en arrière ici. C'est probablement la première fois que j'utilise le mot jeu de données d'évaluation. Encore une fois, si vous êtes nouveau dans ce monde, dans le monde de l'apprentissage profond, nous parlons généralement de trois ensembles de données différents. Nous avons donc le jeu de données d'entraînement. Il s'agit des données d'entraînement réelles introduites dans votre réseau neuronal de bas en haut. Et c'est sur ça que nous formons le réseau, non ? Et alors que nous formons chaque époque, nous pouvons évaluer les résultats de ce réseau par rapport à un jeu de données d'évaluation. Donc, fondamentalement, c'est l'ensemble de l'ensemble de formation qui a mis de côté pour évaluer les résultats et la précision de votre modèle au fur et à mesure qu'il est formé. Et puis nous pouvons également avoir un jeu de données de test à qui vit en dehors de tout cela. Donc, une fois que nous avons un modèle entièrement formé, nous pouvons alors utiliser notre jeu de données de test pour évaluer le modèle complet et fini, si vous voulez. Encore une fois, si vous constatez que la précision de votre entraînement est bien supérieure à la précision mesurée par rapport vos données d'évaluation ou à vos données de test à la fin, cela signifie probablement que vous suradaptez les données d'entraînement. Ce graphique à droite le rend un peu plus facile à comprendre. Imaginez que j'essaie de construire un modèle qui sépare les choses qui sont bleues des choses rouges ici. Donc, si vous regardez ces données, votre cerveau peut à peu près comprendre que cette courbe sépare l'endroit où se trouve le truc le plus bleu et où est le truc rouge, non ? Mais dans le monde réel, les données sont désordonnées. Il y a un peu de bruit là-bas aussi. Donc, si, si un modèle que nous suradaptons, il pourrait réellement apprendre cette courbe verte là qui est en fait faufiler dans et hors de toutes les données pour essayer d'aimer l'adapter aux données d'entraînement. Exactement. Mais tu sais, c'est juste du bruit, non ? Je veux dire, en regardant ça, ton cerveau sait que ce n'est pas correct. Mais votre réseau neuronal n'a pas vraiment cette intuition intégrée. Nous avons donc besoin de techniques de régularisation pour éviter que cela ne se produise, pour empêcher un réseau neuronal ou tout modèle d'apprentissage automatique de courbure et ondulation, et sorte de faire passer ces fréquences plus élevées hors du chemin de surajustement ses données à son modèle. Très bien, c'est ce que le suréquipement c'est un bon moyen de le généraliser. La réponse dite correcte, le modèle correct serait cette ligne noire, mais un modèle surmonté serait plus comme la ligne verte. Et c'est en fait quelque chose qui se passe vraiment dans les réseaux neuronaux. Si vous avez un réseau neuronal vraiment profond avec beaucoup de poids et de connexions et de neurones qui y sont intégrés. Il peut totalement reprendre sur des modèles complexes comme ça. Donc, vous devez être prudent avec. C' est là que le monde des techniques de régularisation intervient. Allons dans certains. Donc, une chose très simple pourrait être, vous pourriez juste avoir un modèle trop complexe. Peut-être que vous avez trop de couches sont trop de neurones. Donc vous pourriez avoir un réseau neuronal profond trop profond ou peut-être trop large ou peut-être les deux, non ? Alors. En simplifiant réellement votre modèle vers le bas, cela limite sa capacité à apprendre ces modèles plus compliqués qui pourraient être suradaptés. Donc, un modèle très simple qui n'est qu'une simple courbe comme ça, qui pourrait probablement être atteint grâce à une régression. Peut-être que vous êtes mieux avec un modèle plus simple. Et la technique de régularisation la plus simple consiste simplement à utiliser moins de neurones ou à utiliser moins de couches. C' est une chose tout à fait valable à faire. Parfois besoin d'expérimenter avec ça. Donc, si vous trouvez que votre modèle est surmonté, probablement la chose la plus simple est de simplement utiliser un modèle plus simple. Essayez, essayez moins de couches, essayez moins de neurones dans chaque couche et voyez quel type d'effet peut avoir si vous pouvez toujours avoir la même précision et votre jeu de données de test, mais pas trop adapté à votre jeu de données d'entraînement, alors pourquoi utiliser plus neurones que vous avez besoin ? Une autre technique est appelée décrochage. Et c'est un peu intéressant. Donc, l'idée avec une couche de décrochage est qu'il supprime effectivement certains des neurones de votre réseau à chaque époque pendant qu'il s'entraîne. Et cela a pour effet de forcer votre modèle à apprendre et à s'étaler. Il s'agit d'apprendre parmi les différents neurones et couches de votre réseau. Donc, en abandonnant des neurones spécifiques qui sont choisis au hasard et à chaque étape d'entraînement, nous forçons fondamentalement l'apprentissage à se répandre davantage. Et cela a pour effet d'empêcher tout neurone individuel de s'adapter à un point de données spécifique, n'est-ce pas ? Donc, il est un peu contre-intuitif que réellement enlever les neurones de votre réseau neuronal et le rendre réellement mieux formé. Mais c'est ce qui arrive, qui empêche le suréquipement. C' est donc ce qu'est le décrochage. Encore une fois, une technique de régularisation très efficace. Nous voyons cela beaucoup dans les CNN par exemple, c'est assez standard d'avoir une couche de décrochage assez agressive comme peut-être même 50 pour cent étant tenu pour moi pour chaque passé d'entraînement. Donc, c'est tout ce qu'est l'abandon. C' est juste enlever quelques neurones au hasard, à chaque étape d'entraînement pour forcer votre modèle à étaler son apprentissage un peu mieux. Et cela a un effet de régularisation qui empêche le surajustement. Une autre solution très simple est appelée arrêt précoce. Jetons un coup d'oeil à cette impression car nous formons un vrai réseau neuronal. Donc, vous pouvez voir que si vous regardez la précision sur l'ensemble de validation, C'est la colonne de droite là. Nous sommes passés de 95 % à 97 % et les choses s'améliorent. Et puis tout d'un coup, nous nous levons à environ 98 % et les choses commencent à devenir bizarres. Ça commence à osciller, non ? Donc, nous pouvons dire juste en regardant cela, qu'après environ cinq ans, nous ne faisons plus aucun avantage en nous entraînant plus loin. En fait, nous pourrions faire plus de mal que de bien parce qu'à ce stade, nous commençons probablement à nous suradapter. Et en effet, si vous regardez la précision de l'ensemble d'entraînement, c'est la première colonne de précision, la deuxième colonne de chiffres que vous avez vu cet affichage, la précision de l'ensemble d'entraînement continue d'augmenter à mesure que nous entraînons de plus en plus des époques. Mais la précision sur l'ensemble de validation a pratiquement cessé de s'améliorer à environ cinq. Donc, cela commence assez clairement à surmonter au-delà de la cinquième époque. D' accord. Je vais arrêter tôt est, est un moyen de détecter automatiquement cela. Et c'est un algorithme que nous allons juste dire, accord, la précision de validation est nivelée. Ma précision d'entraînement augmente encore. On devrait s'arrêter maintenant. Donc arrêter tôt signifie juste, ok, je sais que vous vouliez dix époques, mais je peux voir ici qu'après cinq choses vont juste empirer en ce qui concerne le suréquipement. Donc on va s'arrêter à cinq gars, on a fini ici. C' est ça. C'est tout ce que c'est d'arrêter tôt. C' est juste de s'assurer que vous n'entraînez pas votre réseau neuronal plus loin que vous n'auriez dû. Et cela empêche le surajustement. Solution très simple. Là. 18. L'éthique du Deep Learning: Beaucoup de gens parlent de l'éthique de l'apprentissage profond. Sommes-nous en train de créer quelque chose qui est bon pour l'humanité ou, en fin de compte, mauvais pour l'humanité ? Alors allons-y maintenant. Je ne vais pas te prêcher à propos de Cinci dans les robots qui prennent le contrôle du monde. Je veux dire, peut-être que ce sera un problème dans 50 ans, peut-être même plus tôt. Mais pour l'avenir immédiat, ce sont des façons plus subtiles d'utiliser l'apprentissage profond, dont vous devriez vous préoccuper. Et c'est quelqu'un qui entre dans le domaine, soit en tant que chercheur, soit en tant que praticien. C' est à vous de vous assurer que cette technologie puissante est utilisée pour le bien et non pour le mal. Et parfois cela peut être très subtil, sorte que vous pourriez déployer une nouvelle technologie dans votre enthousiasme, et cela pourrait avoir des conséquences involontaires. Et c'est surtout ce dont je veux parler dans cette conférence. Comprendre les conséquences involontaires des systèmes que vous développez avec le Deep Learning. Tout d'abord, il est important de comprendre que la précision ne raconte pas toute l'histoire. Nous avons donc évalué nos réseaux neuronaux en fonction de leur capacité à classer avec précision quelque chose, et si nous voyons comme une valeur de précision de 99,9 %, nous nous félicitons et nous tapotons sur le dos, mais souvent cela ne suffit pas à penser. Tout d'abord, il existe différents types d'erreurs. C' est ce que nous appelons une erreur de type 1, qui est un faux positif. C' est là que vous dites que quelque chose est quelque chose que ce n'est pas. Par exemple, peut-être que vous manquez mal interprété une tumeur qui a été mesurée par certains que vous connaissez, biopsie qui a été prélevée sur un échantillon mammaire comme étant maligne, et ce faux positif de résultat cancéreux malin pourrait entraîner riel inutile chirurgie à quelqu'un. Ou peut-être que vous développez une voiture auto conduite, et votre caméra à l'avant de votre voiture voit une ombre d'un passage supérieur devant vous. Cela m'arrive en fait, au fait, et claque sur les freins parce qu'il pense que la route tombe juste dans l'oubli dans cette masse sombre, et il n'y a rien pour vous de conduire devant vous. Ces deux résultats ne sont pas très bons. Ça pourrait être pire. Attention, je veux dire, sans doute, c'est pire de laisser un cancer sans traitement que d'avoir un faux positif ou un faux positif. Ou ça pourrait être pire. En fait, les orteils dépassent le bord d'une falaise plutôt que de claquer sur vos freins. Mais ça pourrait aussi être très mauvais, non ? Vous devez penser aux ramifications de ce qui se passe lorsque votre modèle fait quelque chose mal maintenant pour l'exemple. La voiture auto conduite. Peut-être qu'il pourrait prendre le niveau de confiance de ce qu'il pense être devant vous et peut-être travailler sur qui est derrière vous. Donc, au moins si vous faites claquer les freins sans raison, vous pourriez vous assurer qu'il n'y a pas quelqu'un qui roule sur votre queue ne va pas à l'arrière Andy ou quelque chose comme ça. Pensez donc à ce qui se passe lorsque votre modèle est incorrect, car même une précision de 99,9% signifie qu'une fois sur 1000 vous allez vous tromper. Et si les gens utilisent votre système plus de 1000 fois, il y aura une mauvaise conséquence qui se produira. En conséquence, vous devez envelopper votre tête autour de ce que ce résultat est et comment vous voulez y faire face. Le deuxième type est un faux négatif et, par exemple, vous pourriez avoir un cancer du sein, mais vous n'avez pas réussi à le détecter. Vous avez peut-être mal classé. C' est être bénin au lieu de malin. Quelqu' un meurt si tu te trompes. D' accord ? Pensez donc très attentivement à la façon dont votre système va être utilisé et aux mises en garde que vous mettez en place, ainsi qu'aux failles de sécurité et aux sauvegardes que vous devez vous assurer que si vous avez un système qui est connu pour produire des erreurs dans certains les conditions, vous traitez avec elles de façon responsable. Un autre exemple de faux négatif serait de penser qu'il n'y a rien devant les syndicats, auto conduite voiture, alors qu'en fait il y a. Peut-être qu'il ne détecte pas la voiture qui s'est arrêtée devant vous. Cela m'arrive aussi. Ce qui se passe alors, Si vous êtes si le conducteur n'est pas alerte, vous vous écrasez dans la voiture en face de vous et c'est vraiment mauvais à nouveau. Les gens peuvent mourir. OK, donc les gens sont très désireux d'appliquer l'apprentissage profond à différentes situations dans le monde réel. Mais souvent, les conséquences réelles d'avoir quelque chose de mal sont une question de vie et de mort , tout à fait littéralement. Donc, vous devez vraiment, vraiment, vraiment, vraiment, penser à la façon dont votre système est utilisé. Et assurez-vous que vos supérieurs et les gens qui sont en train de déployer cela dans le monde comprennent les conséquences de ce qui se passe quand les choses tournent mal et les chances riales des choses qui vont mal. Vous savez que vous ne pouvez pas trop vendre vos systèmes, c'est être totalement fiable parce que je vous promets qu'ils ne le sont pas. Il peut également y avoir des biais cachés dans votre système. Donc, juste parce que le réseau neuronal artificiel que vous avez construit n'est pas humain ne signifie pas qu' il est intrinsèquement juste et impartial. N' oubliez pas que votre modèle est aussi bon que les données avec lesquelles vous l'entraînez. Prenons donc l'exemple si vous allez construire un réseau neuronal qui peut essayer de prédire si quelqu'un est embauché ou pas simplement basé sur les attributs de cette personne. Maintenant, vous, votre modèle lui-même, pouvez être tout pur et ce qui n'est pas. Mais si vous lui donnez des données de formation provenant de vrais humains qui ont pris des décisions d'embauche, cette formation reflétera tous leurs biais implicites. Ce n'est qu'un exemple. Vous pourriez donc vous retrouver avec un système qui est, en fait, raciste ou âgiste ou sexiste simplement parce que les données de formation que vous fournissez ont été faites par personnes qui ont ces préjugés implicites et qui n'en ont peut-être même pas été pleinement conscientes à la temps. OK, donc tu dois faire attention à ces choses. Des choses simples que vous pouvez faire. Je veux dire, évidemment, faire une fonctionnalité réelle pour ce modèle qui inclut l'âge, le sexe, la race ou la religion serait une mauvaise idée, non ? Mais je vois des gens faire ça. Réfléchis à deux fois avant de faire quelque chose comme ça. Mais même si vous ne mettez pas implicitement des entités que vous ne voulez pas considérer comme faisant partie de votre modèle, il peut y avoir des conséquences ou des dépendances involontaires dans vos entités auxquelles vous n' avez peut-être pas pensé. Par exemple, si vous nourrissez des années d'expérience dans le système qui prédit si quelqu'un devrait ou non obtenir une entrevue d'emploi, vous allez avoir un parti pris implicite dans son droit. Les années d'expérience seront très certainement corrélées avec l'âge du candidat. Donc, si vos données de formation antérieures avaient un biais envers vous savez, les blancs dans la vingtaine qui sortent de l'université, votre système va pénaliser les candidats plus expérimentés qui pourraient en fait être de meilleurs candidats qui ont été réussis simplement parce qu'ils étaient perçus comme trop vieux par les humains. Pensez donc profondément à savoir si le système que vous développez a des biais cachés et ce que vous pouvez faire pour au moins être transparent sur ce que sont ces biais. Une autre chose à considérer est, c'est le système que vous venez de construire vraiment meilleur qu'un humain. Donc, si vous construisez un système d'apprentissage profond que les gens dans votre département des ventes ou votre direction ou vos investisseurs veulent vraiment vendre un quelque chose qui peut remplacer des emplois et sauver des gens ont été économiser de l'argent des entreprises. plutôt Vous devezplutôtvous demander si le système que vous vendez est vraiment aussi bon qu'un humain. Et si ce n'est pas le cas, quelles en sont les conséquences ? Par exemple, vous pouvez construire des systèmes d'apprentissage profond qui effectuent des diagnostics médicaux, et vous pouvez avoir un représentant commercial très enthousiaste qui veut vendre ce qui est meilleur qu'un médecin humain. Est-ce vraiment ce qui se passe quand votre système informatique tourne mal ? Est-ce que les gens meurent ? Ce sera mauvais. Il serait préférable d'insister auprès de vos supérieurs sur le fait que ce système n'est commercialisé que comme un outil supplémentaire pour aider les médecins à prendre une décision et non comme un substitut à des êtres humains, prenant une décision qui pourrait affecter la vie ou encore la mort. Auto-conduite voiture est un autre exemple où si vous vous trompez, si vous êtes une voiture auto conduite, n'est pas mieux qu'un être humain et quelqu'un met votre voiture sur le pilote automatique, il peut effectivement tuer des gens. Donc je vois déjà ce qui se passe. Vous savez où les voitures auto-conduites sont trop répandues et il y a beaucoup de cas de bord dans le monde où les voitures auto-conduites ne peuvent tout simplement pas couper là où l'homme le pourrait, et je pense que c'est très dangereux. également Pensezégalementaux applications involontaires de votre recherche. Laissez-moi vous raconter une histoire, parce que cela m'arrive plus d'une fois. Parfois, vous développez quelque chose que vous pensez être une bonne chose qui sera utilisée pour utilisation positive dans le monde réel. Mais il finit par être tordu par d'autres personnes en quelque chose qui est destructeur, et c'est autre chose que vous devez penser. Laissez-moi vous raconter une histoire, donc vous devez réfléchir à la façon dont la technologie que vous développez pourrait être utilisée d'une manière que vous n'avez jamais anticipée. Et ces usages peuvent être, en fait, malveillants. Cela me arrive en fait une ou deux fois. Je ne parle pas théoriquement ici, et cela ne se limite pas à l'apprentissage profond. C' est vraiment un problème avec l'apprentissage automatique en général ou vraiment n'importe quelle nouvelle technologie puissante. Parfois, notre technologie devance nous-mêmes en tant qu'espèce, vous savez, socialement. Laissez-moi vous raconter une histoire. Donc, ce n'est pas vraiment lié à l'apprentissage profond. Mais l'une des premières choses que j'ai construites dans ma carrière était en fait un simulateur de vol militaire et un simulateur d'entraînement. L' idée était de simuler le combat dans un environnement de réalité virtuelle afin de former nos soldats à mieux préserver leur propre vie et, vous savez, sortir du champ de bataille en toute sécurité. réalité virtuelle afin de former nos soldats à mieux préserver leur propre vie et, vous savez, J' ai senti que c'était une chose positive. Je sauve la vie de soldats. Mais après quelques années, la même technologie que j'ai inventée a fini par être utilisée dans un système de commande et de contrôle. Il était utilisé pour aider les commandants à visualiser comment réellement déployer de vraies troupes et tuer réellement de vraies personnes. Je n'étais pas d'accord avec ça. Et j'ai quitté l'industrie en partie à cause de ça. Un exemple plus pertinent. Quand je travaillais chez Amazon dot com, j'étais l'un des hommes que je veux prendre trop de crédit pour cela parce que les gens qui sont venus les idées étaient avant moi. Mais j'ai été l'un des premiers à mettre en œuvre des algorithmes de recommandation et algorithmes de personnalisation sur Internet, en prenant votre comportement d'utilisateur sur Internet et en distillant cela en recommandations pour le contenu vous montrer. Et cela a fini par être une sorte de base sur laquelle s'est construit au fil des ans. Cela a finalement conduit à des choses comme les algorithmes de ciblage de Facebook est un autre exemple de cela. Et vous savez, quand je regarde comment les gens utilisent de fausses nouvelles et de faux comptes sur les médias sociaux pour essayer quand je regarde comment les gens utilisent de fausses nouvelles et de faux comptes sur les médias sociaux pour essayerde répandre leurs croyances politiques ou, vous savez, un motif ultérieur qui peut être répandre leurs croyances politiques ou, vous savez, financièrement motivé et pas vraiment pour le bénéfice de l'humanité, je ne me sens pas très bien à ce sujet, vous savez, je veux dire la technologie que j'ai créée à l'époque juste orteil vendre plus de livres, ce qui semblait assez inoffensif, a fini par être tordu dans quelque chose qui a vraiment changé le cours de l'histoire d'une manière qui pourrait être bonne ou mauvaise, selon vos penchants politiques. Encore une fois, rappelez-vous que si vous avez réellement un emploi dans le Deep Learning et l'Machine Learning, vous pouvez aller où vous voulez. Si on te demande de faire quelque chose qui est moralement discutable, tu n'as pas à le faire. Tu trouveras un nouveau boulot demain, accord ? Je veux dire, c'est un champ vraiment chaud, et à l'époque, quand vous avez de l'expérience du monde réel, le monde est votre huître. Tu sais, si on te demande de faire quelque chose qui est moralement discutable, tu peux dire non, quelqu'un d'autre t'embauchera demain. Je te le promets, si tu es bon du tout. Donc je vois ça se passer beaucoup ces derniers temps. Il y a beaucoup de gens qui publient des recherches sur l'utilisation des réseaux neuronaux pour craquer les mots de passe des gens . Ou Teoh, vous savez, illustrer comment il pourrait être utilisé pour le mal, exemple, par exemple,en essayant de prédire l'orientation sexuelle des gens juste en se basant sur une image de leur visage. Je veux dire, ça ne peut aller nulle part. Les bons gars. Qu' est-ce que vous essayez de montrer en publiant ce genre de recherche ? Réfléchissez à deux fois avant de publier des choses comme ça, réfléchissez à deux fois avant de mettre en œuvre des choses comme ça pour un employeur parce que votre employeur se soucie seulement de gagner de l'argent en réalisant un profit. Ils sont moins préoccupés par les implications morales de la technologie que vous développez pour réaliser ce profit, et les gens verront ce que vous construisez là-bas, et ils prendront probablement la même technologie, ces mêmes idées et tordu en quelque chose que vous n'avez peut-être pas considéré. Donc, je veux juste que vous gardiez ces idées et ces préoccupations dans votre tête, parce que vous avez affaire à des technologies nouvelles et puissantes ici. Et c'est à nous en tant que technologues d'essayer de diriger cette technologie dans la bonne direction et de l'utiliser pour le bien de l'humanité et non pour le détriment de l'humanité. Ça a l'air très, très haut niveau, prédication des chevaux, je sais. Mais ce sont là des préoccupations très réelles, et il y a beaucoup de gens qui partagent ma préoccupation. Alors s'il vous plaît tenir compte de ces préoccupations alors que vous plongez dans votre carrière d'apprentissage profond. 19. Coders Auto-Encoders variationnels (VAE): Très bien, il est temps d'entrer dans la partie amusante de ce cours. Nous allons parler de modélisation générative. C' est la technologie derrière toutes ces applications virales qui vous permettent d'échanger des visages autour et de vieillir des gens et des trucs comme ça. Aussi la technologie derrière les faux profonds, une sorte d'enfant d'affiche de la discussion éthique que nous avons eu plus tôt dans le cours, mais je vais vous épargner ma colère sur ça pour instant avant que nous puissions parler de réseaux contradictoires génératifs qui est la technologie derrière tout ça. Nous devons parler d'autoencodeurs variationnels, qui est le fondement des réseaux contradictoires génératifs. Alors plongons dans les VAE avant de parler d'autoencodeurs variationnels, Parlons d'abord des codeurs automatiques en général. Une sorte de diagramme de la façon dont ils fonctionnent. Ainsi, un encodeur apprend à réduire l'entrée jusqu'à ses entités latentes. Donc c'est un peu le côté gauche de ce diagramme ici, la partie jaune là-bas. Donc, fondamentalement, nous prenons une entrée qui est souvent une image. Et en utilisant la convolution, comme nous l'avons vu dans les réseaux neuronaux convolutionnaires, nous distillons que jusqu'à une sorte de représentation des entités latentes sont des vecteurs latents de ce signal d'entrée. Donc notre encodeur ressemble beaucoup à un CNN. Il utilise des couches convolutionnaires et max-pooling et tout ce genre de choses pour distiller les modèles dans l'entrée avec laquelle nous l'entraînons, jusqu'à ces vecteurs latents que nous représentons ici comme la zone z bleue au centre là. Donc rien de nouveau là-bas. l'autre côté que nous avons le décodeur, qui est fondamentalement l'inverse de l'encodeur. Donc, il est formé sur la façon de reconstruire des images complètes sont des données complètes, plus généralement à partir de ces vecteurs latents dans la zone z là. Donc, en utilisant des convolutions transposées et max d pool et des choses comme ça. Il apprend à prendre ces vecteurs latents et à les reconstruire dans une image complète complète ou un jeu de données complet. Donc, pendant que nous formons ceci, l'objectif est d'essayer d'obtenir les commentaires et les intrants reconstruits pour être aussi semblables que possible. C' est ce que nous essayons d'optimiser pour là. Donc x doit être égal à x premier, où x est les images d'entrée originales que nous entraînons sur x prime ou les images reconstruites générées en fonction de ces facteurs latents, ces vecteurs latents que nous avons appris au cours de la formation processus. Des trucs tellement intéressants. Maintenant, le système dans son ensemble est formé de telle sorte que l'entrée d'origine qui se trouve dans l'encodeur soit aussi proche que possible des données reconstruites par le décodeur. Tu sais ce que je viens de dire ? Mais laissez-moi essayer de faire un exemple un peu plus réel. Disons qu'on s'entraîne sur des photos de chaussures, accord, juste pour choisir quelque chose de bleu là-bas. Donc l'encodeur distillerait ça en quelque sorte l'essence de ce qui fait un autre type de chaussure. Et il ne va pas y penser en ces termes. C' est juste un réseau neuronal, non ? Mais ce que ces vecteurs latents pourraient représenter en fin est que cette chose correspond un peu au modèle d'une sandale, et ce genre de chose correspond un peu au modèle d'une sneaker. Et cette autre chose correspond au modèle d'une botte que j'ai appris. Il ne sait pas comment les étiqueter ou les appeler ces choses, mais c'est ce qu'il pourrait apprendre dans ces vecteurs latents dans la zone z au milieu là. Et le décodeur apprendra à prendre cela et à reconstruire une image complète d' une botte, d'une sandale ou d'une sneaker basée sur ce vecteur latent là-bas. Et il pourrait y avoir plus qu'une simple classification, non ? Je veux dire, un vecteur latent très simple serait juste une classification de ce genre de chaussure, mais nous pouvons avoir plus d'informations là-dedans qui sont plus nuancées. Et c'est un peu la beauté de ce système est un peu plus, un peu plus flexible. Et quoi, une fois que nous formons tout le système, nous pourrions vraiment jeter l'encodeur parce que nous l'avons juste utilisé pour former le décodeur vraiment. Donc, si vous voulez simplement générer des images synthétiques de différents types de chaussures, vous pouvez utiliser le décodeur pour le faire et les idées, vous pouvez générer un tas de photos synthétiques générées de sandales ou de baskets ou tout ce qu'il est au hasard si vous le vouliez. Et c'est en quelque sorte d'où viennent les fondements de toutes ces sortes de visages fabriqués que vous voyez sur les applications virales. Il y a donc beaucoup d'applications à cela. Je veux dire, vous savez, en revenant à la discussion sur l'éthique, personne ne voulait vraiment que ça soit utilisé pour des faux profonds qui trompent les gens écrivent que le but initial était en fait de la compression. Vous pouvez donc penser à cela comme une sorte de moyen silencieux de compression des données vers le bas. Donc, si vous voulez avoir une façon vraiment propre de dire, je veux juste avoir une photo d'une sandale. Voici un moyen de le faire avec seulement quelques octets d'informations potentiellement, où il apprend à reconstruire cela sans aucun bruit. En outre, il peut être appliqué à deux réductions dimensionnelles. Manifestement la même chose que la compression. Nous prenons cette entrée de dimension supérieure et la faisons bouillir vers ces vecteurs latents à la place d'une représentation de dimension inférieure. Il a également des applications à la recherche. Nous pourrions donc utiliser cela pour distiller un corpus de données textuelles jusqu'à ses termes de recherche pertinents. Débruissement, nous pouvons, le décodeur peut être utilisé pour reconstruire une image qui n'a pas de bruit en elle basée sur l'image qui a du bruit dedans. C' est une autre bonne application. Je l'ai utilisé dans Photoshop tout le temps en fait. Ou une colorisation est aussi une application cool. Peut-être que cela peut alors être formé pour reconnaître que cette image d'une personne ressemble à ce qu'il porte une paire de jeans et cette image en noir et blanc. Et d'après la forme et la nuance de gris dans cette image, nous pensons que c'est une paire de jeans et peut-être que je devrais la colorer en bleu parce que la plupart des gènes sont bleus. Encore une fois, il ne s'agit pas d'y penser en ces termes, mais ce sont les étiquettes que nous pourrions attacher à ce qui se passe sous le capot. Donc encore une fois, l'astuce pour faire cela dans le décodeur est d'utiliser une convolution transpose au lieu des convolutions. Donc, au lieu de Conf 2D couches. Nous utilisons des couches transposées 2D conf pour reconstruire des images à partir des entités latentes dont nous avons parlé. Donc, ce qui va être l'apprentissage de tous les poids à utiliser pour créer une nouvelle image avec de nouveaux pixels à partir d'une représentation de dimension inférieure. Et encore une fois, il peut être utilisé sur plus que des images comme nous avons parlé, recherche et l'information textuelle est une autre application, mais les images sont un peu l'exemple le plus facile pour envelopper votre tête ici. Donc, avec une convolution transpose, nous ne distillons pas les choses ou ne réduisons pas les images. En fait, nous les élargissons dans leur forme originale. Nous essayons de, vous verrez souvent qu'il est utilisé avec une foulée de deux. J' ai aussi vu quelques décodeurs où ils ont une sorte d'intersperse essaie de frapper de 12 à différentes couches. Donc, si vous avez besoin de plus de complexité, mais vous verrez probablement une foulée de deux là-dedans quelque part. Et encore une fois, si vous allez utiliser max pooling au lieu de max pooling, comme nous l'avons dit quand nous parlons de réseaux neuronaux convolutionnaires. Alors pensez au Dakota ou à peu près comme un CNN qui fonctionne en arrière est un bon moyen d'envelopper votre tête autour de lui. Parlons donc spécifiquement des autoencodeurs variationnels. Qu' est-ce qu'on veut dire par là ? Ainsi, dans un autoencodeur variationnel, ces vecteurs latents sont des distributions de probabilité. Et c'est ainsi que nous pourrions représenter ces distributions de probabilités pour un ensemble donné de catégories ou ce que vous avez. Nous représentons donc ces distributions de probabilité par la moyenne et la variance de la distribution normale gaussienne. Ainsi, un autoencodeur variationnel utilise spécifiquement les distributions normales gaussiennes et les propriétés de ces distributions comme vecteurs latents qu'il apprend au fil du temps. Mathématiquement, on peut l'exprimer comme ça. Les données d'entrée x sont exprimées sous la forme d'une probabilité de Z donnée X où Z ou sont ces vecteurs latents. Et puis nous pouvons reconstruire z en utilisant une probabilité de X donné Z. Donc retourner ce dos sur sa tête pour reconstruire l'image originale. Et c'est l'inspiration de réseaux contradictoires génératifs ou de GAN. Donc on y arrive bientôt. Nous verrons que les GAN ne sont qu'un autre tour sur autoencodeurs variationnels où il est plus général que d'utiliser des distributions normales gaussiennes. Une chose que vous allez voir dans le code dont nous devrions parler est quelque chose appelé les réparations. Wow, c'est dur à dire. Truc de reparamétrage. Je ne vais pas le répéter parce que c'est une torsion de langue. Donc, un problème mathématique avec l'idée de VAE est que la distribution de probabilité que nous appelons Z ne peut pas être différenciée. Chaque fois que vous avez du hasard dans l'équation là-bas, ces distributions aléatoires qui jette une clé dans le calcul, n'est-ce pas ? Et comme vous vous en souvenez peut-être lorsque nous avons parlé de la formation des réseaux neuronaux, nous devons utiliser les dérivés du système pour rétropropagation et l'apprentissage réel à travailler, non ? Donc, l'astuce que nous utilisons pour contourner cela est en convertissant l'échantillonnage aléatoire et z en une forme déterministe. Donc mathématiquement, nous pourrions appeler que Z égale mu plus sigma fois epsilon. Les lettres grecques spécifiques qu'il a utilisées, peu importe, nous utilisons des lettres différentes sur le diagramme ici. Mais l'idée est que nous introduisons ce nouveau terme Epsilon ou quoi que vous vouliez l'appeler, où le hasard est déplacé. Donc epsilon est la variable aléatoire de la distribution normale standard ici. Et en poussant cela dans son propre terme, cela pousse l'étape aléatoire hors du réseau, a une entrée et ensuite nous pouvons avoir un graphique connecté à nouveau que nous pouvons réellement différencier et effectivement faire de la formation sur et rétro-propagation. Donc, je ne vais pas trop entrer dans les maths de ça. Il veut juste que tu saches ce que c'est. Aussi dans le sujet des choses que vous avez juste besoin de savoir ce qu'ils sont est divergence Kullback-Leibler ou la divergence KL pour court. Cela résout le problème de la mesure de la distance entre deux distributions de probabilité. Donc, ce dont nous avons besoin comme recyclage pour mesurer la distance entre les distributions de probabilités de nos données originales et les données reconstruites. On veut que ça soit le plus proche possible, non ? Et une façon de mesurer cela est la divergence KL. Parfois, ils l'appellent la distance motrice de la terre en raison d'une analogie utilisée de la quantité de terre que vous auriez besoin de déplacer pour transformer les États-Unis en la forme du Royaume-Uni. Je pense que c'est l'exemple réel utilisé. Mais c'est une façon plus simple d'y penser comme ce diagramme ici. Disons que nous avons une forme de trois piles de trois blocs. C' est en gros combien de blocs dois-je déplacer pour que ça ressemble à neuf piles d'un bloc, non ? Donc, c'est juste combien d'informations dois-je déplacer pour que ces deux distributions, ces graphiques 2D, s'alignent l'une avec l'autre. Mathématiquement, ça ressemble à ceci. Donc, somme de P de x fois le log de P de x sur q de x, ce qui est mathématiquement équivalent à l'entropie croisée de p et q moins l'entropie de P. Donc nous avons parfois aussi appelé cette entropie relative. Et comme vous vous en souvenez peut-être, entropie est une fonction de perte très courante. Donc, cela signifie que nous pouvons utiliser cela comme une fonction de perte pendant que nous formons notre auto-encodeur variationnel. Et plus loin, nous pouvons décomposer que comme cette fonction ici, je ne vais pas entrer dans la dérivation mathématique de cela. Mais quand vous voyez cette fonction, c'est de là qu'elle vient. C' est la fonction de perte de Kullback-Leibler ici, exprimée comme il pourrait le voir dans TensorFlow. Alors avec cela, plongons dans un ordinateur portable et voyons comment les VAE fonctionnent réellement. 20. Vues : l'activation de la mode MNIST: Très bien, Voyons voir les autoencodeurs variationnels en action et le pauvre petit peu de torsion sur les choses. Nous n'allons pas utiliser le jeu de données MNIST traditionnel de numéros manuscrits exécuter East LA Fashion MNIST dataset, qui est en fait une petite image est des morceaux de vêtements, alors mélangez-le un peu ici. Nous allons essayer de faire est de former notre VAE pour générer des photos de vêtements. Alors voyons comment ça marche. Très bien, alors plongons ici, ouvrez le carnet d'autoencodeurs variationnels à partir du matériel du cours si vous voulez suivre. Si vous voulez suivre le long, il est assez important que vous ayez un GPU disponible, que vous ayez installé le GPU TensorFlow. Sinon, vous allez découvrir que cela prend beaucoup de temps pour s'entraîner. Donc, si vous ne vous contentez pas de vous diriger vers ce lien ici à tensorflow.org slash installer le GPU slash. Et cela vous guérira à travers ce dont vous avez besoin. Vous aurez besoin d'une carte graphique NVIDIA et vous devrez probablement vous rendre le site Web du développeur NVIDIA et vous inscrire pour installer la bibliothèque CU DNN. Mais cela vous guide à travers ce que vous devez faire si vous voulez suivre et que vous n'avez pas le GPU TensorFlow installé si vous ne savez pas si vous avez le support GPU tout prêt. C' est ce que vérifie ce premier bloc. Alors allons de l'avant et Shift Enter ici. Et il va juste énumérer combien de GPU j'ai accès à partir de TensorFlow. Il va également charger la bibliothèque TensorFlow elle-même. Donc ça va prendre un peu de temps supplémentaire. J' entends mon disque dur chuter, c'est qu'il charge TensorFlow. Très bien, le bourdonnement, ça ralentit. Nous avons un GPU disponible. Ça suffit. Mais si elle indique à nouveau 0, vous allez probablement vouloir vous arrêter soit aller installer le GPU TensorFlow ou simplement regarder la vidéo sans suivre, sinon les VAE et les GAN prendront beaucoup de temps à s'entraîner. Très bien, nous allons aussi définir une graine aléatoire cohérente pour que je puisse obtenir résultats un peu cohérents de ce cahier et ne pas avoir de mauvaises surprises. C' est assez compliqué. Il est plus difficile que vous ne le pensez d'avoir une graine aléatoire cohérente et d'obtenir des résultats cohérents. Et c'est parce que nous utilisons un GPU. Nous faisons donc un tas de formations en parallèle et obtenons des résultats cohérents lorsque vous faites face à des conditions initiales générées aléatoirement et à divers aléatoires dans le modèle lui-même. Même ça peut devenir un peu débile. Même avec tout ce que nous faisons ici, nous n'obtiendrons pas de résultats parfaitement cohérents, mais ce sera au moins proche. Alors allons de l'avant et Shift Enter sur cela aussi. Parlons un peu de ce jeu de données de mode m-nid. Donc, comme je l'ai dit, c'est comme le jeu de données MNIST, celui que nous avons utilisé avant, où ce sont juste des chiffres écrits à la main 00 à 9, non ? La différence, c'est qu'au lieu de chiffres, on regarde des photos de vêtements. Donc un peu intéressant. Et les différentes classes que nous avons à notre disposition, nos T-shirts, pantalons et pull overs. Je suppose que ça vient du Royaume-Uni ou quelque chose qui est un pantalon et des pulls d'où je viens. Robes, manteaux, sandales, shorts, baskets, sacs et bottines. Et donc vous pouvez voir cet exemple dont j'ai parlé dans les diapositives ont différents types de chaussures n'était pas théorique. Nous allons vraiment regarder des sandales, baskets et des bottes indépendamment ici. Commençons donc par importer nos données et nous assurer que nous comprenons la dimension de celles-ci. Donc tout ce que nous allons faire ici est de charger le jeu de données m-nest de mode, qui est facilement intégré dans les jeux de données de points Keras déjà pour nous, bien que cela et nous allons juste vérifier que tout est comme nous nous attendons, 60 000 images d'entraînement et 10 mille images de test. Chacun est 28 par 28 image en niveaux de gris. Très bien, Shift Enter et rien ne se plaint. Donc, tout est comme nous nous y attendons. Et c'est toujours une bonne idée de jeter un coup d'œil aux données et d'en avoir une idée avant de commencer à jouer avec elles. Donc ce qu'on va faire ici, c'est l'intrigue. À quoi cela ressemble dans une grille de neuf par neuf prélèvera neuf échantillons au hasard de notre ensemble d'entraînement 60000 et tracera chacun à l'aide de niveaux de gris. Et voyons si on va arracher neuf au hasard. Donc vous pouvez voir qu'on a des ressemblances à un, je suppose que ça s'appellerait un sac à main de sandale. Appelons un pantalon ou un pantalon comme on l'appelle, bottine, je suppose. Honnêtement, je ne suis pas sûr de ce que c'est. Je crois que c'est un sac à main. Donc, vous pouvez voir que les données ne sont pas les meilleures pour commencer, mais c'est ce qui les rend difficiles et intéressantes, non ? Mais ils sont jolis pour ce truc. Je ne suis pas sûr de ce que c'est. Tout le reste est assez reconnaissable comme un vêtement. D' accord, donc la première chose que nous devons faire est de prétraiter nos données. La première chose que nous allons faire est de combiner nos données d'entraînement et de test ensemble. Pourquoi ? Parce que ce n'est pas un problème de classification que je n' essaie pas de comprendre que c'est une paire de pantalons. J' essaie de créer un système qui peut générer des images de vêtements en général. Donc, parce que je n'essaie pas réellement de tester ma capacité à classer ces choses qui testent le jeu de données avec ces données d'étiquette. Cela me dit si je l'ai bien classé, n'est pas vraiment utile pour ce problème. Donc, à la place, je vais juste l'utiliser pour des données d'entraînement supplémentaires. Donc, la première chose que nous allons faire est de concaténer le jeu de données d'entraînement et le jeu de données de test ensemble en un seul jeu de données appelé ensemble de données de manière créative. Je vais également ajouter une dimension supplémentaire à ce jeu de données parce que nos couches convolutionnaires attendaient trois canaux d'entrée, pas seulement à. Je vais également convertir cela en données à virgule flottante et normaliser cela à 0 à un. Donc, les données brutes vont juste être des données entières de 0 à 255 représentant la luminosité de ce pixel. Cela le transforme en un nombre à virgule flottante entre 01 car les valeurs d'activation sigmoïde dans notre modèle sont comprises entre 01. Donc, nous massons les données ici pour s'adapter à l'entrée de nos couches convolutionnaires. Mieux Shift Enter pour exécuter cela. Bon, maintenant les choses deviennent intéressantes. La première chose que nous allons mettre en place est notre couche d'échantillonnage ici. c'est là que cette astuce de reparamétrage, ils l'ont bien réglée, entre en jeu ici. Alors rappelez-vous, nous devons déplacer ce composant aléatoire dans un terme epsilon tout en conservant Mu et Sigma, la moyenne et la variance de nos données arrivant ici, en fait, nous allons utiliser le log de la variance comme nous arrivons ici, comme vous le verrez bientôt. Donc, notre couche d'échantillonnage va être cette couche personnalisée, et elle prendra les entrées de la variance moyenne et log. Il va ensuite extraire comment, quelle est la taille du lot en regardant la première dimension de l'entrée moyenne z entrant dans. Et la dimensionnalité de ces données en regardant la deuxième dimension, nous calculons ensuite epsilon, c'est le terme aléatoire dont nous avons parlé dans les diapositives. C' est juste un nombre aléatoire normalisé de cette forme que nous attendons à correspondre à ce que nous obtenons pour les données de moyenne z qui arrivent. Donc, nous créons un tas de nombres aléatoires epsilon dans la taille de toutes les tailles de lot multipliées par le nombre de dimensions que nous avons. Et ce que nous retournons est juste u plus sigma fois epsilon. C' est un peu plus compliqué parce que, encore une fois, nous utilisons le journal de la variance ici à des fins d'entraînement plus tard. Donc, pour convertir cela en huit variance réelle, nous prenons l'exponentielle de celle de 0,5 fois le log de la variance. Donc une algèbre de base là-bas. Mais fondamentalement, cela revient l'astuce de reparamétrage que nous avons parlé de z égal mu plus sigma fois epsilon. Très bien, Next créons réellement notre modèle d'encodeur. Laissons ça avant d'oublier Shift Enter. Nous allons utiliser les API fonctionnelles Keras pour construire cela parce que c'est un peu compliqué ou plus compliqué que d'habitude. Ce n'est pas si dur. Bon, donc on va avoir ce code du bâtiment ou cette fonction. Son travail est de retourner un modèle Keras pour la partie encodeur de notre modèle plus grand. Commençons par configurer un modèle séquentiel composé de deux couches 2D conf. On va commencer par un 128. Le nombre de filtres descend à 64, va ensuite aplatir et le vider dans une couche dense de 256 neurones à la fin. Et à deux, comme on en avait parlé. Encore une fois, ce sont des hyperparamètres, cette topologie, le nombre exact de filtres que vous utilisez, chaque couche de convolution, ce sont des choses que vous pouvez jouer avec. Le nombre de couches de convolution que vous avez, quelles sont les foulées. Donc j'ai vu des gens, comme je l'ai dit, les interminaires laissent une foulée de 12 là-dedans pour plus de complexité. S' ils ont besoin de plus, plus de neurones dans leur modèle pour faire une tâche plus complexe. Encore une fois, c'est beaucoup d'essais et d'erreurs pour obtenir cela correctement. Donc, c'est un peu le sale petit secret de l'apprentissage profond et beaucoup de choses sont juste de l' expérimentation et d'essayer différentes choses jusqu'à ce que vous voyez ce qui fonctionne le mieux. Bon, donc nous allons passer nos entrées à travers ce bloc convolutionnaire. Donc, nous appelons simplement ce modèle séquentiel que nous venons mettre en place avec les entrées d'encodeur qui entrent dans cette fonction, ce code de construction ou cette fonction. Ensuite, nous allons créer une couche dédiée pour apprendre la moyenne et la variance en parallèle. Donc nous les envoyons à différentes couches ici. On va être une couche dense de la dimensionnalité que nous passons en tant que paramètre pour construire à nouveau l'encodeur, un autre hyperparamètre avec lequel nous pouvons jouer. L' un sera consacré à l'apprentissage des moyens, et les autres seront dédiés à l'apprentissage des registres des variances au fur et à mesure que nous allons. D' accord ? Nous appelons ensuite la couche d'échantillonnage avec la moyenne z et z log Vera que nous venons de mettre en place. Encore une fois, c'est le jeter ici où nous appliquons cette astuce de reparamétrage pour combiner tout cela ensemble. D' accord, et nous retournons enfin le véritable modèle Keras qui est composé du tout. Nous passons dans le modèle avec les entrées d'encodeur Z, moi, voir log var et les vecteurs latents là, z. accord, et une petite note ici dans les commentaires ici pour noter que z moyenne et z log vara ou non la sortie finale de cet encodeur, mais nous allons alimenter cela dans la perte de divergence KL. Et un peu, maintenant que nous avons notre fonction pour construire l'encodeur, utilisons-le réellement. Nous allons configurer notre couche d'entrée ici de 28 par 28 par 1. Encore une fois, nos images d'entrée de mode m-nest ou 28 par 28 avec un canal de couleur, juste niveaux de gris. On appellera cet encodeur. Les entrées le transmettent dans l'encodeur de construction avec une dimension latente de seulement deux. Et les entrées que nous venons de charger. Et nous allons imprimer le résumé juste pour faire un contrôle de santé mentale, Shift Enter. Tu vois, on y arrive, on y va. Ok, ça me semble raisonnable. Aller à l'avant. Maintenant, nous devons également implémenter notre décodeur. Encore une fois, c'est un peu l'inverse de ce que nous venons de faire. Nous allons simplement utiliser une transposition 2D calme au lieu de calmer 2D parce qu'au lieu d'essayer de réduire ces images à leurs vecteurs latents, nous allons les étendre de leurs vecteurs latents à une image. Donc, on va en quelque sorte en arrière ici. Le modèle ici va commencer la couche dense autour d'un remodelage qui à 7 par 7 par 64. Et puis nous allons mettre en place trois couches transposées en 2D com, à partir de 128, filtres jusqu'à 64, puis finalement jusqu'à une seule image que nous devrions finir avec. Un peu déroutant potentiellement ici parce que vous pourriez vous dire, pourquoi allons-nous baisser en taille ici quand nous essayons de faire une image plus grande. Mais c'est la dimensionnalité du nombre de filtres que nous appliquons ici et non la taille de l'image que nous produisons. Alors gardez ça à l'esprit. Très bien, nous allons retourner le modèle. Encore une fois, en passant simplement dans ce modèle que nous l'appelons L1 ici avec une entrée latente étant passée dans le décodeur de construction. Et on l'appellera décodeur. Et puis nous allons réellement le construire en chargeant la forme d'entrée là à nouveau, la forme entrant en est juste deux parce que nous avons créé l'encodeur avec la dimensionnalité de deux juste au-dessus de nous, appellera alors le décodeur Bill là-bas et imprimera le résumé du modèle de décodeur. Maj Entrée. Oui, ça m'a l'air raisonnable. D' accord, Ensuite, nous devons mettre en place nos fonctions de perte. Oui, au pluriel, il y en a deux, et je n'ai pas vraiment rendu ça explicite dans les diapositives, je ne pense pas, mais c'est vraiment explicite ici. Il y a donc deux fonctions de perte ici. première est la perte de reconstruction, et c'est ce qui va pénaliser les images qui ne sont pas similaires aux images originales. N' oubliez pas que notre objectif global est que notre décodeur génère des images aussi proches que possible des images originales qui ont été introduites dans l'encodeur automatique. Et c'est la fonction de perte qui mesure qu'elle utilise simplement l'entropie croisée binaire sur les données originales et les données reconstruites qui ont été générées par notre décodeur. Ok, des trucs assez simples là-bas, Shift Enter. Et puis nous allons également mesurer la perte de divergence KL ici aussi. Et ce dont nous avons parlé en profondeur dans les diapositives de ce qu'il s'agit. Donc, je ne vais pas recommencer, mais nous avons parlé d'où venaient toutes ces formules. Encore une fois, il s'agit d'examiner la distance entre les distributions de probabilité des deux côtés. Nous examinons donc la distribution de probabilité des données d'origine par rapport à la distribution de probabilité générée à partir des données générées. Et nous voulons qu'ils soient à nouveau aussi proches que possible. Et nous mesurons cela avec la fonction de perte de divergence KL ici. Alors allons de l'avant et définissons cela aussi. Maj Entrée. Et bien, nous devons avoir une fonction de perte globale à la fin de la journée, vous ne pouvez pas vraiment avoir deux fonctions de perte en même temps. C' est donc ce que fait ce bloc suivant qui calcule la perte totale en fonction de la perte de reconstruction, qui, encore une fois , mesure la similitude des images originales et reconstruites les unes avec les autres. Et la perte de divergence KL, qui mesure encore une fois la proximité des distributions de probabilité de chaque image. Maintenant, nous devons les combiner ensemble d'une manière ou d'une autre. La chose évidente serait de prendre la moyenne des deux. Mais il s'avère que la pondération est aussi un autre hyperparamètre important qui doit être réglé. Vous pouvez donc voir que nous sommes en train d'approfondir le nombre d' hyperparamètres qui ont besoin d'être réglés dans ce modèle dans l'auto-encodeur variationnel. C' est pourquoi il est si difficile de bien former ces choses. Maintenant, ce poids KL est fondamentalement ce que nous appelons ce paramètre 3. Fondamentalement, nous allons attendre la perte de divergence KL de ce nombre. Et c'est un paramètre très important pour déterminer à quel point leurs résultats finaux sont bons, il s'avère, donc j'ai déjà fait quelques expériences et réglé sur le nombre de trois, mais peut-être que vous pouvez faire mieux. Peut-être qu'une autre manière produira de meilleurs résultats pour vous. Allons de l'avant et Shift Enter. Encore une fois. Tout ce que nous faisons ici, c'est prendre la perte de reconstruction, appeler cette perte une, la perte de divergence KL qui appelle ça perdu deux. Et nous rendons les deux pertes individuelles pour que nous puissions les suivre pendant que nous nous entraînons. Mais la perte totale finale sur laquelle nous allons réellement optimiser sera la perte de reconstruction plus le poids de trois fois la perte de divergence KL. C' est ainsi que nous les combinons dans la fonction de perte globale. D' accord, aller de l'avant. Donc, parce que nous avons une fonction de perte personnalisée, nous devons un peu faire notre propre modèle personnalisé qui l'utilise. La plupart de ce code ressemble à beaucoup de code, mais la plupart d'entre nous juste garder une trace de ces différentes fonctions de perte afin que nous puissions les graphier et les visualiser plus tard. Nous allons créer ici un modèle VAE qui dérive du modèle keras dot. Donc, c'est juste un modèle personnalisé. Nous allons créer notre petit constructeur ici qui vient de mettre en place un tracker de perte totale, un tracker de perte CE et un tracker de perte KL. Donc, cela va juste être utilisé pour garder une trace de la perte totale qui combinent la perte dont nous avons parlé, qui inclut ce poids sur la perte KL, la perte de reconstruction, qui est ici appelée perte CE, et le perte qui est appelé k l os. Et nous déclarons qu'ils sont tous observables ici dans ce bloc de code. Et voici où nous arrivons à la viande réelle de notre modèle actuel ici en remplaçant la fonction de pas de train. Donc, nous utilisons une bande dégradée ici dans le flux tenseur pour réellement définir explicitement le fonctionnement de la formation. Pour le chemin vers l'avant, nous appelons simplement un encodeur autodidacte avec les données entrant. Et cela revient comme nous l'avons vu ci-dessus, la moyenne z, le log z var et le z lui-même. Nous construisons ensuite l'image reconstruite en appelant auto-point d codeur et en fait nous rendrons nos images reconstruites. Donc encoder est à nouveau en cours d'exécution notre modèle d'encodeur pour faire bouillir ces images jusqu'à la distribution de probabilité Z. Et nous gardons également une trace des moyennes et des variances indépendamment ici aussi. Et puis le décodeur est appelé avec cette distribution de probabilité résultante Z pour essayer de reconstruire cette image. Et nous appelons ça la reconstruction. Nous calculons ensuite la perte totale entre les deux. Et encore une fois, la perte totale de Calc examine à la fois la perte de reconstruction et la perte de divergence KL. Et nous allons garder une trace des deux indépendamment pour pouvoir les voir. Enfin, il suffit de regarder la perte totale entre les deux pour l'entraînement réel lui-même qui se produit dans la phase de rétropropagation, non ? Si vous vous souvenez, j'ai des réseaux neuronaux fonctionnent en général. Donc ce que nous allons faire ici, c'est juste calculer les gradients ici en fonction des poids entraînables que nous avons mis en place. Et nous allons appliquer des gradients en retournant simplement ces gradients et les poids entraînables. Et nous optimiserons ces poids entraînables. Ce qui nous lie tous ensemble est d'utiliser cette perte totale ici qui vient de perte totale Calc pour réellement faire cuire cela dans la façon dont fonctionne la rétropropagation. C' est donc vraiment là que nous intégrons notre fonction de perte personnalisée dans la façon dont ce modèle est formé. Encore une fois, nous allons garder une trace de toutes ces fonctions individuelles de perte. À la fois le chaos, la perte de reconstruction et la fonction de perte totale qui combine les deux indépendamment afin que nous puissions les graphier tous indépendamment aussi. Et nous avons rendu tous les trois juste pour qu'on puisse les suivre. Très bien, Shift Enter pour configurer cela ne devrait pas prendre longtemps, mais ce prochain bloc prendra beaucoup de temps. Ici, nous allons faire la formation. Donc nous allons configurer notre modèle VAE en passant dans notre modèle d'encodeur et notre modèle de décodeur, le modèle VAE les réunit tous ensemble. Nous allons compiler ce modèle en utilisant l'optimiseur Adam. Et ce taux d'apprentissage est encore un autre hyperparamètre qui doit être réglé. C' est un que j'ai dû modifier un peu tout en expérimentant moi-même avec ce cahier. Et enfin, nous serons en mesure de faire l'entraînement lui-même. Nous allons utiliser 32 époques d'entraînement et un lot de 128. Encore plus d'hyperparamètres qui doivent être réglés. En général, plus d'époques est mieux. Mais si vous constatez que le modèle n'est pas stable, ce qui est assez commun, plus pourrait ne pas être mieux. Encore une fois, l'expérimentation est nécessaire pour voir combien époques vous avez vraiment besoin une fois que vous avez tout le reste correctement pour obtenir de bons résultats. Et quelle taille de lot est logique. Donc très facile à surmonter ici, très facile pour, vous savez, arriver à rester coincé dans un minima local et ne pas en sortir. C' est aussi quelque chose qui arrive beaucoup lorsque vous entraînez ces paramètres. Donc je vais aller de l'avant et lancer ça avec un GPU. Ça va prendre un certain temps. Donc ce que je vais faire, c'est à travers la magie du montage vidéo, juste pour mettre en pause cet enregistrement et revenir quand c'est terminé, regardons la première époque au moins, mais avant que je ne fasse ça, je pense que l'acte d'enregistrer cette vidéo était en concurrence pour les ressources sur mon GPU. Là, ça va. Donc vous pouvez voir ici que nous pouvons voir la perte de reconstruction de la perte KL et la perte totale qui s'y rattachent. Et vous pouvez voir pourquoi nous avons eu un poids que KL a perdu un peu. Ce sont des chiffres beaucoup plus petits, au moins au début comparer à la perte de reconstruction. Donc, la perte de reconstruction domine vraiment le commerce ce moment et sa contribution à la perte totale. Et au fil du temps, nous devrions voir que les pertes de reconstruction deviennent de plus en plus petites. Et alors que cela se produit, la perte de KL sera un facteur plus important au fur et à mesure qu'elle s'entraînera plus loin. Donc vraiment, plus vous avez d'époques, mieux il devient et plus la perte de KL entrera en jeu. Encore une fois, comme je l'ai dit, je vais juste faire une pause et revenir quand c'est fini. Très bien, cela a pris environ 10 minutes, même avec un GPU, mais notre entraînement s'est finalement terminé et nous pouvons un peu de globe oculaire ce qui s'est passé ici en regardant les fonctions de perte rapportées au fil du temps. Vous pouvez voir que nous avons commencé par une perte totale de 313 et que nous sommes descendus à environ 266 ici. Vous pouvez certainement voir juste en regardant, qu'il était vraiment un peu d'atteindre un point de rendements diminuants ici, était en fait vraiment en difficulté. Au 31, il est remonté à 32 ans. Donc 266 semble être à peu près aussi bon que nous sommes en mesure d'obtenir. Que ce soit parce qu'il a trouvé la meilleure solution ou parce qu'il est resté coincé dans un minima local. Eh bien, je suppose qu'on va le découvrir. Vous pouvez également voir que la perte de reconstruction est vraiment beaucoup plus importante que la perte de KL. Donc c'était vraiment payer beaucoup, jouer un rôle beaucoup plus important que k l pertes nous sommes allés. Donc, il pourrait être logique d'expérimenter avec l'utilisation d'un poids plus important sur le k. Une perte si vous avez le temps, vous pourriez vouloir jouer avec cela un peu. Et aussi il est possible que nous soyons coincés dans un minima local ici, je suppose que nous verrons à quel point les résultats sont bons dans un instant ici. Mais si oui, expérimenté avec la taille du lot pourrait être un bon moyen d'essayer de sortir de ce minimum plus facilement. Quoi qu'il en soit, on peut un peu regarder ce qui se passe ici, mais complotons ça parce qu'on a tous ces problèmes de garder une trace de tous ces chiffres. Donc Luke, et ici nous pouvons voir en fait tracé la perte totale, la perte de reconstruction, et la perte de KL. Encore une fois, le chaos étant une valeur beaucoup plus petite. Difficile de voir ce qui se passe là-bas. Et vous pouvez voir qu'après seulement quelques époques ici, il était vraiment difficile d' améliorer et de diminuer cette fonction de perte de déjeuner plus loin, ce chaos est difficile à voir parce qu'il est si petit en comparaison. Alors nous allons zoomer et regarder la perte KL indépendamment ici. Vous pouvez voir que ça s'aggrave au fil du temps. Donc c'est un peu intéressant, non ? Donc vous savez, certainement pas la direction que vous voulez aller pour une fonction de perte, mais au moins ce n'était pas comme, vous savez, monter de façon exponentielle, au moins commencé à se stabiliser. Donc, cela pourrait suggérer que la formation pour encore plus d'époques peut avoir été bénéfique parce que nous commençons à arriver à un point où nous ne pouvions pas vraiment tirer quelque chose de plus de la perte de reconstruction, mais il y a des améliorations à être faite sur la perte KL. Donc, si nous sommes allés plus loin et nous nous sommes entraînés, nous aurions pu voir que la loi de KL commençait à baisser, car elle a commencé à se tourner essentiellement vers cela pour améliorer le modèle. Bon, alors voyons quel genre de résultats on a obtenu ici. Donc on va juste choisir au hasard un mu d' un et un sigma de variance de deux et voir ce qu'on sort. Donc encore une fois, l'idée ici est de quelque sorte de maintenant que nous avons formé le modèle, nous pouvons jeter l'encodeur et simplement utiliser le décodeur pour construire des images synthétiques. Voyons donc ce qu'une distribution de probabilité de 12 nous donne. Donc nous allons juste appeler le décodeur, lui demander de prédire, en fait générer une image basée sur l'entrée d'une virgule deux. Et encore une fois, cela correspond à notre moyenne et variance va juste tracer cela comme une image en niveaux de gris 28 par 28 et voir ce que nous en retirons. Hé, c'est plutôt cool. Donc nous avons créé synthétiquement, apparemment une paire de pantalons qui semble raisonnable, non ? Alors hé, je suis plutôt content de ça. C' est la formation qui a fonctionné. Impressionnant. Allons plus loin. Donc, nous allons réellement générer 256 images maintenant entièrement aléatoires. Ce qu'on va faire, c'est juste deviner la distribution Z à chaque fois avec un Mu aléatoire et Sigma. Et ne vous inquiétez pas de deviner ici, nous pouvons effectivement récupérer les mu et sigma réels associés à chaque catégorie systématiquement, ou au moins l'approximer si nous le voulons. Mais pour l'instant, nous allons simplement générer 256 images aléatoires. Donc, nous allons juste deviner avec des distributions normales aléatoires pour Mu et Sigma à une échelle de quatre et voir ce que nous recevons. Donc, cette construction 256, donc ces distributions aléatoires appelaient le décodeur sur tout ce tableau de valeurs d'entrée et les tracent tous un à la fois comme à nouveau, et 28 images en niveaux de gris par 28 et une grille 16 par 16. Et nous l'avons là. 256 images générées synthétiquement de fermé. Et en fait, c'est plutôt bon. Wow, je suis content de ça. Donc oui, je veux dire, ce n'est pas vraiment pire que l'imagerie source vraiment. Donc je pense qu'on a eu de la chance cette fois et on a trouvé une vraie solution ici pendant l'entraînement, oui, je vois, vous savez, des pulls, je vois des chemises, je vois des pantalons, je vois des sandales, je vois des bottines. Ouais, on a vraiment eu de la chance sur celui-là. Si bons résultats, je dirais jusqu'à présent. Donc, tout est bien et bien. On peut générer des images aléatoires de vêtements. Mais que se passe-t-il si je veux générer un type spécifique d'un vêtement ? Comment puis-je faire ça ? Et si je veux juste dessiner une paire de sandales ou quelque chose comme ça, non ? Eh bien, une façon d'y arriver serait de simplement exécuter un cas connu d'une catégorie donnée à travers l'encodeur, observer le Mu et Sigma qui sont revenus de l'encodeur pour cette image et renvoyer cela dans le décodeur pour essayer d'obtenir une image similaire à celle que vous venez de passer à l'encodeur, est-ce pas ? Ce n'est pas parfait. Ce n'est pas une façon totalement concrète d'y arriver. Il y a quelque chose appelé autoencodeurs conditionnels de variationels si vous voulez une approche plus concrète pour le faire, mais c'est un moyen raisonnable de le faire. Tu sais, prends une photo d'une chemise et mets la sur le décodeur et dis, je veux une photo qui ressemble à ça et tu auras probablement un petit dos. Donc, nous allons juste choisir au hasard une image numéro cent, deux cent quatre-vingts, quelle qu'elle soit dans notre jeu de données d'entraînement. Je vais aller de l'avant et étendre cela en trois dimensions comme l'encodeur s'attend à ce qu'il soit. Et allez de l'avant et convertissez cela en une valeur à virgule flottante entre 01, allez imprimer la forme de cela juste pour le vérifier, envoyer à notre encodeur, lui demander de prédire ce que cette distribution de probabilité va finissent par être pour cette image spécifique. Et puis nous allons passer cette distribution de probabilité dans notre décodeur pour récupérer une image synthétisée. Et nous verrons quelle est exactement cette distribution de probabilité en tapant z à la fin pour l'imprimer. Maj Entrée. Bon, donc on peut vérifier qu'on a une image 28 par 28 par 1. Ils sont comme on s'y attendait. Et ce qui est revenu de l'encodeur était une distribution de probabilité avec une moyenne de 0,427 négatif et une variance de 1,259. D' accord, cool. Alors allons de l'avant et prenons cette distribution et voyons ce qu'elle nous donne. Donc, nous avons déjà appelé le décodeur sur cela et sauver le résultat dans synthétisé visualiser quel péché synthé. Et nous allons visualiser cela à côté de l'image originale aussi. Alors, configurez une intrigue ici. Nous allons tracer l'image d'entraînement que nous avons introduite dans l'encodeur pour obtenir une chose à ressembler. Et ils cracheront cette image synthétisée qui devrait être similaire à elle. Donc Maj Entrée. Et oui, bien sûr, il s'avère que l'image numéro 11280 est l'adresse, et nous avons retrouvé une forme qui ressemble à une adresse. Donc, en faisant cela, nous avons pu synthétiser une catégorie spécifique de proximité. Donc c'est une façon d'utiliser cette VAE. Une autre chose pour laquelle vous pouvez utiliser les VAE est essentiellement l'apprentissage sans supervision. Donc, visualisons ce que ces distributions de probabilité recherchent si nous avons, les colorions par les classifications connues réelles. Donc, je vais alimenter les étiquettes de nos données de formation et de test ici à ce graphique et tracer les moyennes et les écarts sur l'ensemble de notre jeu de données là à partir de l'encodeur. Nous allons donc jeter le jeu de données entier dans notre encodeur, tracer, distributions de probabilité qui en résultent, et colorer celles en fonction de leurs catégories connues. Je l'ai eu. Allons de l'avant et Shift Enter et voyons à quoi ça ressemble. Et là, vous l'avez. Donc vous pouvez voir que nous voyons ces clusters. Nous pouvons réellement visualiser qu'il y a des distributions de probabilités distinctes, ces différents types de vêtements. Donc je ne sais pas ce que ces différentes couleurs représentent. Peut-être que les violets sont des pantalons et que les verts sont des robes. Je ne sais pas. Mais vous pouvez considérer cela comme une forme d'apprentissage non supervisé où ces différents domaines distincts de distributions de probabilité correspondent probablement à des classifications, différents types de choses dans nos données sources. Donc, si je ne savais pas ce que ces étiquettes étaient à l'avance, peut-être que je pourrais les déduire en creusant ce à quoi ces différentes distributions de probabilité se rattachent dans nos données sources. Donc, une autre application possible des VAE, apprentissage non supervisé des catégories. Mais l'application la plus intéressante est de générer des images synthétiques. Et ensuite, nous allons construire sur ça avec les GAN. 21. Réseaux Adversarial génératifs (GAN): Maintenant que nous avons des autoencodeurs variationnels sous notre ceinture, parlons de réseaux contradictoires génératifs. C' est une idée similaire mais différente, vous savez, assez différente pour que c'est sa propre chose. Oui, c'est la technologie derrière les faux profonds et toutes ces applications d'échange de visages viraux dans les applications vieillissantes que vous avez vu auparavant. Par exemple, il s'agit d'une image de quelqu'un qui n'existe pas. Ceci est la sortie d'un réseau contradictoire génératif qui vient d'être formé sur façon de générer des images réalistes regardant de la tête des gens. Une vraie chose. Ouais, et encore une fois, je ne vais pas entrer dans l'éthique de ça. Nous vous avons déjà donné des conférences à ce sujet plus tôt dans le cours. Mais c'est la technologie derrière les faux profonds, mais c'est aussi la technologie derrière toutes ces applications virales que vous voyez pour échanger le visage chez les personnes âgées, faire ressembler les gens à des personnages de Disney et tout ça, non ? Chercheur avait donc des intentions plus nobles pour ce travail. À l'origine, certaines des applications envisagées, nous générons des ensembles de données synthétiques si vous avez des informations privées. C' est donc particulièrement utile dans le domaine médical où vous ne pouvez pas facilement obtenir de vraies données de formation en raison des lois sur la protection de la vie privée, n'est-ce pas ? Donc, si vous essayez de générer un nouveau réseau de neurones qui peut apprendre à détecter le cancer du sein ou quelque chose. C' est difficile d'obtenir de vraies données pour que ça s'entraîne. Mais en formant un GAN sur des données réelles, nous pouvons en quelque sorte le former sur la façon de créer des jeux de données synthétiques qui sont très proches des originaux mais sans aucune information privée réelle en elle. C' est donc une application pratique de GAN qui n'est pas seulement une application virale sur votre téléphone. Il peut également être utilisé pour la détection d'anomalies. Il peut être utilisé pour comparer une image à ce à quoi elle pense qu'une image devrait ressembler et détecter automatiquement les anomalies de cette façon. Il a également des applications dans les voitures autonomes. Il a également des applications dans l'art et la musique. Vous savez, vous pouvez former un GAN sur la façon de créer une œuvre dans le style de Picasso ou quel que soit votre artiste préféré, ou comment générer une symphonie et le style de Beethoven ou Mozart. Et ça marche vraiment. Vous pouvez générer des pièces d'art synthétiques et des œuvres musicales synthétiques en utilisant des GAN assez convaincants. Donc, quand vous toutes ces démos impressionnantes d'une IA qui a fait sa propre symphonie, est ainsi que cela fonctionne et je pense que c'est sur le point d'être démystifié pour vous. Ce n'est pas aussi compliqué que vous le pensez. Bon, donc pour comprendre comment les GAN fonctionnent réellement, il faut vraiment des nouilles sur ce diagramme ici, ça résume vraiment comment tout se réunit. Et comme vous pouvez le voir, ce n'est pas si dur, non ? Donc, c'est assez simple. Donc, tout d'abord, nous ne supposons pas distributions normales gaussiennes dans les vecteurs latents que nous apprenons comme les VAE. Ça pourrait être n'importe quoi dans le cas des GAN. Mais la chose qui est vraiment différente ici, c'est que nous cartographions le bruit aléatoire dans notre générateur à des distributions de probabilité ou tout ce qu'ils pourraient être. Et en faisant cela, en prenant des bruits aléatoires et des entrées, nous pouvons générer aléatoires, quelle que soit la sortie de ceci, de ce générateur. Donc, le générateur apprend à prendre une sorte de signal aléatoire et à faire un visage aléatoire ou un morceau de musique aléatoire, ou un art aléatoire, ou un jeu de données aléatoire, non ? Donc, c'est là que cette aléatoire entre en tant qu'entrée du générateur là-bas. Et de l'autre côté, nous avons un discriminateur qui essaie d'apprendre Quelle est la différence entre les images réelles sur lesquelles je forme le système dans son ensemble et les images générées provenant du générateur. Ok, donc c'est vraiment le cœur de tout ça. Nous avons ce générateur qui apprend à générer n'importe quel type d'images ou de données que nous essayons de créer. Et le travail des discriminateurs est de détecter si ces images générées peuvent être distinguées des images réelles en général, non ? Donc, vous allez vous entraîner sur un ensemble d'exemples d'images de visages. Alors donnons-lui un tas de vraies images de visage. Le discriminateur va apprendre à distinguer ces visages réels des visages générés en général. Et quand il est arrivé au point où le discriminateur ne peut plus faire la différence. C' est là qu'on a fini de s'entraîner. Donc vous avez ce réseau adversaire adverse qui se passe ici. La partie contradictoire est que le générateur est en contradiction avec le discriminateur. Donc, le générateur essaie toujours de tromper le discriminateur en pensant que l'image est qu'il crée sont réelles. Et le discriminateur essaie d'attraper le générateur en mentant, non ? Donc il y a une sorte d'intention l'un avec l'autre. Et c'est une chose très délicate de s'entraîner, vous savez, dans les pratiques, c'est un système très fragile pour aller de l'avant. Mais une fois que cela fonctionne, cela fonctionne très bien. Et c'est pourquoi je dis qu'une fois que le discriminateur ne peut plus faire la différence entre les visages réels et les visages générés, c'est le réel tout ce qui est dans les produits que nous avons fait l'entraînement en théorie. Parce que dans la pratique, c'est vraiment difficile de s'entraîner correctement ? Il y a une tonne d'hyperparamètres à régler. Il finit par être très instable. Donc, beaucoup d'essais et d'erreurs sont nécessaires pour réellement former l'une de ces choses et obtenir de bons résultats. Mais quand tu prends cet effort, tu finis avec des trucs assez impressionnants de GAN. Avant de passer à autre chose, je veux vous laisser une sorte de nouilles sur ce diagramme un peu plus parce que c'est vraiment le cœur de comprendre GAN. Donc, ok, donc nous avons un bruit aléatoire que nous utilisons qui va dans un train, un générateur qui apprend à générer, fabriqué tout ce qu'il est face dans cet exemple. Nous formons ensuite le système dans son ensemble avec des visages réels. Le discriminateur est formé à distinguer le réel des fausses images ou données. En général, ils sont au fil du temps, le discriminateur a un moment de plus en plus difficile d' apprendre ce qui est réel et faux comme un générateur devient de mieux mieux à générer des images fausses convaincantes. Nous arriverons à un point lorsque le discriminateur ne pourra plus faire la différence, nous aurons un réseau contradictoire génératif très bien formé qui se déroule ici. Ok, donc c'est un peu le cœur de tout ça. Nous formons un générateur à générer de fausses données, un discriminateur qui est formé à faire la différence entre les données réelles et les fausses données. Et quand ces choses se réunissent, nous avons un générateur qui peut générer des choses que le discriminateur ne peut pas faire la différence entre des choses réelles. D' accord ? Des maths fantaisie. C' est à ça que tout se résume. Pas trop, mais c'est la fonction de perte accusatoire pour le système dans son ensemble. Nous appelons cela un jeu min-max, donc cela vaut la peine d'en parler. Encore une fois, le générateur essaie de minimiser sa perte et de créer des images réalistes. Alors que le discriminateur maximise sa capacité à détecter, à détecter les faux. Donc c'est quand on dit Min sub g, c'est un générateur minimisant sa perte et max sub D il y a le discriminateur maximisant sa capacité à détecter les faux. Donc c'est ce que tout cela signifie en termes de maths fantaisie. Comme je l'ai dit, tout est très compliqué et délicat. La formation peut être très instable. Il y a beaucoup de réglages, beaucoup d'essais et d'erreurs impliqués pour que cela fonctionne bien. Et juste pour faire le cahier que nous sommes sur le point de regarder, a pris beaucoup de temps pour obtenir ça ensemble et vous obtenez des résultats à mi-chemin décent. Il peut également prendre beaucoup de temps pour s'entraîner, beaucoup de ressources informatiques pour s'entraîner. Mais une fois que vous l'avez, c'est un moyen très efficace de créer de fausses images de visages ou quoi que ce soit que vous essayez de créer d'autres problèmes qu'il court dans ces quelque chose appelé mode collapsus. Donc un problème est que si vous avez différents types de quelque chose, vous savez, différents types de visages, différents types de photos de chaussures, quoi que ce soit. Le système peut simplement apprendre à faire une de ces choses de manière très efficace et très convaincante. Et cela se traduira toujours par une fonction de faible perte dans l'ensemble du système. Donc, ce n'est pas rare, par exemple, si vous essayez de l'entraîner à créer de fausses images de chaussures. Pour qu'il apprenne vraiment à faire de fausses images d'une sandale. Et c'est un problème qui s'appelle l'effondrement du mode, où nous venons d'apprendre à faire un type spécifique de chose vraiment bien. Mais ce n'est pas aussi général que nous le voulons. Il souffre également beaucoup du problème de gradient de disparition. Nous en avons parlé plus tôt dans le cours. Et avec cela, passons à quelques exemples de voir des GAN en action parce que je pense que c'est beaucoup plus logique quand il voit un peu ce que cela se passe en temps réel sous le capot. Et ensuite, nous allons plonger dans un cahier et nous nous familiariser avec l'utilisation d'un. 22. Démos et formation en direct: Donc, pour vous aider à comprendre comment les GAN sont formés, regardons quelques exemples interactifs pratiques ici. Et après cela, nous allons passer par un cahier pour le parcourir plus en détail. Mais un très bon outil pour visualiser le fonctionnement de cette formation est le laboratoire GAN ici. Et parlons de ce qui se passe ici. Donc, au lieu de commencer par essayer de générer de fausses images, Commençons par quelque chose de plus simple, plus facile à envelopper nos têtes autour. Choisissons simplement une distribution de données bidimensionnelle ici. Donc ce que je vais faire, c'est essayer de créer un GAN qui apprend à créer une bague. D' accord ? Nous avons donc cette distribution de points 2D dans cette forme générale d'anneau ici. Et ce que nous voulons faire est de former un GAN à prendre une entrée aléatoire et une distribution générée aléatoirement qui correspond le mieux possible à cela. Donc, dans cette visualisation, nous allons voir les points de données réels tracés en vert. Cela vient de notre distribution réelle et les faux créés par notre générateur apparaîtront en violet pendant que nous nous entraînons. Et au fur et à mesure que l'entraînement se poursuit, nous pourrons visualiser dans une carte thermique les fonctions de perte du générateur et du discriminateur. Alors nous allons voir que le discriminateur essayant de classer ces points est réel ou faux. Et ce que nous devrions voir, c'est qu'il devrait finalement converger autour d'une sorte de forme d'anneau où il identifie les choses dans l'anneau comme étant réelles et les choses qui sont en dehors de l'anneau comme étant fausses. Et nous pouvons effectivement voir au fil du temps comment le générateur fait un délicate le discriminateur et comment le discriminateur fait un vrai et faux dire à part. Alors allons de l'avant et commençons ça. Faisons jouer et on peut le regarder en action. Donc vous pouvez voir que nos fausses données ici, c'est un peu comme aller partout ici au début quand il commence à apprendre. Mais assez vite, ça va commencer à tomber de plus en plus en forme d'anneau. Et nous pouvons voir notre discriminateur ici, des cartes de chaleur. Donc, en ce moment, le discriminateur dit , les faux sont ici, ils sont là. Le violet est à nouveau faux et le vert est réel. Et déjà nous pouvons voir que nous avons une sorte de bague, ce cercle de blanc ici, où il va commencer à mettre ce vrai classement vert autour cette bague et un faux classement violet partout ailleurs. Et au fur et à mesure que nous continuons et que nous devrions être plus serrés et plus serrés déjà, nous voyons que des échantillons violets faux générés essayant d' obtenir de plus en plus dans cette distribution réelle qui venait de la distribution de données réelles d'origine là-bas. Et jetons un coup d'oeil aux métriques ici. Donc nous pouvons voir qu'au fil du temps, la fonction de perte des discriminateurs diminue mais reste stable parce que ça commence à devenir plus en plus difficile de séparer les deux, non ? Mais la fonction de perte du générateur commence à se stabiliser ici. Ça pourrait être mieux. Ils deviennent un peu bizarres ici. Nous pouvons voir que nous avons déjà une sorte de peut-être frappé un minima local là-bas et un peu instable là-bas. Et c'est un peu essayer de remonter à quelque chose de mieux. Et encore une fois, tu sais, le truc avec les GAN, c'est qu'ils sont très instables. Donc, il faut vraiment juste le bon ensemble d' hyperparamètres pour que cela fonctionne correctement dans un coup de chance. La chance, franchement, parce qu'il y a des éléments aléatoires à l'entraînement qui se déroule ici. Mais finalement, il semble revenir là où il devrait être ici. Je pense que ça s'en sort et commence à revenir là où il veut être. Nous avons une sorte de forme de croissant bizarre qui passe au discriminateur en ce moment, ce qui n'est évidemment pas correct. Les formes circulaires sont notoirement difficiles à apprendre. Et ces échantillons générés tombent vraiment dans une ligne. Ils ne sont pas vraiment un cercle qui était en fait mieux tôt, plus tôt. Attendez, je pense qu'on va revenir dans un meilleur état ici. Bon, maintenant on commence à converger vers quelque chose qui semble un peu mieux. Ouais, tu peux voir que ça commence à se stabiliser. Et nous pouvons voir dans l'herbe ici que la fonction de perte du générateur diminue. La fonction de perte des discriminateurs commence à se stabiliser. Ce sont tous de bons signes. Mais encore une fois, tu sais, pas génial. Nous pouvons voir le collecteur global du générateur ici. Ce n'est pas vraiment cette forme de cercle, mais au moins ça se rapproche. C' est un peu tomber du bord avec cette distribution. Et ça ne peut pas vraiment sortir de ça dans ce cas. Donc on est un peu coincés ici. Il semble que si on recommençait, on aurait probablement des résultats différents. Essayons à nouveau. Maintenant, nous avons une meilleure idée de ce qui se passe. D' accord, donc encore une fois, nous sommes, le générateur a un peu plus de chance cette fois, nous entrons en plus dans cette forme de cercle un peu plus tôt, il semble. Et nous pouvons voir que les fonctions de perte sont plus ou moins stables ici. Parce que encore une fois, on a deviné correctement dès le début, on a encore quelques faux échantillons au milieu là où ils ne devraient pas être. Nous verrons si cela s'améliore avec le temps. Cela a commencé regarder mieux. Ce générateur sont collecteurs, il y a du silicium plus circulaire. discriminateur se concentre toujours sur le quadrant supérieur droit là-bas. Mais globalement, les résultats ne sont pas trop mauvais. Et maintenant, on commence à avoir l'air bien. Donc maintenant, le discriminateur est vraiment un peu en train de prendre la forme de cercle et d'apprendre que quoi que ce soit en dehors de ce cercle, il sait que c'est faux. Et en même temps, le générateur commence à redevenir un peu bizarre. Encore une fois, c'est instable, non ? Donc, nous apprenons ici que les GAN sont difficiles à former. Ils peuvent devenir instables, obtenant ces hyperparamètres et le nombre d'époques juste frappant la taille du lot. Il suffit d'écrire tous les critiques pour de bonnes performances. Alors que nous essayons quelque chose d'un peu plus simple, Essayons cette distribution de données, qui est juste une ligne droite. Cela devrait être un cas plus facile ici. Et nous pouvons voir que le générateur converge assez rapidement sur cette ligne là-bas. Et nous devrions voir le discriminateur commencer à s'en occuper aussi. Mais déjà le générateur est assez proche des données réelles. Donc oui, c'est beaucoup plus facile, non ? Donc, les cercles sont toujours durs, mais dans ce cas, nous convergeons sur quelque chose de beaucoup mieux, beaucoup plus rapidement. Et vous pouvez voir ici que la divergence KL a vraiment rétréci rapidement là-bas. La perte de discriminateur dans la perte de générateur ou fondamentalement stable à ce stade. Donc je pense que c'est aussi bon que ça va. Et donc si vous voulez jouer avec cela vous-même, dirigez-vous vers Polo Club dot github dot io slash GAN lab, et vous pouvez jouer avec cela vous-même. Il y a d'autres modèles par an que vous pouvez essayer de jouer avec différents scénarios ici et voir ce qui se passe. D' accord, aller de l'avant. Pour passer à un autre niveau, regardons le terrain de jeu GAN ici. Allez à Ryan sur Kano.com. Je ne sais pas comment dire ça. Terrain de jeu. Cela utilise en fait l'ancien jeu de données m-nest au lieu de ces distributions de données plus synthétiques. Alors, dans ce cas, allons-y et prenons le train ici. Nous allons donc nous entraîner pour générer des chiffres, des images et des chiffres. Et rappelez-vous encore une fois avec un GAN, nous ne l'entraînons pas pour générer des nombres spécifiques, donc je ne m'attends pas à voir un neuf ici associé aux neuf ou six avec les six ne génère que des nombres en général. Donc encore une fois, il y a cet état dégénéré d'effondrement de mode où il apprend juste à faire un nombre de manière fiable. Mais j'espère que nous verrons quelque chose de plus intéressant est la formation continue ici. Donc ce que nous voyons ici visuellement, c'est à quel point le discriminateur fait un vrai et faux à part. Ce sont donc les vraies images qui arrivent et les images générées aussi. Et comment va le discriminateur pour séparer les deux ? Donc nous pouvons voir maintenant que nous obtenons 60% ou environ. Le taux de réussite sur l'identification des images réelles est réel. En fait, tout d'un coup, ça s'est beaucoup amélioré. Et nous identifions que la fausse image est fausse plus souvent qu'autrement, toujours pas génial. Évidemment, les résultats visuels ici ne sont pas impressionnants, mais ils s'améliorent visuellement avec le temps. Donc faire un numéro est une tâche beaucoup plus compliquée et juste faire un cercle comme nous essayions de le faire avec le labo GAN avant. Donc, vous devriez vous attendre à ce que ce soit un peu plus cher sur le plan informatique. Et nous pouvons également visualiser la fonction de perte est sur le discriminateur et le générateur ici aussi bien. On le voit déjà, tu sais, c'est un peu difficile pour aller mieux, mais avec assez de temps et ça va, tu sais, si tu veux, laisser ça courir soi-même pendant un certain temps après environ 10 pouces. Donc, je trouve que les résultats deviennent assez intéressants et commencent déjà à ressembler à des chiffres, un peu ressemble à un cinq. Il y a encore de la place à l'amélioration, non ? Ça ressemble à un huit. Il y arrive, mais donne-lui plus de temps. Et ceux-ci ressembleront de plus en plus à des nombres. Et je pense déjà qu'ils s'améliorent, non ? Donc Carlos, comme un genre de chose florissante là-bas. Mais avec suffisamment de formation, nous ne pouvons pas voir cela lentement mais sûrement que le coût des discriminateurs diminue. Générateur, cependant, vraiment du mal à améliorer. Maintenant, vous pouvez jouer avec la topologie différente du réseau ici si vous le souhaitez, et les différents hyperparamètres voient si vous pouvez faire un meilleur travail. Mais, tu sais, ça doit être haut. Ça va être dur. Mais si vous voulez jouer avec cela de manière interactive, c'est une façon de le faire. Arrêtons cela et passons à l'exemple plus amusant. C' est donc une démo de Nvidia GAN appelée Gauguin. Ont-ils intentionnellement orthographié cela avec GAN À la fin de Gauguin, après le célèbre peintre. Et il utilise un GAN pour générer de fausses images de différents types de paysages, n'est-ce pas ? Donc si j'appuie sur le bouton ici, il va automatiquement prendre cette carte de segmentation ici que j'ai dessinée qui dit que je veux de l'eau ici et du ciel ici. Et ça va générer un océan synthétique. Et c'est un ciel synthétique qui correspond aux segments que j'ai définis. Donc, je dois d'abord accepter les termes et conditions. Et maintenant, nous devrions voir une image comme ça. Donc, ils ont un GAN qui est formé sur la façon de faire de l'eau et ce qu'il essaie de faire, comment faire un ciel et ça les a juste rassemblés là. Mais ça devient plus intéressant. En fait, sélectionnons le paysage ici et mettons quelques montagnes à l'horizon. On dirait Bob Ross ici. Et vous pouvez faire n'importe quel type de paysage que vous voulez de cette façon. Donc maintenant vraiment parti à partir de toutes les topologies de réseau mathématique ou neuronal ici. C' est donc un exemple amusant de ce que vous pouvez faire avec les GAN. Et nous avons des montagnes là-bas, une frontière bizarre entre les montagnes et l'eau. Donnons-lui un peu, du terrain, de la saleté. Et je vais faire de cet océan un lac. Je ne veux pas perdre trop de temps là-dessus. Ce n'est pas un cours de peinture. Mais juste pour vous donner une idée de ce que cela peut faire. Et pendant que nous y sommes, mettons quelques petits nuages heureux là-haut à environ un là-bas, un ici et un là-bas. Et là, nous avons notre petit paysage faux. Donc, un petit trou d'eau. Ils sont entourés de quelques monticules de terre en arrière-plan et de nuages dans le ciel, tous générés par GAN qui ont été formés à la façon de faire ces différents types de caractéristiques dans une peinture au hasard par algorithme. C' est un exemple amusant de GAN. D' accord, donc vous avez vu des GAN en action. Allons dans un véritable cahier et plongons dans la façon dont ceux-ci fonctionnent réellement sous le capot. 23. GAN : s'activent avec MNIST: D' accord, on s'est amusés. Alors allons de l'avant et implémentons un réseau contradictoire génératif en utilisant un ordinateur portable ici et voir comment ils fonctionnent sous le capot ici et comment coder réellement un. Étonnamment petite quantité de code ici. Et donc pas beaucoup de choses à passer vraiment là. Incroyablement simple, bien qu'ils soient très complexes à former. Encore une fois, ce sont des choses très intensives sur le plan informatique à former. Donc, si vous n'avez pas de GPU, vous ne voulez probablement pas le faire vous-même. Allons-y et vérifions si nous en avons un avec ce premier bloc de code. Et cela va se déclencher et charger TensorFlow, ce que nous allons prendre un peu. Mais nous pouvons voir que j'ai un GPU disponible pour la formation. Si vous êtes dit 0 et que vous avez un GPU NVIDIA, retournez à ce lien et il vous parlera de la façon d' installer le GPU tensorflow sous Anaconda, suffit de pip installer le GPU TensorFlow dash. Mais d'abord, vous devrez probablement installer quelques dépendances comme la bibliothèque CU DNN, ce qui nécessite d'aller sur les sites Web des développeurs NVIDIA s' inscrivant pour un compte là-bas et tout cela, mais ça vaut la peine pour accélérer cette formation. Très bien, comme avant avec l'échantillon VAE, nous allons charger le jeu de données m-nest de mode. Et nous allons créer un GAN qui peut générer des articles de vêtements aléatoires. Alors allons de l'avant et chargeons cela à partir du paquet de jeux de données keras dot. Et comme avant, nous allons fusionner les jeux de données de formation et de test juste pour obtenir plus de données de formation. Encore une fois, notre objectif ici n'est pas de classer les données, est de générer de fausses données. Donc, il n'y a vraiment aucune utilité pour le jeu de données de test ici. On va juste tout faire ensemble. Et pendant que nous y sommes va normaliser que les données d'image des valeurs de caractères de 0 à 255 aux valeurs à virgule flottante entre 01, parce que c'est ce que les fonctions sigmoïdes attendent. Et nous allons remodeler les données, en ajoutant la dimension supplémentaire dont nous avons besoin pour les couches CNN, les couches convolutionnaires vont également les mélanger et les regrouper pendant que nous y sommes. Dans une taille de lot de 64, il y a notre premier hyper-paramètre que nous pourrions vouloir modifier. ne se passe pas grand-chose là-bas. Bon, alors commençons par mettre en place notre modèle de générateur. Encore une fois, c'est la chose qui essaie de générer de fausses images juste donné une entrée aléatoire. Donc, il fait des photos aléatoires de, eh bien, des articles de vêtements dans notre exemple ici. Bon, passons à travers ce qui se passe ici. Nous importons les choses dont nous avons besoin de TensorFlow et Keras, un autre hyper-paramètre ici. Combien de dimensions de bruit avons-nous ? Combien d'entrées avons-nous dans ce truc ? Donc nous allons commencer avec 150 valeurs de bruit aléatoires ici. Et nous utiliserons ça comme notre contribution. Et encore une fois, vous pouvez changer cela et voir quel impact cela a. Plus tard. Nous allons mettre en place un modèle séquentiel et Keras à partir de ce vecteur de bruit là si un 150 valeurs de bruit. Et nous pouvons jouer avec quel genre de distribution ce bruit est aussi. Nous allons le nourrir en une couche dense de sept par sept par 256. Et nous ferons une transposition de convolution sur cela en trois couches, travaillant jusqu'à une image finale quand nous aurons fini de reconstruire ça. Encore une fois, c'est très similaire au décodeur d'un VAE, non ? peu près la même chose. Vous pouvez donc voir comment ces choses sont très étroitement liées. Prononce un résumé du modèle juste pour s'assurer qu'il ressemble juste avant de passer à autre chose. Oui, ça m'a l'air sain d'esprit. Ensuite, nous ferons notre modèle discriminateur. Et encore une fois, cela ressemble beaucoup à l'encodeur du VAE, non ? Donc, ce que nous prenons ici comme entrée est une image 28 par 28 par 1, 28 par 28 pixels, un canal de couleur d'alimentation en niveaux de gris qui dans un calque 2D convolutional 256 éléments qui à un 128. Et nous allons l'aplatir en une couche dense de seulement 64 neurones. Et nous allons appliquer un visage d'abandon à ça pour éviter le surajustement. Et enfin sortir un nombre final de oui ou non. Est-ce que cette chose pense que c'est réel ou faux ? Donc, c'est la principale différence là-bas par rapport aux VAE. Nous n'essayons pas réellement de générer un vecteur de fonctionnalités latentes ici où je viens de générer une sortie de est-ce que je pense que c'est une image réelle ou est-ce que je pense que c'est une fausse image, mais sinon assez similaire à l'encodeur d'un VAE. Allons de l'avant et frappons ce modèle me semble correct. Une des choses que j'ai oublié de souligner, nous utilisons la fonction d'activation ReLU ici sur le discriminateur et la fonction d'activation ReLU qui fuit sur le générateur. Et c'est juste quelque chose que les gens ont appris au fil du temps que le travail fonctionne bien. Juste les meilleures pratiques standard là-bas. D' accord, installons nos optimiseurs et nos fonctions de perte ici. Donc oui, plus d'hyperparamètres. Encore une fois, nous avons un optimiseur pour le générateur et le discriminateur. Nous appelons cet optimiseur G et l'optimiseur D. Les deux vont utiliser l'optimiseur Adam, mais avec des taux d'apprentissage différents. Et ces éléments sont essentiels pour réussir si vous voulez avoir un modèle stable pendant que vous vous entraînez, si vous vous trompez, ça va exploser un peu comme nous l'avons vu lors démo précédente d'essayer d'aimer apprendre qu'une forme de bague, si vous vous souvenez de retour dans le terrain de jeu GAN, notre classificateur pour la fonction de perte est assez simple cependant. On essaie juste de savoir si les choses sont vraies ou fausses. Donc l'entropie croisée binaire correspond à la facture pour ça. De même, pour des raisons de précision, nous voulons voir à quel point nous sommes précis à deviner oui ou non. C' est une vraie image ? Donc binaire, précision binaire. Est tout à fait raisonnable pour cela aussi. Maj Entrée. On a tout mis en place. Très bien, attachons tout ensemble. Nous commencerons donc par définir notre formation pour le discriminateur. D' accord, donc le lot qui arrive où j'aimerais lire la forme des données pour comprendre quelle est la dimensionnalité de cela, quelle est la taille du lot. Ensuite, nous allons créer un vecteur de bruit aléatoire qui correspond à la taille du lot pour le vecteur de bruit ici. Et nous utilisons des points aléatoires normaux ici pour une distribution normale ne doit pas nécessairement être une distribution normale. Vous pourriez essayer une distribution uniforme ici si vous le vouliez aussi et voir ce que cela fait si vous avez le temps de jouer avec elle. Et ce qu'on va faire ensuite, c'est concaténer les vraies et les fausses étiquettes. Donc, comme on va le voir, on va vraiment coller les données réelles et les fausses comme on les nourrit dans le discriminateur. Et donc nous allons avoir toutes les données réelles avec une étiquette d'un, suivi de toutes les fausses données avec une étiquette de 0. Au fur et à mesure que nous entrons et définissons nos étiquettes ici pour les données que nous nourrissons. C' est ce qui se passe là-bas. Nous avons mis en place notre bande dégradée pour l'entraînement ici. Nous générons d'abord nos fausses données en appelant le générateur avec ce vecteur de bruit pour obtenir un ensemble de fausses images. Nous concaténons ensuite cela avec les données réelles ensemble. Nous avons donc les données réelles suivies par les fausses données. Et encore une fois, cela s'harmonise avec ces étiquettes de vrai et faux que nous avons mis en place ci-dessus ici sous y soulignent vrai. Nous introduisons ensuite cela dans le discriminateur pour voir à quel point il fait pour deviner s'il s'agit d'images réelles ou fausses. Et puis calculez la fonction de perte que nous avons définie ci-dessus pour savoir si oui ou non il a bien réussi. Très bien, nous devons aussi définir le chemin arriéré pour l'entraînement ici. On est juste en train de reconfigurer une bande dégradée ici, optimiseur D que nous avons déjà mis en place. Appliquez des dégradés. Rien de vraiment intéressant ici n'est une sorte de code standard ici, mais nous passons dans cette fonction de perte discriminateur que nous avons définie plus tôt. D' accord, nous rapportons l'exactitude ici et gardons une trace de ça imprimée au fil du temps. Et c'est tout ce qu'il y a au modèle discriminateur. Allons Maj Enter pour configurer cela. Et maintenant, tournons notre attention sur le générateur. Donc le travail du générateur est de ne pas se faire prendre par le discriminateur, non ? Donc, nous allons dire, nous voulons tester à quel point vous êtes capable de deviner que c'était réel. Alors que nous entrons dans notre discriminateur, nous mesurons notre succès que si nous devinons ou non que c'était une vraie image, même si c'est faux. C' est ce qui est au cœur de cette formation pour le générateur qui se passe ici. Encore une fois, nous extrayons la taille du lot à partir de la forme des données d'entrée. Nous avons mis en place un vecteur de bruit correspondant à cette taille de lot. Et nous avons juste mis en place un vecteur de ceux parce que nous mesurons comment nous le faisons en étant classés comme réels. C' est ce que l'on représente. Donc nous avons mis en place notre bande de gradient ici, et c'est un peu le cœur de tout ça ici. Nous prenons le bruit que nous avons généré, transmettons dans le générateur pour créer un tas de fausses images pour quelle que soit la taille du lot. On prend ces fausses images et on les transmet au discriminateur. Et nous en revenons. Que le discriminateur pensait que ces différentes images étaient réelles ou fausses. Nous calculons ensuite notre perte en fonction de la façon dont nous avons fait pour que le discriminateur pense que sont de fausses images étaient réellement réelles. D' accord, donc c'est ce qui se passe ici. Tu sais, pas, pas trop de code vraiment. Le reste est une sorte de chaudron. Encore une fois, nous nous attachons ensemble à notre rétropropagation et nous gardons une trace de la perte et de la précision au fil du temps. Donc Maj Entrée pour configurer cela. Très bien, une petite fonction dandy pratique ici pour visualiser les images générées au fur et à mesure que nous allons. Donc tout ça va faire, c'est prendre comme entrée un modèle. Il va choisir 81 nombres aléatoires ici et le passer dans quel que soit ce modèle, une sorte de générateur et visualiser ce qu'il est sorti dans une grille 9 par 9. Donc juste une petite fonction d'aide pour visualiser 81 images aléatoires donné un modèle. Et maintenant, faisons l'entraînement. Donc, nous ne allons pas simplement utiliser une méthode d'ajustement à une ligne ici pour le faire. La raison est que le papier GAN original fonctionnerait en fait plusieurs ensembles de formation discriminateur pour chaque étape du générateur. Mais dans notre cas ici, nous allons garder les choses simples et simplement faire une étape d'entraînement discriminateur suivi d'une étape d'entraînement générateur. Mais si vous le vouliez, vous pourriez effectivement dupliquer cette formation discriminateur plusieurs fois pour mieux correspondre avec le papier original fait. Donc, cela vous donne une certaine flexibilité et des choses à expérimenter. Encore une fois, fondamentalement, bien que tout ce qu'on va faire c'est passer par 30 époques. Nous allons former le discriminateur, garder une trace de la perte globale de précision. Entraînez à nouveau le générateur, gardez une trace de notre perte globale de précision et imprimez simplement les performances au fur et à mesure. Aussi pour toutes les autres époques, nous allons appeler cette fonction d'aide d'images de tracé à nouveau pour visualiser les images d'échantillons aléatoires de notre modèle de générateur. Donc à chaque seconde époque, nous allons prendre notre modèle actuel de générateur de train et tous les poids qu'il a appris jusqu'à présent. Et visualisez à quel point il fait bon pour générer de fausses images de près. Alors allons-y et mettons-en place ça. Et c'est là que commence la formation. Ça va prendre un certain temps, mais voyons au moins si ça démarre avec succès. Et avec le GPU, Cela va être une opération incroyablement intensive. D' accord, on y va. Donc, nous sommes ici à l'époque 0, un peu oblobs aléatoires ici à ce stade comme on pouvait s'y attendre. Mais attendons au moins la prochaine visualisation ici à l'époque. Encore une fois, ce qui se passe ici, c'est que notre générateur apprend à tromper le discriminateur. Et le discriminateur essaie d'apprendre à détecter pour discriminer le réel des fausses images en même temps. C' est contradictoire parce que ces deux choses sont l'intention l'une avec l'autre. Et obtenir cet équilibre juste est la clé pour créer un générateur capable de créer des faux convaincants. D' accord, époque pour finalement revenir et bien, ce n'est toujours pas vraiment reconnaissable, mais vous pouvez voir que nous en avons déjà des formes un peu plus complexes. Nous allons aller de l'avant et laisser ça courir pendant 30 époques et voir ce que nous finissons avec. Ça va prendre un certain temps. Donc je vais juste mettre la vidéo en pause et revenir quand c'est fait pendant que mon GPU chauffe ma chambre. D' accord. Environ une demi-heure s'est écoulée ici dans mon GPU a travaillé des heures supplémentaires ici. Il fait chaud dans le bureau maintenant ici. Donc, l'autre sorte de secret sale de l'apprentissage profond est la quantité d'énergie qu'il consomme, certainement quelque chose dont il faut être conscient et conscient. Voyons ce qui s'est passé. Donc, comme vous pouvez le voir, une époque 0 juste obtenir quelques blobs aléatoires que la rondelle à pas tellement mieux. Et à l'époque, commencez à faire des choses plus compliquées ici. Et en commençant à se former en quelque chose de reconnaissable à l'époque huit, ils commencent à ressembler à des chemises et à des pantalons, je pense. Et au moment où nous arrivons à 10, il commence certainement à devenir reconnaissable. Au fil du temps. Il devient juste de mieux en mieux et de mieux en mieux. Donc, même si nous l'avons arrêté à 30 époques, parce que je ne veux pas détruire la planète en l'exécutant plus loin. Vous pouvez voir ici la tendance qu'il est en fait de mieux en mieux avec le temps. Et avant qu'on arrive à 30, on a arrêté de l'imprimer sur 28 ici juste pour un vagaire du code. Mais même à la 29e époque opcode, qui est vraiment 30 parce que nous avons commencé à compter à 0. Et le discriminateur n'était encore efficace que 80% pour discriminer réel de faux. Il y avait donc encore de la place à l'amélioration ici. Nous pourrions laisser ce train encore plus longtemps pour obtenir meilleurs résultats si nous voulions être très intensifs pour former ces choses. Et encore une fois, ils sont très délicats. Donc, étant donné que vous devez vraiment exécuter ces choses à plusieurs reprises pour régler tous ces hyperparamètres, vous pouvez voir comment la formation d'un GAN peut être une proposition beaucoup de temps et d'énergie. Mais ce sont là des résultats raisonnables. Tu sais, ça ressemblait à des robes et des chemises. Eh bien, c'est surtout des robes. Assurance, n'est-ce pas qu'on en parlera dans un instant ? Prenons le modèle de train final. Et encore une fois, juste pour cracher neuf par neuf images aléatoires ici pour voir quels sont nos résultats finaux. Et un peu pointe vers le bas dans les commentaires ici qui est un peu remarquable à quel point il peut générer ces images une fois que vous avez le modèle formé. Donc, il y a en fait une démo sur le site NVIDIA où ils ont créé un GAN qui recrée un jeu de Pac-Man. Juste basé sur l'analyse de la vidéo des personnes qui la lisent encore et encore. Donc, nous pouvons vraiment représenter tout ce que vous voulez sans vraiment, aucune vraie connaissance de ce qui se passe nécessairement. Quoi qu'il en soit, vous pouvez voir ici, ça ressemble à des robes et des pulls raisonnables, je suppose, mais c'est tout. Donc, nous voyons ce problème d'effondrement de mode dont nous avons parlé auparavant où nous mesurons vraiment sa capacité à générer des images de vêtements. Et nous ne mesurons pas sa capacité à générer des types spécifiques de vêtements. Juste si ce générateur peut ou non générer une image qui peut tromper le discriminateur en pensant qu'il est réel. Donc ça a un peu trouvé un moyen de tricher ici parce que, vous savez, différents types de choix vont être plus compliqués que générer une photo d'un pantalon ou d'une chemise. Et compte tenu du temps d'entraînement limité que nous avions, c'est un peu ce sur quoi il a convergé. C' est donc le problème d'effondrement de mode que nous avons discuté plus tôt dans les diapositives. Mais globalement, des résultats assez satisfaisants étant donné seulement 30 époques dans un jeu de données d'entraînement assez simple là-bas. Évidemment, vous pouvez dire qu'il y a beaucoup plus à explorer ici. Il y a jusqu'à présent un écart entre ces résultats et toutes ces applications d'échange de visage que vous voyez sur, sur votre téléphone, n'est-ce pas ? Donc, évidemment, ces GAN beaucoup plus grands là-bas qui s'entraînent pour une période beaucoup plus longue de temps qui sont capables de générer ces faux convaincants de vraies images de visages humains, ce qui est vraiment la chose la plus difficile à obtenir. Mais c'est dehors et ce n'est que la pointe de l'iceberg. En ce qui concerne la recherche sur les GAN, c'est vraiment la pointe de la recherche sur l'apprentissage profond de nos jours. Si vous montez, recherchez les zoos de modèles GAN, vous verrez qu'il y a une grande variété de modèles différents là-bas que vous pouvez travailler et construire pour des problèmes très spécifiques. Et les personnes incorporant des GAN dans des systèmes plus importants. Par exemple, il y a quelque chose qui générera automatiquement une tête parlante. Vu une photo de quelqu'un qui peut regarder autour de lui, ses yeux, peuvent bouger. Il peut simuler de parler avec vous et tout en fusionnant l'extraction de fonctionnalités du visage de quelqu'un avec GAN qui peuvent créer des patchs de ce visage qui font des choses différentes. Donc beaucoup d'innovation passionnante qui se passe dans cet espace en ce moment, encore une fois, je vais vous rappeler du point de vue éthique, s'il vous plaît utiliser cette technologie pour de bon et s'il vous plaît être conscient de l'énergie qu'elle nécessite pour la formation. Donc, ce sont les GAN et l'introduction au moins assez pour que vous puissiez partir et en apprendre plus et être un peu dangereux avec elle. 24. Introduction du projet d'apprentissage Deep Apprentissage: Il est donc temps d'appliquer ce que vous avez appris jusqu'à présent dans ce cours d'apprentissage profond. Votre projet final est de prendre des données du monde réel. Nous en avons parlé dans la conférence d'éthique, en fait des masses détectées et des mammographies, et juste basé sur les mesures de ceux en masse voir si vous pouvez prédire si elles sont bénignes ou malignes. Donc nous avons un ensemble de données de masses de mammographie qui ont été détectées chez de vraies personnes, et nous avons eu Riel. Les médecins les regardent et déterminent s'ils sont bénins et malins Voyons donc si vous pouvez mettre en place un réseau de neurones qui peut classer avec succès . si ces masses sont de nature bénigne ou maligne. Allons plonger dedans. Donc, je vous ai donné quelques données et un modèle à partir duquel travailler. Au moins, les données avec lesquelles on va travailler sont dans votre matériel de cours. Les mammographies soulignant les masses point daté Un fichier texte est les données brutes que vous allez utiliser pour former votre modèle, et vous pouvez voir que ce sont juste, ah, six colonnes de choses ou ces choses représentent. Nous vous montrerons dans une minute. Il y a en fait une description de l'état est défini dans le fichier texte de points de noms ici qui va avec cet ensemble de données. Mais pour vous lancer, je vous ai donné un peu d'un modèle avec lequel travailler si vous ouvrez le projet deep learning sur I p Y N b fichier. Donc cela vient du dépôt U. C I, et je vous ai donné un petit lien vers l'origine des données. C' est en fait une excellente ressource pour trouver d'autres données à jouer avec. Donc, si vous apprenez toujours l'apprentissage automatique, c'est un endroit idéal pour trouver des trucs avec une expérience. Mais pour cet exemple, c'est là qu'on va jouer avec. Voici la description de ces six colonnes. L' un est appelé l'acheteur comme évaluation, et c'est essentiellement une mesure de la confiance que le diagnostic était de cette masse particulière . Maintenant, c'est en quelque sorte donner la réponse. Ce n'est pas ce qu'on appelle un attribut prédictif, donc on ne va pas l'utiliser pour l'entraînement ou le modèle. Ensuite, nous avons l'âge du patient. Nous avons une classification de la forme de la masse. Nous avons une classification de la marge de masse, mais comment ? Il ressemble à la densité de la masse. Et enfin, nous avons ce que nous essayons de prédire. C' est donc l'étiquette, la gravité, qu'elle soit bénigne, nulle ou maligne. Donc, nous avons ce qui est ici, un problème de classification binaire très similaire à ce que nous avons fait plus tôt dans le cours , Et vous ne devriez pas avoir besoin de beaucoup plus que d'utiliser des extraits de code d'exercices précédents dans ce cours et en les adaptant à cet ensemble de données. Ok, maintenant, une petite mise en garde ici. Généralement, lorsque vous faites de l'apprentissage automatique, vous ne voulez pas gérer ce que nous appelons des données nominales, et la forme et la marge sont des données techniquement nominales. Pendant que nous les convertissons en nombres, ces nombres ne sont pas nécessairement significatifs en termes de leur grand asiatique. Vous savez, passer de 1 à 4 ne signifie pas que nous allons de plus en plus d'un à deux rondes irrégulières de façon linéaire. Mais parfois, tu dois te contenter de ce que tu as. C' est mieux que rien, et au moins il y a une certaine logique à la progression des scores numériques ici à ces descriptions. Donc, ils vont généralement de, vous savez, mawr tombe régulière ou irrégulière que ces nombres augmentaient. Donc on va aller de l'avant et les utiliser de toute façon. Quoi qu'il en soit, c'est important. Vous savez, il y a beaucoup d'angoisse inutile et de chirurgie qui vient de faux positifs sur la façon dont les mammographies. Donc, si vous pouvez construire une meilleure façon de, ah, diagnostiquer ces choses d'autant mieux. Mais encore une fois, repensez à ma conférence d'éthique. Tu ne veux pas trop vendre ça. Vous voulez être sûr que c'est juste un outil qui pourrait être utilisé pour un médecin vraiment humain sauf si vous êtes très confiant que le système peut réellement surperformer un humain. Et par définition, est pas possible parce que nous formons ça sur des données créées par des humains. Alors, comment pourrait-il être mieux qu'un humain ? Pensez à ça. Très bien, donc votre travail est de construire un perceptron multicouche pour classer ces choses, j'ai pu obtenir plus de 80 % de précision avec le mien. Voyons comment vous pouvez faire maintenant. Une grande partie du travail sera juste pour nettoyer les données, et je vais vous guider dans les choses que vous devez faire ici. Commencez donc par importer le fichier de données à l'aide de la fonction de lecture Voir SV. Vous pouvez ensuite jeter un oeil à cela, convertir les données manquantes en nombres et assurez-vous d'importer tous les noms de colonnes . Vous devrez peut-être nettoyer les données, alors essayez d'avoir une idée de la nature des données en utilisant la description sur votre bloc de données pandas résultant . Ensuite, vous devrez laisser tomber Rose. Il a des données manquantes et ce que vous avez pris en charge que vous avez besoin pour convertir les blocs de données en secteurs engourdis. Soulevez que vous pouvez ensuite passer dans la psyché il apprendre ou dans la caresse. Ok, donc vous devez également normaliser les données avant de les analyser avec caresse. Donc, un petit indice il ya à utiliser le détartreur de standards de points de pré-traitement de SK appris qui peut rendre les choses très faciles pour vous. C' est la seule chose qu'on n'a pas vraiment fait avant. Le reste de cela, vous devriez être en mesure de comprendre juste en fonction des exemples précédents. Une fois que vous avez les données dans le bon format, il a été assez simple de construire un modèle M LTP en utilisant la caresse et vous pouvez expérimenter avec différentes excuses gardées, différents paramètres hyper et voir comment vous pouvez le faire donc je suis va te lâcher ici et donner une chance à ça. Voyons comment tu vas quand tu reviendras à la prochaine conférence. Je vais vous montrer ma solution et comment je marche à travers cela moi-même. Alors allez-y et pratiquez ce que vous avez appris. 25. Solution de projet d'apprentissage Deep Learning profondeur: Donc j'espère que vous avez une bonne expérience là-bas et que vous appliquez réellement ce que vous avez appris pour créer un réseau neuronal capable de classer les masses trouvées dans les mammographies. C' est bénin ou malin. Comme je l'ai dit, j'ai eu environ 80% de précision moi-même. Je me demande comment tu as fait de toute façon ? J' ai commencé par juste orteil en lisant aveuglément dans le fichier CSP en utilisant pd dot reid CSP et en y jetant un coup d' oeil. Et j'ai vu à ce moment-là que les noms de colonnes étaient faux. Il manquait des informations de nom de colonne dans le fichier de données, et il y avait des valeurs manquantes. Ils ont été indiqués par la question Mark, donc doivent lire cela dans un peu plus intelligemment. Donc, sur mon deuxième essai ici, j'ai appelé read, voir SV passer et explicitement la connaissance que les points d'interrogation signifient des valeurs manquantes ou valeurs et en passant un tableau de noms de colonnes comme nous l'avons fait avant et a fait une autre tête sur le bloc de données Panis résultant. Et les choses ont l'air beaucoup mieux maintenant. À ce stade, nous devons nettoyer les données maintenant qu'elles sont dans un bon format et organisées correctement, nous pourrions faire une description à ce sujet pour jeter un oeil aux choses et avoir l'idée que nous manquons certaines données et les choses semblent être raisonnablement bien distribué. Au moins à ce stade, nous avons fait un petit compte ici pour voir ce qui manque exactement. Donc ma stratégie ici était de voir s'il y a une sorte de biais que je vais introduire en supprimant réellement les valeurs manquantes. Et si je devais voir que les données manquantes semblent être distribuées au hasard juste en regardant, au moins c' est probablement une bonne indication qu'il est sûr d'aller de l'avant et de laisser tomber les roses manquantes. Donc, étant donné que j'ai déterminé que c'est une chose acceptable à faire, je suis allé de l'avant et j'ai appelé Drop in a on the data frame et je l'ai décrit, et maintenant je peux voir que j'ai le même nombre de comptes de rose dans chaque colonne individuelle . J' ai donc maintenant un ensemble de données complet où j'ai jeté des lignes qui manquent des données, et je me suis convaincu que c'est une chose acceptable à faire statistiquement. Bon, donc maintenant nous devons extraire les caractéristiques et les valeurs que nous voulons alimenter dans notre modèle, notre réseau neuronal. J' ai donc extrait la date de l'entité de l'âge, forme, marge et de la densité de ce bloc de données et l'ai extrait dans un vidage. Je me souviens de toutes les fonctionnalités. J' ai également extrait la colonne de gravité et converti cela aussi dans tous les tableaux de classes que je peux transmettre en tant que données d'étiquette. Et j'ai aussi créé un tableau dandy pratique de noms de colonnes depuis que j'en ai besoin plus tard. Donc juste pour visualiser, j'ai poinçonné dans toutes les fonctionnalités juste pour jeter un oeil à ce que cela ressemble. Et, bien sûr, semble légitime ressemble à un tableau de quatre fonctionnalités. Un Pete sur chaque rangée semble raisonnable. À ce moment-là. J' ai besoin de réduire mes données. Donc, pour ce faire, tout ce que je dois faire est d'importer la fonction de scaler des standards de points de pré-traitement là-bas et d'appliquer cela à mes données de fonctionnalité. Et si je regarde l'échelle de toutes les fonctionnalités qui est sortie de cette transformation, je pourrais voir que tout semble être normalement distribué maintenant centré autour de zéro quand, avec un écart-type d'un, qui est ce que nous vous voulez , rappelez-vous, lorsque vous mettez des entrées dans un réseau de neurones, il est important que vos données soient normalisées avant de les mettre dans. Maintenant, nous arrivons à la viande réelle de la chose, en fait en train de mettre en place notre modèle MLP, et je vais l'envelopper de telle sorte que je puisse utiliser la psyché. Il apprend le score croisé de Val pour évaluer sa performance. Donc, dans mon exemple ici, j'ai créé une petite fonction appelée create model qui crée un modèle séquentiel, ajoute dans une couche dense avec six unités ou six neurones en utilisant la fonction d'activation rela Oh. J' ai ajouté dans une autre couche avec une qui fait mes classifications sigmoïdes finales, ma classification binaire en plus de cela, et j'ai compilé cela avec l'Adam Optimizer et la fonction perdue d'entropie croisée binaire . Donc, avec cela, nous avons mis en place une seule couche de six neurones qui se nourrit dans une couche de classification binaire finale . Très simple, et je suis ensuite allé de l'avant et utilisé le classificateur de caresse pour construire une version compatible d'apprentissage psychique de ce réseau neuronal, et je l'ai passé dans cross Val score orteil fait K fold validation croisée dans ce avec 10 plis et imprimez les résultats. Donc, avec seulement ces six neurones, j'ai pu atteindre une précision de 80% et prédire correctement si une masse était bénigne ou maligne, juste en se basant sur les mesures de cette masse. Maintenant, dans le monde réel, Docteur, il a utilisé beaucoup plus d'informations que ces mesures. Donc, vous savez où notre algorithme est un peu désavantagé par rapport à ces médecins humains pour commencer. Mais ce n'est pas trop mal si vous avez fait mieux si vous avez utilisé plus de couches de neurones lierre, curieux de voir si vous avez réellement un meilleur résultat. Il s'avère que parfois vous n'avez pas besoin de beaucoup pour obtenir le résultat optimal à partir des données que vous avez. Mais si vous avez pu améliorer sensiblement ce résultat, félicitations. J' espère donc que l'apprentissage profond a été mystifié pour vous. Ensuite, nous allons parler de la façon dont orteil continue à apprendre mawr dans le domaine de l'apprentissage profond.