Liczba BF16 koduje wartość jako znak × 1,mantysa × 2^(wykładnik − 127), identycznie jak FP32, ale z mantysą skróconą do 7 bitów. W treningu mixed-precision wagi, aktywacje i gradienty przechowuje się i mnoży w BF16, natomiast akumulację iloczynów (np. w mnożeniu macierzy na Tensor Core / MXU) wykonuje się w FP32, a często utrzymuje się też „master copy" wag w FP32 do aktualizacji. Redukcja precyzji mantysy zwiększa błąd zaokrągleń, ale szeroki zakres wykładnika zapobiega przepełnieniom, dzięki czemu sieci osiągają dokładność zbliżoną do FP32 w tej samej liczbie iteracji.
FP16 (half precision) ma tylko 5 bitów wykładnika, przez co jego wąski zakres dynamiczny powoduje przepełnienia i zaniki gradientów podczas treningu, wymuszając techniki takie jak loss scaling. BF16 rozwiązuje ten problem, zachowując zakres dynamiczny FP32 i pozwalając trenować w obniżonej precyzji bez zmian hiperparametrów, przy jednoczesnym zmniejszeniu zużycia pamięci i przepustowości o połowę względem FP32.
1 bit określający znak liczby: 0 = wartość dodatnia, 1 = ujemna.
8 bitów z biasem 127 (zakres Emin = −126, Emax = 127) — identyczne jak w FP32, co daje BF16 zakres dynamiczny FP32.
7 bitów jawnie przechowywanych plus 1 bit ukryty (razem 8 bitów precyzji), wobec 23+1 w FP32 — źródło obniżonej precyzji BF16.
Tylko 7 bitów mantysy (2–3 cyfry dziesiętne) zwiększa błędy zaokrągleń; sumowanie wielu małych wartości może tracić dokładność.
BF16 i FP16 mają ten sam rozmiar (16 bitów), ale inny rozkład bitów; kod zakładający zakres/precyzję FP16 (np. loss scaling) może być zbędny lub błędny dla BF16.
Starsze GPU (przed Ampere) i CPU bez AVX-512 BF16 emulują BF16 programowo, tracąc przewagę wydajnościową.
Format „Brain Floating Point" powstaje jako 16-bitowa reprezentacja o zakresie FP32 dla akceleratorów TPU.
Kompleksowe badanie (Intel) potwierdzające, że trening w BF16 osiąga wyniki na poziomie FP32 bez zmian hiperparametrów, w wielu domenach.
Trzecia generacja Tensor Core w A100 wykonuje operacje mixed-precision BF16/FP32 z tą samą przepustowością co FP16, upowszechniając BF16 poza TPU.
Złożoność przestrzenna: 2 bajty / wartość.
Format zaprojektowany przez Google Brain dla jednostek MXU w TPU; natywnie wspierany od TPU v2.
Wspierany przez rdzenie Tensor Core NVIDIA od architektury Ampere (A100); operacje mixed-precision BF16/FP32 osiągają tę samą przepustowość co FP16 (312 TFLOPS na A100).
Wspierany przez rozszerzenia AVX-512 BF16 w procesorach Intel Xeon.