Bfloat16 फ़्लोटिंग-पॉइंट प्रारूप

Bfloat16 (मस्तिष्क फ़्लोटिंग पॉइंट) फ़्लोटिंग-पॉइंट प्रारूप कंप्यूटर नंबर प्रारूप होता है जो कंप्यूटर मेमोरी में 16-बिट रखता है, यह  फ़्लोटिंग मूलांक बिंदु का उपयोग करके संख्यात्मक मानों की विस्तृत गतिशील श्रृंखला का प्रतिनिधित्व करता है। यह प्रारूप  मशीन लर्निंग और निकट-सेंसर कंप्यूटिंग में तेजी लाने के इरादे से 32-बिट आईईईई 754 एकल-परिशुद्धता फ़्लोटिंग-पॉइंट प्रारूप (बाइनरी 32) का छोटा (16-बिट) संस्करण है। इस प्रकार यह 8 एक्सपोनेंट बिट्स को बनाए रखते हुए 32-बिट फ्लोटिंग-पॉइंट नंबरों की अनुमानित गतिशील सीमा को संरक्षित करता है, किन्तु बाइनरी32 प्रारूप के 24-बिट महत्व के अतिरिक्त केवल 8-बिट परिशुद्धता का समर्थन करता है। अतः एकल-परिशुद्धता 32-बिट फ़्लोटिंग-पॉइंट संख्याओं से अधिक, bfloat16 संख्याएँ पूर्णांक गणना के लिए अनुपयुक्त हैं, किन्तु यह उनका इच्छित उपयोग नहीं होता है। इस प्रकार Bfloat16 का उपयोग भंडारण आवश्यकताओं को कम करने और मशीन लर्निंग एल्गोरिदम की गणना गति को बढ़ाने के लिए किया जाता है।

Bfloat16 प्रारूप गूगल ब्रेन द्वारा विकसित किया गया था, जो गूगल का कृत्रिम बुद्धिमत्ता अनुसंधान समूह होता है। इसका उपयोग Intel AI प्रोसेसर में किया जाता है, जैसे Nervana NNP-L1000, Xeon प्रोसेसर (AVX-512 BF16 एक्सटेंशन), ​​और Intel FPGAs,  गूगल क्लाउड टेन्सर प्रोसेसिंग इकाइयाँ (टीपीयू),   और टेन्सरफ्लो। ARMv8.6-A, AMD ROCm, CUDA, Apple M2 और इसलिए Apple A15 चिप्स और पश्चात् में, bfloat16 प्रारूप का भी समर्थन करते हैं। इस प्रकार इन प्लेटफार्मों पर, bfloat16 का उपयोग मिश्रित-त्रुटिहीन अंकगणित में भी किया जा सकता है, जहां bfloat16 संख्याओं को संचालित किया जा सकता है और व्यापक डेटा प्रकारों तक विस्तारित किया जा सकता है।

bfloat16 फ़्लोटिंग-पॉइंट प्रारूप
bfloat16 में निम्नलिखित प्रारूप है:
 * साइन बिट: 1 बिट
 * घातांक चौड़ाई: 8 बिट्स
 * महत्वपूर्ण परिशुद्धता (अंकगणित): 8 बिट्स (7 स्पष्ट रूप से संग्रहीत, अंतर्निहित अग्रणी बिट के साथ), मौलिक एकल-परिशुद्धता फ़्लोटिंग-पॉइंट प्रारूप में 24 बिट्स के विपरीत

Bfloat16 प्रारूप, छोटा आईईईई 754 एकल-परिशुद्धता 32-बिट फ़्लोट होने के कारण, आईईईई 754 एकल-परिशुद्धता 32-बिट फ़्लोट से तेज़ प्रकार के रूपांतरण की अनुमति देता है। इस प्रकार Bfloat16 प्रारूप में रूपांतरण में, घातांक बिट्स को संरक्षित किया जाता है, जबकि NaN विशेष स्थितियों को अनदेखा करते हुए महत्व क्षेत्र को काट-छाँट (इस प्रकार 0 की ओर गोल करने के लिए ) द्वारा कम किया जा सकता है। अतः प्रतिपादक बिट्स को संरक्षित करने से 32-बिट फ्लोट की सीमा ≈ 10−38 से ≈ 3 × 1038 तक बनी रहती है।

बिट्स को इस प्रकार रखा गया है:

आदर्श लेख

 * {{Legend|#f99|एस: संकेत}}
 * {{Legend|#9f9|ई: प्रतिपादक}}
 * {{Legend|#99f|एफ: अंश (दोनों प्रारूपों में महत्वपूर्ण से पीछे)।}}
 * {{Legend|#ccc|एफ: 32-बिट में अंश (अनुगामी महत्व) एकल परिशुद्धता (तुलनात्मक)}}

घातांक एन्कोडिंग
Bfloat16 बाइनरी फ्लोटिंग-पॉइंट एक्सपोनेंट को ऑफसेट-बाइनरी प्रतिनिधित्व का उपयोग करके एन्कोड किया गया है, जिसमें शून्य ऑफसेट 127 है, अतः आईईईई 754 मानक में प्रतिपादक पूर्वाग्रह के रूप में भी जाना जाता है।
 * ईmin = 01H−7FH = −126
 * ईmax = FEH−7FH = 127
 * घातांक पूर्वाग्रह = 7FH = 127

इस प्रकार, ऑफसेट-बाइनरी प्रतिनिधित्व द्वारा परिभाषित वास्तविक प्रतिपादक प्राप्त करने के लिए, 127 के ऑफसेट को प्रतिपादक क्षेत्र के मूल्य से घटाना होता है।

घातांक क्षेत्र का न्यूनतम और अधिकतम मान (00)H और FFH) की विशेष रूप से व्याख्या की जाती है, जैसे आईईईई 754 मानक प्रारूपों में। न्यूनतम धनात्मक सामान्य मान 2−126 ≈ 1.18 × 10−38 है और न्यूनतम धनात्मक (असामान्य) मान 2−126−7 = 2−133 ≈9.2 × 10−41 है।

धनात्मक और ऋणात्मक अनंत
जैसे कि आईईईई 754 में, धनात्मक और ऋणात्मक अनंत को उनके संबंधित साइन बिट्स, सभी 8 एक्सपोनेंट बिट्स समूह (FFhex) और सभी महत्वपूर्ण बिट्स शून्य के साथ दर्शाया जाता है। स्पष्ट रूप से,

कोई संख्या नहीं
जैसे आईईईई 754 में, NaN मानों को या तो साइन बिट, सभी 8 एक्सपोनेंट बिट्स समूह (FFhex) के साथ दर्शाया जाता है, और सभी महत्वपूर्ण बिट्स शून्य नहीं होता हैं। स्पष्ट रूप से, जहां k, l, m, n, o, p, या q में से कम से कम 1 होता है। इस प्रकार आईईईई 754 की भांति, NaN मान शांत या सिग्नलिंग हो सकते हैं, चूंकि सितंबर, सन्न 2018 तक bfloat16 NaNs सिग्नलिंग का कोई ज्ञात उपयोग नहीं होता है।

सीमा और परिशुद्धता
Bfloat16 को 32-बिट आईईईई 754 सिंगल-प्रिसिजन फ़्लोटिंग-पॉइंट प्रारूप (बाइनरी 32) से संख्या सीमा बनाए रखने के लिए डिज़ाइन किया गया है, जबकि परिशुद्धता को 24 बिट्स से घटाकर 8 बिट्स किया गया है। इसका तात्पर्य यह है कि परिशुद्धता दो और तीन दशमलव अंकों के मध्य होती है, और bfloat16 लगभग 3.4 × 1038 तक परिमित मानों का प्रतिनिधित्व कर सकता है।

उदाहरण
यह उदाहरण फ्लोटिंग-पॉइंट मान के हेक्साडेसिमल और बाइनरी संख्या में बिट प्रतिनिधित्व में दिए गए हैं। इसमें संकेत, (पक्षपातपूर्ण) प्रतिपादक और महत्व सम्मिलित होता हैं। 3f80 = 0 01111111 0000000 = 1 c000 = 1 10000000 0000000 = −2

7f7f = 0 11111110 1111111 = (28 − 1)×2−7×2127 ≈ 3.38953139 × 1038 (bfloat16 परिशुद्धता में अधिकतम परिमित धनात्मक मान) 0080 = 0 00000001 000000 = 2−126 ≈ 1.175494351 × 10−38 (bfloat16 परिशुद्धता और एकल-परिशुद्धता फ़्लोटिंग बिंदु में न्यूनतम सामान्यीकृत धनात्मक मान) यह सामान्य bfloat16 संख्या का अधिकतम धनात्मक परिमित मान 3.38953139 × 1038 है, जो (224 − 1)×2−23×2127 = 3.402823466 × 1038 से थोड़ा नीचे होता है, अतः एकल परिशुद्धता में प्रतिनिधित्व करने योग्य अधिकतम परिमित धनात्मक मान होता है।

शून्य और अनंत
0000 = 0 00000000 0000000 = 0 8000 = 1 00000000 0000000 = −0

7f80 = 0 11111111 0000000 = infinity ff80 = 1 11111111 0000000 = −infinity

विशेष मान
4049 = 0 10000000 1001001 = 3.140625 ≈ π ( pi ) 3eab = 0 01111101 0101011 = 0.333984375 ≈ 1/3

NaNs
ffc1 = x 11111111 1000001 => qNaN ff81 = x 11111111 0000001 => sNaN

यह भी देखें

 * अर्ध-परिशुद्धता फ़्लोटिंग-पॉइंट प्रारूप: 16-बिट फ़्लोट w/1-बिट साइन, 5-बिट एक्सपोनेंट, और 11-बिट महत्व, जैसा कि आईईईई 754 द्वारा परिभाषित किया गया है
 * आईएसओ/आईईसी 10967, भाषा स्वतंत्र अंकगणित
 * आदिम डेटा प्रकार
 * मिनीफ्लोट
 * गूगल ब्रेन