Définition Transfer Learning
Pour les équipes de Data Science confrontées à des défis tels que des données insuffisantes ou en surabondance avec des contraintes de temps et de ressources, il est primordial d’accélérer le développement de modèles de Machine Learning. Principalement associé au Deep Learning et aux réseaux de neurones, le Transfer Learning se révèle être une approche accélératrice du processus de développement.
Qu’est-ce que le Transfer Learning ?
Le Transfer Learning, ou apprentissage par transfert, est donc une méthode de Machine Learning. Elle consiste à réutiliser un modèle préalablement développé pour une tâche spécifique en tant que point de départ pour en créer un nouveau destiné à accomplir un scénario différent. Les connaissances acquises par le premier modèle sont ainsi transférées au second.
Le concept se rapproche du fonctionnement du cerveau humain. Une personne possédant des compétences dans un domaine, comme le skateboard, va plus aisément acquérir des compétences dans un domaine similaire, comme le snowboard, comparé à une personne sans expérience préalable.
Comment cela fonctionne ?
Au lieu de construire un modèle de zéro, les connaissances déjà acquises sont utilisées par un modèle pré entraîné sur des tâches sources afin de résoudre une nouvelle problématique cible. C’est une approche particulièrement utile quand les données disponibles pour cette tâche cible sont limitées, car elle permet de tirer parti des informations apprises lors de l’apprentissage d’autres instances plus riches en données.
Obtention d’un modèle pré entraîné
Ces modèles peuvent être accessibles dans la bibliothèque de modèles de votre organisation ou dans des référentiels comme PyTorch Hub ou TensorFlow Keras. L’objectif est de capitaliser sur les connaissances de modèles entraînés sur de grands ensembles de données. Une fois le modèle pré entraîné sélectionné, vous avez votre point de départ pour démarrer l’apprentissage par transfert.
Layer Freeze ou gel des couches
L’étape est cruciale pour éviter la réinitialisation des poids du modèle qui entraînerait la perte de toutes les connaissances accumulées par celui-ci. Vous devez sélectionner les couches de convolution du modèle que vous souhaitez geler, généralement celles ayant appris des caractéristiques génériques et transférables.
Formation de nouvelles couches de neurones
Il est nécessaire d’ajouter des couches de convolution au modèle afin de traduire ses caractéristiques en prédictions. Elles sont spécifiques à la tâche cible que vous souhaitez accomplir. Le modèle est mis à jour par petit groupe d’exemples appelé mini-batch. L’approche est plus efficace que l’entraînement sur un batch complet ou sur un seul exemple.
Amélioration du modèle de Transfer Learning
La réussite d’un entraînement par Transfer Learning dépend de la stratégie d’ajustement des Features, ou caractéristiques. Des approches courantes sont le Fine-tuning complet, qui ajuste l’ensemble du modèle ou par couche, qui les adapte individuellement. Le premier s’adapte à un dataset dense, et le second à des datas limitées. Il est aussi possible d’opter pour la méthode d’extraction de Features. Les couches pré entraînées restent inchangées tandis que les Features extraites forment un nouveau modèle.
L’ajustement des hyperparamètres joue aussi un rôle clé dans l’optimisation des performances du modèle. Vous pouvez adapter le Learning Rate pour déterminer la vitesse de mise à jour des poids. En ajustant le Batch size, ou taille du lot, vous équilibrez la convergence rapide et l’efficacité de la mémoire.
Enfin, appliquez des méthodes de régularisation pour prévenir le surajustement et améliorer les performances. L’évaluation peut se faire à l’aide de métriques comme l’accuracy, la précision, le rappel, le F1-Score, la courbe ROC, la matrice de confusion, et le calcul de perte ou Loss.
Exemple avec TensorFlow Keras
Pour mettre en œuvre un transfert d’apprentissage avec Python sur de la classification d’images, importez les bibliothèques nécessaires et chargez le modèle. Ici, il s’agit de VGG16, avec des couches de convolution (conv) et pré entraînées sur ImageNet. Il est possible d’appliquer la méthode avec ResNet ou MobileNetV2.
import tensorflow as tf
from tensorflow.keras.applications import VGG16
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.preprocessing.image import ImageDataGenerator
base_model = VGG16(weights=’imagenet’, include_top=False, input_shape=(224, 224, 3))
Gelez les couches de convolution pré entraînées puis ajoutez-en pour la classification.
for layer in base_model.layers:
layer.trainable = False
x = Flatten()(base_model.output)
x = Dense(256, activation=’relu’)(x)
output = Dense(num_classes, activation=’softmax’)(x)
Créez un nouveau modèle en spécifiant les entrées du modèle VGG16 et les sorties des nouvelles couches. Puis compilez-le et préparez les générateurs de données pour l’entraînement et la validation. Le modèle s’entraîne par mini-batch.
model = Model(inputs=base_model.input, outputs=output)
model.compile(optimizer=Adam(lr=0.001), loss=’categorical_crossentropy’, metrics=[‘accuracy’])
train_datagen = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(‘chemin/vers/votre/ensemble/d\’entrainement’, target_size=(224, 224), batch_size=32, class_mode=’categorical’)
test_generator = test_datagen.flow_from_directory(‘chemin/vers/votre/ensemble/de/test’, target_size=(224, 224), batch_size=32, class_mode=’categorical’)
Après l’entraînement, vous pouvez évaluer le modèle sur l’ensemble de tests.
eval_result = model.evaluate(test_generator)
print(« Loss: », eval_result[0])
print(« Accuracy: », eval_result[1])
Sur PyTorch, la classification d’images peut se faire avec des modèles ResNet, InceptionNet ou VGG.
Pourquoi utiliser le Transfer Learning ?
Les techniques d’apprentissage par transfert peuvent intervenir dans différents cas de figure.
Pour un ensemble de données limité
Lorsque votre instance cible dispose d’un ensemble d’input restreint, le Transfer Learning s’avère particulièrement efficace pour éviter de partir de zéro. Les modèles pré entraînés offrent des connaissances issues d’une source plus dense. Votre modèle peut ainsi généraliser efficacement avec moins de données.
Lorsque les tâches source et cible sont liées
L’apprentissage par transfert est encore plus efficace si les domaines source et cible sont liés. Par exemple, si des modèles pré entraînés sont disponibles pour la reconnaissance d’objets, vous pouvez transférer leurs connaissances et paramètres à un problème cible comme de la classification d’images à grain fin.
En cas de ressources informatiques limitées
Face à des contraintes de ressources informatiques, l’apprentissage par transfert fait gagner du temps et réduit les coûts matériels, car il économise l’entraînement intensif sur des ensembles de données de grande taille.
Pour des tâches multimodales
Pour les instances impliquant plusieurs modalités comme du texte et des images, l’apprentissage par transfert permet d’exploiter des modèles pré entraînés pour chaque modalité. Ils peuvent ensuite fusionner leurs résultats pour résoudre des problèmes complexes.
Quels sont les différents types de Transfer Learning ?
Le Transfer Learning peut s’envisager à travers plusieurs approches distinctes.
Inductive transfer learning ou apprentissage par transfert inductif
Cette méthode implique l’utilisation de données d’apprentissage étiquetées issues du même domaine. Elle permet de capitaliser sur les connaissances acquises lors de la résolution d’un problème pour en résoudre un autre.
Unsupervised transfer learning ou apprentissage par transfert non supervisé
Ici, les données d’apprentissage ne sont pas étiquetées, bien qu’elles appartiennent au même domaine. Le problème à résoudre diffère de celui pour lequel le modèle a été initialement formé.
Transductive transfer learning ou apprentissage par transfert transductif
Il se caractérise par des problématiques identiques, mais des domaines différents. On le retrouve dans le traitement automatique du langage naturel (NLP), où un réseau de neurones spécialisé dans une thématique est utilisé pour une instance similaire.
Zero-shot transfer learning ou transfert d’apprentissage sans ajustement direct
Avec le Zero-shot learning, un réseau de neurones préalablement entraîné est utilisé directement pour en accomplir une nouvelle avec précision sans ajuster les échantillons cibles. Cette méthode repose sur la capacité du modèle à généraliser ses connaissances sans réajustement.
Quels outils et bibliothèques utiliser pour mettre en œuvre le Transfer Learning ?
Plusieurs bibliothèques et outils sont largement utilisés dans le domaine.
Bibliothèque/Tool |
Description | Type de Modèles | Exemple de Modèle |
Éditeur |
TensorFlow | Bibliothèque de Machine Learning open source | Divers | Inception, MobileNet | |
PyTorch | Bibliothèque de Deep Learning open-source | Divers | ResNet, AlexNet | Meta |
Keras | Interface haut niveau pour TensorFlow et Theano | Divers | VGG16, VGG19, InceptionV3 | |
Scikit-learn | Bibliothèque de Machine Learning en Python | Classificateur, Régression | SVM, Régression linéaire | Open Source |
Fastai | Bibliothèque de Deep Learning basée sur PyTorch | Divers | ULMFiT, Tabular models | Open Source |
TFLearn | Bibliothèque légère basée sur TensorFlow | Divers | DNN, CNN, LSTM | Open Source |
Hugging Face Transformers | Fournit des modèles préentraînés pour le NLP | NLP, Modèles de langage | BERT, GPT-3, T5 | Hugging Face |
OpenCV | Bibliothèque de traitement d’images et vision par ordinateur | Vision par ordinateur | Haarcascades, YOLO | Open Source |
Comment appliquer le Transfer Learning dans des projets réels ?
L’apprentissage par transfert trouve des applications dans divers secteurs.
- Véhicules autonomes : Adaptation de modèles pré entraînés pour une meilleure perception dans des environnements spécifiques.
- Santé : Accélération des diagnostics en fonction de modèles pré entraînés. Par exemple, dans la détection de la COVID-19 à partir d’images de radiographie thoracique, la méthode a montré une précision de 96 %.
- Gaming : Réutilisation de modèles pré entraînés pour générer des personnages, des paysages ou des animations. Le bot Dota 2 d’OpenAI a démontré que l’association des apprentissages par transfert et par renforcement permet de maîtriser des scénarios complexes.
- E-Commerce : Personnalisation des recommandations basées sur le comportement avec des modèles pré entraînés. Amazon l’utilise pour affiner ses recommandations.
- Traductions multilingues : Transfert des caractéristiques linguistiques pour des traductions dans différentes langues. Google Translate utilise cette technique en partageant un codeur pour plusieurs langues.
Quels sont les défis courants en Transfer Learning et comment les surmonter ?
Malgré ses performances dans de nombreux domaines, le Transfer Learning est confronté à deux défis majeurs.
Le transfert négatif
Il se manifeste par une baisse des performances du nouveau modèle, lorsqu’un input est significativement différent de l’autre. La clé réside dans la ressemblance entre les datasets. Les algorithmes peuvent diverger des attentes des développeurs, ce qui complique la résolution de ce problème. L’absence de normes spécifiques sur la similarité rend la démarche plus difficile.
Le surajustement
L’overfitting se produit lorsque le nouveau modèle assimile les bruits des datasets d’apprentissage, nuisant à ses performances. Travailler par mini batch, ajuster judicieusement ses paramètres et hyperparamètres ou encore réduire la taille du réseau de neurones peut contribuer à minimiser le surajustement.
En surmontant lesdéfis du Transfer Learning, les développeurs pourraient résoudre des obstacles majeurs dans le domaine de l’Intelligence Artificielle : le besoin en data et le temps d’entraînement. Les projets de Machine et Deep Learning pourraient s’accélérer et déboucher sur de nouvelles percées d’IA et de la cybersécurité.