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 halbe Genauigkeit) | 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.
Sehen, wie die Bits bei FP16 und bfloat16 angeordnet sind
Obwohl beide sechzehn Bit belegen, verteilen FP16, also IEEE 754 binary16, und bfloat16 diese Bits auf recht verschiedene Weise. Dieses Werkzeug rechnet zwischen Dezimalwerten und Bitmustern um und färbt Vorzeichen, Exponent und Mantisse getrennt ein, damit der Unterschied sichtbar wird und nicht bloß nachzulesen ist.
**Der Kern liegt in der Verteilung. FP16 gibt dem Exponenten fünf Bit und der Mantisse zehn, bfloat16 dagegen dem Exponenten acht und der Mantisse sieben.** Acht Exponentenbits sind genau das, was die einfache Genauigkeit verwendet, und daraus folgen zwei Eigenschaften. Die erste: **bfloat16 umspannt denselben Wertebereich wie FP32.** Die zweite: **die Umrechnung aus FP32 läuft auf das Abschneiden auf die oberen sechzehn Bit hinaus.** Deshalb bevorzugt das maschinelle Lernen bfloat16 — die Gefahr, dass ein Wert aus dem Bereich fliegt und einen Trainingslauf verdirbt, ist weit geringer. Der Preis ist eine Mantisse von nur sieben Bit, sodass **die Genauigkeit gröber ausfällt als bei FP16.** Wählen Sie FP16, wo es auf Genauigkeit ankommt, und bfloat16, wo es auf den Bereich ankommt.
So gehen Sie vor
- Wählen Sie die Richtung der Umrechnung Von Dezimal zu Bits und von Bits zu Dezimal stehen beide bereit.
- Geben Sie einen Wert ein Eine Dezimalzahl oder eine Folge aus Einsen und Nullen tut es gleichermaßen.
- Lesen Sie die gefärbten Bits **Vorzeichen, Exponent und Mantisse erscheinen jeweils in eigener Farbe.**
- Stellen Sie FP16 und bfloat16 gegenüber **Denselben Wert in beiden Formaten darzustellen zeigt genau, wo sie sich trennen.**
Tipps für die Nutzung
- 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).
Wofür Sie es nutzen können
Um zu verstehen, was Quantisierung kostet
**Sie können konkret feststellen, wie weit ein Wert gerundet wird, wenn ein Modell auf sechzehn Bit gesenkt wird.**
Um zwischen den Formaten zu entscheiden
Es liefert die Grundlage, um abzuwägen, ob Ihr Fall Bereich oder Genauigkeit verlangt.
Um zu finden, wo der Überlauf beginnt
**Sie können mit echten Werten ausprobieren, was geschieht, sobald die größte in FP16 darstellbare Zahl überschritten wird.**
Um die Arbeitsweise der Gleitkommazahl zu erlernen
Sie können Bit für Bit verfolgen, wie Exponent und Mantisse zusammen eine einzige Zahl ausdrücken.
Begriffe zur Gleitkommazahl
- Vorzeichenbit
- Das einzelne höchste Bit, das das Vorzeichen angibt: 0 für positiv, 1 für negativ.
- Exponent
- Der Teil, der die Größenordnung des Wertes ausdrückt. **FP16 weist ihm fünf Bit zu, bfloat16 acht.**
- Mantisse
- Der Teil, der den geltenden Ziffern entspricht. **FP16 hat zehn Bit, bfloat16 sieben, und eben dieser Abstand ist der Unterschied in der Genauigkeit.**
- Bfloat16
- **Ein Sechzehn-Bit-Format, das den Exponenten bei den acht Bit von FP32 belässt.** Es halbiert den Speicher, ohne den Bereich preiszugeben.
- Subnormale Zahl
- Die Darstellung, die bei kleinstem Exponenten verwendet wird und Werte äußerst nahe bei null erlaubt.
- Quantisierung
- Das Verfahren, die Gewichte eines Modells mit weniger Bit auszudrücken. **Speicher und Rechenaufwand sinken, und mit ihnen die Genauigkeit.**
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.