Apprentissage Automatique et Réseaux Neuronaux - page 65

 

Apprentissage des représentations interprétables



Apprentissage des représentations interprétables

Bonjour, je m'appelle Arun, et dans cette présentation, je vais aborder le sujet de l'apprentissage des représentations interprétables dans les réseaux profonds. Les réseaux de neurones profonds se sont avérés très efficaces dans divers domaines tels que la vision par ordinateur, la robotique et le traitement du langage naturel. Cependant, l'un de leurs inconvénients est leur manque d'interprétabilité. Contrairement aux modèles plus simples, les réseaux profonds ne sont pas facilement compréhensibles simplement en examinant leurs activations. Cela pose un défi lorsque nous voulons avoir un aperçu de ce que le réseau apprend réellement.

Dans de nombreux cas, les représentations intermédiaires dans les réseaux profonds ne sont ni significatives ni interprétables. Bien que nous puissions visualiser les poids des couches convolutionnelles et acquérir une certaine compréhension après la formation, la plupart du temps, ces réseaux sont traités comme des approximateurs de boîte noire. Mais que se passe-t-il si nous nous soucions de l'interprétabilité ?

Dans cette présentation, je me concentrerai sur l'approche de structuration des réseaux profonds pour produire des représentations interprétables. En incorporant des connaissances préalables sur le domaine du problème dans la structure du réseau, nous pouvons obtenir une meilleure interprétabilité, ce qui conduit souvent à une généralisation et à une efficacité des données améliorées.

Il existe différentes façons de structurer des réseaux profonds pour améliorer l'interprétabilité. Je vais discuter de cinq ou six articles qui ont exploré cette idée. La première approche consiste à introduire explicitement des opérations spécifiques dans l'architecture du réseau. Par exemple, les réseaux de neurones convolutionnels (CNN) ont réussi dans l'analyse d'images en utilisant des opérations locales sur des patchs d'image. En incluant des couches convolutionnelles, nous pouvons réduire l'espace des paramètres et obtenir des représentations significatives. Cependant, il est important de noter que le réseau peut toujours apprendre des fonctionnalités pour lesquelles il n'a pas été explicitement formé.

Une autre approche consiste à intégrer les transformations des données dans la structure du réseau. Par exemple, les transformations de corps rigides peuvent être utilisées pour corriger et aligner des objets dans une scène. En modélisant explicitement ces transformations, nous pouvons améliorer la capacité du réseau à comprendre la structure sous-jacente des données. De plus, l'intégration de la dynamique et de la modélisation basée sur la physique dans les réseaux profonds peut également améliorer l'interprétabilité. En utilisant des techniques telles que le rendu avec OpenGL, nous pouvons simuler des interactions réalistes et améliorer la compréhension du réseau du monde physique.

Par ailleurs, j'aborderai les travaux de structuration du processus de formation pour favoriser des représentations plus interprétables. Cela implique d'attribuer une signification aux représentations intermédiaires et de former explicitement le réseau pour prédire des attributs ou des propriétés spécifiques des données. En incorporant une telle structure dans le processus de formation, nous pouvons guider le réseau pour apprendre des représentations plus significatives.

Pour illustrer ces concepts, je présenterai quelques exemples. Un article se concentre sur les réseaux de capsules, qui visent à coder des informations de niveau supérieur sur les objets d'une scène. En combinant les sorties des capsules qui reconnaissent les objets et prédisent les propriétés des objets, nous pouvons générer des résultats plus précis et interprétables.

Un autre article récent présente l'architecture de réseau de transformateurs spatiaux, qui apprend à déformer les données d'entrée en une représentation canonique. En prédisant les paramètres de transformation et en les appliquant à l'entrée, le réseau corrige les variations et aligne les données pour faciliter le traitement et la classification.

Enfin, je discuterai de mon propre travail sur la modélisation de la dynamique des scènes. En incorporant explicitement les a priori de la physique et en modélisant le mouvement des corps rigides à l'aide de rotations et de translations, nous pouvons améliorer la capacité du réseau à prédire avec précision les interactions avec les objets.

En conclusion, en structurant des réseaux profonds pour produire des représentations interprétables, nous pouvons obtenir des informations précieuses sur leur fonctionnement et améliorer leurs performances dans diverses tâches. L'inclusion de connaissances antérieures, l'utilisation d'opérations spécifiques et l'intégration de dynamiques et de transformations sont toutes des stratégies qui peuvent améliorer l'interprétabilité et conduire à une meilleure généralisation et efficacité des données.

Learning Interpretable Representations
Learning Interpretable Representations
  • 2017.08.17
  • www.youtube.com
#hangoutsonair, Hangouts On Air, #hoa
 

Réseaux de neurones récurrents



Réseaux de neurones récurrents

L'auteur se penche sur le fonctionnement complexe des réseaux de neurones récurrents (RNN) et des réseaux de mémoire longue à court terme (LSTM), mettant en lumière leur signification et leur fonctionnalité. Les RNN, contrairement aux réseaux de neurones conventionnels qui peuvent être représentés sous forme de graphes acycliques dirigés, possèdent des cycles dans leur structure de graphe. Cette nature cyclique nécessite de considérer la séquence temporelle des entrées lors du traitement des données. L'auteur se concentre principalement sur les RNN de séries chronologiques, qui gèrent efficacement les entrées sur plusieurs pas de temps.

Pour illustrer ce concept, l'auteur présente un exemple de problème captivant appelé "Find Bilbo". Dans ce scénario, un réseau de neurones régulier rencontre des difficultés pour localiser Bilbo dans les troisième et quatrième images en raison d'une occlusion partielle par un arbre. Cependant, les humains peuvent exploiter les informations temporelles pour en déduire que Bilbon est probablement positionné derrière l'arbre. Les réseaux de neurones récurrents, avec leurs capacités de mémoire inhérentes, offrent une solution à ce problème. L'auteur poursuit en expliquant comment le réseau neuronal récurrent peut être déployé dans le temps, permettant de transmettre des informations d'un pas de temps à l'autre. Cette fonctionnalité permet au réseau de conserver les informations de localisation de Bilbo.

La formation d'un réseau neuronal récurrent implique la rétropropagation des gradients dans le temps. Cependant, ce processus peut conduire au défi de l'explosion ou de la disparition des gradients, en particulier lorsque le réseau est déployé sur de nombreuses étapes de temps. Pour résoudre ce problème, l'auteur introduit les réseaux LSTM. Les réseaux LSTM sont spécifiquement conçus pour atténuer le problème des gradients qui explosent ou disparaissent. Ils utilisent des structures internes spécialisées appelées portes, qui contrôlent efficacement le flux d'informations et mettent à jour la mémoire du réseau. L'auteur explique en outre les quatre portes fondamentales d'un LSTM : la porte d'oubli, la porte d'entrée, l'entrée de bloc et la porte de sortie. Ces portes collaborent pour oublier et mémoriser sélectivement des informations dans la mémoire du réseau.

De plus, l'auteur mentionne plusieurs variantes couramment utilisées des LSTM. Celles-ci incluent l'incorporation d'un état récurrent explicite, qui permet au LSTM de considérer l'état récurrent précédent comme une entrée, et l'utilisation de judas, qui permettent aux portes de prendre en compte l'état actuel de la cellule lors de la prise de décisions.

En changeant de vitesse, l'auteur lance une explication détaillée des LSTM, en insistant spécifiquement sur leur utilité dans la détection et le suivi de l'eau. Alors qu'un réseau récurrent peut ne pas être impératif pour la détection de l'eau puisque l'eau est facilement distinguable, le problème de suivi bénéficie grandement des informations temporelles offertes par un LSTM. La nature récurrente des LSTM permet l'agrégation et la rétention d'informations dans le temps, ce qui s'avère inestimable pour le suivi d'objets tels que l'eau avec des réflexions et des réfractions dynamiques.

L'auteur présente ensuite des résultats de recherche qui comparent les performances de différents réseaux dans le contexte de tâches de détection et de suivi. Les résultats démontrent qu'un réseau neuronal convolutionnel régulier (CNN) sans récurrence présente une précision moindre dans la détection et le suivi de l'eau par rapport à un réseau LSTM récurrent. L'auteur mentionne également un autre réseau qui prend en compte plusieurs trames simultanément mais qui manque de récurrence. Bien que ce réseau surpasse le CNN régulier, il n'atteint toujours pas la précision atteinte par le LSTM.

En développant le sujet, l'auteur offre des informations supplémentaires sur l'initialisation de l'état de la cellule ou de l'état récurrent dans un LSTM. Typiquement, ces états sont initialisés à zéros. Cependant, d'autres options consistent à les initialiser avec l'état moyen de la cellule à partir des données de formation ou à tirer parti des connaissances spécifiques au domaine à des fins d'initialisation.

Le texte passe ensuite à un autre exemple illustratif, plongeant dans le travail de Daniel et sa création, "re3". Ce travail s'articule autour du tracking d'objets dans les vidéos. L'auteur explique l'architecture réseau utilisée, avec deux couches LSTM internes. En incorporant des cultures d'image entourant l'objet dans les pas de temps précédents et actuels, le réseau suit efficacement le mouvement de l'objet au fil du temps. L'auteur souligne la capacité remarquable du LSTM à gérer les changements d'apparence, les occlusions et les variations d'éclairage, ce qui en fait un outil puissant pour le suivi d'objets.

Concluant la discussion, l'auteur note que les performances des réseaux basés sur LSTM dépendent des exigences spécifiques de la tâche donnée. Bien que ces réseaux s'avèrent bénéfiques pour les problèmes impliquant des objets d'apparence variable, des architectures de réseau plus simples peuvent suffire pour d'autres cas.

En résumé, le texte propose une exploration complète des réseaux de neurones récurrents, en particulier des réseaux LSTM. Il élucide leur objectif, leurs mécanismes et leurs avantages tout en mettant en lumière leurs applications dans la détection et le suivi de l'eau, ainsi que dans les tâches de suivi d'objets. De plus, l'auteur met l'accent sur la commodité de la mise en œuvre de LSTM à l'aide de PyTorch, soulignant sa simplicité par rapport à d'autres frameworks.

Recurrent Neural Networks
Recurrent Neural Networks
  • 2017.08.17
  • www.youtube.com
#hangoutsonair, Hangouts On Air, #hoa
 

Apprentissage en profondeur distribué



Apprentissage en profondeur distribué

Aujourd'hui marque la dernière présentation de notre voyage ensemble, et j'aimerais plonger dans le monde fascinant de l'apprentissage en profondeur distribué. Bien que ce sujet ait piqué ma curiosité, je dois avouer que je ne l'ai pas beaucoup exploré jusqu'à présent. Cependant, je pense qu'il vaut la peine de discuter des compromis et des implications pratiques de l'apprentissage en profondeur distribué, car il recèle un immense potentiel pour accélérer les processus de formation. Veuillez garder à l'esprit que même si je possède une certaine connaissance des systèmes et que j'ai écrit des quantités importantes de code, je ne suis pas un expert dans ce domaine. Par conséquent, il peut y avoir des complexités que je ne comprends peut-être pas entièrement lorsqu'il s'agit de systèmes distribués du monde réel. Cela dit, lançons-nous dans cette exploration de l'apprentissage en profondeur distribué.

Lorsque nous parlons d'apprentissage en profondeur distribué, notre objectif principal est d'améliorer la vitesse et l'efficacité. Cependant, il existe plusieurs facteurs liés mais distincts que nous prenons en compte lors de l'optimisation pour un entraînement plus rapide. Ces facteurs incluent la réduction du temps de formation, la maximisation du débit, la maximisation de la simultanéité, la minimisation des transferts de données, la maximisation de la taille des lots et la minimisation de la latence. Chacun de ces aspects contribue à la réalisation de modèles d'apprentissage en profondeur plus rapides et plus efficaces.

Minimiser le temps de formation et maximiser la taille des lots sont des concepts étroitement liés. L'augmentation de la taille du lot permet des taux d'apprentissage plus importants, ce qui accélère finalement la formation. Pour illustrer ce point, imaginons de commencer avec un seul GPU et une taille de lot modeste de, disons, 100 images. Lorsque nous essayons d'augmenter la taille du lot à, par exemple, 200 images, nous rencontrons des limitations en termes de mémoire GPU. La solution réside dans l'exploitation de plusieurs machines ou GPU. En répartissant les paramètres réseau sur plusieurs GPU, chacun traitant une taille de lot de 100, nous pouvons paralléliser les passes avant et arrière. Ensuite, nous synchronisons les dégradés et mettons à jour les modèles en conséquence. Par exemple, Facebook a développé du matériel personnalisé capable d'accueillir 256 GPU, leur permettant de former ImageNet sur un modèle ResNet-50 en une heure seulement. Bien qu'une telle évolutivité extrême ne soit pas nécessaire pour la plupart des applications, la compréhension des principes et des compromis impliqués peut être bénéfique pour les futurs efforts ou stages dans ce domaine.

Examinons ensuite le concept d'optimisation de l'efficacité étape par étape. Nous discuterons des pièges potentiels et offrirons des recommandations pour atteindre l'exactitude et la rapidité.

  1. Normalisation de la fonction de perte : Il est crucial de normaliser la fonction de perte concernant la taille totale du lot. Lors de la réplication d'un réseau sur plusieurs machines ou GPU, la somme ou la moyenne des gradients produit des résultats différents. En veillant à ce que la fonction de perte soit correctement normalisée, nous maintenons la cohérence entre les différentes tailles de lots, ce qui facilite une formation précise et efficace.

  2. Mélange de données : lors de la distribution de données entre plusieurs travailleurs ou machines, le mélange devient essentiel. Sans brassage, les mini-lots peuvent devenir corrélés sur une longue période, ce qui réduit l'efficacité de la formation. En mélangeant les données au début de chaque époque, nous assurons le caractère aléatoire et empêchons des modèles similaires d'influencer des mini-lots consécutifs.

  3. Normalisation par lots : la normalisation par lots pose des défis uniques dans un environnement distribué. Pour relever ces défis, il est recommandé d'effectuer des statistiques de normalisation par lots sur des mini-lots, généralement limités à la taille du lot d'un GPU. Cette approche permet le parallélisme sans sacrifier les avantages tirés de la répartition de la charge de travail. Les chercheurs ont largement exploré cette question, et je recommande de se référer à leurs travaux pour une compréhension plus détaillée.

  4. Gestion des erreurs et suivi des progrès : tout en poursuivant l'apprentissage en profondeur distribué, il est essentiel de disposer de mécanismes de gestion des erreurs et de systèmes de suivi des progrès robustes. Avec la complexité et l'échelle accrues des systèmes distribués, des erreurs et des goulots d'étranglement peuvent survenir. En mettant en œuvre des outils fiables de gestion et de surveillance des erreurs, nous pouvons atténuer les problèmes potentiels et garantir un fonctionnement fluide.

  5. Considérations spécifiques au système : Chaque système distribué a son propre.

Continuons à explorer les considérations spécifiques au système dans l'apprentissage en profondeur distribué :

un. Frais généraux de communication : la communication entre différentes machines ou GPU est un facteur important dans l'apprentissage en profondeur distribué. Le temps nécessaire aux transferts de données et à la synchronisation peut avoir un impact sur la vitesse d'entraînement globale. Il est crucial d'optimiser les modèles de communication et de minimiser les mouvements de données inutiles. Des techniques telles que la compression de gradient, la quantification de gradient et la parcimonie de gradient peuvent aider à réduire les frais généraux de communication et à améliorer l'efficacité.

b. Architecture réseau : le choix de l'architecture réseau peut également avoir un impact sur les performances d'apprentissage en profondeur distribué. Certaines architectures sont intrinsèquement plus adaptées à la formation distribuée, tandis que d'autres peuvent nécessiter des modifications ou des techniques supplémentaires pour obtenir une parallélisation efficace. Comprendre les caractéristiques de l'architecture choisie et sa compatibilité avec la formation distribuée est important pour des résultats optimaux.

c. Partitionnement des données et équilibrage de la charge : lors de la répartition des données entre plusieurs travailleurs, il est essentiel de partitionner les données de manière à équilibrer la charge de travail de manière égale. Une distribution inégale des données peut entraîner un déséquilibre de la charge et un entraînement plus lent. Des techniques telles que le parallélisme des données, le parallélisme des modèles et le parallélisme hybride peuvent être utilisées pour répartir efficacement la charge de travail et réaliser un équilibrage de charge.

d. Tolérance aux pannes : les systèmes distribués sont sujets aux pannes, et il est crucial d'incorporer des mécanismes de tolérance aux pannes pour assurer la robustesse. Des techniques telles que les points de contrôle et la récupération automatique peuvent aider à gérer les pannes avec élégance et à reprendre la formation sans interruptions importantes.

e. Évolutivité : à mesure que la taille du système distribué augmente, l'évolutivité devient un facteur critique. Le système doit être capable de gérer efficacement un nombre croissant de machines ou de GPU sans dégradation significative des performances. Garantir l'évolutivité nécessite une conception soigneuse du système, une allocation des ressources et des optimisations de communication.

F. Synchronisation et cohérence : dans l'apprentissage en profondeur distribué, il est essentiel de synchroniser les modèles et les gradients entre les différents travailleurs pour maintenir la cohérence. Des techniques telles que la formation synchrone, la formation asynchrone et les mises à jour différées peuvent être utilisées pour équilibrer la vitesse de convergence et la cohérence. Le choix de la méthode de synchronisation dépend des exigences spécifiques de la tâche de formation et de l'architecture du système.

g. Gestion des ressources : une gestion efficace des ressources est cruciale dans l'apprentissage en profondeur distribué pour utiliser efficacement les ressources disponibles. Cela inclut la gestion de la mémoire GPU, l'optimisation de l'utilisation du GPU et l'allocation dynamique des ressources en fonction de la charge de travail. Des techniques telles que le parallélisme des modèles et l'accumulation de gradients peuvent aider à surmonter les limitations de la mémoire GPU et à maximiser l'utilisation des ressources.

En conclusion, l'apprentissage en profondeur distribué offre des opportunités importantes pour accélérer la formation et améliorer l'efficacité. Cependant, il présente également des défis qui doivent être relevés pour obtenir des résultats optimaux. En tenant compte de facteurs tels que la taille des lots, la normalisation, le brassage, les frais généraux de communication, les considérations spécifiques au système, la tolérance aux pannes, l'évolutivité, la synchronisation et la gestion des ressources, nous pouvons naviguer dans les complexités de l'apprentissage en profondeur distribué et libérer tout son potentiel.

Distributed Deep Learning
Distributed Deep Learning
  • 2017.08.17
  • www.youtube.com
#hangoutsonair, Hangouts On Air, #hoa
 

Introduction à l'informatique cognitive et à l'intelligence artificielle



Introduction à l'informatique cognitive et à l'intelligence artificielle

Je suis le Dr Soper et je suis ravi de vous accueillir dans la première vidéo de cette série complète sur l'informatique cognitive et l'intelligence artificielle (IA). Cette série vise à fournir des connaissances et des idées aux personnes intéressées à en savoir plus sur ces domaines passionnants. Que vous ayez ou non des connaissances préalables sur l'IA ou les systèmes informatiques cognitifs, cette série couvrira les principes fondamentaux et construira une base solide.

Alors que beaucoup d'entre nous ont rencontré l'intelligence artificielle dans des livres de science-fiction ou des films à succès, cette série de vidéos se concentrera sur la réalité plutôt que sur la fiction. Notre voyage plongera dans la vraie nature de l'informatique cognitive et de l'intelligence artificielle. Nous explorerons leurs définitions, les différents types de systèmes disponibles aujourd'hui, leurs fonctionnalités, leurs applications dans le monde réel et les effets transformateurs qu'ils auront sur divers aspects de nos vies.

Un aspect fascinant de cette série est que nous apprendrons également à utiliser Python et Jupyter Notebooks pour construire l'IA et les systèmes cognitifs dont nous discutons. Cette expérience pratique sera sans aucun doute l'une des parties les plus agréables de la série, car nous nous engageons dans la mise en œuvre pratique.

Alors, lançons-nous dans notre aventure pédagogique !

Étant donné que cette leçon initiale sert d'introduction à l'intelligence artificielle et à l'informatique cognitive, il est crucial de définir ces termes. L'intelligence artificielle, en termes simples, fait référence à l'intelligence manifestée par les machines. Il englobe les dispositifs artificiels qui perçoivent leur environnement, entreprennent des actions ou prennent des décisions pour atteindre leurs objectifs. Ce qui distingue les systèmes d'intelligence artificielle, c'est leur capacité à apprendre de manière autonome, sans avoir besoin d'instructions explicites. Au lieu de cela, ils peuvent déterminer de manière autonome l'approche la plus efficace pour résoudre des problèmes ou effectuer des tâches.

D'autre part, l'informatique cognitive fait référence aux systèmes d'IA qui entreprennent des tâches ou fournissent des services qui étaient traditionnellement exclusifs à la cognition humaine. Bien que tous les systèmes informatiques cognitifs soient considérés comme de l'intelligence artificielle, tous les systèmes d'IA ne possèdent pas de capacités cognitives. L'informatique cognitive comprend un large éventail d'applications, telles que la détection d'anomalies, l'analyse des sentiments, la traduction linguistique, le traitement du langage naturel, la reconnaissance et la synthèse vocales, la reconnaissance d'images et de vidéos, etc.

Tout au long de cette série, nous explorerons et mettrons en œuvre quatre types distincts de modèles d'intelligence artificielle qui servent de base à divers systèmes informatiques cognitifs.

Tout d'abord, nous nous plongerons dans Thompson Sampling, un modèle d'IA relativement simple qui aide les systèmes à résoudre le dilemme exploration-exploitation. Ces systèmes peuvent apprendre de manière autonome à sélectionner des actions qui maximisent leurs récompenses attendues.

Ensuite, nous plongerons dans le Q-learning, qui relève de l'apprentissage par renforcement. Le Q-learning implique un agent opérant dans un environnement caractérisé par des états et des actions possibles. Ces systèmes peuvent identifier automatiquement une politique optimale qui guide la prise de décision dans un état donné.

Le troisième modèle que nous aborderons est l'apprentissage en profondeur, qui s'articule autour de réseaux de neurones artificiels. Ces réseaux, similaires au cerveau humain, sont constitués de nœuds ou de neurones interconnectés. Les réseaux de neurones profonds servent de base à de nombreux systèmes d'intelligence artificielle et cognitifs intrigants, y compris ceux impliqués dans la reconnaissance vocale, la traduction automatique, le diagnostic médical, etc. Ils ont même démontré des capacités dans des tâches telles que jouer à des jeux vidéo, générer des illustrations et composer de la musique.

Enfin, nous explorerons les réseaux de neurones convolutifs profonds. Ces réseaux utilisent une opération mathématique spécialisée connue sous le nom de convolution, leur permettant d'exceller dans le traitement des informations visuelles à partir d'images et de vidéos.

Maintenant, comment l'IA et l'informatique cognitive vont-elles révolutionner le monde ? Les possibilités sont presque illimitées ! D'ici 2030, ces technologies devraient apporter environ 16 000 milliards de dollars à l'économie mondiale. Les avantages potentiels pour les entreprises, les gouvernements et les particuliers sont nombreux.

Dans le secteur de l'énergie, l'IA et l'informatique cognitive optimiseront la consommation et la distribution d'énergie, réduisant efficacement la consommation mondiale d'énergie. Dans le domaine de la santé, ces technologies aideront à concevoir de nouveaux médicaments et vaccins, à diagnostiquer des maladies et à fournir des soins médicaux personnalisés. Dans le transport et la logistique, les véhicules autonomes alimentés par l'IA réduiront considérablement les accidents et les embouteillages tout en révolutionnant les livraisons de commerce électronique. L'éducation bénéficiera d'expériences de formation personnalisées et optimisées facilitées par l'IA et l'informatique cognitive. La sûreté et la sécurité seront renforcées grâce à la capacité de l'IA à réduire la criminalité, à accroître la sécurité publique et à lutter contre la fraude et le vol d'identité. Le secteur de l'emploi utilisera l'IA pour identifier les meilleures correspondances entre les candidats et les postes, améliorant ainsi la satisfaction au travail. Les maisons intelligentes et les robots domestiques automatiseront les tâches, surveilleront les appareils et fourniront des assistants robots à domicile, favorisant une vie indépendante pour les personnes âgées et les personnes handicapées. L'IA et l'informatique cognitive révolutionneront également le divertissement et la socialisation en recommandant des expériences et en aidant les gens à trouver de nouveaux amis et cercles sociaux. Les initiatives environnementales bénéficieront de l'amélioration du traitement des déchets, du recyclage et de la réduction de la pollution grâce à l'IA. En entreprise, l'IA automatisera les processus, optimisera les profits, favorisera l'innovation et améliorera la prise de décision.

Ces exemples ne font qu'effleurer la surface, car l'IA et l'informatique cognitive continueront de dévoiler d'innombrables applications plus transformatrices. Ils ont le potentiel d'améliorer la prise de décision, d'augmenter l'intelligence humaine et de libérer des ressources cognitives pour d'autres tâches. Dans un avenir proche, les machines cognitives et l'IA s'intégreront de manière transparente dans nos vies, devenant aussi indispensables que les smartphones, Internet ou l'électricité. Nous nous demanderons comment nous avons fait sans eux.

Dans notre prochaine leçon, nous explorerons Jupyter Notebooks, un outil puissant qui sera utilisé conjointement avec Python tout au long de cette série pour créer et implémenter les modèles d'IA dont nous avons parlé précédemment. Même si vous n'êtes pas familier avec Jupyter Notebooks ou Python, soyez assuré que vous acquerrez une expérience significative avec ces outils au fur et à mesure de notre voyage.

J'espère que vous avez trouvé cette leçon d'introduction sur l'informatique cognitive et l'intelligence artificielle instructive et intéressante. Jusqu'à la prochaine fois, passez une bonne journée!

Introduction to Cognitive Computing & Artificial Intelligence
Introduction to Cognitive Computing & Artificial Intelligence
  • 2020.03.24
  • www.youtube.com
In this first video in the series, Dr. Soper introduces the concepts of artificial intelligence (AI) and cognitive computing. Topics discussed include the re...
 

Votre boîte à outils d'IA - Travailler avec les notebooks Jupyter



Votre boîte à outils d'IA - Travailler avec les notebooks Jupyter

Je suis le Dr Soper et j'ai aujourd'hui le plaisir de vous présenter votre boîte à outils d'intelligence artificielle. Notre objectif principal sera une technologie incroyablement utile et conviviale appelée Jupyter Notebooks.

Mais avant de plonger dans les détails, prenons un moment pour passer en revue ce que vous pouvez vous attendre à apprendre dans cette leçon.

À la fin de cette vidéo, vous aurez une compréhension claire de :

  1. L'importance d'avoir une boîte à outils d'IA.
  2. La définition et le but des Jupyter Notebooks.
  3. Les avantages de l'utilisation de Jupyter Notebooks pour les projets d'IA et d'informatique cognitive.
  4. Comment créer gratuitement des notebooks Jupyter dans Google Cloud et Microsoft Cloud.
  5. Comment utiliser efficacement Jupyter Notebooks pour développer et exécuter des projets d'IA et d'informatique cognitive.

Tout au long de cette leçon, nous nous lancerons dans un voyage pratique pour construire, former et tester un réseau de neurones artificiels. Vous serez agréablement surpris par la simplicité du processus !

Pour commencer, voyons pourquoi il est essentiel d'avoir une boîte à outils d'IA.

Cette série de vidéos sur l'informatique cognitive et l'intelligence artificielle va au-delà de la théorie et des concepts. Vous apprendrez à construire différents types de modèles d'IA !

Pour construire un modèle d'intelligence artificielle ou d'informatique cognitive, nous avons besoin d'un ensemble d'outils. Ces outils incluent des ressources de calcul telles que les processeurs, la mémoire et le stockage de nos fichiers. Nous avons également besoin d'un environnement de développement dans lequel nous pouvons travailler sur nos projets d'IA. Enfin, nous avons besoin d'un ensemble d'instructions pour communiquer nos actions souhaitées à l'ordinateur.

En termes d'outils, nous apprendrons le langage de programmation Python tout au long de cette série, en commençant par la prochaine vidéo.

En ce qui concerne les ressources de calcul et l'environnement de développement, les Jupyter Notebooks hébergés dans le cloud peuvent fournir à la fois nos projets d'IA et d'informatique cognitive.

Voyons maintenant ce que sont les notebooks Jupyter.

Un Jupyter Notebook est un environnement Web interactif composé d'une collection ordonnée de cellules. Chaque cellule d'un bloc-notes Jupyter peut contenir du texte, du code de programmation, des formules mathématiques, des images ou d'autres éléments multimédias.

Cette polyvalence vous permet de conserver toutes vos notes, codes, diagrammes, visualisations et sorties de vos modèles d'IA et d'informatique cognitive en un seul endroit.

Les notebooks Jupyter utilisent des noyaux pour exécuter le code de programmation et maintenir l'état actuel de votre projet. L'une des fonctionnalités les plus impressionnantes des ordinateurs portables Jupyter est la possibilité d'exécuter une cellule à la fois. Le serveur de bloc-notes garde automatiquement une trace de l'état actuel du projet en mémoire.

Cette fonctionnalité vous permet d'écrire du code dans une cellule, de l'exécuter et d'observer les résultats. Vous pouvez ensuite procéder à l'écriture de code supplémentaire dans les cellules suivantes, en accédant et en utilisant les résultats des cellules précédentes. Cette approche incrémentale vous permet de construire et d'affiner progressivement votre projet sans avoir à tout réexécuter à chaque fois que vous apportez une modification.

Un autre aspect remarquable des Jupyter Notebooks est leur prise en charge de plusieurs langages de programmation tels que Julia, Python et R. Le nom "Jupyter" provient en fait de la combinaison de ces trois langages.

Maintenant, vous vous demandez peut-être pourquoi les notebooks Jupyter sont préférables aux autres plates-formes de développement.

Bien que des approches alternatives soient disponibles, les Jupyter Notebooks offrent de nombreux avantages pour les projets d'IA et d'informatique cognitive :

  1. Les notebooks Jupyter s'exécutent directement dans un navigateur Web, éliminant ainsi le besoin d'installer ou de configurer un logiciel spécialisé. Tant que vous disposez d'une connexion Internet, vous pouvez travailler sur vos projets depuis n'importe quel appareil et système d'exploitation, quel que soit votre emplacement.
  2. Les cahiers Jupyter sont entièrement gratuits ! De grandes entreprises technologiques telles que Google et Microsoft fournissent généreusement des ordinateurs portables Jupyter sur leurs plates-formes cloud sans aucun frais. Cela vous permet de travailler sur des modèles d'IA et d'apprentissage automatique de pointe sans investir dans des logiciels coûteux.
  3. Les notebooks Jupyter sont conviviaux et faciles à apprendre. L'interface est simple et intuitive, ce qui vous permet d'économiser du temps et des efforts lors de la configuration d'environnements de développement complexes. Vous pouvez vous concentrer immédiatement sur l'écriture de code et l'expérimentation de modèles d'IA.
  4. Les notebooks Jupyter favorisent la collaboration et le partage des connaissances. Vous pouvez facilement partager vos blocs-notes avec des collègues, des collaborateurs ou la communauté IA au sens large. Cela facilite le développement collaboratif et encourage l'échange d'idées et de meilleures pratiques.
  5. Les blocs-notes Jupyter prennent en charge l'intégration multimédia enrichie. Vous pouvez inclure des images, des vidéos, des visualisations interactives et du texte explicatif à côté de votre code. Cela facilite la communication et la documentation de vos modèles d'IA, améliorant ainsi la compréhension globale et la reproductibilité de votre travail.
  6. Les notebooks Jupyter permettent l'exploration et la visualisation interactives des données. Avec des bibliothèques intégrées comme Matplotlib et Seaborn, vous pouvez générer des visualisations perspicaces directement dans votre bloc-notes. Cela vous permet de mieux comprendre vos données et de prendre des décisions plus éclairées pendant le processus de développement du modèle.
  7. Les notebooks Jupyter donnent accès à un vaste écosystème de bibliothèques Python pour l'IA et l'apprentissage automatique. Python est devenu le langage de prédilection de nombreux praticiens de l'IA en raison de sa simplicité et de sa prise en charge étendue des bibliothèques. Avec Jupyter Notebooks, vous pouvez facilement importer et utiliser des bibliothèques telles que TensorFlow, PyTorch, scikit-learn, etc.
  8. Les notebooks Jupyter offrent d'excellentes capacités de documentation. Vous pouvez inclure des explications détaillées, des instructions et des commentaires dans les cellules de votre bloc-notes. Cela vous aide à garder une trace de votre processus de réflexion, à partager des idées avec les autres et à revoir et réviser votre travail ultérieurement.

Maintenant que nous comprenons les avantages de l'utilisation des notebooks Jupyter, voyons comment les créer gratuitement dans Google Cloud et Microsoft Cloud.

Google Cloud et Microsoft Cloud proposent tous deux des services Jupyter Notebook dans le cadre de leurs plates-formes cloud. Ces services vous fournissent un environnement préconfiguré pour créer et exécuter des notebooks Jupyter.

Dans Google Cloud, vous pouvez utiliser Google Colab (abréviation de Colaboratory), qui est un environnement Jupyter Notebook gratuit qui s'exécute sur l'infrastructure de Google. Il donne accès aux GPU et aux TPU pour des calculs d'apprentissage automatique accélérés.

Pour créer un bloc-notes Jupyter dans Google Colab, vous pouvez simplement vous rendre sur le site Web de Google Colab (colab.research.google.com), vous connecter avec votre compte Google et démarrer un nouveau bloc-notes. Vous pouvez choisir de créer un bloc-notes vierge ou d'ouvrir un bloc-notes existant depuis Google Drive ou GitHub.

De même, dans Microsoft Cloud, vous pouvez utiliser Azure Notebooks, qui est un service Jupyter Notebook gratuit fourni par Microsoft. Azure Notebooks offre un environnement collaboratif pour les projets de science des données et d'apprentissage automatique.

Pour créer un Jupyter Notebook dans Azure Notebooks, vous pouvez vous connecter au site Web Azure Notebooks (notebooks.azure.com) avec votre compte Microsoft. À partir de là, vous pouvez créer un nouveau projet, qui inclura un Jupyter Notebook par défaut.

Google Colab et Azure Notebooks fournissent tous deux une interface Jupyter Notebook familière avec les ressources de calcul nécessaires pour exécuter vos modèles d'IA. Vous pouvez installer des bibliothèques supplémentaires, télécharger des ensembles de données et collaborer avec d'autres de manière transparente.

Dans la prochaine partie de cette leçon, nous plongerons dans un exemple pratique et montrerons comment utiliser efficacement Jupyter Notebooks pour développer et exécuter des projets d'IA et d'informatique cognitive.

Restez à l'écoute et continuons notre voyage dans le monde de l'IA et des notebooks Jupyter !

Your AI Toolkit - Working with Jupyter Notebooks
Your AI Toolkit - Working with Jupyter Notebooks
  • 2020.03.27
  • www.youtube.com
Dr. Soper introduces Jupyter Notebooks, and discusses why they provide a useful foundation for creating and working on artificial intelligence and cognitive ...
 

Principes fondamentaux de Python - Partie 01


Principes fondamentaux de Python - Partie 01

Je suis le Dr Soper et j'ai aujourd'hui le plaisir de présenter la première de trois leçons complètes sur les principes fondamentaux du langage de programmation Python. Bien qu'il soit impossible de couvrir tous les détails de la programmation Python en quelques vidéos, à la fin de ces trois leçons, vous aurez acquis suffisamment de connaissances pour comprendre et vous lancer dans votre parcours de programmation Python.

Tout au long de ces leçons, nous utiliserons Jupyter Notebooks, un outil puissant pour la programmation interactive et l'exploration de données. Si vous n'êtes pas familier avec Jupyter Notebooks, je vous recommande fortement de regarder la vidéo précédente de cette série pour vous familiariser avec cet environnement avant de plonger dans la programmation Python.

Commençons par donner un aperçu de ce que vous apprendrez dans cette leçon. À la fin de cette vidéo, vous aurez acquis des connaissances sur les aspects suivants de Python :

  1. Afficher du texte : Nous allons apprendre à utiliser la fonction print() pour afficher du texte à l'écran. Le texte en Python est entouré de guillemets simples pour le différencier des commandes de programmation.

  2. Variables : les variables sont des emplacements de stockage nommés symboliquement dans la mémoire d'un ordinateur. Ils contiennent des valeurs qui peuvent être modifiées selon les besoins. Nous allons explorer comment créer des variables et leur attribuer des valeurs, qu'il s'agisse de texte, d'entiers ou de flottants.

  3. Opérateurs arithmétiques : Python propose divers opérateurs arithmétiques pour effectuer des opérations mathématiques sur des variables. Nous couvrirons les opérations d'addition, de soustraction, de multiplication, de division, d'exponentiation et de modulo.

  4. Opérateurs de comparaison : les opérateurs de comparaison nous permettent de comparer deux valeurs et de déterminer leur relation. Nous en apprendrons davantage sur les opérateurs tels que "égal à", "différent de", "supérieur à", "inférieur à", "supérieur ou égal à" et "inférieur ou égal à".

Tout au long de la leçon, nous utiliserons des exemples et des démonstrations pour renforcer votre compréhension de ces compétences et fonctionnalités Python. Commençons par discuter de la façon d'afficher du texte en Python. Pour afficher une ligne de texte, nous utilisons la fonction print(). Le texte que nous voulons afficher est passé en argument à la fonction print() entre guillemets simples. De plus, nous pouvons inclure des sauts de ligne en utilisant le symbole "\n". Les commentaires, indiqués par le signe dièse (#), sont destinés à un usage humain uniquement et aident à expliquer les sections de code. Python ignore les commentaires lors de l'exécution du code.

Pour illustrer ces techniques, considérons une cellule de code dans un Jupyter Notebook. La cellule de code utilise la fonction print() pour afficher le texte "Hello, my name is Dan!" sur l'écran. Un autre exemple montre l'utilisation de "\n" pour afficher plusieurs lignes de texte dans un seul appel de fonction print().

Passant aux variables, elles sont nommées emplacements de stockage dans la mémoire d'un ordinateur. Les variables peuvent contenir des données de n'importe quel type. Pour créer une nouvelle variable en Python, nous lui attribuons une valeur en tapant son nom à gauche du signe égal et la valeur à droite. Dans une cellule de code, nous pouvons déclarer des variables telles que "product_name" avec la valeur "Delicious Nachos", "quantity_sold" avec la valeur 33 et "unit_price" avec la valeur 12,99. Nous pouvons ensuite imprimer les valeurs de ces variables en utilisant la fonction print() et la concaténation.

Alternativement, nous pouvons utiliser la fonction format () pour obtenir le même résultat avec des espaces réservés pour les valeurs variables. Cela simplifie le processus en nous permettant de définir le texte de sortie souhaité et d'indiquer les positions variables entre accolades. Pour illustrer les opérateurs arithmétiques, nous utilisons des symboles tels que "+" pour l'addition, "-" pour la soustraction, "*" pour la multiplication, "/" pour la division, "**" pour l'exponentiation et "%" pour l'opération modulo. Ces opérateurs effectuent des calculs mathématiques sur des variables.

J'espère que vous passez tous une merveilleuse journée. Je m'appelle Dr Soper et j'ai aujourd'hui le plaisir de présenter le premier volet d'une série de trois leçons sur les principes fondamentaux du langage de programmation Python. Maintenant, il est important de noter que je ne pourrai pas couvrir tous les détails de la programmation Python en quelques vidéos. Cependant, au moment où vous aurez terminé ces trois leçons, vous aurez acquis suffisamment de connaissances pour comprendre et commencer à travailler avec des projets Python.

Tout au long de ces leçons, j'utiliserai un Jupyter Notebook pour réaliser tous les exemples. Si vous n'êtes pas familier avec Jupyter Notebooks, je vous recommande fortement de regarder la vidéo précédente de cette série avant de plonger dans le monde de la programmation Python. Sans plus tarder, donnons un bref aperçu de ce que vous apprendrez dans cette leçon.

À la fin de cette vidéo, vous aurez une bonne compréhension des aspects suivants de Python :

  1. Affichage du texte
  2. variables
  3. Opérateurs arithmétiques
  4. Opérateurs de comparaison

Nous explorerons chacun de ces sujets en détail, avec de nombreux exemples illustratifs et des démonstrations pour vous aider à comprendre les concepts et les fonctionnalités du langage de programmation Python. Commençons par apprendre à afficher du texte en Python. Pour afficher une ligne de texte en Python, nous utilisons la fonction print(). Le texte que nous voulons afficher est passé en argument à la fonction print(), entre guillemets simples. En Python, il est d'usage de placer des chaînes de texte littérales entre guillemets simples. Cela aide Python à faire la distinction entre les chaînes de texte et les autres commandes de programmation textuelles.

Dans l'exemple ci-dessous, vous remarquerez une ligne précédant la fonction print() qui commence par un signe dièse (#). Cette ligne s'appelle un commentaire. Les commentaires sont destinés à un usage humain uniquement. Ils nous aident à comprendre le but d'une section particulière du code et facilitent la compréhension de notre code par les autres. Python ignore les commentaires, les considérant comme des instructions non exécutables. Ainsi, ils n'affectent pas la fonctionnalité du code. Si vous souhaitez inclure un saut de ligne dans votre sortie texte, vous pouvez utiliser la séquence d'échappement \n (nouvelle ligne). Cela insérera un saut de ligne à cet endroit.

Voyons maintenant une démonstration de ces techniques. Dans la première cellule de code de ce notebook, nous avons un exemple simple qui utilise la fonction print() pour afficher une ligne de texte à l'écran. Lorsque vous cliquez sur le bouton Exécuter, le texte "Hello, my name is Dan!" sera affiché. Dans la cellule de code suivante, nous utiliserons le symbole de nouvelle ligne \n pour afficher plusieurs lignes de texte avec un seul appel à la fonction print(). Lors de l'exécution du code, Python imprimera les deux lignes de texte à l'écran. Maintenant que nous avons couvert l'affichage du texte, passons aux variables en Python.

Une variable est un emplacement de stockage nommé symboliquement dans la mémoire d'un ordinateur. Chaque variable a un nom et une valeur, qui peuvent être modifiés selon les besoins. Les variables sont incroyablement utiles pour garder une trace des données dans un programme. Par exemple, vous pouvez utiliser une variable pour stocker le nombre de billets vendus pour un concert. Chaque fois qu'un billet supplémentaire est vendu, vous pouvez mettre à jour la valeur de la variable pour refléter le nombre correct.

En Python, les variables peuvent contenir des données de n'importe quel type, telles que du texte, des entiers ou des flottants (nombres avec décimales). Pour créer une nouvelle variable, il vous suffit de lui attribuer un nom et une valeur. Examinons quelques exemples pour mieux comprendre le concept. Dans le premier exemple, nous déclarons une variable nommée "x" et lui attribuons la valeur 33. Dans le deuxième exemple, nous déclarons une variable nommée "current_price" et lui attribuons la valeur 42,99.

Notez que les valeurs affectées aux variables peuvent être des nombres, du texte ou tout autre type de données valide. Une fois que nous avons attribué des valeurs aux variables, nous pouvons utiliser la fonction print() pour afficher leurs valeurs à l'écran. Dans le troisième exemple, nous utilisons la fonction print() pour afficher la valeur de la variable "x". Nous faisons de même pour la variable "current_price" dans le quatrième exemple.

Vous pouvez voir qu'en imprimant les variables, nous pouvons afficher leurs valeurs et les utiliser au besoin. Outre l'impression directe des variables, il existe un autre moyen de les incorporer dans la sortie texte. Nous pouvons utiliser la fonction format(), qui simplifie le processus de combinaison de texte et de valeurs variables. Dans ce cas, vous définissez le texte de sortie souhaité et indiquez les positions des variables à l'aide d'accolades {} comme espaces réservés. Dans la fonction format(), vous fournissez les variables dans l'ordre souhaité.

Prenons un exemple pour voir cela en action.

Dans le cinquième exemple, nous avons une variable nommée "product_name" avec la valeur "Delicious Nachos". Nous voulons afficher un message qui inclut le nom du produit. Nous définissons le texte "J'aime {} !" comme sortie souhaitée, avec {} comme espace réservé pour la valeur de la variable. Dans la fonction format(), nous fournissons la variable "product_name". Lors de l'exécution du code, Python remplace l'espace réservé par la valeur de la variable et imprime le résultat, qui est "I love Delicious Nachos!". Cette méthode permet une plus grande flexibilité et une sortie de texte dynamique, en particulier lorsque vous travaillez avec plusieurs variables ou des messages plus complexes. Maintenant que nous avons couvert les variables, passons aux opérateurs arithmétiques en Python.

Python fournit divers opérateurs arithmétiques qui nous permettent d'effectuer des opérations mathématiques sur des variables.

Les opérateurs arithmétiques les plus couramment utilisés sont :

  • Ajout : +
  • Soustraction : -
  • Multiplication : *
  • Département : /
  • Exponentation : **
  • Modulo : %

Ces opérateurs peuvent être utilisés avec des variables numériques pour effectuer des calculs.

Dans l'exemple suivant, nous utiliserons deux variables, "a" et "b", pour illustrer certains de ces opérateurs arithmétiques.

Tout d'abord, nous déclarons une variable nommée "a" et lui attribuons la valeur 5. Ensuite, nous déclarons une autre variable nommée "b" et lui attribuons l'expression "a + 2". L'expression "a + 2" ajoute la valeur de "a" (qui est 5) à 2, ce qui fait que la valeur de "b" est 7. Nous pouvons ensuite utiliser la fonction print() pour afficher les valeurs de "a" et "b" sur l'écran.

Lors de l'exécution du code, Python évaluera l'expression et affichera les valeurs de "a" et "b", qui sont respectivement 5 et 7.

En plus de l'addition, nous pouvons utiliser l'opérateur de soustraction (-) pour soustraire des valeurs, l'opérateur de multiplication (*) pour multiplier des valeurs, l'opérateur de division (/) pour diviser des valeurs, l'opérateur d'exponentiation (**) pour élever des valeurs à un puissance, et l'opérateur modulo (%) pour calculer le reste d'une opération de division. Ces opérateurs arithmétiques peuvent être combinés et utilisés de diverses manières pour effectuer des calculs complexes.

Enfin, discutons brièvement des opérateurs de comparaison en Python. Les opérateurs de comparaison nous permettent de comparer deux valeurs et de déterminer leur relation.

Les opérateurs de comparaison les plus couramment utilisés sont :

  • Égal à : ==
  • Différent de : !=
  • Supérieur à : >
  • Moins de : <
  • Supérieur ou égal à : >=
  • Inférieur ou égal à : <=

Lorsqu'ils sont utilisés, ces opérateurs renvoient une valeur booléenne True ou False, indiquant le résultat de la comparaison.

Par exemple, l'expression a == b renvoie True si la valeur de « a » est égale à la valeur de « b » et False sinon. Dans l'exemple suivant, nous allons comparer les valeurs de deux variables, "a" et "b", en utilisant différents opérateurs de comparaison. Nous utiliserons la fonction print() pour afficher les résultats de ces comparaisons à l'écran. Lors de l'exécution du code, Python évaluera chaque expression de comparaison et affichera la valeur booléenne correspondante. Vous pouvez voir que la sortie affiche le résultat de chaque comparaison : Vrai ou Faux.

Les opérateurs de comparaison sont utiles pour exécuter de manière conditionnelle différentes parties de votre code en fonction de la relation entre les variables.

Cela conclut notre première leçon sur les bases de la programmation Python. Dans cette leçon, nous avons couvert :

  • Afficher du texte à l'aide de la fonction print()
  • Déclarer et utiliser des variables
  • Effectuer des calculs mathématiques avec des opérateurs arithmétiques
  • Comparer des valeurs à l'aide d'opérateurs de comparaison

J'espère que cette leçon vous a fourni une base solide en programmation Python. Dans la prochaine leçon, nous approfondirons les types de données, y compris les chaînes, les entiers et les flottants.

Si vous avez des questions ou avez besoin de plus de précisions sur l'un des sujets abordés, n'hésitez pas à demander. Merci d'avoir regardé, et je vous verrai dans la prochaine leçon !

Python Fundamentals - Part 01
Python Fundamentals - Part 01
  • 2020.04.02
  • www.youtube.com
Dr. Soper discusses several fundamentals of the Python programming language, including how to display text, how to declare and use variables, all of Python's...
 

Principes fondamentaux de Python - Partie 02



Principes fondamentaux de Python - Partie 02

Je suis le Dr Soper et j'ai aujourd'hui le plaisir de présenter le deuxième volet de notre série en trois parties sur les principes fondamentaux du langage de programmation Python.

Avant de plonger dans la leçon d'aujourd'hui, je tiens à souligner que les informations que je vais partager s'appuient sur les connaissances et les compétences que nous avons développées dans la leçon précédente. Par conséquent, si vous n'avez pas eu l'occasion de regarder la vidéo précédente, je vous recommande fortement de le faire avant de commencer cette leçon sur Python.

Prenons maintenant un moment pour passer brièvement en revue ce que vous pouvez vous attendre à apprendre dans cette leçon.

À la fin de cette vidéo, vous acquerrez des connaissances sur les aspects suivants de Python :

  1. Listes
  2. Tableaux NumPy
  3. Si les déclarations
  4. Opérateurs logiques

Tout au long de la leçon, nous explorerons chacun de ces sujets en détail, avec des exemples illustratifs et des démonstrations présentant leurs fonctionnalités dans le langage de programmation Python.

Commençons par discuter des listes en Python.

En Python, une liste est simplement une collection nommée d'éléments. Ces éléments peuvent être de n'importe quel type, y compris des nombres, du texte, des variables, des objets et même d'autres listes ! Si une liste contient d'autres listes comme éléments, elle est appelée liste multidimensionnelle.

Pour illustrer, considérons quelques exemples. Dans le premier exemple, nous créons une liste appelée "int list" et attribuons les valeurs -3, 7, 4, 0, -2 et 342 à ses éléments. Vous pouvez imaginer une simple liste unidimensionnelle comme un vecteur. Python identifie une liste par ses crochets. Pour attribuer des valeurs aux éléments de la liste, nous les séparons par des virgules à l'intérieur des crochets. N'oubliez pas que les listes peuvent contenir des éléments de n'importe quel type de données.

Dans le deuxième exemple, nous déclarons une liste de planètes et attribuons les noms de toutes les planètes connues de notre système solaire comme ses éléments. Il convient de noter que Pluton a été rétrogradé au statut de "planète naine" par l'Union astronomique internationale en 2006, il n'est donc pas inclus dans cette liste. Passant au troisième exemple, nous déclarons une liste à deux dimensions. Autrement dit, les éléments de cette liste sont aussi des listes. Vous pouvez le considérer comme une matrice 2x3 avec deux lignes et trois colonnes.

Maintenant, observons quelques démonstrations où des listes sont déclarées et utilisées en Python. Dans la première cellule de code, nous déclarons simplement les trois listes dont nous avons parlé précédemment. Lorsque nous exécutons cette cellule, aucune sortie ne s'affiche car nous demandons simplement à Python de créer ces trois listes et de les stocker dans la mémoire de l'ordinateur. Dans la cellule de code suivante, nous verrons comment accéder à des valeurs spécifiques dans une liste. Cependant, avant de continuer, il est important de comprendre l'indexation en Python.

Python utilise un système d'indexation à base zéro. Cela signifie que lorsqu'il s'agit de collections telles que des listes ou des tableaux, le premier élément a un index de zéro, le second un index de un, et ainsi de suite. Pour illustrer, considérons notre "liste int" comme exemple. Cette liste contient six valeurs. Si nous voulons accéder, disons, au cinquième élément de la liste, cet élément aurait un index de 4.

Après avoir saisi ce système d'indexation à base zéro, la cellule de code suivante imprime simplement le nom de la troisième planète dans la liste des "planètes", qui, dans ce cas, est "Terre". Puisqu'il s'agit du troisième élément de la liste, il devrait être situé à la position d'index 2. Cliquons sur le bouton Exécuter pour vérifier que la sortie est comme prévu et confirmer que la Terre est bien la troisième roche du soleil.

Continuons, plongeons dans notre sujet suivant pour cette leçon : les tableaux NumPy en Python. Passons maintenant au sujet suivant de cette leçon : les instructions if et les opérateurs logiques. Python nous offre la possibilité d'utiliser des instructions conditionnelles à l'aide d'instructions if. Une instruction if nous permet d'exécuter différents blocs de code selon qu'une certaine condition est vraie ou fausse. De plus, Python fournit également des opérateurs logiques qui nous permettent de combiner plusieurs conditions ensemble.

Dans le premier exemple, nous avons une simple structure if-else qui vérifie si une variable nommée 'x' est inférieure à 10. Si la condition est vraie, elle affiche "x est inférieur à 10" à l'écran. Sinon, si la condition est fausse, il imprime "x est supérieur ou égal à 10". L'instruction else est utilisée pour spécifier le code qui doit être exécuté lorsque la condition dans l'instruction if est fausse.

Nous pouvons étendre cette structure pour gérer plusieurs possibilités en utilisant une structure if-elif-else. Dans le deuxième exemple, nous introduisons une condition supplémentaire en vérifiant si l'âge de la personne est inférieur à 13 ans. En fonction de l'âge de la personne, le code détermine si la personne est un enfant, un adolescent ou un adulte. L'instruction elif nous permet de vérifier des conditions supplémentaires avant de revenir à l'instruction else si aucune des conditions n'est vraie.

Voyons quelques démonstrations de ces instructions if et opérateurs logiques en action dans notre Jupyter Notebook.

Dans la première cellule de code, nous déclarons une variable nommée 'x' et définissons sa valeur. Nous utilisons ensuite une structure if-else pour imprimer un message spécifique selon que 'x' est inférieur à 10. Exécutons la cellule de code et observons la sortie. Étant donné que la valeur de 'x' est actuellement de 10, Python affiche "x est supérieur ou égal à 10" à l'écran. Si nous changeons la valeur de 'x' en -7 et exécutons à nouveau la cellule de code, nous obtiendrons un résultat différent. Après avoir changé la valeur de 'x' en -7, Python affiche maintenant "x est inférieur à 10".

Dans la cellule de code suivante, nous implémentons la structure if-elif-else pour déterminer si une personne est un enfant, un adolescent ou un adulte en fonction de son âge. Exécutons la cellule et voyons ce qui se passe. Comme prévu, Python imprime "enfant" car la valeur de la variable "age" est actuellement définie sur 5. Si nous modifions la valeur de "age" et réexécutons la cellule de code, nous obtiendrons des résultats différents en fonction de l'âge de la personne. Passons au sujet suivant, discutons des opérateurs logiques en Python. Python fournit trois opérateurs logiques : 'and', 'or' et 'not'. Ces opérateurs nous permettent de tester plusieurs conditions simultanément.

Dans le premier exemple, nous montrons comment utiliser les opérateurs « et » et « ou » pour déterminer si deux variables, « x » et « y », sont positives. L'instruction if vérifie si 'x' et 'y' sont positifs. Si au moins une des conditions est fausse, le code passe à l'instruction elif, qui vérifie si 'x' ou 'y' est positif. Si ni 'x' ni 'y' ne sont positifs, l'instruction else est exécutée.

Dans le deuxième exemple, nous introduisons l'opérateur 'not', qui est utilisé pour inverser ou inverser le résultat d'une comparaison. Nous vérifions si l'âge d'une personne n'est pas inférieur à 13 ans. Si la personne n'a pas moins de 13 ans, elle doit avoir au moins 13 ans et, par conséquent, pas un enfant. Sinon, il est considéré comme un enfant.

Voyons quelques démonstrations de ces opérateurs logiques utilisés en Python.

Dans la première cellule de code, nous utilisons les opérateurs logiques 'et' et 'ou' pour déterminer si 'x' et 'y' sont positifs. Nous avons défini 'x' sur 5 et 'y' sur -2. Exécutons la cellule et observons la sortie. Puisque 'y' est négatif, la condition pour l'opérateur 'et' est fausse. Cependant, la condition pour l'opérateur 'ou' est vraie car 'x' est positif. Par conséquent, le code imprime "x est positif" à l'écran. Maintenant, changeons la valeur de 'x' en -3 et exécutons à nouveau la cellule de code. Cette fois, les deux conditions pour les opérateurs 'et' et 'ou' sont fausses, donc le code passe à l'instruction else et affiche "x et y ne sont pas positifs".

Dans la cellule de code suivante, nous utilisons l'opérateur "non" pour vérifier si une personne n'est pas un enfant en fonction de son âge. Nous avons fixé la variable 'âge' à 10, ce qui signifie que la personne est considérée comme un enfant. Exécutons la cellule de code et observons la sortie. Puisque l'âge de la personne est inférieur à 13 ans, la condition pour l'opérateur 'non' est fausse et le code imprime "Enfant" à l'écran.

Maintenant, changez la valeur de 'age' en 18 et réexécutez la cellule de code. Cette fois, l'âge de la personne n'est pas inférieur à 13 ans, donc la condition pour l'opérateur 'not' est vraie, et le code imprime "Pas un enfant". Cela conclut notre leçon sur les listes, les tableaux NumPy, les instructions if et les opérateurs logiques en Python. J'espère que vous avez trouvé ces informations utiles et qu'elles vous aideront dans votre parcours de programmation Python.

Dans la prochaine et dernière partie de cette série, nous explorerons des sujets plus avancés, notamment les boucles, les fonctions et la gestion des fichiers. Alors restez à l'écoute pour cela!

Merci de votre attention et à la prochaine leçon !

Python Fundamentals - Part 02
Python Fundamentals - Part 02
  • 2020.04.03
  • www.youtube.com
Dr. Soper discusses more fundamentals of the Python programming language, including how to work with lists in Python, how to use NumPy arrays, how to use 'if...
 

Principes fondamentaux de Python - Partie 03



Principes fondamentaux de Python - Partie 03

J'espère que vous passez tous une bonne journée. C'est le Dr Soper ici, et je suis ravi d'être de retour avec vous pour notre troisième leçon sur les principes fondamentaux du langage de programmation Python. Dans la session d'aujourd'hui, nous approfondirons Python et explorerons certains concepts clés qui amélioreront votre compréhension et vos compétences.

Avant de commencer, je voudrais souligner que les informations présentées dans cette leçon s'appuient sur les connaissances et les compétences que nous avons développées dans les deux leçons précédentes. Si vous n'avez pas encore regardé ces vidéos, je vous recommande fortement de le faire avant de plonger dans cette leçon sur Python.

Maintenant, prenons un moment pour discuter de ce que vous pouvez vous attendre à apprendre dans cette leçon. À la fin de cette session, vous aurez une compréhension complète des aspects suivants de Python :

  1. boucles "pour"
  2. boucles "while"
  3. Les fonctions
  4. Des classes
  5. Objets

Tout au long de cette leçon, nous explorerons ces concepts à travers des exemples illustratifs et des démonstrations, vous permettant de saisir leurs applications pratiques dans le langage de programmation Python.

Commençons par plonger dans le monde des boucles "for" et "while" en Python.

En général, les boucles nous permettent d'exécuter un ensemble d'instructions de manière répétée. Python fournit deux types de boucles : les boucles "for" et les boucles "while". La principale distinction entre les deux est que les boucles "for" s'exécutent un certain nombre de fois, tandis que les boucles "while" continuent de s'exécuter jusqu'à ce qu'une certaine condition soit remplie.

Commençons par un exemple de boucle "for" qui imprime les 10 premiers nombres naturels, qui sont des nombres entiers allant de 1 à 10. Pour créer une boucle "for", nous utilisons le mot-clé "for" suivi d'un nom de variable. Dans ce cas, nous utiliserons la variable "x". Au fur et à mesure que la boucle "for" itère, la variable "x" se verra attribuer une valeur différente pour chaque itération. Nous spécifions ensuite l'ensemble des éléments qui seront itérativement attribués à la variable, suivis de deux-points. Dans cet exemple spécifique, nous créons l'ensemble d'éléments à l'aide de la fonction "range" de Python. La fonction "range" renvoie une plage de nombres entre une borne inférieure et une borne supérieure. Notamment, la borne inférieure est inclusive, tandis que la borne supérieure est exclusive. Par conséquent, la plage de nombres dans cet exemple sera de 1 à 10.

Lors de la première itération de la boucle, la valeur de "x" sera 1. Par la suite, "x" se verra attribuer 2 lors de la deuxième itération, et ainsi de suite jusqu'à ce qu'il atteigne 10. Toutes les lignes de code en retrait suivant le "pour" instruction sera exécutée à chaque itération de la boucle. Dans cet exemple, nous imprimons simplement la valeur de "x", ce qui entraîne l'affichage des nombres 1 à 10.

Maintenant, explorons une autre boucle "for" qui imprime les noms des planètes. Dans ce cas, nous utiliserons le nom de variable "planète" pour contrôler la boucle, et nous itérerons sur une liste de planètes. Au fur et à mesure que la boucle progresse, la variable "planète" se verra attribuer le nom de chaque planète une par une, nous permettant d'imprimer le nom de chaque planète dans la liste.

Passons à autre chose, discutons des boucles imbriquées en Python. Avec les boucles imbriquées, une boucle (appelée boucle interne) s'exécute à l'intérieur d'une autre boucle (appelée boucle externe). La boucle interne s'exécutera une fois pour chaque itération de la boucle externe. Par exemple, considérons un scénario où la boucle externe remplit une variable nommée "ligne" avec des entiers allant de 0 à 1, tandis que la boucle interne remplit une variable nommée "colonne" avec des entiers allant de 0 à 2. Ces nombres correspondent à la ligne et les index de colonne d'un tableau NumPy à deux dimensions. Au fur et à mesure que la boucle imbriquée progresse, elle imprime d'abord les valeurs de tous les éléments de la première ligne du tableau, puis passe à la deuxième ligne.

Enfin, explorons la boucle "while". Dans ce type de boucle, nous nous appuyons sur une variable de contrôle, telle que "x", qui est initialement définie sur une valeur spécifique. La boucle continuera à s'exécuter tant que la valeur de "x" satisfait à une certaine condition. Par exemple, nous pouvons initialiser "x" à 1, et la boucle continuera à s'exécuter tant que "x" restera inférieur à 10. À chaque itération, la valeur de "x" sera mise à jour, nous permettant d'effectuer des actions spécifiques dans le boucle jusqu'à ce que la condition ne soit plus remplie.

Cela conclut notre aperçu des boucles "for" et "while" en Python. Dans le segment suivant, nous explorerons les fonctions, un concept fondamental de la programmation qui nous permet d'organiser et de réutiliser efficacement le code.

Python Fundamentals - Part 03
Python Fundamentals - Part 03
  • 2020.04.03
  • www.youtube.com
Dr. Soper discusses even more fundamentals of the Python programming language, including how to use 'for' loops in Python, how to use 'while' loops in Python...
 

Fondements du Q-Learning



Fondements du Q-Learning

Bonne journée tout le monde! Je suis le Dr Soper et aujourd'hui, je suis ravi de me plonger dans les fondements du Q-learning, une technique puissante dans le domaine de l'intelligence artificielle. Avant de nous lancer dans ce voyage d'apprentissage, je vous recommande de regarder la vidéo précédente de cette série intitulée "Les fondements de l'apprentissage par renforcement" si vous êtes nouveau dans le concept.

Dans cette leçon, nous explorerons les concepts fondamentaux du Q-learning, y compris ses caractéristiques, les valeurs Q, les différences temporelles, l'équation de Bellman et le processus global de Q-learning. À la fin de cette leçon, vous aurez une solide compréhension de ces concepts et serez bien équipé pour créer des modèles d'IA qui s'appuient sur le Q-learning. Alors, sans plus tarder, commençons !

Pour commencer, discutons brièvement de ce qu'implique le Q-learning. Comme mentionné précédemment, le Q-learning est une forme d'apprentissage par renforcement, où un agent d'IA interagit avec un environnement composé d'états et de récompenses. L'objectif de l'agent est de construire une politique optimale directement en interagissant avec l'environnement, sans avoir besoin d'apprendre un modèle mathématique sous-jacent ou une distribution de probabilité. Q-learning englobe les essais et les erreurs, car l'agent tente continuellement de résoudre le problème en utilisant différentes approches sur plusieurs épisodes tout en mettant à jour sa politique en fonction des connaissances acquises.

Examinons maintenant les caractéristiques des modèles Q-learning. Étant donné que le Q-learning est un type d'apprentissage par renforcement, il partage les caractéristiques fondamentales de tous les modèles d'apprentissage par renforcement. Ces caractéristiques comprennent un système d'entrée et de sortie, des récompenses, un environnement, des processus de décision de Markov et des modes d'apprentissage et d'inférence. En plus de ces caractéristiques, les modèles de Q-learning ont deux attributs spécifiques. Premièrement, le nombre d'états possibles dans les modèles d'apprentissage Q est fini, ce qui signifie que l'agent d'IA se trouvera toujours dans l'une des situations possibles parmi un nombre fixe. Deuxièmement, le nombre d'actions possibles dans les modèles d'apprentissage Q est également fini, ce qui oblige l'agent d'IA à choisir parmi un ensemble fixe d'actions possibles dans chaque état.

Maintenant que nous comprenons les caractéristiques, explorons quelques problèmes classiques de Q-learning. L'un de ces problèmes est le labyrinthe, où chaque emplacement représente un état, et les actions de l'agent impliquent de se déplacer vers le haut, la droite, le bas ou la gauche. L'objectif est de naviguer dans le labyrinthe et d'atteindre la sortie le plus rapidement possible. Un autre exemple classique est le problème de la marche en falaise, où l'agent doit naviguer dans un environnement en forme de grille pour atteindre un emplacement spécifique sans tomber de la falaise. Dans les deux scénarios, l'agent IA se renseigne sur l'environnement en s'appuyant sur les valeurs Q et en les mettant à jour.

Alors, que sont les valeurs Q ? Les valeurs Q représentent la qualité d'une action spécifique (a) dans un état donné (s). Ils indiquent la somme attendue des récompenses futures si cette action est prise à partir de l'état actuel. En d'autres termes, les valeurs Q estiment la récompense supplémentaire que l'agent peut accumuler en prenant une action particulière et en procédant de manière optimale à partir de là. L'agent IA vise à maximiser ses récompenses totales ou à minimiser ses punitions totales dans des scénarios avec des récompenses négatives. En mettant à jour et en affinant les valeurs Q, l'agent apprend à travers le renforcement positif et négatif.

Les valeurs Q sont stockées dans une table Q, qui comporte des lignes représentant les états possibles et des colonnes représentant les actions possibles. La Q-table sert de politique à l'agent, guidant ses actions dans l'environnement. Une table Q optimale contient des valeurs qui permettent à l'agent de sélectionner la meilleure action dans un état donné, conduisant à la récompense potentielle la plus élevée.

Les différences temporelles (TD) jouent un rôle crucial dans le Q-learning. TD fournit une méthode pour calculer de combien la valeur Q pour l'action précédente doit être ajustée en fonction de ce que l'agent a appris sur les valeurs Q pour les actions de l'état actuel. Cet ajustement aide l'agent à prendre de meilleures décisions dans les épisodes suivants. La valeur TD est calculée en considérant la récompense immédiate reçue pour l'action précédente, un facteur de réduction (gamma) qui réduit les récompenses futures et la valeur Q maximale de l'état suivant.

L'erreur TD, souvent notée δ, est calculée comme la différence entre la valeur TD et la valeur Q actuelle pour la paire état-action précédente. Il représente l'écart entre la prédiction de l'agent et la récompense réelle observée dans l'environnement. L'erreur TD est utilisée pour mettre à jour la valeur Q de la paire état-action précédente, affinant ainsi progressivement les valeurs Q au fil du temps.

Introduisons maintenant l'équation de Bellman, qui est au cœur du Q-learning. L'équation de Bellman exprime la relation entre la valeur Q d'une paire état-action et les valeurs Q de ses paires état-action voisines. Il est défini comme suit :

Q(s, une) = R(s, une) + γ * max[Q(s', a')]

Dans cette équation, Q(s, a) représente la valeur Q de l'état s et l'action a, R(s, a) désigne la récompense immédiate obtenue lors de l'action a dans l'état s, γ (gamma) est le facteur d'actualisation qui détermine l'importance des récompenses futures par rapport aux récompenses immédiates, s' est le prochain état atteint après avoir effectué l'action a dans l'état s, et a' représente la meilleure action à effectuer dans l'état s'.

L'équation de Bellman stipule essentiellement que la valeur Q d'une paire état-action doit être égale à la récompense immédiate obtenue plus la valeur Q maximale actualisée des prochaines paires état-action. En appliquant de manière itérative l'équation de Bellman et en mettant à jour les valeurs Q en fonction des récompenses observées et des estimations futures, l'agent converge progressivement vers une politique optimale.

Passons maintenant au processus global de Q-learning. Q-learning suit une approche itérative composée des étapes suivantes :

  1. Initialisez la Q-table avec des valeurs arbitraires ou des zéros.
  2. Observez l'état actuel.
  3. Choisissez une action basée sur une stratégie d'exploration-exploitation, comme epsilon-greedy, qui équilibre entre l'exploration de nouvelles actions et l'exploitation des connaissances apprises.
  4. Effectuez l'action sélectionnée et observez la récompense immédiate et l'état suivant.
  5. Mettez à jour la valeur Q de la paire état-action précédente à l'aide de l'équation de Bellman et de la récompense observée.
  6. Définissez l'état actuel sur l'état suivant.
  7. Répétez les étapes 3 à 6 jusqu'à ce que l'agent atteigne un état terminal ou un nombre prédéfini d'épisodes.
  8. Répétez les étapes 2 à 7 pour plusieurs épisodes afin d'affiner les valeurs Q et d'améliorer la politique de l'agent.

Grâce à ce processus itératif, les valeurs Q sont mises à jour et convergent progressivement vers leurs valeurs optimales, conduisant à une politique améliorée. La stratégie d'exploration-exploitation permet à l'agent d'équilibrer entre l'exploration de nouvelles actions pour découvrir de meilleures stratégies et l'exploitation des connaissances acquises pour prendre des décisions basées sur les meilleures actions actuelles.

Il convient de mentionner que Q-learning est un algorithme d'apprentissage hors politique, ce qui signifie que l'agent peut apprendre des expériences générées par une politique différente. Cette propriété permet un apprentissage plus efficace et une plus grande flexibilité dans l'exploration de différentes stratégies.

En résumé, le Q-learning est une technique puissante dans le domaine de l'apprentissage par renforcement. Cela implique l'apprentissage de politiques optimales par essais et erreurs sans nécessiter de modèle mathématique de l'environnement. En utilisant les valeurs Q pour estimer la somme attendue des récompenses futures, en les mettant à jour à travers les différences temporelles et l'équation de Bellman, et en suivant un processus d'apprentissage itératif, l'agent améliore progressivement sa politique et obtient de meilleures performances dans la tâche donnée.

J'espère que cette leçon vous a fourni une solide compréhension des fondements du Q-learning. Dans la prochaine leçon, nous approfondirons les détails de la mise en œuvre et explorerons des exemples pratiques de Q-learning en action. Merci pour votre attention, et j'ai hâte de vous voir dans la prochaine vidéo!

Foundations of Q-Learning
Foundations of Q-Learning
  • 2020.04.22
  • www.youtube.com
Dr. Soper discusses the foundations of Q-learning, which is one of the major types of reinforcement learning within the broader realm of artificial intellige...
 

Un système d'IA basé sur l'apprentissage par renforcement pour maximiser les profits en Python



Un système d'IA basé sur l'apprentissage par renforcement pour maximiser les profits en Python

Bonne journée tout le monde! C'est le Dr Soper qui parle. Aujourd'hui, nous allons nous plonger dans un exemple complet en Python qui montre comment un système d'IA basé sur l'apprentissage par renforcement peut maximiser efficacement les bénéfices des entreprises dans un scénario complexe impliquant plusieurs options et des millions de clients.

Les techniques présentées dans cette vidéo ont été introduites et largement discutées dans les leçons précédentes de cette série. Si vous n'avez pas eu l'occasion de regarder ces vidéos précédentes, je vous recommande fortement de le faire avant de passer à celle-ci.

Avant de nous plonger dans le codage en Python, discutons du problème métier que nous visons à résoudre dans cette vidéo en utilisant un système d'IA basé sur l'apprentissage par renforcement de l'échantillonnage de Thompson.

Imaginez que vous travaillez pour une entreprise sans fil qui compte 10 millions de clients. L'entreprise a décidé d'augmenter ses bénéfices en lançant un programme de mise à niveau des smartphones. Pour inciter les clients à mettre à jour leurs smartphones, l'équipe marketing de l'entreprise a conçu huit campagnes publicitaires distinctes. Chaque campagne offre aux clients des fonctionnalités, des promotions ou des remises spécifiques. Cependant, le bénéfice moyen de chaque campagne variera puisque les fonctionnalités, promotions et remises associées entraîneront des coûts variables pour l'entreprise. Bien que l'entreprise puisse calculer le coût et le bénéfice par vente de chaque campagne publicitaire, l'efficacité de chaque campagne reste incertaine. Certaines campagnes peuvent s'avérer très efficaces, tandis que d'autres peuvent ne pas donner de résultats significatifs.

Notre objectif est de construire un système d'IA capable de maximiser les bénéfices de l'entreprise pour son programme de mise à niveau des smartphones. Il est important de noter que notre objectif n'est pas simplement de maximiser le nombre de clients participant au programme. Au lieu de cela, nous visons à optimiser les bénéfices, qui dépendent non seulement du nombre de clients exposés à chaque campagne publicitaire, mais également de l'efficacité de chaque campagne à générer des ventes et du bénéfice moyen par vente. Avec une compréhension claire du problème métier, passons à Python et commençons l'implémentation.

Avant de décrire le code dans ce notebook, je tiens à vous informer qu'un lien vers ce notebook est disponible dans la description de la vidéo. N'hésitez pas à télécharger une copie du cahier pour expérimenter ou adapter à vos besoins spécifiques. Comme d'habitude, nous commençons par importer les bibliothèques Python nécessaires. Nous aurons besoin de deux bibliothèques pour ce projet : NumPy, que nous utiliserons pour générer des valeurs aléatoires à partir de diverses distributions de probabilité, et locale, que nous utiliserons pour formater les valeurs monétaires de manière appropriée. Étant donné que notre objectif est de maximiser les profits, nous travaillerons beaucoup avec des valeurs monétaires dans ce projet. Définir nos paramètres régionaux actuels sur les États-Unis garantit que Python formate les valeurs monétaires en dollars américains et utilise des virgules pour séparer les grands nombres. Si vous préférez un format de devise différent, n'hésitez pas à modifier les paramètres régionaux en conséquence.

La ligne de code suivante définit une graine pour le générateur de nombres aléatoires. Cela garantit que vous pouvez reproduire les résultats exacts observés dans cette vidéo si vous choisissez de télécharger et d'exécuter le notebook.

Notre tâche suivante consiste à définir une classe pour stocker des informations sur les différentes campagnes publicitaires. Nous utiliserons cette classe pour créer des objets représentant chaque campagne publicitaire, qui conserveront les attributs ou les caractéristiques des campagnes respectives. L'utilisation des objets de campagne de cette manière nous permet de séparer tous les détails liés à la campagne du reste de la logique du programme, améliorant considérablement notre compréhension de la façon dont l'IA apprend et prend des décisions.

Comme vous pouvez le constater, chaque objet de campagne est initialisé en fournissant un ID de campagne unique. La fonction __init__ attribue ensuite un taux de conversion aléatoire entre 1 % et 20 % à la campagne en utilisant NumPy pour tirer une valeur aléatoire à partir d'une distribution de probabilité uniforme. Le taux de conversion signifie le pourcentage de clients qui choisiront de mettre à jour leurs smartphones s'ils sont exposés à une campagne publicitaire spécifique. Il convient de noter que la société sans fil n'a pas connaissance de ces informations. Nous utilisons également NumPy pour attribuer un profit aléatoire par vente réussie allant de 100 $ à 200 $ pour chaque campagne. Bien que nous attribuions au hasard ces valeurs de profit, il est également possible d'utiliser des valeurs spécifiques fournies par l'entreprise de téléphonie mobile pour chaque campagne publicitaire. Enfin, la classe inclut une méthode get_profit() qui renvoie le profit par vente réussie pour la campagne.

Voici le code de la classe Campaign :

import numpy as np

class Campaign:
    def __init__( self , campaign_id):
         self .campaign_id = campaign_id
         self .conversion_rate = np.random.uniform( 0.01 , 0.20 )
         self .profit_per_sale = np.random.uniform( 100 , 200 )
    
    def get_profit( self ):
         return self .profit_per_sale

Maintenant que nous avons défini la classe Campaign, nous pouvons procéder à l'implémentation de l'algorithme d'apprentissage par renforcement basé sur l'échantillonnage de Thompson. Nous allons créer une classe appelée ThompsonSampling qui encapsulera l'algorithme.

La classe ThompsonSampling aura les attributs et méthodes suivants : num_campaigns : le nombre de campagnes publicitaires.

  • campagnes : une liste d'objets Campagne représentant les campagnes publicitaires disponibles.
  • total_sales : une liste permettant de suivre le nombre total de ventes pour chaque campagne.
  • total_profits : une liste permettant de suivre les bénéfices totaux de chaque campagne.
  • num_trials : nombre total d'essais ou d'itérations dans l'algorithme d'échantillonnage de Thompson.
  • trial_results : une liste pour stocker les résultats de chaque essai, c'est-à-dire la campagne sélectionnée et le profit qui en résulte.

Les méthodes de la classe ThompsonSampling sont les suivantes :

  • initialize_campaigns() : initialise la liste des objets de campagne avec le nombre de campagnes spécifié.
  • select_campaign() : implémente l'algorithme d'échantillonnage de Thompson pour sélectionner une campagne pour chaque essai.
  • update_statistics() : met à jour le total des ventes et des bénéfices en fonction de la campagne sélectionnée et du bénéfice qui en résulte.
  • run_trials() : exécute le nombre d'essais spécifié et enregistre les résultats.

Voici le code de la classe ThompsonSampling :

 class ThompsonSampling:
    def __init__( self , num_campaigns, num_trials):
         self .num_campaigns = num_campaigns
         self .campaigns = []
         self .total_sales = [ 0 ] * num_campaigns
         self .total_profits = [ 0 ] * num_campaigns
         self .num_trials = num_trials
         self .trial_results = []
    
    def initialize_campaigns( self ):
         for i in range( self .num_campaigns):
             self .campaigns.append(Campaign(i))
    
    def select_campaign( self ):
        samples = []
         for campaign in self .campaigns:
            profit = campaign.get_profit()
            sample = np.random.normal(profit, 1.0 / campaign.conversion_rate)
            samples.append(sample)
        selected_campaign = np.argmax(samples)
         return selected_campaign
    
    def update_statistics( self , trial, selected_campaign, profit):
         self .total_sales[selected_campaign] += 1
         self .total_profits[selected_campaign] += profit
         self .trial_results.append((trial, selected_campaign, profit))
    
    def run_trials( self ):
         for trial in range( self .num_trials):
            selected_campaign = self .select_campaign()
            profit = self .campaigns[selected_campaign].get_profit()
             self .update_statistics(trial, selected_campaign, profit)

Maintenant que nous avons implémenté la classe ThompsonSampling, nous pouvons créer une instance de la classe et exécuter l'algorithme. Nous allons définir le nombre de campagnes sur 8 et le nombre d'essais sur 1000 pour cet exemple. Après avoir exécuté les essais, nous afficherons le total des ventes et des bénéfices pour chaque campagne.

Voici le code pour exécuter l'algorithme d'échantillonnage de Thompson :

num_campaigns = 8
num_trials = 1000

ts = ThompsonSampling(num_campaigns, num_trials)
ts.initialize_campaigns()
ts.run_trials()

for i in range(num_campaigns):
    total_sales = ts.total_sales[i]
    total_profits = ts.total_profits[i]
    print(f "Campaign {i}: Total Sales = {total_sales}, Total Profits = {total_profits}" )
Vous pouvez modifier le code en fonction de vos besoins spécifiques, tels que le nombre de campagnes et d'essais. De plus, vous pouvez étendre la classe Campaign avec plus d'attributs et de méthodes pour capturer des informations supplémentaires sur chaque campagne.
A Profit-Maximizing Reinforcement Learning-Based AI System in Python
A Profit-Maximizing Reinforcement Learning-Based AI System in Python
  • 2020.04.15
  • www.youtube.com
Dr. Soper provides a complete example of a profit-maximizing artificial intelligence system in Python that relies on Thompson Sampling-based reinforcement le...