این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

معانی پخش

این سند چگونگی عملکرد معانی پخش در XLA را شرح می دهد.

پخش چیست؟

پخش ، فرآیند ساختن آرایه ها با اشکال مختلف دارای اشکال سازگار برای عملیات حسابی است. این اصطلاحات از پخش ناپولی وام گرفته شده است.

پخش ممکن است برای عملیات بین آرایه های چند بعدی از رده های مختلف یا بین آرایه های چند بعدی با اشکال متفاوت اما سازگار مورد نیاز باشد. X+v در نظر بگیرید که X یک ماتریس (آرایه ای از درجه 2) و v یک بردار است (آرایه ای از درجه 1). برای انجام علاوه بر عناصر عاقلانه ، XLA باید با تکرار v تعداد معینی از بار ، بردار v به همان درجه ماتریس X "پخش کند". طول بردار باید حداقل با یکی از ابعاد ماتریس مطابقت داشته باشد.

مثلا:

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

ابعاد پخش می تواند یک راه حل باشد که توصیف می کند که چگونه یک شکل از رتبه های کوچکتر به شکل درجه ای بزرگتر پخش می شود. به عنوان مثال ، با توجه به یک مکعب 2x3x4 و ماتریس 3x4 ، یک توپ پخش (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...
 

ترتیب ابعاد در نوار پخش باید به ترتیب باشد که در آن پیش بینی می شود ابعاد آرایه پایین تر با ابعاد آرایه های رتبه بالاتر مطابقت داشته باشد. عنصر اول در tuple می گوید که کدام بعد در آرایه با درجه بالاتر باید از بعد 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 است که با استفاده از ابعاد پخش (1 ، 2) به آرایه ای با اندازه 4x3x1 اضافه شده است. ابتدا ماتریس 1x2 با استفاده از ابعاد پخش تا رتبه 3 پخش می شود تا یک آرایه Mx1x2 میانی تولید کند که در آن اندازه ابعاد M با اندازه کارگر بزرگتر (آرایه 4x3x1) تولید یک آرایه میانی 4x1x2 تعیین می شود. M در ابعاد 0 (از بعد چپ) زیرا ابعاد 1 و 2 با ابعاد ماتریس اصلی 1x2 به عنوان ابعاد پخش (1 ، 2) ترسیم شده است. این آرایه میانی را می توان با استفاده از پخش ابعاد انحطاط یافته به ماتریس 4x3x1 اضافه کرد تا نتیجه آرایه 4x3x2 حاصل شود.