Notes de labo
De courtes expériences datées : une question, un résultat, une leçon.
Flash Attention : un gain immédiat, sans friction, dans mon GPT écrit de zéro
Question. Brancher scaled_dot_product_attention de PyTorch dans un GPT écrit à la main vaut-il le coup face à mon masque causal manuel ?
Résultat. Remplacer l’attention masquée manuelle par scaled_dot_product_attention (Flash) a conservé des sorties strictement identiques tout en réduisant la mémoire et le temps par itération, avec un repli manuel conservé pour les versions plus anciennes de PyTorch.
Leçon. Une fois qu’on comprend l’attention assez bien pour l’écrire à la main, on a aussi gagné le droit d’utiliser le kernel rapide sans qu’il soit une boîte noire.
Trois stratégies de patch embedding, trois ViT différents
Question. Est-ce important que les patches d’un ViT soient plongés via une Conv2D, une LayerNorm sur les patches aplatis ou un simple reshape ?
Résultat. J’ai implémenté les trois dans mon classifieur d’images ViT. L’embedding par Conv2D s’est entraîné le plus stablement ; la variante reshape était la plus transparente pour l’enseignement ; la variante LayerNorm se situait entre les deux.
Leçon. La tokenisation n’est pas un détail : la toute première couche, celle qui transforme les pixels en tokens, conditionne tout ce que le transformer peut apprendre.
La stratégie de décodage a changé la qualité de traduction plus que le modèle
Question. Pour la traduction anglais↔darija, d’où vient réellement la qualité des sorties : des poids entraînés ou de la stratégie de décodage ?
Résultat. À modèle fixé, passer du décodage glouton à une recherche en faisceau avec normalisation de longueur, puis ajuster le top-p, a changé la qualité perçue plus qu’un nouveau cycle d’entraînement.
Leçon. À l’inférence, la recherche compte autant que le modèle. Toujours balayer les paramètres de décodage avant d’accuser les poids.
La latence a remodelé toute l’architecture de la conversion vocale en temps réel
Question. À quel point un budget de latence temps réel strict change-t-il la conception d’un modèle de conversion vocale ?
Résultat. Concevoir NatVC autour d’une contrainte de latence en direct a exclu les blocs gourmands en lookahead et a poussé tout le pipeline vers des composants en streaming, causaux et à faible surcoût.
Leçon. Un budget de latence est une contrainte d’architecture, pas une réflexion après coup. Il a sa place tout en haut de la conception, à côté de la fonction de perte.
Écrire l’autograd de zéro a démystifié la rétropropagation pour de bon
Question. Est-ce que je comprends vraiment la rétropropagation, ou est-ce que je fais simplement confiance à loss.backward() ?
Résultat. Écrire à la main le DAG de MyTorcha et sa passe arrière fondée sur la règle de dérivation en chaîne a rendu les gradients concrets ; une petite vérification par gradient numérique a confirmé ceux dérivés à la main.
Leçon. La rétropropagation n’est que la règle de dérivation en chaîne appliquée sur un graphe. L’implémenter une fois transforme une boîte noire en quelque chose qu’on peut déboguer.
Comparer Transformer, LSTM et RNN sur des données musicales identiques
Question. Pour apprendre la modélisation de séquences, vaut-il mieux un seul modèle bien réglé ou une comparaison équitable à trois ?
Résultat. Dans MusicGen, entraîner les trois sur le même corpus avec des courbes de perte documentées a rendu visibles l’avantage du Transformer, et les limites du RNN, d’une manière qu’un seul modèle bien réglé n’aurait jamais permise.
Leçon. Une comparaison contrôlée vaut plus qu’un score de classement. C’est dans les baselines équitables que se trouve la compréhension.