البث

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

في ما يتعلّق بالبث، تتطلّب لغة XLA مواصفات بث واضحة. على العمليات بين الصفائف المختلفة. ويختلف هذا عن NumPy، والتي تستنتج المواصفات متى أمكن.

بث مصفوفة ترتيب أدنى على مصفوفة ترتيب أعلى

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

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

يمكن تلبية معظم احتياجات البث باستخدام مجموعة من الأبعاد على عملية ثنائية. عندما يكون لمدخلات العملية ترتيبات مختلفة، فإن هذا صف البث يحدد الأبعاد(الأبعاد) الموجودة في المصفوفة higher-rank التي يجب تتطابق مع مصفوفة الترتيب الأدنى.

بالنظر إلى المثال السابق. وبدلاً من إضافة عدد قياسي إلى مصفوفة (2,3)، أضف متجه البعد (3) إلى مصفوفة أبعاد (2,3). بدون تحديد جارٍ البث، هذه العملية غير صالحة. لطلب متجه المصفوفة بشكل صحيح بالإضافة إلى ذلك، حدد بُعد البث ليكون (1)، بمعنى أن يكون الخط المتجه تتم مطابقة البعد مع البُعد 1 للمصفوفة. في الوضع الثنائي الأبعاد، إذا كانت السمة 0 يمثل الصفوف والبُعد 1 يمثل الأعمدة، فهذا يعني أن كل عنصر يصبح الخط المتجه عمودًا بحجم يتطابق مع عدد الصفوف في المصفوفة:

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

كمثال أكثر تعقيدًا، نقترح إضافة متجه ثلاثي العناصر (البُعد (3)) إلى مصفوفة 3×3 (الأبعاد (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، إذا كانت تم تقديم الوسيطة broadcast_dimensions. على سبيل المثال، راجع XlaBuilder::إضافة. في رمز المصدر 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 ومصفوفة بحجم 1×2 معًا باستخدام أبعاد البث للقيمة (0):

|1 2 3 4| + [5 6]    // [5 6] is a 1x2 matrix, not a vector.

أولًا يتم بث الخط المتجه حتى يصل إلى الترتيب 2 (المصفوفة) باستخدام البث الأبعاد. تشير القيمة الفردية (0) في أبعاد البث إلى أنّ ويتطابق البعد صفر للخط المتجه مع البعد صفر في المصفوفة. ينتج عن ذلك مصفوفة بحجم 4× م حيث يتم اختيار القيمة M لتتطابق مع حجم البعد في صفيفة 1×2. وبالتالي، يتم إنشاء مصفوفة 4×2:

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

وهناك مثال أكثر تعقيدًا وهو مصفوفة بحجم 1×2 مضافة إلى صفيف من حجمها 4×3×1 باستخدام أبعاد البث (1، 2). أولًا، يتم بث مصفوفة 1×2 لأعلى للحصول على ترتيب 3 باستخدام أبعاد البث لإنتاج صفيفة Mx1x2 متوسطة حيث يتمّ تحديد حجم البعد M من خلال حجم المعامل الأكبر ( مصفوفة 4×3×1) تنتج صفيفة متوسطة مقاس 4×1×2. يقع الحرف M في البعد 0 ( البُعد الذي يظهر في أقصى اليمين) لأنه يتم ربط البُعدين 1 و2 بالأبعاد في مصفوفة 1×2 الأصلية كما أن أبعاد البث هي (1، 2). هذا النمط يمكن إضافة صفيفة متوسطة إلى مصفوفة 4×3×1 باستخدام بث تلغي الأبعاد لإنتاج نتيجة صفيفة 4×3×2.