L'apprentissage profond avec Python
François Chollet
Préfacei
Remerciementsiii
À propos de ce livreiv
À propos de l'auteurix
À propos de la couverture des éditions Manningx
Partie I Principes fondamentaux de l'apprentissage profond 1
1 Qu'est-ce que l'apprentissage profond ?
3
1.1 Intelligence artificielle, apprentissage automatique et apprentissage profond
5
1.1.1 Intelligence artificielle5
1.1.2 Apprentissage automatique6
1.1.3 Apprentissage des représentations à partir de données8
1.1.4 Le « profond » de l'apprentissage profond11
1.1.5 Comprendre le fonctionnement de l'apprentissage profond en trois graphiques13
1.1.6 Ce que l'apprentissage profond est parvenu à réaliser jusqu'à présent16
1.1.7 Ne vous fiez pas au buzz médiatique qui ne voit qu'à court terme16
1.1.8 Les promesses de l'IA18
1.2 Avant l'apprentissage profond : brève histoire de l'apprentissage automatique
20
1.2.1 Modélisation probabiliste20
1.2.2 Premiers réseaux de neurones21
1.2.3 Méthodes à noyau21
1.2.4 Arbres de décision, forêts aléatoires et algorithmes de gradient boosting23
1.2.5 Retour aux réseaux de neurones25
1.2.6 Ce qui distingue l'apprentissage profond26
1.2.7 Panorama de l'apprentissage automatique moderne27
1.3 Pourquoi l'apprentissage profond ? Pourquoi maintenant ?
28
1.3.1 Le matériel (hardware)28
1.3.2 Les données (data)30
1.3.3 Les algorithmes30
1.3.4 Une nouvelle vague d'investissements31
1.3.5 La démocratisation de l'apprentissage profond32
1.3.6 Quel avenir pour l'apprentissage profond ?33
2 Pour commencer : les notions mathématiques des réseaux de neurones
35
2.1 Première approche d'un réseau de neurones
36
2.2 Représentations de données pour les réseaux de neurones
41
2.2.1 Scalaires (tenseurs 0D)41
2.2.2 Vecteurs (tenseurs 1D)41
2.2.3 Matrices (tenseurs 2D)42
2.2.4 Tenseurs 3D et tenseurs de haute dimensionnalité42
2.2.5 Principaux attributs d'un tenseur43
2.2.6 Manipulation des tenseurs avec Numpy44
2.2.7 Entraînement par lots de données45
2.2.8 Exemples concrets de tenseurs de données46
2.2.9 Données vectorielles46
2.2.10 Données temporelles ou données séquentielles47
2.2.11 Données d'images48
2.2.12 Données vidéo49
2.3 Outils des réseaux de neurones : les opérations de tenseurs
50
2.3.1 Opérations élément par élément (element-wise operations)50
2.3.2 Broadcasting du langage Python52
2.3.3 Produit scalaire de tenseurs53
2.3.4 Modifier la forme d'un tenseur57
2.3.5 Interprétation géométrique des opérations sur les tenseurs58
2.3.6 Une interprétation géométrique de l'apprentissage profond59
2.4 Le moteur des réseaux de neurones : l'optimisation à base de gradient
61
2.4.1 Qu'est-ce qu'une dérivée ?62
2.4.2 Dérivée d'une opération de tenseurs : le gradient63
2.4.3 Descente de gradient stochastique64
2.4.4 Dérivation en chaîne de fonctions composées : l'algorithme de rétropropagation du gradient68
2.5 Retour à notre premier exemple
70
2.6 Résumé du chapitre
72
3 Mise en oeuvre des réseaux de neurones sur des cas concrets
73
3.1 Anatomie d'un réseau de neurones
75
3.1.1 Les couches : des briques de construction de réseaux76
3.1.2 Les modèles : des réseaux de couches77
3.1.3 Fonctions de perte et optimiseurs : les clés pour configurer un processus d'apprentissage78
3.2 Introduction à la bibliothèque logicielle Keras
80
3.2.1 Bibliothèques Keras, TensorFlow, Theano et CNTK81
3.2.2 Développement avec Keras : une brève introduction82
3.3 Mise en route d'un poste de travail d'apprentissage profond
85
3.3.1 Les notebooks Jupyter : le meilleur moyen de mener des expériences d'apprentissage profond85
3.3.2 Lancer l'exécution de Keras : deux options86
3.3.3 Exécuter des travaux d'apprentissage profond dans l'informatique en nuage : avantages et inconvénients86
3.3.4 Quel est le meilleur GPU pour l'apprentissage profond ?87
3.4 Classement des critiques de films : un exemple de classification binaire
88
3.4.1 Le jeu de données IMDB88
3.4.2 Préparation des données90
3.4.3 Architecture du réseau91
3.4.4 Validation de l'approche choisie95
3.4.5 Utilisation d'un réseau pré-entraîné pour générer des prédictions sur de nouvelles données99
3.4.6 Expériences plus avancées100
3.4.7 Pour conclure cette section100
3.5 Classification de fils de presse : un exemple de classification en plusieurs classes
102
3.5.1 Le jeu de données Reuters102
3.5.2 Préparation des données103
3.5.3 Architecture du réseau104
3.5.4 Validation de l'approche choisie106
3.5.5 Génération de prédictions sur de nouvelles données109
3.5.6 Une approche alternative pour encoder les étiquettes et choisir la fonction de perte109
3.5.7 De l'importance d'avoir des couches intermédiaires suffisamment larges110
3.5.8 Expériences supplémentaires111
3.5.9 Pour conclure cette section111
3.6 Prédiction du prix de l'immobilier : un exemple de régression
112
3.6.1 Le jeu de données des prix de l'immobilier à Boston112
3.6.2 Préparation de données113
3.6.3 Architecture du réseau114
3.6.4 Validation de l'approche à l'aide de la validation croisée à K- fold115
3.6.5 Pour conclure cette section120
3.7 Résumé du chapitre
121
4 Principes fondamentaux de l'apprentissage automatique
123
4.1 Quatre branches de l'apprentissage automatique
125
4.1.1 Apprentissage supervisé125
4.1.2 Apprentissage non supervisé126
4.1.3 Apprentissage auto-supervisé126
4.1.4 Apprentissage par renforcement127
4.2 Évaluation des modèles d'apprentissage automatique
130
4.2.1 Ensembles d'entraînement, de validation et de test130
4.2.2 Points importants à garder à l'esprit135
4.3 Prétraitement des données, extraction des caractéristiques et apprentissage des caractéristiques
137
4.3.1 Prétraitement des données pour les réseaux de neurones137
4.3.2 Extraction des caractéristiques139
4.4 Sur-ajustement et sous-ajustement
142
4.4.1 Réduction de la taille du réseau143
4.4.2 Ajout d'une régularisation des poids146
4.4.3 Ajout de dropout148
4.5 Le déroulement universel des tâches de l'apprentissage automatique
152
4.5.1 Définition du problème et constitution d'un jeu de données152
4.5.2 Choix d'une mesure de performance153
4.5.3 Choix d'un protocole d'évaluation154
4.5.4 Préparation des données154
4.5.5 Développement d'un modèle plus performant qu'un modèle de base155
4.5.6 Montée en puissance : développement d'un modèle sur-ajusté157
4.5.7 Régularisation du modèle et réglage des hyper-paramètres157
4.6 Résumé du chapitre
159
Partie 2 L'apprentissage profond en pratique
161
5 L'apprentissage profond pour la vision par ordinateur163
5.1 Introduction aux réseaux de neurones convolutifs : les ConvNet
164
5.1.1 L'opération de convolution167
5.1.2 L'opération de max-pooling174
5.2 Entraînement d'un ConvNet à partir de zéro sur un petit jeu de données
177
5.2.1 La pertinence de l'apprentissage profond pour des problèmes avec peu de données d'apprentissage178
5.2.2 Téléchargement des données178
5.2.3 Architecture du réseau182
5.2.4 Prétraitement des données184
5.2.5 Utilisation de l'augmentation de données189
5.3 Utilisation d'un ConvNet pré-entraîné
196
5.3.1 Extraction de caractéristiques197
5.3.2 Réglage de précision208
5.3.3 Pour conclure ces deux dernières sections216
5.4 Visualisation des représentations apprises par les ConvNet
217
5.4.1 Visualisation des cartes de caractéristiques des couches intermédiaires217
5.4.2 Visualisation des filtres de ConvNet226
5.4.3 Visualisation des cartes thermiques d'activation de classe (heatmaps of class activation)233
5.5 Résumé du chapitre
240
6 L'apprentissage profond pour les textes et les séquences
241
6.1 Traitement des données textuelles
243
6.1.1 Représentation des mots et caractères avec des vecteurs one-hot246
6.1.2 Utilisation des embeddings de mots249
6.1.3 Synthèse : des textes bruts aux embeddings de mots255
6.1.4 Pour conclure cette section264
6.2 Comprendre les réseaux de neurones récurrents
265
6.2.1 Une couche récurrente dans Keras268
6.2.2 Comprendre les couches LSTM et GRU273
6.2.3 Un cas concret d'utilisation d'une couche LSTM dans Keras277
6.2.4 Pour conclure cette section279
6.3 Utilisation avancée des réseaux de neurones récurrents
280
6.3.1 Un problème de prédiction météorologique de la température280
6.3.2 Préparation des données283
6.3.3 Une base de référence de bon sens sans apprentissage automatique (non-machine-learning)287
6.3.4 Une approche de base avec l'apprentissage automatique288
6.3.5 Une première base de référence récurrente290
6.3.6 Utilisation du dropout récurrent pour lutter contre le sur-ajustement292
6.3.7 Piles de couches récurrentes293
6.3.8 Utilisation de RNN bidirectionnels295
6.3.9 Autres stratégies pour améliorer les performances300
6.3.10 Pour conclure cette section300
6.4 Traitement des séquences avec des réseaux ConvNet
303
6.4.1 Comprendre la convolution ID pour les séquences (sequence data)303
6.4.2 Opération de pooling ID pour les séquences (sequence data)304
6.4.3 Implémentation d'un ConvNet ID305
6.4.4 Combiner des ConvNet et des RNN pour traiter de longues séquences307
6.4.5 Pour conclure cette section312
6.5 Résumé du chapitre
313
7 Les meilleures pratiques de l'apprentissage profond avancé
315
7.1 Au-delà du modèle séquentiel : l'API Fonctionnelle de Keras
316
7.1.1 Introduction à l'API Fonctionnelle320
7.1.2 Modèles à plusieurs entrées322
7.1.3 Modèles à plusieurs sorties324
7.1.4 Graphes orientés acycliques de couches328
7.1.5 Partage des poids d'une couche333
7.1.6 Utilisation des modèles comme des couches335
7.1.7 Pour conclure cette section336
7.2 Inspection et surveillance des modèles à l'aide des callbacks de Keras et de TensorBoard
337
7.2.1 Utilisation des ballbacks pour agir sur un modèle pendant son entraînement337
7.2.2 Introduction à TensorBoard : l'outil de visualisation de TensorFlow342
7.2.3 Pour conclure cette section350
7.3 Comment tirer le meilleur parti de vos modèles
351
7.3.1 Architectures avancées351
7.3.2 Optimisation des hyper-paramètres355
7.3.3 Ensemblage de modèles357
7.3.4 Pour conclure cette section360
7.4 Résumé du chapitre
362
8 L'apprentissage profond génératif
363
8.1 Génération de texte avec un LSTM
366
8.1.1 Un bref historique des réseaux récurrents génératifs366
8.1.2 Comment générer des données séquentielles367
8.1.3 L'importance de la stratégie d'échantillonnage368
8.1.4 Implémenter une génération de texte caractère par caractère avec un LSTM370
8.1.5 Pour conclure cette section376
8.2 L'algorithme DeepDream
377
8.2.1 Implémentation de DeepDream dans Keras378
8.2.2 Pour conclure cette section387
8.3 Transfert de style neuronal
388
8.3.1 La perte de contenu389
8.3.2 La perte de style390
8.3.3 Transfert de style neuronal dans Keras390
8.3.4 Pour conclure cette section399
8.4 Génération d'images avec des auto-encodeurs variationnels
400
8.4.1 Échantillonnage dans des espaces latents d'images400
8.4.2 Vecteurs de concept pour l'édition d'images402
8.4.3 Auto-encodeurs variationnels402
8.4.4 Pour conclure cette section410
8.5 Introduction aux réseaux génératifs antagonistes
412
8.5.1 Une implémentation schématique de GAN414
8.5.2 Quelques astuces utiles415
8.5.3 Le réseau génératif416
8.5.4 Le réseau discriminant417
8.5.5 Le réseau antagoniste418
8.5.6 Comment entraîner un DCGAN419
8.5.7 Pour conclure cette section422
8.6 Résumé du chapitre
424
9 Conclusions
425
9.1 Révision des concepts clés
427
9.1.1 Différentes approches de l'IA427
9.1.2 Ce qui fait la spécificité de l'apprentissage profond à l'intérieur du domaine de l'apprentissage automatique427
9.1.3 Comment penser l'apprentissage profond428
9.1.4 Technologies clés qui ont permis son développement430
9.1.5 Le déroulement universel des tâches en apprentissage automatique431
9.1.6 Architectures clés des réseaux432
9.1.7 Le champ des applications possibles437
9.2 Les limites de l'apprentissage profond
440
9.2.1 Le risque d'anthropomorphisation des modèles d'apprentissage automatique441
9.2.2 Généralisation locale vs généralisation extrême443
9.2.3 Pour conclure cette section445
9.3 L'avenir de l'apprentissage profond
447
9.3.1 Des modèles qui ressembleront à des programmes448
9.3.2 Au-delà de la rétropropagation et des couches différentiables450
9.3.3 Apprentissage automatique automatisé451
9.3.4 Apprentissage continu et réutilisation de sous-programmes modulaires452
9.3.5 La vision à long terme454
9.4 Rester à jour dans un domaine en évolution rapide
456
9.4.1 Pratiquer sur des problèmes concrets avec Kaggle456
9.4.2 S'informer des derniers développements sur arXiv456
9.4.3 Explorer l'écosystème Keras457
9.5 Derniers mots
458
A Installer Keras et ses dépendances sur Ubuntu
459
B Exécution de notebooks Jupyter sur une instance GPU sur EC2
465
Index
473