Como os modelos realmente aprendem, do gradiente descendente simples ao Adam
O treino em precisão mista usa formatos numéricos mais pequenos por velocidade e memória. Em vez de guardar cada cálculo em precisão total (os habituais floats de 32 bits), muitas operações usam float16 ou bfloat16: formatos de 16 bits que ocupam metade da memória em troca de menos precisão e, no caso do float16, de um intervalo mais estreito de tamanhos representáveis.
O risco é o intervalo numérico. Alguns gradientes são minúsculos. Se um número minúsculo for arredondado para zero, o otimizador perde informação. O escalonamento de loss protege esses gradientes pequenos multiplicando a loss antes da retropropagação, e depois dividindo os gradientes de volta para baixo.
Uma balança de cozinha que arredonda para gramas inteiras pode não notar uma pitada minúscula de especiaria. Se pesares dez pitadas idênticas juntas, a balança consegue ver o total. Depois divides por dez para recuperar uma pitada. O escalonamento de loss usa o mesmo truque: torna o valor pequeno mais fácil de representar, e depois reescala-o de volta. A figura abaixo é um lembrete do que está em jogo. A descida só funciona se o gradiente de cada passo sobreviver à aritmética; a precisão não muda o ciclo, decide é se os declives minúsculos perto do mínimo continuam visíveis para ele.