Pourquoi vos shapes Tensor disparaissent sous vos yeux (et comment une meilleure notation peut tout changer)
Pourquoi vos bugs de forme de tenseurs passent inaperçus
Vous connaissez ce moment. L’entraînement avance. La perte diminue. Les métriques semblent bonnes. Puis, trois semaines après le passage en production, quelqu’un remarque que les sorties du modèle sont fausses d’une manière impossible à expliquer.
La cause ? Un axe qui signifiait une chose dans votre tête, mais que le code a traité autrement.
Ce n’est pas une erreur de compilation. Ce n’est pas un plantage à l’exécution. C’est plus insidieux : une erreur de sens qui reste invisible et qui touche chaque prédiction.
Le problème de notation
La vérité est simple : ce qu’on ne nomme pas, on ne peut pas le vérifier.
La plupart des frameworks de tenseurs ne portent pas de sens. Une forme (32, 768, 12, 64) peut signifier :
(batch, sequence, heads, dim_per_head)selon le contexte(batch, features, height, width)selon un autre(batch, tokens, layers, channels)dans un troisième
Le framework ne se pose pas la question. Il voit seulement un tuple d’entiers. Tant que les dimensions se multiplient correctement, l’opération est valide. Le code applique la manipulation et fixe le sens dans les poids.
C’est le bug invisible. Pas une erreur mathématique. Une erreur d’intention.
Ce qu’une meilleure notation pourrait changer
Imaginez des opérations qui conserven leur sens à travers le type système. Non pas seulement des shapes, mais des dimensions avec des noms.
Au lieu de chercher plus tard quel axe est quoi, vous le déclarez dès le début :
tensor: [batch=32, sequence=128, heads=12, dim_per_head=64]
Le compiler pourrait alors contrôler que :
- Les broadcast se font seulement sur les dimensions autorisées
- Les réductions s’effondrent seulement sur les axes voulus
- Les têtes d’attention restent sépares des dimensions de features
- La LayerNorm normalise les bons axes
Le compiler devient un copilote. Il détecte l’échange d’axes avant que vous trainiez pendant trois semaines.
Les vrais coûts des bugs invisibles
Ce que ces bugs de dimension produisent réellement :
En recherche : des heures perdues à tester pourquoi les chiffres publiés ne sont pas reproduits. Hyperparamètre ? Random seed ? Ou simplement un axe mal placé ? Ce loss time multiplié par chaque expérimentation échouée.
En production : un modèle mis en production qui is miscalibrated. Votre précision peut être 94 % au lieu de 96 %. Le bug est trop petit pour être repéré,却