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 Google
PyTorch Bibliothèque de Deep Learning open-source Divers ResNet, AlexNet Meta
Keras Interface haut niveau pour TensorFlow et Theano Divers VGG16, VGG19, InceptionV3 Google
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é.