O insight-chave: a maioria das computações de redes neurais não precisa de 32 bits de precisão. Os pesos, ativações e gradientes podem ser representados em 16 bits sem perda significativa de qualidade. Mas algumas operações (cálculo de loss, atualização de pesos) precisam de maior precisão para evitar instabilidade numérica. Precisão mista mantém uma cópia mestre dos pesos em FP32 para atualizações, enquanto usa FP16/BF16 para os passes forward e backward.
FP16 (meia-precisão IEEE) tem 5 bits de expoente e 10 bits de mantissa. BF16 (Brain Float 16) tem 8 bits de expoente e 7 bits de mantissa. O alcance de expoente mais amplo do BF16 significa que ele pode representar o mesmo alcance de valores que FP32 (evitando overflow/underflow), enquanto o alcance mais estreito do FP16 requer loss scaling para evitar que gradientes sofram underflow para zero. Para treinamento, BF16 é mais simples e mais estável. Para inferência, FP16 às vezes oferece precisão ligeiramente melhor pelo mesmo custo de memória.
As GPUs mais recentes (NVIDIA H100, H200) suportam FP8 (ponto flutuante de 8 bits) para computação ainda mais rápida. FP8 reduz pela metade a memória e dobra o throughput em comparação com FP16, mas requer manuseio cuidadoso para evitar degradação de qualidade. A prática atual: treinar em BF16, servir em FP16 ou FP8, e quantizar para INT4/INT8 para deploy em edge. Cada degrau abaixo na precisão troca uma pequena quantidade de qualidade por ganhos significativos de velocidade e memória.