Few Shot Learning expliqué simplement (avec schémas et vrai code)
Few Shot Learning : l'essentiel en un article — vrai code, schémas et étapes concrètes, extraits d'un cours de 35 leçons.
Un guide qui va droit au but : Few Shot Learning décortiqué avec des schémas, des exemples concrets et des commandes testées. Tout vient d'un cours structuré de 11 chapitres — en voici le meilleur.
- Introduction et Installation
- Pourquoi le few-shot
- Fondamentaux meta-learning
- Metriques et benchmarks
- Siamese Networks
L’attention pour le few-shot
Objectifs pédagogiques
L’intuition de l’attention
L’attention, en deep learning, c’est l’idée qu’un modèle peut accorder un poids différent à chaque élément d’un ensemble selon le contexte. Quand vous lisez une phrase, votre cerveau ne porte pas la même attention à chaque mot ; il se concentre sur les mots importants.
L’analogie de la classe
Imaginez une classe d’école où chaque élève donne un avis sur la réponse à une question. Plutôt que de prendre l’avis du meilleur (Siamese), ou la moyenne de tous (ProtoNet), on pondère : un élève qui semble « proche » du sujet a plus de voix.
Siamese
On prend l’exemple le plus proche, on ignore le reste. 1 vote, 0 abstention.
ProtoNet
On fait la moyenne uniforme des exemples d’une classe. Vote équitable, sans nuance.
Matching Net
On donne à chaque exemple un poids selon sa similarité au query. Vote pondéré.
Formule de la prédiction
Pour un query q et un support {(x_i, y_i)} :
Le modèle prédit donc une distribution de probabilités, somme de toutes les contributions pondérées de chaque exemple support.
Attention douce vs dure
| Type | Comportement | Utilisation few-shot |
|---|---|---|
| Dure (hard) | Choisit UN exemple (argmax) | Équivalent à Siamese |
| Douce (soft) | Pondère tous les exemples | Matching Networks |
Le contexte : l’influence des autres exemples
Une nuance importante de Matching Networks : l’encodeur peut prendre en compte le contexte entier du support (et non chaque image isolément). C’est l’idée du Full Context Embedding (FCE).
Comparaison avec ProtoNet
| Aspect | Matching Net | ProtoNet |
|---|---|---|
| Représentation d’une classe | Garde tous les exemples | Un seul prototype |
| Mécanisme | Attention pondérée | Distance au prototype |
| Contexte | Oui (FCE optionnel) | Non |
| Performance K=1 (Omniglot) | ~98% | ~98% |
| Performance K=5 (Omniglot) | ~99% | ~99.5% |
| Complexité code | Plus élevée | Très simple |
Le papier fondateur
Cas d’usage réels du few-shot
Objectifs pédagogiques
Cas 1 — Médecine : maladies rares
Une maladie est dite rare en Europe quand elle touche moins de 1 personne sur 2 000. Il y a plus de 7 000 maladies rares répertoriées, mais chacune dispose souvent de quelques dizaines de cas documentés par image médicale.
Problème concret
Un radiologue voit passer une lésion qu’il n’a vue que 3 fois dans sa carrière. Il aimerait que son IA d’assistance compare cette image à toutes les lésions similaires déjà annotées au monde.
Apport du few-shot
Un modèle qui apprend un espace d’embeddings sur des images banales puis récupère les cas les plus proches dans une base de lésions rares. Même 5 exemples suffisent pour activer une classe.
Cas 2 — Biodiversité : espèces rares
L’application iNaturalist recense des centaines de milliers d’espèces, mais beaucoup d’entre elles n’ont que 5 à 20 photos dans toute la base mondiale (un papillon découvert récemment, un mille-pattes endemique d’une seule forêt…).
Cas 3 — Industrie : contrôle qualité sur défauts rares
Imaginons une chaîne de production de cartes électroniques. La grande majorité des cartes est saine ; les défauts qui passent en contrôle visuel sont 2 cartes sur 100 000. Sur 6 mois, on a 4 photos d’une « soudure froide » et 1 photo d’un « pad arraché ».
| Approche | Résultat | Problème |
|---|---|---|
| CNN classique multi-classes | ~30% f1 sur défauts rares | Trop peu d’exemples |
| Détection d’anomalies | Détecte du bruit en plus | Trop sensible aux variations |
| Few-shot (ProtoNet) | ~88% f1 avec 5 ex. | Pour l’instant, le top |
Cas 4 — NLP : intentions clients de niche
Un chatbot d’assistance bancaire doit comprendre des intentions très spécifiques (« clôture compte avant 30 jours », « mainlevée hypothécaire partielle ») qui ont parfois moins de 50 exemples dans les logs.
# Few-shot avec LLM pour classer une intention prompt = """ Tu es un classifieur d'intentions bancaires. Voici 5 exemples : "Je veux fermer mon compte ce mois-ci" -> CLOTURE_RAPIDE "Je souhaite réduire mon prêt immo partiellement" -> MAINLEVEE_PARTIELLE "Mon dossier de crédit est-il en cours ?" -> SUIVI_CREDIT "Je veux fermer mes comptes vite" -> CLOTURE_RAPIDE "Je veux liberer une partie de mon hypothèque" -> MAINLEVEE_PARTIELLE Question : "Comment clôturer en urgence ?" Réponse :""" # → le LLM répond CLOTURE_RAPIDE, sans entraînement
Cas 5 — Finance : nouveaux types de fraude
Les fraudeurs inventent en permanence de nouveaux schémas. Quand une banque détecte un nouveau patron de fraude, elle n’a souvent que 10 à 30 transactions étiquetées avant que le schéma ne disparaisse ou ne change.
Problème
Impossible de réentraîner un modèle classique sur chaque nouveau schéma : ce serait trop lent et le schéma aurait déjà changé.
Solution few-shot
Un modèle d’embeddings de transactions compare en temps réel la nouvelle transaction aux 10 fraudes connues du schéma actuel.
In-context learning avec GPT
Objectifs pédagogiques
L’idée révolutionnaire de GPT-3
Avant 2020, faire du few-shot demandait d’entraîner un modèle spécifique (ProtoNet, MAML, etc.). En 2020, OpenAI publie GPT-3 et montre qu’un grand modèle de langage pré-entraîné sait faire du few-shot sans entraînement supplémentaire. Il suffit de mettre les exemples dans le prompt.
Un exemple concret
prompt = """ Traduis du français vers l'anglais. Français : Le chat dort sur le canapé. Anglais : The cat is sleeping on the sofa. Français : Je vais au marché. Anglais : I am going to the market. Français : Il fait beau aujourd'hui. Anglais :""" # Réponse attendue de GPT-4 : # « It is sunny today. »
Sans aucune phase de fine-tuning, juste avec deux exemples dans le prompt, GPT-4 a compris la tâche de traduction et produit la bonne réponse.
Zero-shot vs One-shot vs Few-shot prompting
| Mode | Contenu du prompt | Exemple |
|---|---|---|
| Zero-shot | Instruction seule | « Traduis : Bonjour » |
| One-shot | Instruction + 1 exemple | « Traduis. ‘Merci’ -> ‘Thank you’. ‘Bonjour’ -> » |
| Few-shot | Instruction + 3 à 10 exemples | (Comme ci-dessus avec plus d’exemples) |
Le papier qui a tout changé : Brown 2020
Pourquoi ça marche ?
Personne n’a une réponse complète. Plusieurs théories se complètent :
1. Reconnaissance de patterns
Le modèle a vu des millions de listes « Q : ... Réponse : ... » pendant le pré-entraînement et reconnaît le format.
2. Meta-learning implicite
Pendant le pré-entraînement, le modèle a appris à apprendre de nouvelles tâches au fil du texte qu’il consomme.
3. Induction heads
L’analyse des Transformers montre des circuits internes (« induction heads ») spécialisés dans la copie de patterns vus précédemment.
Quand utiliser l’in-context learning ?
| Situation | Recommandation |
|---|---|
| Très peu de données (1-30 exemples) | In-context learning avec LLM |
| Beaucoup de données (1000+ exemples) | Fine-tuning classique |
| Pas d’internet / on-premise | ProtoNet ou MAML local |
| Latence critique (< 10 ms) | Modèle local entraîné |
| Coût API trop élevé | Fine-tuning ou ProtoNet |
Code Python : appeler l’API OpenAI en few-shot
from openai import OpenAI client = OpenAI() few_shot_examples = [ {"role": "system", "content": "Tu es un classifieur de sentiment."}, {"role": "user", "content": "J'adore ce film !"}, {"role": "assistant", "content": "POSITIF"}, {"role": "user", "content": "C'était ennuyeux."}, {"role": "assistant", "content": "NEGATIF"}, {"role": "user", "content": "Bof, sans plus."}, {"role": "assistant", "content": "NEUTRE"}, ] def classify(text): msgs = few_shot_examples + [{"role": "user", "content": text}] resp = client.chat.completions.create( model="gpt-4o-mini", messages=msgs, temperature=0, ) return resp.choices[0].message.content print(classify("L'histoire est captivante !")) # → POSITIF
Cet article couvre les extraits les plus utiles — le cours complet Few Shot Learning (11 chapitres, 35 leçons, exercices corrigés et projet final) t'emmène jusqu'au bout.
./acceder-au-cours-complet cours gratuit : Ingénierie de promptsFAQ
Combien de temps pour apprendre Few Shot Learning ?
Faut-il des prérequis ?
Par où commencer concrètement ?
📬 Tu veux recevoir ce type de guide chaque semaine ? Abonne-toi gratuitement — code réel, zéro blabla.