Miért bujkálnak a tensor shape hibák a kódodban?
Miért buknak el a tenzorok alakja miatt a modellek?
Ismerős a helyzet. A tanítás fut, a veszteség csökken, a metrikák elfogadhatónak tűnnek. Aztán három hét múlva valaki rájön, hogy a modell kimenetei rendszeresen hibásak – és senki sem tudja megmondani, miért.
A bűnös gyakran egy olyan tengely, amit te másképp értelmeztél, mint ahogy a kód kezelte.
Ez nem fordítási hiba és nem is futásidejű összeomlás. Ez rosszabb: néma pontatlanság, ami minden egyes előrejelzésbe beépül.
A jelölés problémája
A kényelmetlen igazság az, hogy ami nincs elnevezve, azt nem lehet ellenőrizni.
A legtöbb tenzoros keretrendszer nem törődik azzal, hogy mit jelent egy alak. Egy (32, 768, 12, 64) méretű tenzor jelenthet:
(batch, sequence, heads, dim_per_head)egyik esetben(batch, features, height, width)egy másikban(batch, tokens, layers, channels)egy harmadikban
A keretrendszer csak számokat lát. Amíg a dimenziók összeszorzódnak helyesen, addig minden művelet érvényesnek számít. A szemantika elveszik.
Ez a láthatatlan hiba: nem matematikailag rossz, hanem szándék szerint.
Mit jelentene a jobb jelölés
Képzeld el, hogy a tenzorokhoz tartozó műveletek is hordozzák a jelentésüket. Nem csak alakot – elnevezett dimenziókat.
Ahelyett, hogy debuggolással keresnéd, melyik tengely mit jelent, egyszerűen előre megmondanád:
tensor: [batch=32, sequence=128, heads=12, dim_per_head=64]
Így a fordító ellenőrizhetné, hogy:
- csak azokon a dimenziókban történik broadcast, ahol az szabad
- a redukciós műveletek valóban a kívánt tengelyeket zsugorítják
- az attention head-ek nem keverednek a feature dimenziókkal
- a LayerNorm a megfelelő tengelyeket normalizálja
A fordító ekkor valóban segíthet – még a hosszú tanítás előtt.
Miért drága a némasági hiba
Ezeknek a dimenziós hibáknak a következményei nem elméletiek:
Kutatásban: órákig tart keresni, hogy miért nem replikálhatóak a számok. Hyperparaméter? Seed? Vagy egyszerűen az aksisok sorrája rossz? És ez még csak a sikeres tanításokról szól.
Produkcióban: egy éles modell, amely kicsit, de rendszeresen hibás. 94%-os pontosság 96% helyett. A hiba elég kicsi ahhoz, hogy rejtve maradjon, de elég nagy ahhoz, hogy számít legyen. És csak részletes debuggolással jön ki fényre.
Csapatokban: ha a jelölés nincs szabványosítva, akkor egy csapat [batch, seq, heads, dim]-ot használ,,而另一個团队使用 [batch, heads, seq, dim]-ot. Amikor a kódok összeérnek, a némasági hiba már mindenből miatti