इस दस्तावेज़ में XLA के ब्रॉडकास्टिंग सिमेंटिक्स के बारे में बताया गया है.
क्या ब्रॉडकास्ट हो रहा है?
ब्रॉडकास्टिंग वह प्रोसेस है जिसमें अलग-अलग आकृतियों वाली अरे को बनाया जाता है अंकगणितीय संक्रियाओं के लिए संगत आकार. शब्दावली इससे ली गई है NumPy ब्रॉडकास्टिंग.
इन बहु-आयामी सरणियों के बीच की कार्रवाइयों के लिए प्रसारण की ज़रूरत हो सकती है
अलग-अलग रैंक या कई डाइमेंशन वाले
काम करने वाले आकार. X+v
को जोड़ें, जहां X
एक मैट्रिक्स (कलेक्शन) है
और v
एक वेक्टर (रैंक 1 का कलेक्शन) है. एलिमेंट के हिसाब से परफ़ॉर्म करने के लिए
इसके अलावा, XLA को "ब्रॉडकास्ट" करना होगा वेक्टर v
की रैंक
आव्यूह X
, v
को निश्चित बार की संख्या में दोहराने से. वेक्टर की लंबाई
को मैट्रिक्स के कम से कम एक डाइमेंशन से मेल खाना चाहिए.
उदाहरण के लिए:
|1 2 3| + |7 8 9|
|4 5 6|
मैट्रिक्स के डाइमेंशन (2,3) और वेक्टर का डाइमेंशन (3) है. वेक्टर पाने के लिए पंक्तियों पर उसकी नकल करके ब्रॉडकास्ट किया जाता है:
|1 2 3| + |7 8 9| = |8 10 12|
|4 5 6| |7 8 9| |11 13 15|
NumPy में इसे कहा जाता है ब्रॉडकास्ट करना न भूलें.
सिद्धांत
XLA की भाषा सटीक और समझने में आसान है और इसे किसी अन्य "जादुई" सुविधाएँ. इस तरह की सुविधाओं से कुछ कंप्यूटेशन (हिसाब लगाना) थोड़ा आसान हो जाता है अनुमान पर आधारित है, लेकिन ज़्यादा अनुमानों का इस्तेमाल करके, उपयोगकर्ता कोड का इस्तेमाल किया जा सकता है. लंबे समय में बदलना मुश्किल हो. अगर ज़रूरी हो, तो जादुई सुविधाएं को क्लाइंट-लेवल के रैपर में जोड़ा जा सकता है.
प्रसारण के संबंध में, XLA के लिए स्पष्ट प्रसारण विनिर्देशों की आवश्यकता है अलग-अलग रैंक की सरणियों के बीच संक्रियाओं का इस्तेमाल करें. यह NumPy से अलग है, जो संभव होने पर स्पेसिफ़िकेशन का अनुमान लगाती है.
कम रैंक वाले अरे को ज़्यादा रैंक वाले अरे पर ब्रॉडकास्ट करना
Scalars को हमेशा किसी खास स्पेसिफ़िकेशन के बिना, अरे पर ब्रॉडकास्ट किया जा सकता है डाइमेंशन के हिसाब से साइज़ बदल लेते हैं. अदिश के बीच एलिमेंट-आधारित बाइनरी ऑपरेशन और सरणी का मतलब है, अदिश राशि के प्रत्येक तत्व पर अदिश के साथ संक्रिया लागू करना कलेक्शन. उदाहरण के लिए, किसी आव्यूह में अदिश जोड़ने का मतलब है, आव्यूह (मैट्रिक्स) बनाना हर तत्व, अदिश और अदिश राशि का संक्षेप में इनपुट मैट्रिक्स.
|1 2 3| + 7 = |8 9 10|
|4 5 6| |11 12 13|
ब्रॉडकास्ट से जुड़ी ज़्यादातर ज़रूरतें पूरी करने के लिए, बाइनरी ऑपरेशन. जब कार्रवाई के इनपुट की रैंक अलग-अलग होती है, तो यह ब्रॉडकास्टिंग टपल यह तय करता है कि ज़्यादा रैंक वाले कलेक्शन में से किस डाइमेंशन को निचली रैंक के अरे के साथ मैच करें.
ऊपर दिए गए उदाहरण पर गौर करें. (2,3) मैट्रिक्स में एक अदिश जोड़ने के बजाय, डाइमेंशन (3) का वेक्टर, डाइमेंशन (2,3) के मैट्रिक्स. बिना तय किए ब्रॉडकास्ट कर रहा है, तो यह कार्रवाई अमान्य है. मैट्रिक्स-वेक्टर का सही तरीके से अनुरोध करने के लिए इसके अलावा, ब्रॉडकास्टिंग डाइमेंशन को (1) के तौर पर सेट करें. इसका मतलब है कि वेक्टर डाइमेंशन को मैट्रिक्स के डाइमेंशन 1 से मैच किया जाता है. 2D में, अगर डाइमेंशन 0 है पंक्तियों को दिखाता है और डाइमेंशन 1 कॉलम दिखाता है. इसका मतलब है कि हर एलिमेंट वेक्टर का साइज़, उस साइज़ का कॉलम बन जाता है जो मैट्रिक्स:
|7 8 9| ==> |7 8 9|
|7 8 9|
अधिक जटिल उदाहरण के रूप में, 3x3 मैट्रिक्स (डाइमेंशन (3,3)). इन दो तरीकों से ब्रॉडकास्ट किया जा सकता है: यह उदाहरण:
(1) ब्रॉडकास्टिंग के एक डाइमेंशन का इस्तेमाल किया जा सकता है. हर वेक्टर एलिमेंट बन जाता है आव्यूह की हर पंक्ति के लिए वेक्टर का डुप्लीकेट बनाया जाता है.
|7 8 9| ==> |7 8 9|
|7 8 9|
|7 8 9|
(2) ब्रॉडकास्टिंग डाइमेंशन के तौर पर 0 का इस्तेमाल किया जा सकता है. हर वेक्टर एलिमेंट एक पंक्ति बन जाता है और मैट्रिक्स में हर कॉलम के लिए वेक्टर का डुप्लीकेट बनाया जाता है.
|7| ==> |7 7 7|
|8| |8 8 8|
|9| |9 9 9|
ब्रॉडकास्टिंग डाइमेंशन, एक टपल हो सकता है. इससे पता चलता है कि छोटी रैंक आकार को एक बड़े रैंक आकार में ब्रॉडकास्ट किया जाता है. उदाहरण के लिए, 2x3x4 घनाभ होना चाहिए और 3x4 मैट्रिक्स, ब्रॉडकास्टिंग टपल (1,2) का मतलब है, मैट्रिक्स को मैच करना घनाभ के डाइमेंशन 1 और 2.
इस तरह के ब्रॉडकास्ट का इस्तेमाल XlaBuilder
में बाइनरी ऑपरेशन में किया जाता है, अगर
broadcast_dimensions
आर्ग्युमेंट दिया गया है. उदाहरण के लिए, देखें
XlaBuilder::Add.
XLA सोर्स कोड में, इस तरह की ब्रॉडकास्टिंग को कभी-कभी "InDim" कहा जाता है
ब्रॉडकास्ट कर रहा है.
औपचारिक परिभाषा
ब्रॉडकास्टिंग एट्रिब्यूट, कम रैंक वाले अरे को बेहतर रैंक के साथ मैच करने की अनुमति देता है अरे का इस्तेमाल करें. इसके लिए उदाहरण के लिए, MxNxPxQ डाइमेंशन वाली किसी कैटगरी के लिए, T डाइमेंशन वाले वेक्टर का का मिलान इस तरह किया गया:
MxNxPxQ
dim 3: T
dim 2: T
dim 1: T
dim 0: T
हर मामले में, T, ज़्यादा रैंक वाले डाइमेंशन के मेल खाने वाले डाइमेंशन के बराबर होना चाहिए कलेक्शन. इसके बाद, वेक्टर की वैल्यू, मैच होने वाले डाइमेंशन से सभी डाइमेंशन में बदलाव कर सकते हैं.
MxNxPxQ श्रेणी के किसी TxV मैट्रिक्स से मिलान करने के लिए, ब्रॉडकास्टिंग डाइमेंशन का एक जोड़ा इसका इस्तेमाल किया जाता है:
MxNxPxQ
dim 2,3: T V
dim 1,2: T V
dim 0,3: T V
etc...
ब्रॉडकास्टिंग टपल में डाइमेंशन का क्रम, वह क्रम होना चाहिए जिसमें निम्न-रैंक अरे के डाइमेंशन, उच्च-रैंक वाला अरे. टपल का पहला एलिमेंट तय करता है कि किस डाइमेंशन में ऊंची रैंक वाले अरे को कम रैंक वाले अरे में डाइमेंशन 0 से मैच होना चाहिए. कॉन्टेंट बनाने टपल का दूसरा एलिमेंट तय करता है कि ज़्यादा रैंक वाले अरे में कौनसा डाइमेंशन है को निचले रैंक के अरे में डाइमेंशन 1 से मैच करना चाहिए. यह क्रम इसी तरह जारी रहता है. इसका क्रम प्रसारण आयाम सख्ती से बढ़ाए जाने चाहिए. उदाहरण के लिए, पिछले उदाहरण के लिए, V से N और T से P को मैच करना गैर-कानूनी है; V से मेल खाना भी गैर-कानूनी है P और N, दोनों को.
डीजनरेट डाइमेंशन के साथ, मिलती-जुलती रैंक वाले अरे को ब्रॉडकास्ट करना
एक संबंधित समस्या दो ऐसी सरणियों को ब्रॉडकास्ट कर रही है जिनकी रैंक समान है लेकिन डाइमेंशन के लिए अलग-अलग साइज़. NumPy की तरह ही, ऐसा सिर्फ़ तब हो सकता है, जब काम करने वाले हों. दो अरे तब काम करते हैं, जब उनके सभी डाइमेंशन साथ काम करता है. दो डाइमेंशन का इस्तेमाल तब किया जा सकता है, जब:
- वे बराबर हैं या
- उनमें से एक 1 है ("डिजनरेट" डाइमेंशन)
जब दो संगत सरणियां मिलती हैं, तो परिणाम आकार में अधिकतम हर डाइमेंशन इंडेक्स पर दो इनपुट इस्तेमाल करते हैं.
उदाहरण:
- (2,1) और (2,3) से (2,3) तक ब्रॉडकास्ट करें.
- (1,2,5) और (7,2,5) से (7,2,5) तक ब्रॉडकास्ट करें.
- (7,2,5) और (7,1,5) से (7,2,5) तक ब्रॉडकास्ट करें.
- (7,2,5) और (7,2,6) काम नहीं करते और इन्हें ब्रॉडकास्ट नहीं किया जा सकता.
एक खास मामला पैदा होता है और यह काम करता है, जहां हर इनपुट अरे में मौजूदा डाइमेंशन को अलग कर दिया गया है. इस मामले में, यह नतीजा एक "आउटर ऑपरेशन": (2,1) और (1,3) से (2,3) पर ब्रॉडकास्ट किया गया. ज़्यादा उदाहरणों के लिए, उसके बारे में सलाह लें ब्रॉडकास्ट करने के लिए, NumPy दस्तावेज़.
ब्रॉडकास्ट कंपोज़िशन
कम रैंक वाले अरे को बेहतर रैंक वाले अरे पर ब्रॉडकास्ट करना और ब्रॉडकास्ट करना डिजन डाइमेंशन का इस्तेमाल करके, दोनों को एक ही बाइनरी ऑपरेशन में किया जा सकता है. उदाहरण के लिए, 4 साइज़ वाले वेक्टर और 1x2 साइज़ के मैट्रिक्स को साथ में जोड़ा जा सकता है वैल्यू (0) के ब्रॉडकास्ट डाइमेंशन का इस्तेमाल करके:
|1 2 3 4| + [5 6] // [5 6] is a 1x2 matrix, not a vector.
पहले, सदिश को प्रसारण का उपयोग करके 2 रैंक (आव्यूह) तक प्रसारित किया जाता है डाइमेंशन. ब्रॉडकास्ट डाइमेंशन में मौजूद सिंगल वैल्यू (0) से पता चलता है कि वेक्टर का डाइमेंशन शून्य, मैट्रिक्स के डाइमेंशन शून्य से मेल खाता है. इससे ये पैदा होते हैं 4xM साइज़ का मैट्रिक्स, जहां M लेबल को संबंधित वैल्यू से मेल खाने के लिए चुना जाता है डाइमेंशन साइज़ को 1x2 कलेक्शन में रखा जाता है. इसलिए, एक 4x2 मैट्रिक्स तैयार होता है:
|1 1| + [5 6]
|2 2|
|3 3|
|4 4|
इसके बाद, "डाइमेंशन ब्रॉडकास्टिंग को डिजनरेट करें" 1x2 का डाइमेंशन शून्य मैट्रिक्स को सही डाइमेंशन साइज़ से मैच करने के लिए सेट करें:
|1 1| + |5 6| |6 7|
|2 2| + |5 6| = |7 8|
|3 3| + |5 6| |8 9|
|4 4| + |5 6| |9 10|
इसका एक और जटिल उदाहरण है, साइज़ की कैटगरी में 1x2 साइज़ का मैट्रिक्स जोड़ना (1, 2) के ब्रॉडकास्ट डाइमेंशन का इस्तेमाल करके, 4x3x1 आसपेक्ट रेशियो में. पहले 1x2 मैट्रिक्स को ब्रॉडकास्ट किया जाता है ब्रॉडकास्ट डाइमेंशन का इस्तेमाल करके, इंटरमीडिएट Mx1x2 अरे बनाने के लिए, तीसरी रैंक हासिल करने के लिए जहां डाइमेंशन का साइज़ M, बड़े ऑपरेंड के साइज़ से तय होता है ( 4x3x1 कलेक्शन). M, डाइमेंशन 0 पर है ( सबसे बाईं ओर का डाइमेंशन) होता है, क्योंकि डाइमेंशन 1 और 2 को डाइमेंशन के साथ मैप किया जाता है यह संख्या (1, 2) है, क्योंकि ब्रॉडकास्ट डाइमेंशन हैं. यह मध्यवर्ती सारणी को 4x3x1 आव्यूह में जोड़ा जा सकता है डाइमेंशन को डिजनरेट करने से, 4x3x2 वाला अरे नतीजा जनरेट होता है.