Cum te sabotează formele tensorilor fără să-ți dai seama (și cum le poți opri)
De ce bug-urile de formă la tensori trec neobservate
Ai trecut și tu prin asta. Bucla de antrenare rulează fără probleme. Pierderea scade. Metricile arată acceptabil. Apoi, după trei săptămâni în producție, descoperi că predicțiile modelului sunt greșite sistematic și nu reușești să identifici cauza.
De obicei problema vine de la o axă. Ce ai înțeles tu că înseamnă se dovedește a fi altceva în cod.
Nu e o eroare de compilare. Nu e o eroare care oprește execuția. E mai rău: o greșeală silențioasă de corectitudine care afectează fiecare predicție pe care modelul face o.
Problema cu notația
Adevărul neplăcut este că ceea ce nu poți numi, nu poți verifica.
Majoritatea framework-urilor de tensori nu se preocupă de semnificația axelor. Un shape de (32, 768, 12, 64) poate însemna:
(batch, sequence, heads, dim_per_head)în contextul tău(batch, features, height, width)în altul(batch, tokens, layers, channels)în altul încă
Compilatorul nu face distincție. Shape-ul e doar un tuple de întregi. Diferitele dimensiuni pot fi alese ca și cum