Hoe modellen daadwerkelijk leren, van gewone gradient descent tot Adam
Mixed-precision-training gebruikt kleinere getalformaten voor snelheid en geheugen. In plaats van elke berekening in volledige precisie op te slaan (standaard 32-bits floats), gebruiken veel bewerkingen float16 of bfloat16: 16-bits formaten die de helft van het geheugen kosten in ruil voor minder precisie en, voor float16, een smaller bereik van weer te geven groottes.
Het risico zit in het numerieke bereik. Sommige gradiënten zijn piepklein. Als een piepklein getal wordt afgerond naar nul, verliest de optimizer informatie. Loss scaling beschermt die kleine gradiënten door het verlies te vermenigvuldigen vóór backpropagation, en de gradiënten daarna weer terug te delen.
Een keukenweegschaal die afrondt op hele grammen kan een piepklein snuifje kruiden missen. Als je tien identieke snuifjes samen weegt, kan de schaal het totaal wel zien. Daarna deel je door tien om één snuifje terug te krijgen. Loss scaling gebruikt dezelfde truc: maak de kleine waarde makkelijker weer te geven, en schaal hem daarna terug. De figuur hieronder is een herinnering aan wat er op het spel staat. Afdaling werkt alleen als de gradiënt van elke stap de rekenkunde overleeft; precisie verandert de lus niet, het bepaalt of de kleine hellingen dicht bij het minimum nog zichtbaar zijn.