23.5. Transfert d'apprentissage et de mise au point : extraction de fonctionnalités
L'apprentissage par transfert est une technique puissante dans le domaine de l'intelligence artificielle, notamment en Machine Learning et Deep Learning, qui permet d'appliquer les connaissances acquises dans un problème à un autre, similaire mais non identique. Cette technique est particulièrement utile lorsque nous disposons d’un ensemble de données limité pour entraîner un modèle complexe à partir de zéro. Au lieu de cela, nous pouvons exploiter un modèle pré-entraîné, qui a été formé sur un vaste ensemble de données, et l'adapter à nos besoins spécifiques. C'est ce qu'on appelle l'apprentissage par transfert.
L'une des approches d'apprentissage par transfert consiste à utiliser un modèle pré-entraîné comme extracteur de fonctionnalités (extracteur de fonctionnalités). Dans ce contexte, les couches initiales du modèle pré-entraîné sont utilisées pour extraire les caractéristiques pertinentes des données d'entrée. Ces caractéristiques sont ensuite transmises à de nouvelles couches qui sont formées à partir de zéro pour effectuer la tâche spécifique qui vous intéresse.
Pourquoi utiliser Transfer Learning comme extracteur de fonctionnalités ?
Les réseaux de neurones profonds, tels que les réseaux convolutifs (CNN), ont la capacité de capturer les caractéristiques hiérarchiques des données. Les premières couches capturent généralement des caractéristiques génériques (telles que les bords et les textures), tandis que les couches plus profondes capturent des caractéristiques plus spécifiques de l'ensemble de données sur lequel elles ont été formées. En gelant ces couches initiales et en utilisant uniquement leur sortie, nous pouvons profiter de ces fonctionnalités génériques sans avoir besoin de réentraîner l'ensemble du réseau.
Comment implémenter l'extracteur de fonctionnalités ?
Pour implémenter un extracteur de fonctionnalités à l'aide d'un modèle pré-entraîné en Python, nous pouvons utiliser des bibliothèques telles que TensorFlow ou PyTorch, qui offrent une variété de modèles pré-entraînés via leurs modules d'application (tf.keras.applications i> ou torchvision.models, respectivement).
Voici un exemple simplifié utilisant TensorFlow :
à partir de tensorflow.keras.applications importer VGG16
à partir de tensorflow.keras.models, importer le modèle
à partir de tensorflow.keras.layers importer Dense, Aplatir, Entrée
# Charger le modèle VGG16 pré-entraîné sans couches supérieures
base_model = VGG16(weights='imagenet', include_top=False)
# Geler les calques du modèle de base
pour la couche dans base_model.layers :
layer.trainable = Faux
# Ajouter de nouvelles couches qui seront formées
x = Aplatir() (base_model.output)
x = Dense(1024, activation='relu')(x)
prédictions = Dense(num_classes, activation='softmax')(x)
# Créer le modèle final
modèle = Modèle (entrées = base_model.input, sorties = prédictions)
Ce code charge le modèle VGG16 avec des poids pré-entraînés sur ImageNet et sans les couches supérieures. Les couches du modèle de base sont gelées, ce qui signifie que leurs poids ne seront pas mis à jour pendant l'entraînement. Nous ajoutons ensuite de nouvelles couches qui seront formées pour la tâche spécifique.
Peaufinage : Peaufinage du modèle
En plus d'utiliser un modèle pré-entraîné comme extracteur de caractéristiques, nous pouvons effectuer un processus appelé réglage fin, qui consiste à ajuster les poids de certaines des couches du modèle pré-entraîné. modèle avec les nouveaux calques. Cela permet au modèle de s'adapter davantage aux caractéristiques spécifiques du nouvel ensemble de données.
Pour effectuer des ajustements, après avoir entraîné les nouvelles couches, nous dégelons certaines des dernières couches du modèle de base et poursuivons l'entraînement. Il est important d'utiliser un taux d'apprentissage très faible au cours de ce processus pour éviter de perdre les informations utiles dont dispose déjà le modèle.
Considérations importantes
Lorsque vous utilisez l'apprentissage par transfert, il est crucial de comprendre la nature de l'ensemble de données d'origine et la tâche pour laquelle le modèle pré-entraîné a été développé. L'efficacité de l'apprentissage par transfert peut être compromise si les caractéristiques du nouvel ensemble de données sont très différentes de celles de l'ensemble de données d'origine.
De plus, lors du ajustement fin, il est important de surveiller les performances du modèle pour éviter le surajustement (surajustement), car le modèle peut devenir trop spécialisé dans le caractéristiques du nouvel ensemble de données et perdent la capacité de généraliser.
En résumé, l'apprentissage par transfert et le ajustement fin sont des techniques puissantes qui peuvent économiser du temps et des ressources de calcul, permettant d'adapter des modèles complexes à de nouvelles tâches avec moins de données. Avec l'approche de l'extracteur de fonctionnalités, nous pouvons réutiliser les connaissances des modèles pré-entraînés et concentrer la formation sur de nouvelles couches adaptées à la tâche spécifique, tandis que le réglage fin permet un réglage plus précis du modèle aux fonctionnalités du nouvel ensembledonnées.