ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

بث الدلالات

يصف هذا المستند كيفية عمل دلالات البث في XLA.

ما هو البث؟

البث هو عملية صنع صفائف بأشكال مختلفة لها أشكال متوافقة للعمليات الحسابية. يتم استعارة المصطلحات من البث Numpy.

قد يكون البث مطلوبًا للعمليات بين المصفوفات متعددة الأبعاد من الرتب المختلفة ، أو بين المصفوفات متعددة الأبعاد ذات الأشكال المختلفة ولكن المتوافقة. خذ بعين الاعتبار إضافة X+v حيث X هي مصفوفة (صفيف من الرتبة 2) و 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 صارمة وصريحة قدر الإمكان ، وتجنب الميزات الضمنية و "السحرية". قد تجعل هذه الميزات بعض الحسابات أسهل قليلاً في التحديد ، على حساب المزيد من الافتراضات المخزنة في كود المستخدم والتي سيكون من الصعب تغييرها على المدى الطويل. إذا لزم الأمر ، يمكن إضافة ميزات ضمنية وسحرية في أغلفة على مستوى العميل.

فيما يتعلق بالبث ، مطلوب مواصفات البث الصريح على العمليات بين صفائف من مختلف الرتب. هذا يختلف عن Numpy ، الذي يدخل المواصفات عندما يكون ذلك ممكنًا.

بث مصفوفة أقل مرتبة على مصفوفة أعلى رتبة

يمكن دائمًا بث المقاييس عبر المصفوفات بدون تحديد صريح لأبعاد البث. تعني العملية الثنائية من حيث العناصر بين العدد والصفيف تطبيق العملية مع العدد لكل عنصر في الصفيف. على سبيل المثال ، تعني إضافة مقياس إلى مصفوفة إنتاج مصفوفة يكون كل عنصر منها عبارة عن مجموع العدد مع عنصر مصفوفة الإدخال المقابل.

 |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|
 

كمثال أكثر تعقيدًا ، ضع في اعتبارك إضافة متجه مكون من 3 عناصر (البعد (3)) إلى مصفوفة 3x3 (الأبعاد (3،3)). هناك طريقتان يمكن أن يحدث البث لهذا المثال:

(1) يمكن استخدام بُعد إذاعي من 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|
 

يمكن أن تكون أبعاد البث مجموعة تصف كيف يتم بث شكل الترتيب الأصغر إلى شكل رتبة أكبر. على سبيل المثال ، بالنظر إلى مكعب 2 × 3 × 4 ومصفوفة 3 × 4 ، فإن مجموعة البث (1،2) تعني مطابقة المصفوفة مع الأبعاد 1 و 2 من المكعبة.

يتم استخدام هذا النوع من البث في العمليات الثنائية في XlaBuilder ، إذا تم تقديم وسيطة XlaBuilder broadcast_dimensions . على سبيل المثال ، راجع XlaBuilder :: Add . في كود مصدر XLA ، يسمى هذا النوع من البث أحيانًا بث "InDim".

تعريف رسمي

تسمح سمة البث بمطابقة مصفوفة أقل رتبة مع مصفوفة أعلى مرتبة ، من خلال تحديد أبعاد الصفيف الأعلى المراد مطابقته. على سبيل المثال ، بالنسبة لمصفوفة ذات أبعاد MxNxPxQ ، يمكن مطابقة المتجه مع البعد T على النحو التالي:

           MxNxPxQ

dim 3:          T
dim 2:        T
dim 1:      T
dim 0:    T
 

في كل حالة ، يجب أن تكون T مساوية للبعد المطابق لصفيف الرتبة الأعلى. ثم يتم بث قيم المتجه من البعد المتطابق إلى جميع الأبعاد الأخرى.

لمطابقة مصفوفة TxV مع مصفوفة MxNxPxQ ، يتم استخدام زوج من أبعاد البث:

           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 (بعد "منحط")

عند مواجهة صفيفين متوافقين ، يكون لشكل النتيجة الحد الأقصى بين المدخلين في كل مؤشر أبعاد.

أمثلة:

  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 حيث يتم اختيار القيمة 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 مضافة إلى صفيف حجم 4x3x1 باستخدام أبعاد البث (1 ، 2). أولاً يتم بث مصفوفة 1x2 حتى الرتبة 3 باستخدام أبعاد البث لإنتاج صفيف متوسط ​​Mx1x2 حيث يتم تحديد حجم البعد M من حجم المعامل الأكبر (الصفيف 4x3x1) الذي ينتج صفيف وسيط 4x1x2. يكون M في البعد 0 (أقصى اليسار) لأن الأبعاد 1 و 2 يتم تعيينهما إلى أبعاد مصفوفة 1x2 الأصلية لأن أبعاد البث هي (1 ، 2). يمكن إضافة هذا المصفوفة الوسيطة إلى مصفوفة 4x3x1 باستخدام بث الأبعاد المتدهورة لإنتاج نتيجة صفيف 4x3x2.