7 Leçons du cours de Deep Learning de Fast.AI

7 leçons du cours de Deep Learning de Fast.AI' - 7 lessons from Fast.AI's Deep Learning course.

Photo de Sincerely Media sur Unsplash

Je viens de terminer le cours pratique sur le Deep Learning de Fast.AI. J’ai suivi de nombreux cours sur l’apprentissage automatique auparavant, donc je peux comparer. Celui-ci est certainement l’un des plus pratiques et inspirants. Je voudrais donc partager avec vous mes principales conclusions.

À propos du cours

Le cours de Fast.AI est dirigé par Jeremy Howard, un chercheur fondateur de Fast.AI. Il était également classé n°1 sur le classement Kaggle. Vous pouvez donc certainement faire confiance à son expertise en matière d’apprentissage automatique et de deep learning.

Le cours couvre les bases du deep learning et des réseaux neuronaux et explique également les algorithmes d’arbres de décision. La version actuelle date de 2022, donc je suppose que le contenu a changé depuis les précédentes critiques sur TDS.

Ce cours est conçu pour les personnes ayant une certaine expérience en programmation. Dans la plupart des cas, des exemples de code sont utilisés plutôt que des formules. Je dois avouer que c’est plus facile pour moi de comprendre le code après l’avoir écrit pendant des années, même si j’ai un diplôme de master en mathématiques.

L’autre caractéristique intéressante de ce cours est son approche ascendante. Vous commencez avec un modèle ML fonctionnel. Par exemple, j’ai créé ma première application alimentée par le deep learning pendant la deuxième semaine du cours. Il s’agit d’un classificateur d’images qui peut détecter mes races de chiens préférées. Ensuite, au cours des semaines suivantes, vous approfondissez vos connaissances et comprenez comment tout cela fonctionne.

Passons maintenant à mes principales conclusions de ce cours.

Leçon n°1 : Les mathématiques que vous devez connaître pour comprendre le deep learning

Commençons simplement. Je promets que les conclusions suivantes seront moins triviales.

Je pense qu’il est important d’en parler car beaucoup de gens sont intimidés par le deep learning. Le DL est considéré comme une science compliquée, mais il repose sur quelques concepts mathématiques que vous pourriez apprendre en une journée.

Un réseau neuronal est une combinaison de fonctions linéaires et d’activations. Voici une fonction linéaire.

Étant donné qu’une combinaison de fonctions linéaires est également linéaire, nous avons besoin d’activations qui ajoutent de la non-linéarité.

La fonction d’activation la plus courante est ReLU (Rectified Linear Unit). Cela peut sembler effrayant, mais en réalité, c’est juste une fonction comme celle-ci.

Vous pouvez le considérer comme la barrière que les signaux doivent surmonter. Si un signal est inférieur au seuil (0 dans notre cas), son information ne passera pas à la prochaine couche du réseau neuronal.

Graphique de l'auteur

Quelques autres concepts mathématiques utilisés :

  • SGD (Stochastic Gradient Descent) – une approche d’optimisation basée sur le calcul du gradient. Vous pouvez lire un article pour avoir une compréhension globale de son fonctionnement.
  • Multiplication de matrices – permet d’effectuer des calculs plus rapidement par lots. Il existe également un excellent article à ce sujet.

Si vous souhaitez l’apprendre en détail, consultez le cours sur les fondements des réseaux neuronaux de Fast.AI.

Leçon n°2 : Comment nettoyer vos données

Nous avons l’habitude de commencer l’analyse en nettoyant les données. Nous avons tous entendu le mantra “garbage in – garbage out” de nombreuses fois. Étonnamment, ajuster d’abord un modèle puis l’utiliser pour nettoyer vos données peut être plus efficace.

Vous pouvez entraîner un modèle simple, puis examiner les cas présentant la perte la plus élevée pour trouver d’éventuels problèmes. Dans mon précédent article, cette approche m’a permis de repérer des images mal étiquetées.

Photo de Benjamin Vang sur Unsplash | Photo de Xennie Moore sur Unsplash | Photo de Alvan Nee sur Unsplash

Construisez votre première application Deep Learning en moins d’une heure

Déploiement du modèle de classification d’images en utilisant HuggingFace Spaces et Gradio

towardsdatascience.com

Leçon #3 : Comment choisir un modèle de vision par ordinateur

Il existe tellement de modèles pré-entraînés de nos jours. Par exemple, PyTorch Image Models (timm) compte 1 242 modèles.

import timmpretrained_models = timm.list_models(pretrained=True)print(len(pretrained_models))print(pretrained_models[:5])1242['bat_resnext26ts.ch_in1k', 'beit_base_patch16_224.in22k_ft_in22k', 'beit_base_patch16_224.in22k_ft_in22k_in1k', 'beit_base_patch16_384.in22k_ft_in22k_in1k', 'beit_large_patch16_224.in22k_ft_in22k']

En tant que débutant, vous vous sentez souvent bloqué avec de nombreuses options. Heureusement, il existe un outil pratique pour choisir une architecture d’apprentissage en profondeur.

Ce graphique montre la relation entre le temps d’inférence (combien de temps il faut pour traiter une image) et l’exactitude sur Imagenet.

Image provenant du carnet Kaggle, source

Comme vous pouvez vous y attendre, il y a un compromis entre la vitesse et l’exactitude, vous devez donc décider ce qui est le plus important. Cela dépend fortement de votre tâche. Avez-vous besoin que votre modèle soit plus rapide ou plus précis ?

Il vaut mieux commencer avec un modèle simple et itérer. La règle de base est de créer le premier modèle le premier jour. Ainsi, vous pouvez utiliser des modèles simples comme Resnet18 ou Resnet34 pour essayer différentes techniques d’augmentation ou des ensembles de données externes. Étant donné que vous travaillez avec un modèle simple, les itérations seront rapides. Vous pouvez passer à des architectures de modèles plus lents lorsque vous trouverez la meilleure version.

Conseil de Jeremy Howard : “Essayer les architectures complexes est la dernière chose que je fais”.

Leçon #4 : Comment entraîner de grands modèles sur Kaggle

De nombreux débutants utilisent des carnets Kaggle pour l’apprentissage automatique. Les GPU de Kaggle ont une mémoire limitée, vous risquez donc de manquer de mémoire, surtout lorsque vous utilisez de grands modèles.

Il existe une astuce utile qui peut résoudre ce problème. Cela s’appelle l’accumulation de gradients. Avec l’accumulation de gradients, nous n’actualisons pas les poids après chaque lot, mais nous additionnons les gradients pour K lots. Ensuite, nous mettons à jour le poids du modèle avec ce gradient accumulé pour un lot total égal à K * taille_du_lot, donc pour chaque itération, nous avons une taille de lot K fois plus petite.

L’accumulation de gradients est absolument mathématiquement identique sauf si la normalisation par lots est utilisée dans l’architecture du modèle. Par exemple, convnext n’utilise pas de normalisation par lots, il n’y a donc aucune différence.

Avec une telle approche, nous utilisons significativement moins de mémoire. Cela signifie qu’il n’est pas nécessaire d’acheter des GPU géants – vous pouvez adapter votre modèle même sur votre ordinateur portable.

Vous pouvez trouver l’exemple complet sur Kaggle.

Leçon #5 : Quels algorithmes d’apprentissage automatique utiliser

De nos jours, il existe de nombreuses techniques d’apprentissage automatique différentes. Par exemple, la documentation scikit-learn propose au moins une douzaine d’approches d’apprentissage supervisé.

Jeremy Howard suggère de se concentrer sur seulement quelques techniques essentielles :

  • Si vous avez des données structurées, vous devriez commencer avec des ensembles d’arbres de décision (Random Forest ou algorithmes de Gradient Boosting).
  • La meilleure solution pour les données non structurées (comme les textes naturels, l’audio, la vidéo ou les images) est un réseau neuronal à couches multiples.

Les réseaux neuronaux sont également applicables aux données structurées, mais les arbres de décision sont souvent plus faciles à utiliser :

  • Vous pouvez entraîner un ensemble d’arbres de décision beaucoup plus rapidement.
  • Ils ont moins de paramètres à régler.
  • Vous n’avez pas besoin d’une carte graphique spéciale pour les entraîner.
  • En plus de cela, les arbres de décision sont souvent plus faciles à interpréter et à comprendre pourquoi vous obtenez un tel résultat pour chaque objet, par exemple, quelles sont les caractéristiques les plus importantes et celles que nous pouvons ignorer en toute sécurité.

Si nous comparons les ensembles d’arbres de décision, Random Forest est plus facile à utiliser (car il est presque impossible de surajuster). Cependant, le Gradient Boosting donne généralement des résultats légèrement meilleurs.

Leçon n°6 : Fonctions pratiques de Python

Même si j’utilise Python et Pandas depuis presque dix ans, j’ai également découvert quelques astuces de vie utiles avec Pandas.

Le célèbre jeu de données Titanic a été utilisé pour montrer la puissance de Pandas. Regardons-le.

Le premier exemple nous montre comment convertir une colonne en chaîne de caractères, obtenir la première lettre et la convertir à l’aide d’un dictionnaire. Notez que si une valeur n’est pas mentionnée dans le dictionnaire, NaN sera renvoyé.

# mon approche habituelledecks_dict = {'A': 'ABC', 'B': 'ABC', 'C': 'ABC',             'D': 'DE', 'E': 'DE', 'F': 'FG', 'G': 'FG'}df['Deck'] = df.Cabin.map(    lambda x: decks_dict.get(str(x)[0]))# version du coursedf['Deck'] = df.Cabin.str[0].map(dict(A="ABC", B="ABC", C="ABC",     D="DE", E="DE", F="FG", G="FG"))

L’exemple suivant montre comment calculer la fréquence à l’aide de la fonction transform. Cette version est plus concise par rapport à la fusion que j’utilise habituellement.

# mon approche habituelledf = df.merge(    df.groupby('Ticket', as_index = False).PassengerId.count()\        .rename(columns = {'PassengerId': 'TicketFreq'}))# version du coursedf['TicketFreq'] = df.groupby('Ticket')['Ticket'].transform('count')

Le dernier exemple est le plus complexe sur la façon d’analyser les titres.

# mon approche habituelledf['Title'] = df.Name.map(lambda x: x.split(', ')[1].split('.')[0])df['Title'] = df.Title.map(    lambda x: x if x in ('Mr', 'Miss', 'Mrs', 'Master') else None)# version du cours df['Title'] = df.Name.str.split(', ', expand=True)[1]\    .str.split('.', expand=True)[0]df['Title'] = df.Title.map(dict(Mr="Mr",Miss="Miss",Mrs="Mrs",Master="Master"))

Il vaut la peine de regarder la première partie df pour comprendre comment cela fonctionne. Vous pouvez exécuter le code :df.Name.str.split(‘, ‘, expand=True) et voir un dataframe où les noms sont séparés par des virgules sur deux colonnes.

Ensuite, nous sélectionnons column 1 et effectuons une division similaire en fonction du point. La deuxième ligne remplace tous les cas qui ne sont pas égaux à Mr, Mrs, Miss ou Master par des NaN.

Franchement, je continuerais à utiliser mon approche habituelle pour le dernier cas car à mon avis, c’est plus facile à comprendre.

Leçon n°7 : Astuces en apprentissage automatique

Il existe de nombreuses astuces et techniques ou outils utiles mentionnés dans ce cours. Voici ceux que j’ai trouvés utiles.

Modèle multi-cible

Étonnamment, ajouter une autre cible au réseau neuronal peut vous aider à améliorer la qualité de votre modèle.

Jeremy a montré un exemple de modèle multi-cible pour la compétition de classification des maladies du riz. L’objectif de cette compétition est de prédire les maladies du riz par photo. Nous pouvons prédire non seulement la maladie mais aussi la variété de riz, ce qui peut aider le modèle à apprendre des caractéristiques précieuses. Les caractéristiques utiles pour prédire la variété de riz peuvent également être utiles pour la détection des maladies.

Recherche d’un taux d’apprentissage optimal

Le taux d’apprentissage définit la taille du pas pour chaque itération de la SGD (Stochastic Gradient Descent, descente de gradient stochastique). Si votre taux d’apprentissage est trop petit, votre modèle s’ajustera très lentement. S’il est trop élevé, votre modèle peut ne jamais converger vers l’optimum. C’est pourquoi il est si important de choisir le bon taux d’apprentissage.

Fast.AI fournit un outil pour vous aider à le faire en une seule ligne de code learn.lr_find(suggest_funcs=(valley, slide)).

Image by author

Augmentation au moment du test

Les augmentations sont des modifications apportées aux images (par exemple, améliorations du contraste, rotations ou recadrages). Les augmentations sont souvent utilisées pendant l’entraînement pour obtenir des images légèrement différentes à chaque époque. Mais nous pouvons également utiliser des augmentations lors de l’inférence. Cette technique s’appelle l’augmentation au moment du test.

Exemple d'augmentations | Photo initiale de Charles Postiaux sur Unsplash

Cela fonctionne de manière assez simple. Nous générons plusieurs versions de chaque image en utilisant des augmentations et obtenons des prédictions pour chacune d’entre elles. Ensuite, nous calculons le résultat agrégé en utilisant le maximum ou la moyenne. L’idée est similaire à celle du Bagging.

Enrichissement des dates

Vous pouvez obtenir plus d’informations à partir de votre jeu de données si vous avez des dates dans votre ensemble de données. Par exemple, au lieu de simplement 2023–09–01, vous pouvez examiner des caractéristiques distinctes : mois, jour de la semaine, année, etc.

Fast.AI dispose d’une fonction add_datepart pour cela, vous n’avez donc pas besoin de l’implémenter vous-même.

Question sans réponse : Pourquoi le sigmoïde ?

Pendant le cours, je n’ai eu qu’une seule question théorique qui n’a pas été suffisamment abordée. Comme dans de nombreux autres cours de ML, il n’y a pas d’explication sur pourquoi nous utilisons la fonction sigmoïde et pas une autre pour convertir la sortie du modèle linéaire en probabilité. Heureusement, il y a une lecture approfondie où vous pouvez trouver toutes les réponses.

Pour résumer, le cours Fast.AI regorge de pépites cachées qui peuvent vous donner matière à réflexion, même si vous avez de l’expérience en science des données. Donc, je pourrais certainement vous conseiller de l’écouter.

Merci beaucoup d’avoir lu cet article. J’espère qu’il vous a été instructif. Si vous avez des questions ou des commentaires supplémentaires, veuillez les laisser dans la section des commentaires.

We will continue to update IPGirl; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more