Transfer Learning¶
Le transfer learning (ou apprentissage par transfert) est une technique bien connue des chercheurs et ingénieurs en deep learning. Le principe de base consiste à ré-utiliser les poids d'un réseau déjà entraîné comme base pour l'entraînement de notre réseau.
En pratique, cela apporte plusieurs avantages :
- Si les deux tâches sont assez "similaires", l'entraînement du nouveau modèle sera plus rapide.
- Les performances du nouveau modèle seront meilleures que si on l'avait entraîné à partir de zéro.
- On a besoin de moins de données que pour entraîner un modèle à partir de zéro.
Figure extraite de ce blogpost.
Transfer learning ou fine-tuning ?¶
Il y a souvent une confusion entre ces deux termes et c'est normal car ils sont très proches. En pratique, le fine-tuning est une forme de transfer learning qui consiste à ne ré-entraîner qu'une partie des couches du modèles que l'on réutilise.
Pour définir les termes clairement :
- Transfer Learning : Entraîner un modèle en prenant comme base des poids d'un modèle déjà entraîné sur une autre tâche (on peut réentrainer l'ensemble du modèle ou certaines couches).
- Fine-Tuning : Ré-entraîner certaines couches (les dernières en général) d'un modèle déjà entraîné sur une autre tâche pour le rendre plus spécifique à notre tâche actuelle.
Comment utiliser le fine-tuning ?¶
Le fine-tuning consiste à ré-entraîner certaines couches d'un modèle déjà entraîné pour le rendre spécifique à notre tâche. Il faut donc choisir le nombre de couches que l'on va vouloir ré-entraîner.
Comment choisir ce nombre de couches ? Il y a quelques considérations à prendre en compte pour ce choix mais il n'y a pas de formule fixe. En général, on se base sur notre intuition et sur les règles suivantes pour choisir le nombre de couches à ré-entraîner :
- Moins on a de données d'entraînement pour notre nouvelle tâche, moins on va ré-entraîner de couches (si on a vraiment peu de données, on ré-entraine juste la dernière couche alors que si on a beaucoup de données on peut ré-entrainer presque toutes les couches).
- Plus les tâches sont similaires, moins on va ré-entrainer de couches (Si on détecte les chats, chiens et lapins et qu'on veut détecter les hamsters en plus, les tâches sont très similaires. A l'inverse, si on souhaite détecter les maladies sur une image de radio à partir du modèle chat/chien/lapin, les tâches sont très différentes).
Quand utiliser le transfer learning ou le fine-tuning ?¶
De manière générale, utiliser un modèle pré-entrainé comme base pour notre entraînement est toujours bénéfique (sauf peut-être dans des cas où les domaines n'ont absolument rien à voir). Je vous conseillerais donc de l'utiliser dès que vous en avez l'occasion.
Cependant, cela impose quelques contraintes :
- L'architecture du modèle ne peut plus être modifiée comme on le souhaite (les couches que l'on ne ré-entraine pas).
- Il faut disposer des poids d'un modèle déjà entrainé (en pratique, on en trouve beaucoup sur le net, cf cours 6 sur HuggingFace).
Note : Pour les problèmes de classification d'images, on va souvent utiliser un modèle pré-entrainé sur ImageNet car les 1000 classes de ce dataset permettent de rendre le modèle assez généraliste dans les features qu'il apprend.
Dataset d'entraînement, comment faire ?¶
Lorsqu'on fine-tune un modèle, on peut avoir deux objectifs en tête :
- Cas 1 : Entrainer un modèle sur une tâche complètement différente de celle pour laquelle il a été pré-entrainé (exemple : on veut classifier les dinosaures de Jurassic park alors que le modèle est entraîné sur des mammifères). Dans ce cas, le modèle peut "oublier" sa tâche d'origine sans que cela nous pose problème.
- Cas 2 : Entrainer un modèle sur une tâche complémentaire à celle pour laquelle il a été pré-entrainé (exemple : on veut détecter les oiseaux tout en restant performant sur les mammifères). Dans ce cas, on veut que le modèle reste performant sur la tâche d'origine.
Selon le cas, on ne va pas utiliser les mêmes données pour l'entraînement. Pour le cas 1, notre dataset d'entraînement va comporter uniquement les images nouvelles que l'on souhaite classifier (uniquement images de dinosaures). A l'inverse, pour le cas 2, on veut avoir des données de l'ancien dataset et du nouveau pour être sur que le modèle reste performant sur les anciennes données. En général, on va prendre 50/50 mais cela peut varier selon les situations (moitié mammifères, moitié oiseaux).
Note : Selon ce principe, le vrai open-source voudrait dire qu'on laisse accessible à la fois le code, les poids et les données d'entraînement du modèle. Car si il nous manque un des 3, on ne va pas pouvoir fine-tuner efficacement notre modèle. C'est vrai en particulier pour les modèles de langage LLM.
Modèles de fondations¶
Les modèles de fondations sont des modèles entraînés sur des grosses quantités de données (généralement non labelisées) et que l'on va utiliser comme base pour un fine-tuning ou transfer learning.
Modèle de fondations pour le NLP : Pour la tâche de NLP, il existe de nombreux modèles de fondations tel que GPT, BLOOM, Llama, Gemini etc...
Ces modèles vont être fine-tuné pour des tâches diverses. Par exemple, chatGPT est une version fine-tuné de GPT sur des conversations type chatbot.
Modèle de fondations pour les images : Pour les images, le terme modèle de fondations est assez débatu car ce n'est pas aussi évident que pour le NLP. Par exemple, on peut citer ViT, DINO, CLIP etc ...
Modèle de fondations pour le son : Pour le son, le modèle CLAP est un exemple de modèle de fondation.