Visualizador de padrões de bits FP16 e bfloat16
Visualize os padrões de bits de ponto flutuante de meia precisão (FP16, IEEE 754 binary16) e bfloat16. Converta de decimal para bits e vice-versa, com sinal, expoente e mantissa destacados por cores. Útil para aprender sobre quantização de ML e aceleração de inferência.
Estrutura de FP16 vs. bfloat16
Ambos os formatos somam 16 bits no total, mas distribuem esses bits entre expoente e mantissa de forma muito diferente, dando a cada um um intervalo representável e precisão muito distintos.
| Item | FP16 (IEEE 754 半精度) | bfloat16 |
|---|---|---|
| Total de bits | 16 | 16 |
| Bits de expoente | 5 | 8 |
| Bits de mantissa | 10 | 7 |
| Intervalo representável | Aproximadamente ±6,1×10⁻⁵ a ±65504 (intervalo mais estreito, mas mais bits de mantissa para precisão) | Aproximadamente ±1,2×10⁻³⁸ a ±3,4×10³⁸ (mesmo intervalo amplo do float32, mas menor precisão) |
| Uso principal | Processamento de imagens, gráficos e inferência com economia de memória (treinamento em meia precisão) | Treinamento de deep learning (TPUs e GPUs modernas) — sem se preocupar com estouro do expoente ao converter de float32 |
O bfloat16 compartilha a largura do expoente (8 bits) e o viés (127) do float32, o que significa que pode ser obtido a partir de um valor float32 simplesmente truncando a mantissa — um atalho de implementação prático.
Dicas de uso
- Mesmo para o mesmo valor, como 0.1, FP16 e bfloat16 o arredondam de forma bem diferente. Alterne os formatos e compare os padrões de bits da mantissa.
- Como o bfloat16 compartilha a largura do expoente e o viés do float32, ele resiste a estouros mesmo com valores grandes acima de 65504. Já o FP16 estoura para infinito assim que ultrapassa 65504.
- Converter "70000" para FP16 estoura para infinito, enquanto o bfloat16 o representa bem (com precisão reduzida).
- Ao quantizar modelos em frameworks como PyTorch ou TensorFlow, o bfloat16 se converte facilmente a partir do float32, enquanto o intervalo mais estreito do FP16 às vezes exige um escalonamento prévio.
- Para converter bits de volta para decimal, digite um valor hexadecimal de 4 dígitos com prefixo `0x`, ou um valor binário de 16 dígitos (o prefixo `0b` é opcional).
Perguntas frequentes
Curiosidade — Por que o machine learning quis uma representação numérica "menos precisa"
Por volta de 2018, o Google projetou um novo formato de ponto flutuante de 16 bits chamado bfloat16 para suas Unidades de Processamento Tensorial (TPUs). O FP16 (meia precisão IEEE 754) já existia e era usado em processamento de imagens e gráficos, mas seus meros 5 bits de expoente lhe davam um intervalo representável estreito, pouco adequado aos gradientes que desaparecem ou explodem durante o treinamento de deep learning.
A ideia de projeto do bfloat16 é direta: sacrificar precisão na mantissa, mas manter o expoente exatamente tão largo quanto os 8 bits do float32, para lidar com segurança com os valores extremamente grandes e pequenos que surgem durante o treinamento. O nome "Brain Floating Point" vem do Google Brain, a equipe de pesquisa em machine learning que o criou.
Na ciência da computação convencional, reduzir a precisão de ponto flutuante sempre foi tratado como um terreno fértil para bugs. Mas os modelos de deep learning têm uma propriedade incomum: um erro numérico modesto raramente prejudica muito a precisão final das previsões. Aproveitar essa propriedade de "um tanto impreciso, mas que funciona no conjunto" — e reduzir pela metade o custo de memória e computação com um formato de 16 bits — representa uma otimização própria do machine learning, bem distante da sabedoria tradicional da ciência da computação.