FP16- & bfloat16-Bitmuster-Visualisierer
Visualisieren Sie die Bitmuster von Gleitkommazahlen halber Genauigkeit (FP16, IEEE 754 binary16) und bfloat16. Konvertieren Sie Dezimalzahlen in Bits und zurück, mit farblich markiertem Vorzeichen, Exponent und Mantisse. Nützlich zum Lernen über ML-Quantisierung und Inferenzbeschleunigung.
Struktur von FP16 vs. bfloat16
Beide Formate haben insgesamt 16 Bit, verteilen diese aber sehr unterschiedlich auf Exponent und Mantisse — mit jeweils sehr unterschiedlichem darstellbarem Bereich und Genauigkeit.
| Element | FP16 (IEEE 754 半精度) | bfloat16 |
|---|---|---|
| Bits gesamt | 16 | 16 |
| Exponent-Bits | 5 | 8 |
| Mantissen-Bits | 10 | 7 |
| Darstellbarer Bereich | Etwa ±6,1×10⁻⁵ bis ±65504 (engerer Bereich, aber mehr Mantissen-Bits für Genauigkeit) | Etwa ±1,2×10⁻³⁸ bis ±3,4×10³⁸ (gleich weiter Bereich wie float32, aber geringere Genauigkeit) |
| Haupteinsatzgebiet | Bildverarbeitung, Grafik und speichereffiziente Inferenz (Training mit halber Genauigkeit) | Deep-Learning-Training (TPUs und moderne GPUs) — kein Sorgen über Exponenten-Überlauf bei der Konvertierung von float32 |
bfloat16 teilt sich die 8-Bit-Exponentenbreite und den Bias (127) mit float32 — es kann daher einfach durch Abschneiden der Mantisse aus einem float32-Wert erzeugt werden, ein praktischer Implementierungsvorteil.
Tipps zur Verwendung
- Selbst bei demselben Wert wie 0.1 runden FP16 und bfloat16 sehr unterschiedlich. Wechseln Sie das Format und vergleichen Sie die Mantissen-Bitmuster.
- Da bfloat16 die Exponentenbreite und den Bias von float32 teilt, widersteht es Überläufen selbst bei großen Werten über 65504. FP16 dagegen läuft schon oberhalb von 65504 zu Unendlich über.
- Die Umwandlung von "70000" in FP16 läuft zu Unendlich über, während bfloat16 den Wert (mit reduzierter Genauigkeit) korrekt darstellt.
- Bei der Quantisierung von Modellen in Frameworks wie PyTorch oder TensorFlow lässt sich bfloat16 leicht aus float32 konvertieren, während der engere Bereich von FP16 manchmal eine vorherige Skalierung erfordert.
- Um Bits zurück in Dezimalzahlen umzuwandeln, geben Sie einen 4-stelligen Hexadezimalwert mit `0x`-Präfix oder einen 16-stelligen Binärwert ein (das `0b`-Präfix ist optional).
Häufig gestellte Fragen
Übrigens – Warum das maschinelle Lernen eine "weniger genaue" Zahlendarstellung wollte
Um 2018 entwickelte Google für seine Tensor Processing Units (TPUs) ein neues 16-Bit-Gleitkommaformat namens bfloat16. FP16 (IEEE 754 halbe Genauigkeit) existierte bereits und wurde in Bildverarbeitung und Grafik praktisch eingesetzt, doch seine mageren 5 Exponenten-Bits gaben ihm einen engen darstellbaren Bereich — schlecht geeignet für die verschwindenden und explodierenden Gradienten, die beim Deep-Learning-Training auftreten.
Die Designidee von bfloat16 ist einfach: Mantissen-Genauigkeit opfern, aber den Exponenten exakt so breit wie die 8 Bit von float32 halten, um die extrem großen und kleinen Werte, die beim Training auftreten, sicher zu handhaben. Der Name "Brain Floating Point" stammt von Google Brain, dem Forschungsteam für maschinelles Lernen, das es entwickelt hat.
In der konventionellen Informatik galt eine Reduzierung der Gleitkomma-Genauigkeit lange als Nährboden für Fehler. Doch Deep-Learning-Modelle haben eine ungewöhnliche Eigenschaft: Ein bescheidener numerischer Fehler beeinträchtigt die endgültige Vorhersagegenauigkeit selten stark. Diese Eigenschaft — "etwas ungenau, funktioniert aber insgesamt" — zu nutzen und dabei mit einem 16-Bit-Format Speicher- und Rechenkosten zu halbieren, stellt eine Optimierung dar, die ganz eigen für das maschinelle Lernen ist und weit von der traditionellen Informatik-Weisheit abweicht.