Cours de deep learning
(fleuret.org)- Il s’agit de supports de cours publics sur le deep learning préparés pour le cours 14x050 de l’Université de Genève, où l’on peut retrouver en un seul endroit les slides, handouts et vidéos enregistrées de François Fleuret
- En s’appuyant sur des exemples PyTorch, le cours couvre un large périmètre adapté aux débutants, des opérations sur tenseurs et de la différentiation automatique à la descente de gradient, puis jusqu’aux modèles génératifs, récurrents et à attention
- L’archive PDF complète représente 1107 slides, et les sous-titres des screencasts sont fournis sous forme d’un fichier ZIP généré automatiquement avec OpenAI Whisper
- Les Practical 1 à 6, le code des solutions et un prologue Python commun sont fournis, ce qui permet de réutiliser directement en pratique les options de chargement et de prétraitement de MNIST/CIFAR10
- Des bases en algèbre linéaire, calcul différentiel, Python, probabilités et statistiques, optimisation, algorithmes et traitement du signal sont requises, et les ressources sont distribuées sous licence CC BY-NC-SA 4.0
Vue d’ensemble du cours
- Deep Learning Course est une page qui regroupe les slides et les enregistrements du cours de deep learning 14x050 de l’Université de Genève par François Fleuret
- Il s’agit d’un cours d’initiation au deep learning comprenant des exemples avec le framework PyTorch
- Le contenu du cours s’articule autour des axes suivants
- objectifs du machine learning et tâches principales
- opérations sur tenseurs
- différentiation automatique et descente de gradient
- techniques spécifiques au deep learning
- modèles génératifs, modèles récurrents et modèles à attention
- Une ressource distincte est également proposée : "The Little Book of Deep Learning"
- un court livre d’introduction au deep learning, au format smartphone, destiné aux lecteurs ayant une formation STEM
- Ce cours a été développé pour la première fois à l’Idiap Research Institute en 2018, puis enseigné jusqu’en 2022 à l’École Polytechnique Fédérale de Lausanne sous le code EE-559
Formats des ressources et téléchargement
- Les slides PDF du cours utilisent un format horizontal et des overlays adaptés à la présentation
- Les handouts PDF sont compilés en format vertical, sans effets d’overlay, avec des notes supplémentaires
- Les screencasts peuvent être visionnés en streaming dans le navigateur ou téléchargés en fichiers mp4
- L’archive PDF complète est disponible dans les fichiers suivants
- dlc-handout-all.zip: 101.7Mb
- dlc-slides-all.zip: 101.7Mb
- Les sous-titres des screencasts ont été générés automatiquement avec Whisper d’OpenAI, et le fichier dlc-video-subtitles.zip pèse 502.1Kb
Parcours des 13 unités
- L’ensemble du cours est composé de 13 grandes unités, avec pour chacune le nombre de slides et la durée vidéo
- La première partie se concentre sur les concepts fondamentaux du deep learning et du machine learning
- Introduction: des réseaux de neurones au deep learning, applications actuelles et cas de réussite, bases des tenseurs et régression linéaire, tenseurs de grande dimension, structure interne des tenseurs
- Machine learning fundamentals: perte et risque, surapprentissage et sous-apprentissage, dilemme biais-variance, protocoles d’évaluation, clustering et embedding
- Multi-layer perceptron and back-propagation: perceptron, perspective probabiliste des classifieurs linéaires, séparabilité linéaire, MLP, descente de gradient, rétropropagation
- La partie centrale passe à l’utilisation de PyTorch ainsi qu’aux couches et techniques d’apprentissage du deep learning
- Graphs of operators, autograd, and convolutional layers: réseaux DAG, Autograd, modules PyTorch et traitement par batch, convolution, pooling, écriture de modules PyTorch
- Initialization and optimization: perte d’entropie croisée, descente de gradient stochastique, optimizer PyTorch, pénalités L2/L1, initialisation des paramètres, choix d’architecture et protocole d’apprentissage, écriture de fonctions Autograd
- Going deeper: avantages de la profondeur, Rectifier, Dropout, Batch Normalization, Residual Network, utilisation du GPU
- La dernière partie s’étend aux modèles génératifs, à la vision par ordinateur, à l’analyse interne des modèles et aux modèles de séquence
- Autoencoders: convolution transposée, Deep Autoencoder, Denoising Autoencoder, Variational Autoencoder
- Le screencast sur le VAE n’est pas à jour, il faut donc consulter les slides
- Computer vision: tâches de vision par ordinateur, réseaux de classification d’images, réseaux de détection d’objets, réseaux de segmentation sémantique, DataLoader et neuro-surgery
- Under the hood: visualisation des paramètres, visualisation des activations, visualisation du traitement depuis l’entrée, optimisation de l’entrée
- Autoregression and Normalizing Flows: autorégression, Causal convolution, Non-volume preserving network
- Generative Adversarial Networks: GAN, Wasserstein GAN, Conditional GAN et transformation d’image, persistance des modèles et checkpoints
- Recurrent models and NLP: RNN, LSTM et GRU, word embeddings et traduction
- Attention models: attention pour la mémoire et la traduction de séquences, mécanisme d’attention, Transformer Network
- Le screencast sur l’unité attention n’est pas à jour, il faut donc consulter les slides
- Autoencoders: convolution transposée, Deep Autoencoder, Denoising Autoencoder, Variational Autoencoder
Ressources pratiques et prologue Python
- Les exercices pratiques sont fournis sous forme de Practical 1 à 6, avec pour chacun un PDF et le code de solution associé
- Le prologue Python pour les exercices est fourni sous la forme de dlc_practical_prologue.py
- Le prologue gère les arguments en ligne de commande
--full: utiliser l’ensemble complet du jeu de données--tiny: utiliser un très petit jeu de données pour une vérification rapide--seed SEED: définir la graine aléatoire ; si elle est inférieure à 0, aucun seeding n’est effectué--cifar: utiliser le jeu de données CIFAR au lieu de MNIST--data_dir DATA_DIR: définir l’emplacement des données PyTorch, avec comme valeur par défaut$PYTORCH_DATA_DIRou./data
- La fonction
load_data(cifar=None, one_hot_labels=False, normalize=False, flatten=True)télécharge les données si nécessaire et transforme les images en vecteurs 1D siflattenvaut vrai - Les valeurs de retour sont quatre tenseurs :
train_data,train_target,test_data,test_target - Si
cifar=True, CIFAR10 est utilisé ; siFalse, MNIST est utilisé ; siNone, cela suit l’argument--cifar - Si
one_hot_labels=True, les cibles sont converties entorch.Tensor2D avec autant de colonnes que de classes ; seule la bonne position vaut 1 et toutes les autres valent -1 - Si
normalize=True, les tenseurs de données sont normalisés à partir de la moyenne et de la variance des données d’entraînement - Si
flatten=True, les données deviennent un tenseur 2DN × D; sinon, elles restent un tenseur 4DN × C × H × W - Dans l’exemple par défaut, MNIST est utilisé et, sans
--full, l’ensemble est réduit à 1000 échantillons d’entraînement et 1000 de test, avec une taille d’entrée detorch.Size([1000, 784])
Prérequis et documentation de référence
- Les prérequis couvrent les domaines suivants
- algèbre linéaire : vecteurs, matrices, espace euclidien
- calcul différentiel : Jacobian, Hessian, Chain rule
- programmation Python
- bases de probabilités et statistiques : distributions discrètes et continues, loi des grands nombres, probabilité conditionnelle, Bayes, PCA
- bases de l’optimisation : notion de minimum, descente de gradient
- bases d’algorithmique : coût de calcul
- bases du traitement du signal : Fourier transform, wavelet
- La documentation Python, Jupyter notebook et PyTorch est indiquée comme référence
Licence d’utilisation
- Les ressources propres à la page sont distribuées sous la licence Creative Commons BY-NC-SA 4.0 International License
- L’utilisation à des fins d’enseignement académique formel est autorisée, mais il est explicitement précisé qu’elles ne doivent pas être utilisées dans des livres, sur des chaînes YouTube très chargées en publicité ou dans d’autres modèles de monétisation
2 commentaires
C’est dommage qu’il n’y ait pas de sous-titres pour le cours..
Avis sur Hacker News
La chaîne YouTube de Stanford vaut aussi le détour. Ils y ont mis en ligne une série complète de cours de machine learning en 19 vidéos
https://m.youtube.com/playlist?list=PLoROMvodv4rNyWOpJg_Yh4NSqI4Z4vOYy
En allant sur la chaîne, on trouve pas mal de cours d’informatique en plus, et la qualité est plutôt bonne
Beaucoup de bonnes ressources ont été partagées, mais il manque selon moi Understanding Deep Learning dans la liste
Je trouve que Simon J.D. Prince a fait un travail remarquable avec ce livre. Au-delà du contenu principal, les notes de chaque chapitre mènent directement à des références avancées, et il fournit aussi d’excellents notebooks avec des exercices qui testent vraiment la compréhension ainsi que des implémentations concrètes des concepts en code
Ce serait aussi une très bonne ressource d’exercices gratuits à donner à des étudiants si l’on enseignait un cours de deep learning, même si ce n’est probablement pas le public principal de cette communauté
[0] https://udlbook.github.io/udlbook/
Si ce cours vous intéresse, le Little Book of Deep Learning du même auteur vaut aussi vraiment le coup d’œil
https://fleuret.org/francois/lbdl.html
Autre bonne ressource : le cours de Deep Learning de NYU par Yann LeCun et Alfredo Canziani, disponible en intégralité sur YouTube
https://atcold.github.io/NYU-DLSP20/
https://www.youtube.com/playlist?list=PLLHTzKZzVU9eaEyErdV26ikyolxOsz6mq
Practical Deep Learning for Coders mérite aussi le détour
https://course.fast.ai/
Y a-t-il de bons cours approfondis qui ne nécessitent pas de regarder des vidéos ?
Je suis en train de préparer un cours avec un peu moins de théorie et un peu plus d’applications : https://github.com/VikParuchuri/zero_to_gpt
Les vidéos sont toutes optionnelles et couvrent le même contenu que le texte
Je recommande aussi cette série de cours d’Andrej Karpathy. Le premier cours est assez accessible, même dans une perspective débutant
https://karpathy.ai/zero-to-hero.html
Ce cours de Sebastian Raschka est lui aussi globalement facile d’accès. Si vous connaissez un peu Python ou un langage similaire, vous pouvez suivre
https://youtube.com/playlist?list=PLTKMiZHVd_2KJtIXOW0zFhFfBaJJilH51&si=ocsN2zSPN7YsrGiY
En tant que développeur full-stack un peu rouillé après quelques années, j’aimerais bien me lancer dans ce domaine, mais je n’ai absolument aucune idée de ce qu’on peut atteindre en 6 mois d’étude
La pente d’entrée est moins raide, mais le temps total peut être plus long, donc c’est davantage un marathon qu’un sprint