इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

प्रसारण शब्दार्थ

यह दस्तावेज़ बताता है कि XLA में प्रसारण शब्दार्थ कैसे काम करता है।

प्रसारण क्या है?

प्रसारण विभिन्न आकारों के साथ सरणियों को बनाने की प्रक्रिया है जिसमें अंकगणितीय संचालन के लिए संगत आकार हैं। शब्दावली को Numpy प्रसारण से उधार लिया गया है।

विभिन्न रैंकों के बहुआयामी सरणियों के बीच, या विभिन्न लेकिन संगत आकृतियों के साथ बहुआयामी सरणियों के बीच संचालन के लिए प्रसारण की आवश्यकता हो सकती है। इसके अलावा X+v पर विचार करें जहां X एक मैट्रिक्स है (रैंक 2 की एक सरणी) और v एक वेक्टर (रैंक 1 की एक सरणी) है। तत्व-वार जोड़ करने के लिए, XLA को एक निश्चित संख्या में v प्रतिकृति बनाकर, 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 भाषा जितनी संभव हो उतनी सख्त और स्पष्ट है, निहित और "जादुई" सुविधाओं से बचती है। इस तरह की सुविधाएँ कुछ संगणनाओं को परिभाषित करने के लिए थोड़ा आसान बना सकती हैं, उपयोगकर्ता कोड में पके हुए अधिक मान्यताओं की कीमत पर जो दीर्घकालिक में बदलना मुश्किल होगा। यदि आवश्यक हो, तो क्लाइंट-स्तर के रैपर में अंतर्निहित और जादुई विशेषताएं जोड़ी जा सकती हैं।

प्रसारण के संबंध में, विभिन्न रैंकों के सरणियों के बीच संचालन पर स्पष्ट प्रसारण विनिर्देशों की आवश्यकता है। यह Numpy से अलग है, जो संभव होने पर विनिर्देश को संक्रमित करता है।

निम्न-श्रेणी के सरणी को उच्च-श्रेणी के सरणी पर प्रसारित करना

प्रसारण आयामों के स्पष्ट विवरण के बिना स्केल को हमेशा सरणियों पर प्रसारित किया जा सकता है। स्केलर और एरे के बीच एक तत्व-वार बाइनरी ऑपरेशन का अर्थ है एरे में प्रत्येक तत्व के लिए स्केलर के साथ ऑपरेशन को लागू करना। उदाहरण के लिए, एक मैट्रिक्स में एक स्केलर जोड़ने का मतलब है कि प्रत्येक तत्व का एक मैट्रिक्स का उत्पादन करना, जो इसी इनपुट मैट्रिक्स के तत्व के साथ स्केलर का योग है।

 |1 2 3| + 7 = |8  9  10|
|4 5 6|       |11 12 13|
 

द्विआधारी ऑपरेशन पर आयामों के टपल का उपयोग करके अधिकांश प्रसारण आवश्यकताओं को कैप्चर किया जा सकता है। जब ऑपरेशन के इनपुट में अलग-अलग रैंक होते हैं, तो यह ब्रॉडकास्टिंग टपल निम्न-रैंक सरणी के साथ मैच करने के लिए उच्च-रैंक सरणी में कौन से आयाम (ओं) को निर्दिष्ट करता है।

पिछले उदाहरण पर विचार करें, (2,3) मैट्रिक्स में स्केलर जोड़ने के बजाय, आयामों के मैट्रिक्स (3) को आयामों के मैट्रिक्स (2,3) में जोड़ें। प्रसारण निर्दिष्ट किए बिना, यह ऑपरेशन अमान्य है। मैट्रिक्स-वेक्टर जोड़ का सही ढंग से अनुरोध करने के लिए, प्रसारण आयाम को (1) निर्दिष्ट करें, जिसका अर्थ है कि वेक्टर का आयाम मैट्रिक्स के आयाम 1 से मेल खाता है। 2 डी में, यदि आयाम 0 को पंक्तियों के रूप में और आयाम 1 को कॉलम के रूप में माना जाता है, तो इसका मतलब है कि वेक्टर का प्रत्येक तत्व मैट्रिक्स में पंक्तियों की संख्या से मेल खाते आकार का एक स्तंभ बन जाता है:

 |7 8 9| ==> |7 8 9|
            |7 8 9|
 

अधिक जटिल उदाहरण के रूप में, 3-तत्व वेक्टर (आयाम (3)) को 3x3 मैट्रिक्स (आयाम (3,3)) में जोड़ने पर विचार करें। इस उदाहरण के लिए प्रसारण के दो तरीके हो सकते हैं:

(1) 1 के प्रसारण आयाम का उपयोग किया जा सकता है। प्रत्येक वेक्टर तत्व एक स्तंभ बन जाता है और वेक्टर मैट्रिक्स में प्रत्येक पंक्ति के लिए डुप्लिकेट होता है।

 |7 8 9| ==> |7 8 9|
            |7 8 9|
            |7 8 9|
 

(२) ० के प्रसारण आयाम का उपयोग किया जा सकता है। प्रत्येक वेक्टर तत्व एक पंक्ति बन जाता है और मैट्रिक्स मैट्रिक्स में प्रत्येक कॉलम के लिए दोहराया जाता है।

  |7| ==> |7 7 7|
 |8|     |8 8 8|
 |9|     |9 9 9|
 

प्रसारण आयाम एक टपल हो सकता है जो बताता है कि कैसे एक छोटे रैंक आकार को बड़े रैंक आकार में प्रसारित किया जाता है। उदाहरण के लिए, एक 2x3x4 क्यूबॉइड और 3x4 मैट्रिक्स दिया जाता है, एक प्रसारण ट्यूपल (1,2) का अर्थ है मैट्रिक्स को क्यूबॉइड के 1 और 2 के आयाम से मिलान करना।

इस प्रकार के प्रसारण का उपयोग XlaBuilder में द्विआधारी ऑप्स में किया XlaBuilder , यदि broadcast_dimensions तर्क दिया जाता है। उदाहरण के लिए, XlaBuilder :: जोड़ें देखें। XLA स्रोत कोड में, इस प्रकार के प्रसारण को कभी-कभी "इनडीम" प्रसारण कहा जाता है।

औपचारिक परिभाषा

प्रसारण विशेषता निम्न-श्रेणी के सरणी को उच्च-श्रेणी के सरणी से मेल खाने की अनुमति देती है, यह निर्दिष्ट करके कि उच्च-रैंक सरणी के कौन से आयाम मिलान के लिए। उदाहरण के लिए, MxNxPxQ आयाम के साथ एक सरणी के लिए, आयाम टी के साथ एक वेक्टर निम्नानुसार मिलान किया जा सकता है:

           MxNxPxQ

dim 3:          T
dim 2:        T
dim 1:      T
dim 0:    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 का मिलान करना अवैध है; P और N दोनों से V का मिलान करना भी अवैध है।

पतित आयामों के साथ समान-रैंक सरणियों का प्रसारण

एक संबंधित प्रसारण समस्या दो सरणियों को प्रसारित कर रही है जिसमें समान रैंक लेकिन विभिन्न आयाम आकार हैं। Numpy के नियमों के समान, यह केवल तभी संभव है जब सरणियाँ संगत हों । दो सरणियाँ संगत हैं जब उनके सभी आयाम संगत हैं। दो आयाम संगत हैं यदि:

  • वे समान हैं, या
  • उनमें से एक 1 है (एक "पतित" आयाम)

जब दो संगत सरणियों का सामना किया जाता है, तो परिणाम आकार में प्रत्येक आयाम सूचकांक पर दो आदानों के बीच अधिकतम होता है।

उदाहरण:

  1. (2,1) और (2,3) प्रसारण (2,3)।
  2. (1,2,5) और (7,2,5) प्रसारण (7,2,5)
  3. (7,2,5) और (7,1,5) प्रसारण (7,2,5)
  4. (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 आकार के एक मैट्रिक्स का उत्पादन करता है जहां 1x2 सरणी में संबंधित आयाम आकार से मेल करने के लिए मान M चुना जाता है। इसलिए, एक 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 आकार का एक मैट्रिक्स है जो कि आकार के एक सरणी में जोड़ा गया है 4x3x1 (1, 2) के प्रसारण आयामों का उपयोग करके। पहले 1x2 मैट्रिक्स को इंटरमीडिएट Mx1x2 सरणी बनाने के लिए प्रसारण आयामों का उपयोग करके रैंक 3 तक प्रसारित किया जाता है जहां आयाम आकार M बड़े ऑपरेटर (4x3x1 सरणी) के आकार से निर्धारित होता है जो 4x1x2 मध्यवर्ती सरणी का उत्पादन करता है। M आयाम 0 (बाएं-सबसे आयाम) पर है क्योंकि 1 और 2 आयामों को मूल 1x2 मैट्रिक्स के आयामों में मैप किया जाता है क्योंकि प्रसारण आयाम (1, 2) हैं। यह मध्यवर्ती सरणी 4x3x2 मिलियन परिणाम उत्पन्न करने के लिए पतित आयामों के प्रसारण का उपयोग करके 4x3x1 मैट्रिक्स में जोड़ा जा सकता है।