Visualizador de patrones de bits FP16 y bfloat16
Visualiza los patrones de bits de coma flotante de media precisión (FP16, IEEE 754 binary16) y bfloat16. Convierte de decimal a bits y viceversa, con el signo, exponente y mantisa resaltados en colores. Útil para aprender sobre cuantización de ML y aceleración de inferencia.
Estructura de FP16 frente a bfloat16
Ambos formatos suman 16 bits en total, pero reparten esos bits entre exponente y mantisa de forma muy distinta, dando a cada uno un rango representable y una precisión muy diferentes.
| Elemento | FP16 (IEEE 754 半精度) | bfloat16 |
|---|---|---|
| Bits totales | 16 | 16 |
| Bits de exponente | 5 | 8 |
| Bits de mantisa | 10 | 7 |
| Rango representable | Aproximadamente ±6.1×10⁻⁵ a ±65504 (rango más estrecho, pero más bits de mantisa para precisión) | Aproximadamente ±1.2×10⁻³⁸ a ±3.4×10³⁸ (mismo rango amplio que float32, pero menor precisión) |
| Uso principal | Procesamiento de imágenes, gráficos e inferencia eficiente en memoria (entrenamiento en media precisión) | Entrenamiento de deep learning (TPU y GPU modernas) — sin preocuparse por el desbordamiento del exponente al convertir desde float32 |
bfloat16 comparte el ancho de exponente (8 bits) y el sesgo (127) de float32, lo que significa que puede obtenerse de un valor float32 simplemente truncando la mantisa — un atajo práctico de implementación.
Consejos de uso
- Incluso para el mismo valor, como 0.1, FP16 y bfloat16 lo redondean de forma muy distinta. Cambia de formato y compara los patrones de bits de la mantisa.
- Como bfloat16 comparte el ancho de exponente y el sesgo de float32, resiste el desbordamiento incluso con valores grandes por encima de 65504. FP16, en cambio, se desborda a infinito en cuanto se supera 65504.
- Convertir "70000" a FP16 se desborda a infinito, mientras que bfloat16 lo representa bien (con precisión reducida).
- Al cuantizar modelos en frameworks como PyTorch o TensorFlow, bfloat16 se convierte fácilmente desde float32, mientras que el rango más estrecho de FP16 a veces requiere un escalado previo.
- Para convertir bits de vuelta a decimal, introduce un valor hexadecimal de 4 dígitos con prefijo `0x`, o un valor binario de 16 dígitos (el prefijo `0b` es opcional).
Preguntas frecuentes
A propósito — Por qué el machine learning quería una representación numérica "menos precisa"
Alrededor de 2018, Google diseñó un nuevo formato de coma flotante de 16 bits llamado bfloat16 para sus Unidades de Procesamiento Tensorial (TPU). FP16 (media precisión IEEE 754) ya existía y se usaba en procesamiento de imágenes y gráficos, pero sus escasos 5 bits de exponente le daban un rango representable estrecho, poco adecuado para los gradientes que se desvanecen o explotan durante el entrenamiento de deep learning.
La idea de diseño de bfloat16 es sencilla: sacrificar precisión en la mantisa, pero mantener el exponente exactamente tan ancho como los 8 bits de float32, para poder manejar con seguridad los valores extremadamente grandes y pequeños que surgen durante el entrenamiento. El nombre "Brain Floating Point" proviene de Google Brain, el equipo de investigación de machine learning que lo creó.
En la informática convencional, reducir la precisión de coma flotante se ha considerado durante mucho tiempo un caldo de cultivo de errores. Pero los modelos de deep learning tienen una propiedad inusual: un error numérico modesto rara vez afecta mucho la precisión final de las predicciones. Aprovechar esa propiedad de "algo impreciso pero que funciona en conjunto" — y reducir a la mitad el coste de memoria y cómputo con un formato de 16 bits — representa una optimización propia del machine learning, bastante alejada de la sabiduría tradicional de la informática.