📈 Ce qui améliore (vraiment) un modèle

Notre carnet de preuves. À chaque run, on note ici ce qui a fait progresser le modèle, de combien, et ce qui n'a rien apporté — uniquement des choses mesurées sur ce projet, jamais de la théorie. Tout a coûté 0 €.

⭐ La règle d'or (vérifiée run après run)

Données > taille du modèle > nombre d'époques. Quand un modèle déçoit, améliorer les données rapporte presque toujours plus que le grossir, et le grossir rapporte plus que l'entraîner plus longtemps. Et un modèle ne peut jamais être meilleur que ce qu'on lui montre : s'il apprend sur des dessins bâclés, il dessinera bâclé.

✅ Ce qui a marché chez nous

Passer au GPU — pour pouvoir tout grossir d'un coup impact énorme

Le GPU en lui-même ne rend pas le modèle meilleur : il rend possible ce que le CPU interdisait — 4× plus de dessins, un modèle 8× plus gros, 4× plus d'époques, dans le même temps.

🎨 run-004 (CPU, 48 min) : gribouillis, 15 % de bonnes prédictions → run-004b (GPU Kaggle gratuit, 66 min) : chats, maisons et vélos reconnaissables, 25,3 %. Même code, même idée — juste l'échelle.

Se spécialiser — un seul sujet, tout le cerveau pour lui impact énorme

Au lieu de partager 10 millions de paramètres entre chats, maisons et vélos, on a tout donné aux chats. Le prix : le modèle ne sait plus rien faire d'autre. C'est exactement le compromis « modèle généraliste vs modèle spécialisé » des vrais LLM.

🐱 run-004b (3 catégories) : dessins reconnaissables mais irréguliers → run-004c (chats seulement, 98 352 dessins) : ~36 chats reconnaissables sur 36 sur notre grille de test.

Plus de données impact fort

La règle n°1. Chaque dessin est un exemple de plus du jeu « devine le coup de crayon suivant » — plus le modèle en voit, moins il invente n'importe quoi.

📊 43 000 dessins (run-004) → 178 000 (run-004b) → ~200 000 avec les miroirs (run-004c). C'est le premier ingrédient du bond gribouillis → reconnaissable.

L'augmentation de données — des exemples gratuits impact moyen

Un chat retourné gauche-droite reste un chat : en retournant aléatoirement la moitié des dessins à chaque époque, on double la variété des exemples sans télécharger un dessin de plus.

🪞 run-004c : miroir horizontal sur 50 % de chaque batch — 98 352 chats deviennent ~200 000 vues différentes. Coût : 3 lignes de code.

Un bon départ — partir de ce qui est déjà appris impact moyen

Pourquoi apprendre le sens des mots depuis zéro, quand un run précédent l'a déjà fait ? C'est l'idée de tout le fine-tuning : on part d'un modèle qui sait déjà, on l'adapte.

🔤 run-003 : le mini-Transformer démarre avec les embeddings word2vec du run-002 au lieu de vecteurs aléatoires → 90,67 % avec un seul bloc d'attention et 14 min de CPU.

Améliorer la génération sans réentraîner impact moyen · coût nul

Le même modèle peut donner de bien meilleurs résultats juste en changeant comment on tire au sort ses réponses : interdire les coups impossibles (après un « x » vient forcément un « y »), ignorer les candidats improbables (top-p), régler l'audace (température).

🎲 Nos règles de décodage + top-p 0,9 : moins de dessins cassés, plus de variété — zéro minute de GPU. C'est aussi comme ça que les vrais GPT écrivent.

Filtrer les données — qualité plutôt que quantité impact fort · vérifié run-004d

Nos chats générés semblaient « pas finis »… parce que les joueurs de QuickDraw, pressés par les 20 secondes du jeu, dessinaient souvent juste une tête. Diagnostic mesuré : le chat médian du dataset fait 56 points et 9 traits. On a réentraîné en gardant seulement les 71 820 chats détaillés (≥ 50 points et ≥ 5 traits).

😺 run-004c : ~13 traits par dessin, presque jamais de moustaches → run-004d : ~35 traits, moustaches, yeux et museau presque partout. Moins de dessins (72 k au lieu de 98 k) mais de meilleurs dessins → de meilleurs chats. Le modèle imite ce qu'on lui montre — regarde ses « professeurs » : il ne peut pas faire mieux qu'eux.

Une représentation plus fine — grille 64 → 128 impact moyen · à double tranchant

Avec une grille 64×64, chaque coordonnée est arrondie à 4 pixels près : traits en escalier. En 128×128 l'arrondi tombe à 2 pixels. Le prix : deviner parmi 128 cases est plus dur que parmi 64.

⚖️ run-004d : traits nettement plus fins et fluides aux réglages sages (température ≤ 0,7 + top-p : ~11 beaux chats sur 12)… mais plus de ratés qu'avant en mode « fou » (température 0,9) — la précision pardonne moins les audaces. Et l'accuracy a « chuté » de 25,7 % à 17,5 % sans que le modèle soit pire : quand on change la règle du jeu, les métriques d'avant ne sont plus comparables.

Le replay — réviser l'ancien en apprenant le nouveau impact fort · vérifié au labo

Pour apprendre un nouveau style sans oublier son métier (l'« oubli catastrophique »), une seule parade a fonctionné : mélanger dans chaque batch ~70 % d'anciens exemples (révision) et ~30 % de nouveaux. Toutes les alternatives — learning rate minuscule, blocs gelés — ont échoué.

🔁 Labo 5 stratégies : avec replay ~10-20 chats reconnaissables sur 36 ; sans replay 1-3/36, quelles que soient les précautions. Et le gagnant (s5, ~20/36) combine replay + données cibles simplifiées (hachures retirées) — encore une victoire des données sur les astuces.

❌ Ce qui n'a rien (ou presque rien) apporté

Se fier à la loss pour juger une génération piège vécu (run-004e)

Notre premier fine-tuning (528 beaux chats Sketchy) affichait une loss en nette baisse (3,19 → 2,97)… et dessinait des gribouillis. Prédire correctement le trait suivant d'un dessin humain et savoir dessiner seul pendant 485 étapes sont deux compétences différentes.

📏 Verdict rendu par l'œil de l'utilisateur sur la page, confirmé par la planche — pas par la métrique. Suspect principal : les 250 positions neuves de la fenêtre agrandie 250 → 500, presque jamais entraînées. Toujours juger une génération en générant.

Apprendre de zéro avec très peu de données échec net (run-004f)

528 beaux exemples, un modèle réduit (2,4 M params) et une augmentation forte (miroir + zoom + décalage : jamais deux fois le même chat) : tout était optimisé pour la rareté… et le résultat est du gribouillis intégral.

🧱 Le plafond de qualité des données (QuickDraw) est réel, mais le plancher de quantité l'est tout autant : en dessous de quelques dizaines de milliers d'exemples, notre Transformer n'apprend même pas la forme d'un chat. D'où la stratégie pré-entraînement massif + affinage — à condition de réussir l'affinage.

Entraîner plus longtemps après le plateau +0,5 point

Les premières époques rapportent énormément, puis la courbe s'aplatit : le modèle a extrait ce qu'il pouvait de ses données. Continuer, c'est chauffer un GPU pour rien.

📉 run-004c : époque 1 → 18,5 %, époque 7 → 25,2 %, époque 10 → 25,7 %. Les 3 dernières époques (30 % du temps GPU) ont rapporté 0,5 point.

Grossir le modèle quand les données plafonnent +0,4 point

Doubler les paramètres n'aide que si le modèle manquait de capacité. Le nôtre ne manquait plus de capacité — il manquait de meilleures données.

⚖️ run-004b (4,9 M params) → run-004c (10 M) : +0,4 point d'accuracy seulement. Le vrai gain visuel du 004c venait de la spécialisation, pas de la taille.

Louer plus de puissance 0 € dépensé, et c'est très bien

La VRAM est un mur seulement quand on le touche. Notre modèle de 10 M de paramètres occupe une petite fraction des 16 Go du P100 gratuit de Kaggle — un pod loué achèterait de la vitesse, pas de la qualité.

💸 Seul vrai contact avec le mur : batch 512 → mémoire pleine (les grilles d'attention L×L). Solution : batch 256. Coût : 0 €.