6 points par GN⁺ 2023-11-20 | 2 commentaires | Partager sur WhatsApp
  • 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
  • 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

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_DIR ou ./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 si flatten vaut vrai
  • Les valeurs de retour sont quatre tenseurs : train_data, train_target, test_data, test_target
  • Si cifar=True, CIFAR10 est utilisé ; si False, MNIST est utilisé ; si None, cela suit l’argument --cifar
  • Si one_hot_labels=True, les cibles sont converties en torch.Tensor 2D 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 2D N × D ; sinon, elles restent un tenseur 4D N × 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 de torch.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

 
bigtallee 2023-11-20

C’est dommage qu’il n’y ait pas de sous-titres pour le cours..

 
GN⁺ 2023-11-20
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

    • Ce cours de Stanford a l’air d’être un parcours assez avancé et exigeant
  • 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/

    • J’ai été surpris que Jeremy Howard ne figure pas dans la liste des 100 personnalités majeures de l’IA. Ce cours est vraiment excellent
  • Y a-t-il de bons cours approfondis qui ne nécessitent pas de regarder des vidéos ?

  • 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

    • Ça peut aussi convenir à quelqu’un qui manque de bases en maths avancées ?
  • 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

    • Si vous vous souvenez de ce qu’est une dérivée et que vous avez un niveau correct en maths et en probabilités, c’est tout à fait faisable. À mon avis, la plupart des notions s’apprennent même plus facilement que React
      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