Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Yayın semantiği

Bu belgede, XLA'daki yayın semantiğinin nasıl çalıştığı açıklanmaktadır.

Yayın nedir?

Yayın, farklı şekillerdeki dizilerin aritmetik işlemler için uyumlu şekillere sahip hale getirilmesi işlemidir. Terminoloji Numpy yayınlarından ödünç alınmıştır.

Farklı düzeylerdeki çok boyutlu diziler arasındaki veya farklı ancak uyumlu şekillere sahip çok boyutlu diziler arasındaki işlemler için yayın gerekebilir. X+v ilavesini düşünün, burada X bir matristir (sıra 2 dizisi) ve v bir vektördür (sıra 1 dizisi). Öğeye ilave gerçekleştirmek için, XLA "yayını" Vektör ihtiyacı v matris ile aynı sıraya X çoğaltarak, v kez belirli sayıda. Vektörün uzunluğu, matrisin boyutlarından en az birine uymalıdır.

Örneğin:

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

Matrisin boyutları (2,3), vektörler (3). Vektör elde etmek için satırlar üzerinde çoğaltılarak 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ın denir.

Prensipler

XLA dili, örtük ve "büyülü" özelliklerden kaçınarak mümkün olduğunca katı ve açıktır. Bu tür özellikler, uzun vadede değiştirilmesi zor olacak kullanıcı kodunda yapılan daha fazla varsayım pahasına, bazı hesaplamaların tanımlanmasını biraz daha kolaylaştırabilir. Gerekirse, istemci düzeyinde paketlere örtük ve büyülü özellikler eklenebilir.

Yayın ile ilgili olarak, farklı kademelerdeki diziler arasındaki operasyonlarla ilgili açık yayın spesifikasyonları gereklidir. Bu, mümkün olduğunda spesifikasyonu ihlal eden Numpy'den farklıdır.

Düşük rütbeli bir diziyi yüksek rütbeli bir diziye yayınlama

Skalerler , yayın boyutlarının açık bir belirtimi olmadan her zaman diziler üzerinden yayınlanabilir. Bir skaler ve bir dizi arasındaki element-bazlı ikili işlem, dizideki her eleman için skalerle işlemin uygulanması anlamına gelir. Örneğin, bir matrise skaler eklemek, her bir elemanı karşılık gelen giriş matrisinin elemanı ile skalerin toplamı olan bir matris üretmek anlamına gelir.

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

Çoğu yayın gereksinimi, bir ikili işlemde bir dizi boyut kullanılarak yakalanabilir. İşleme girişler farklı sıralara sahip olduğunda, bu yayın grubu daha yüksek sıra dizisindeki hangi boyutların alt sıra dizisiyle eşleşeceğini belirler.

Önceki örneği düşünün, (2,3) matrisine skaler eklemek yerine, boyut (3) matrisine boyut (3) 'ün vektörünü ekleyin. Yayın belirtilmeden bu işlem geçersizdir. Matris-vektör eklemesini doğru bir şekilde istemek için, yayın boyutunu (1) olarak belirtin, yani vektörün boyutu matrisin 1. boyutuyla eşleşir. 2B'de, boyut 0 satırlar ve boyut 1 sütunlar olarak kabul edilirse, bu, vektörün her öğesinin matristeki satır sayısıyla eşleşen boyutta bir sütun haline geldiği anlamına gelir:

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

Daha karmaşık bir örnek olarak, 3x3 matrisine (boyutlar (3,3)) 3 elemanlı bir vektör (boyut (3)) eklemeyi düşünün. Bu örnek için yayın yapmanın iki yolu vardır:

(1) 1 yayın boyutu kullanılabilir. Her vektör öğesi bir sütun haline gelir ve vektör, matristeki her satır için çoğaltılır.

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

(2) 0 yayın boyutu kullanılabilir. Her vektör öğesi bir satır haline gelir ve vektör matristeki her sütun için çoğaltılır.

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

Yayın boyutları, daha küçük bir sıra şeklinin daha büyük bir sıra şeklinde nasıl yayınlandığını açıklayan bir grup olabilir. Örneğin, bir 2x3x4 küboid ve 3x4 bir matris verildiğinde, bir yayın tupu (1,2) matrisi küboid boyutlarına 1 ve 2 ile eşleştirmek anlamına gelir.

broadcast_dimensions bağımsız değişkeni XlaBuilder , bu broadcast_dimensions XlaBuilder ikili işlemlerde kullanılır. Örneğin, bkz. XlaBuilder :: Ekle . XLA kaynak kodunda, bu tür yayınlara bazen "InDim" yayını denir.

Resmi tanımlama

Broadcasting özniteliği, daha düşük rütbeli bir dizinin, daha yüksek rütbeli dizinin hangi boyutlarının eşleşeceğini belirleyerek eşleştirilmesini sağlar. Örneğin, MxNxPxQ boyutlarına sahip bir dizi için, T boyutuna sahip bir vektör aşağıdaki gibi eşleştirilebilir:

           MxNxPxQ

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

Her durumda, T, daha üst sıradaki dizinin eşleşen boyutuna eşit olmalıdır. Vektörün değerleri daha sonra eşleşen boyuttan diğer tüm boyutlara yayınlanır.

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

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

Yayın grubundaki boyutların sırası, alt sıra dizisinin boyutlarının daha üst sıra dizinin boyutlarıyla eşleşmesi beklenen sıra olmalıdır. Gruptaki ilk öğe, daha üst sıradaki dizideki hangi boyutun, alt sıradaki dizinin 0 boyutuyla eşleşmesi gerektiğini belirtir. Boyut 1 için ikinci öğe vb. Yayın boyutlarının sırası kesinlikle artmalıdır. Örneğin, önceki örnekte V ile N ve T ile P'yi eşleştirmek yasadışıdır; V'yi P ve N ile eşleştirmek de yasadışıdır.

Dejenere boyutlara sahip benzer sıralı diziler yayınlama

İlgili bir yayıncılık sorunu, aynı sıralamaya sahip ancak farklı boyut boyutlarına sahip iki dizinin yayınlanmasıdır. Numpy kurallarına benzer şekilde, bu sadece diziler uyumlu olduğunda mümkündür. Tüm boyutları uyumlu olduğunda iki dizi uyumludur. Aşağıdaki durumlarda iki boyut uyumludur:

  • Eşittirler veya
  • Bunlardan biri 1 ("dejenere" boyut)

İki uyumlu diziyle karşılaşıldığında, sonuç şekli her boyut dizinindeki iki giriş arasında maksimuma sahiptir.

Örnekler:

  1. (2,1) ve (2,3) 'de (2,3)' e yayın yapar.
  2. (1,2,5) ve (7,2,5) 'ye yayın (7,2,5)
  3. (7,2,5) ve (7,1,5) 'ye yayın (7,2,5)
  4. (7,2,5) ve (7,2,6) uyumsuzdur ve yayınlanamaz.

Giriş dizilerinin her birinin farklı bir dizinde dejenere bir boyuta sahip olduğu özel bir durum ortaya çıkar ve desteklenir. Bu durumda sonuç bir "dış işlemdir": (2,1) ve (1,3) (2,3) 'e yayınlanır. Daha fazla örnek için yayın konusundaki Numpy belgelerine bakın.

Yayın kompozisyonu

Alt sıralı bir dizinin daha yüksek sıralı bir diziye yayınlanması ve dejenere boyutlar kullanılarak yayın yapılması aynı ikili işlemde gerçekleştirilebilir. Örneğin, 4 büyüklüğünde bir vektör ve 1x2 büyüklüğünde bir matris, (0) yayın boyutları değeri kullanılarak birlikte eklenebilir:

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

İlk olarak vektör, yayın boyutları kullanılarak sıralama 2'ye (matris) kadar yayınlanır. Yayın boyutlarındaki tek değer (0), vektörün sıfır boyutunun, matrisin sıfır boyutuyla eşleştiğini gösterir. Bu, 4xM boyutunda bir matris üretir; burada M değeri, 1x2 dizisindeki karşılık gelen boyut boyutuna uyacak şekilde seçilir. Bu nedenle, 4x2'lik bir matris üretilir:

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

Sonra "boyut yayınını dejenere edin", 1x2 matrisinin sıfır boyutunu sağ tarafın karşılık gelen boyut boyutuyla eşleşecek şekilde yayınlar:

 |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, (1, 2) yayın boyutları kullanılarak 4x3x1 boyutunda bir diziye eklenen 1x2 boyutunda bir matristir. İlk olarak 1x2 matrisi, ara boyut Mx1x2 dizisi üretmek için yayın boyutları kullanılarak 3. sıraya kadar yayınlanır; burada M boyut boyutu, 4x1x2 ara dizi üreten daha büyük işlenenin (4x3x1 dizisi) boyutuna göre belirlenir. M, 0 boyutundadır (en soldaki boyut) çünkü 1 ve 2 boyutları, yayın boyutu (1, 2) olduğu için orijinal 1x2 matrisinin boyutlarıyla eşlenir. Bu ara dizi, 4x3x2 dizi sonucu üretmek için dejenere boyutların yayınlanmasıyla 4x3x1 matrisine eklenebilir.