Yayınlama

Bu dokümanda, XLA'nın yayın semantiği açıklanmaktadır.

Yayınlama nedir?

Yayınlama, aritmetik işlemler için farklı şekillere sahip diziler oluşturma işlemidir. Terminoloji NumPy yayınından alınmıştır.

Yayın, farklı sıralamalara sahip çok boyutlu diziler veya farklı ama uyumlu şekillere sahip çok boyutlu diziler arasındaki işlemler için gerekli olabilir. Toplama X+v işlemini düşünün. Burada X bir matris (sıralama 2 dizisi) ve v bir vektör (1. sıra dizisi) olur. Öğe bazında toplama işlemi gerçekleştirmek için XLA'nın, v vektörünü belirli sayıda v çoğaltarak X matrisi ile aynı sıralamaya "yayınlaması" gerekir. Vektörün uzunluğu, matrisin boyutlarından en az biriyle eşleşmelidir.

Örneğin:

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

Matrisin boyutları (2,3) ve vektörün boyutu (3)'tür. Vektör, satırlara kopyalanarak şu değeri alır:

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

NumPy'de buna yayın adı verilir.

İlkeler

XLA dili mümkün olduğunca katı ve müstehcendir, dolaylı "sihirli" özelliklerden kaçınır. Bu tür özellikler, bazı hesaplamaların tanımlanmasını biraz daha kolay hale getirebilir, ancak kullanıcı koduna eklenen daha fazla varsayım pahasına, uzun vadede değiştirilmesi zor olacaktır. Gerekirse istemci düzeyinde sarmalayıcılara dolaylı sihirli özellikler eklenebilir.

Yayıncılığa gelince, XLA, farklı sıralamalardaki diziler arasındaki işlemler için açık yayın spesifikasyonları gerektirir. Bu, mümkün olduğunda spesifikasyon için çıkarım yapan NumPy'den farklıdır.

Daha düşük sıralı bir diziyi daha yüksek sıralamalı bir diziye yayınlama

Skalerler, yayın boyutlarına ilişkin açık bir spesifikasyon olmadan her zaman diziler üzerinden yayınlanabilir. Skaler ile dizi arasındaki öğe düzeyinde ikili işlem, skaler işlemin dizideki her bir öğeye uygulanması anlamına gelir. Örneğin, matrise skaler eklemek, her öğenin skaler ve giriş matrisine karşılık gelen elemanın toplamı olduğu bir matris oluşturmak anlamına gelir.

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

Çoğu yayın ihtiyacı, ikili işlem üzerinde bir dizi boyut kullanılarak yakalanabilir. İşlemdeki girişler farklı sıralamalara sahip olduğunda bu yayın elemanı, üst sıradaki dizideki hangi boyutların düşük-sıralama dizisiyle eşleştirileceğini belirtir.

Önceki örneği düşünün. (2,3) matrisine skaler eklemek yerine, boyut matrisine (2,3) boyut vektörü ekleyin (2,3). Yayın belirtilmeden bu işlem geçersizdir. Matris vektör ekleme işlemini doğru bir şekilde istemek için yayın boyutunu (1) belirtin. Diğer bir deyişle, vektör boyutu matrisin 1. boyutuyla eşleştirilir. 2D'de, boyut 0 satırları, boyut 1 ise sütunları temsil ediyorsa bu, vektörün her bir öğesinin matristeki satır sayısıyla eşleşen boyutta bir sütun olacağı anlamına gelir:

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

Daha karmaşık bir örnek olarak, 3x3 boyutundaki bir matrise (boyutlar (3,3)) 3 öğeli bir vektör (boyut (3)) eklemeyi düşünün. Bu örnek için yayın iki şekilde gerçekleştirilebilir:

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

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

(2) Yayın boyutu olarak 0 kullanılabilir. Her vektör öğesi bir satıra dönüşür 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ıralama şeklinin daha büyük bir sıralama şekli olarak nasıl yayınlandığını açıklayan bir unsur olabilir. Örneğin, 2x3x4 boyutunda bir küboid ve bir 3x4 matris verildiğinde, yayınlanan bir unsur (1,2), matrisin küboidin 1. ve 2. boyutlarıyla eşleştirilmesi anlamına gelir.

Bu yayın türü, broadcast_dimensions bağımsız değişkeni sağlanırsa XlaBuilder bölgesindeki ikili işlemlerde kullanılır. Örneğin, XlaBuilder::Add bölümüne bakın. XLA kaynak kodunda bu yayın türü bazen "InDim" yayın olarak adlandırılır.

Resmi tanım

Yayınlama özelliği, daha yüksek sıralamalı dizinin hangi boyutlarının eşleşeceğini belirterek daha düşük sıralamalı bir diziyi daha yüksek sıralamalı bir diziyle eşleştirmeye olanak tanır. Örneğin, MxNxPxQ boyutlarına sahip bir dizide 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'nin daha yüksek sıralı dizinin eşleşen boyutuna eşit olması gerekir. Ardından vektörün değerleri, 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 bileşenindeki boyutların sırası, düşük sıralamalı dizinin boyutlarının daha yüksek sıralamalı dizinin boyutlarıyla eşleşmesinin beklendiği sırayla olmalıdır. Tuple'daki ilk öğe, daha yüksek sıralamalı dizideki hangi boyutun, düşük sıralamalı dizideki 0. boyutla eşleşmesi gerektiğini belirtir. Tuple'daki ikinci öğe, daha yüksek sıralamalı dizideki hangi boyutun düşük sıralamalı dizideki boyut 1'le eşleşmesi gerektiğini belirtir ve bu böyle devam eder. Yayın boyutlarının sırası sıkı bir şekilde artmalıdır. Örneğin, önceki örnekte V ile N ve T'nin P ile eşleştirilmesi yasa dışıdır; V'nin hem P hem de N ile eşleştirilmesi de yasa dışıdır.

Bozuk boyutlara sahip benzer sıralı dizileri yayınlama

İlgili bir sorun da aynı sıralamaya ancak farklı boyut boyutlarına sahip iki dizinin yayınlanmasıdır. NumPy'de olduğu gibi, bu yalnızca diziler uyumlu olduğunda mümkündür. İki dizi, tüm boyutları uyumlu olduğunda uyumludur. Aşağıdaki durumlarda iki boyut uyumludur:

  • Bunlar eşittir veya
  • Bunlardan biri 1'dir ("bozuk" bir boyut).

İki uyumlu diziyle karşılaşıldığında sonuç şekli, her boyut dizininde en fazla iki girişe sahip olur.

Örnekler:

  1. (2,1) ve (2,3) numaralı anlara yayın yapar.
  2. (1,2,5) ve (7,2,5) anındaki (7,2,5) numaralı telefona yayın yapar.
  3. (7,2,5) ve (7,1,5) anındaki (7,2,5) numaralı telefona yayın yapar.
  4. (7,2,5) ve (7,2,6) uyumsuzdur ve yayınlanamaz.

Her bir giriş dizisinin farklı bir dizinde bozuk bir boyuta sahip olduğu özel bir durum oluşur ve bu durum desteklenir. Bu durumda sonuç bir "dış işlem" olur: (2,1) ve (1,3) (2,3)'e yayın yapar. Daha fazla örnek için yayınlama ile ilgili NumPy belgelerine bakın.

Yayın bestesi

Düşük sıralı bir dizinin daha yüksek sıralı bir diziye yayınlanması ve bozuk boyutlar kullanılarak yayınlamanın her ikisi de aynı ikili program işleminde gerçekleştirilebilir. Örneğin, 4 boyutunda bir vektör ile 1x2 boyutunda bir matris, değer (0) yayın boyutları 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 rütbe 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 işlem, 4xM boyutunda bir matris oluşturur. Burada M değeri, 1x2 dizisindeki karşılık gelen boyut boyutuna uygun olarak seçilir. Bu nedenle, bir 4x2 matris elde edilir:

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

Daha sonra, "boyut yayınlamanın bozulması", sağ tarafın karşılık gelen boyut boyutuyla eşleştirmek için 1x2 matrisin sıfır boyutunu 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 boyutlu bir diziye eklenen 1x2 boyutundaki bir matristir. İlk olarak 1x2 matris, yayın boyutları kullanılarak 3. sıraya kadar yayınlanır. Bu ara Mx1x2 dizisi, M boyutu ile birlikte, 4x1x2 boyutunda bir ara dizi üreten daha büyük işlenenin (4x3x1 dizi) boyutuyla belirlenir. M boyutu 0'dır (en soldaki boyut). Çünkü 1 ve 2 boyutları, yayın boyutları (1, 2) olduğu için orijinal 1x2 matrisin boyutlarıyla eşlenir. Bu ara dizi, 4x3x2 boyutunda bir dizi sonucu oluşturmak için bozuk boyutların yayınlanması kullanılarak 4x3x1 matrise eklenebilir.