Yayınlama

Bu dokümanda, XLA'nın yayınlama anlamı açıklanmaktadır.

Yayınlama nedir?

Yayıncılık, farklı şekillere sahip diziler oluşturma işlemidir. aritmetik işlemler için uyumlu şekiller içerir. Bu terminoloji NumPy yayınlama.

Çok boyutlu diziler arasındaki işlemler için yayın gerekebilir. diziler arasında farklı sıralamalara sahip ancak farklı ama çok uyumlu şekiller oluşturabilirsiniz. X değerinin bir matris (dizi) olduğu X+v toplama işlemini düşünün sıra 2) ve v bir vektör (1. sıra dizisi) olduğu anlamına gelir. Öğe bazında gerçekleştirmek için Ayrıca, XLA'nın "yayın yapması" v vektörü ile aynı sıralamaya v öğesini belirli sayıda çoğaltarak X matrisini oluşturun. Vektörün uzunluğu matrisin boyutlarından en az biriyle eşleşmesi gerekir.

Örneğin:

|1 2 3| + |7 8 9|
|4 5 6|

Matrisin boyutları (2,3), vektörün boyutu ise (3) şeklindedir. Vektör işlemi, satırların üzerine kopyalanarak yayınlanır ve şu şekilde yayınlanır:

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

NumPy'de buna yayınlama.

İlkeler

XLA dili mümkün olduğunca katı ve açık olmalı, üstü kapalı yapılmamalıdır "sihirli" özellikleri. Bu tür özellikler bazı hesaplamaları biraz daha kolaylaştırabilir daha fazla varsayımın ortaya çıkmasına neden olmak kaydıyla değiştirmesi zordur. Gerekirse üstü kapalı sihirli özellikler istemci düzeyinde sarmalayıcılara eklenebilir.

XLA, yayıncılık söz konusu olduğunda açık yayın teknik özellikleri gerektirir diziler arasındaki işlemlere yönelik işlemlerdir. Bu, NumPy'den farklıdır, Bu, mümkün olduğunda spesifikasyon çıkarımı yapar.

Daha düşük sıralamaya sahip bir diziyi daha yüksek sıralamaya sahip bir dizide yayınlama

Scalars, açık bir spesifikasyon olmadan her zaman diziler üzerinden yayınlanabilir her şeyi kapsıyor. Skaler arasındaki eleman tabanlı ikili işlem ise dizi, skaler işlemin tablodaki her öğeye uygulanması anlamına gelir. dizisidir. Örneğin, bir matrise skaler eklemek, Bu her elemanın skaler toplamı ve giriş matrisi.

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

Çoğu yayın ihtiyaçları, yayın planında birkaç boyut kullanılarak yakalanabilir. ikili işlemidir. İşlem girişleri farklı sıralamalara sahip olduğunda publish tuple, daha yüksek sıralama dizisinde hangi boyutların alt sıra dizisiyle eşleşir.

Bir önceki örneği inceleyelim. (2,3) matrisine skaler değer eklemek yerine boyut (2,3) matrisine boyut (3) vektörünü oluşturur. Belirtmeden bu işlem geçersiz. Matris vektörünü doğru şekilde istemek için (1) olacak şekilde yayın boyutunu belirtin. Bu, vektörün boyutu, matrisin 1. boyutuyla eşleştirilir. 2D olarak, boyut 0 ise satırları ve boyut 1 sütunları temsil eder. Diğer bir deyişle, her bir öğe biçimi, matris:

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

Daha karmaşık bir örnek olarak, bir satıra 3 öğeli bir vektör (boyut (3)) 3x3 matris (boyutlar (3,3)). Ekip üyeleriniz için yayın yapmanın iki yolu vardır: şu örnekteki gibi:

(1) Yayın boyutu olarak 1 kullanılabilir. Her bir vektör öğesi sütununa ve vektör, matristeki her bir satır için kopyalanır.

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

(2) 0 olarak ayarlanmış bir yayın boyutu kullanılabilir. Her vektör öğesi bir satır haline gelir ve vektör, matristeki her bir sütun için kopyalanır.

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

Yayın boyutları, daha düşük bir sıralamanın daha büyük bir rütbe şeklinde yayınlanır. Örneğin, 2x3x4 küboid 3x4 matris ise yayın faktörü (1, 2), matrisin küboidin 1 ve 2. boyutlarını oluşturur.

Bu yayın türü, XlaBuilder içindeki ikili işlemlerde kullanılır. broadcast_dimensions bağımsız değişkeni verildi. Örneğin, bkz. XlaBuilder::Add (XlaBuilder::Ekle). XLA kaynak kodunda, bu yayın türü bazen "InDim" olarak adlandırılır. yayınlama.

Resmi tanım

Yayın özelliği, daha düşük sıradaki bir diziyi daha yüksek sıralamaya sahip bir diziyle eşleştirmeye olanak tanır. dizisi ile eşleşecektir. Örneğin, Örneğin, MxNxPxQ boyutlarına sahip bir dizi için T boyutlu bir vektör şu şekilde eşleştirildi:

          MxNxPxQ

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

Her durumda, T, daha yüksek sıralamaya sahip olanın eşleşen boyutuna eşit olmalıdır dizisidir. Ardından, vektörün değerleri, eşleşen boyuttan tüm reklam gruplarına yayınlanır diğer boyutları oluşturur.

Bir TxV matrisini MxNxPxQ dizisiyle eşleştirmek için, bir dizi yayın boyutu çifti kullanılır:

          MxNxPxQ
dim 2,3:      T V
dim 1,2:    T V
dim 0,3:  T     V
etc...

Yayın parçasındaki boyutların sırası, alt sıradaki dizinin boyutlarının, ilgili dizinin boyutlarıyla eşleşmesi beklenir. yüksek sıralamaya sahip bir diziyi seçin. Tuple'daki ilk öğe, daha yüksek sıralamaya sahip dizi, alt sıralı dizide 0 boyutuyla eşleşmelidir. İlgili içeriği oluşturmak için kullanılan unsurdaki ikinci öğe, daha yüksek sıralamaya sahip dizide hangi boyutun olduğunu belirtir alt sıradaki dizide 1. boyutla eşleşmesi gerekir. Sıra, yayın boyutları kesinlikle artırılmalıdır. Örneğin, önceki V ile N ve T ile P'nin eşleştirilmesi yasa dışıdır; "V"yi eşlemek de yasa dışıdır. hem P hem de N'ye

Bozuk boyutlarla benzer sıradaki dizileri yayınlama

İlgili bir sorun da aynı sırada ancak farklı boyut boyutları. NumPy'de olduğu gibi, bu yalnızca diziler uyumlu olduğundan emin olun. İki dizi, tüm boyutları şu olduğunda uyumlu olur: uyumlu olmalıdır. Aşağıdaki durumlarda iki boyut uyumludur:

  • Eşit veya
  • Bunlardan biri 1'dir ("dejeneratif" boyut).

İki uyumlu diziyle karşılaşıldığında sonuç şekli maksimum girelim.

Örnekler:

  1. (2,1) ve (2,3) (2,3)'e anons yapar.
  2. (1,2,5) ve (7,2,5)'ten (7,2,5) yayınlanır.
  3. (7,2,5) ve (7,1,5)'ten (7,2,5) yayınlanır.
  4. (7,2,5) ve (7,2,6) uyumsuz ve yayınlanamıyor.

Özel bir durum ortaya çıkar ve bu durum desteklenir. Bu durumda giriş dizilerinin her biri, başka bir dizinde bozuk bir boyuttur. Bu durumda sonuç, "outer transaction" (dış işlem): (2,1) ve (1,3) (2,3)'e yayın yapar. Daha fazla örnek için şurayı inceleyin: Yayınla ilgili NumPy dokümanları.

Yayın bestesi

Alt sıradaki bir dizinin daha üst sıradaki bir diziye yayınlanması ve yayınlanması aynı ikili işlemde gerçekleştirilebilir. Örneğin, 4 boyutunda bir vektör ile 1x2 boyutunda bir matris birlikte toplanabilir. (0) değerindeki yayın boyutlarını kullanarak:

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

İlk olarak vektör, yayın kümesi kullanılarak 2. dereceye (matris) kadar yayınlanır. seçin. Yayın boyutlarındaki tek değer (0) vektörün sıfır boyutu, matrisin sıfır boyutuyla eşleşir. Bu da 4xM boyutunda bir matristir. Bu matriste M değeri, karşılık gelen boyut boyutunu belirtir. Bunun sonucunda 4x2’lik bir matris üretilir:

|1 1| + [5 6]
|2 2|
|3 3|
|4 4|

Ardından "boyut yayınını devre dışı bırak" 1x2'nin sıfır boyutu boyutuyla eşleşecek şekilde ayarlayın:

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

Daha karmaşık bir örnek, bir boyut dizisine eklenen 1x2 boyutunda bir matristir (1, 2) yayın boyutları kullanılarak 4x3x1. İlk olarak 1x2 matrisi yayınlanır bir ara Mx1x2 dizisi oluşturmak üzere yayın boyutlarını kullanarak sıralama 3'e Burada, M boyutu daha büyük işlenenin boyutuyla belirlenir ( 4x3x1 dizi) elde edilir. M'nin boyutu 0'dır ( 1 ve 2 boyutları boyutlarla eşlendiğinden, en soldaki boyut) olan orijinal 1x2 matrisin yayın boyutları (1, 2) şeklinde hesaplanır. Bu ara dizi, şunun yayınlanması kullanılarak 4x3x1 matrisine eklenebilir 4x3x2 dizi sonucu üretmek için boyutları eski haline getirir.