Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Semantyka nadawania

W tym dokumencie opisano sposób działania semantyki nadawania w XLA.

Co nadaje?

Rozgłaszanie to proces tworzenia tablic o różnych kształtach, które mają zgodne kształty dla operacji arytmetycznych. Terminologia jest zapożyczona z Numpy Broadcasting .

Nadawanie może być wymagane w przypadku operacji między wielowymiarowymi tablicami o różnych rangach lub między wielowymiarowymi tablicami o różnych, ale kompatybilnych kształtach. Rozważmy dodanie X+v gdzie X to macierz (tablica rzędu 2), a v to wektor (tablica rzędu 1). Aby wykonać dodawanie elementarne, XLA musi „rozgłaszać” wektor v do tego samego rzędu co macierz X , replikując v określoną liczbę razy. Długość wektora musi odpowiadać co najmniej jednemu z wymiarów macierzy.

Na przykład:

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

Wymiary macierzy to (2,3), wektor to (3). Wektor jest transmitowany przez replikację go w wierszach, aby uzyskać:

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

W Numpy nazywa się to nadawaniem .

Zasady

Język XLA jest tak ścisły i jednoznaczny, jak to tylko możliwe, unikając ukrytych i „magicznych” cech. Takie cechy mogą sprawić, że niektóre obliczenia będą nieco łatwiejsze do zdefiniowania, kosztem większej liczby założeń wprowadzonych do kodu użytkownika, które będą trudne do zmiany w dłuższej perspektywie. W razie potrzeby można dodać ukryte i magiczne funkcje w opakowaniach na poziomie klienta.

Jeśli chodzi o nadawanie, wymagane są wyraźne specyfikacje dotyczące nadawania dotyczące operacji między macierzami o różnych stopniach. Różni się to od Numpy, który podaje specyfikację, gdy jest to możliwe.

Rozgłaszanie tablicy niższego rzędu do tablicy wyższego rzędu

Skalary mogą być zawsze transmitowane przez tablice bez wyraźnej specyfikacji wymiarów rozgłaszania. Elementowa operacja binarna między wartością skalarną a tablicą oznacza zastosowanie operacji ze skalarem dla każdego elementu tablicy. Na przykład dodanie skalara do macierzy oznacza utworzenie macierzy, której każdy element jest sumą skalara z elementem odpowiadającej macierzy wejściowej.

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

Większość potrzeb związanych z rozgłaszaniem można uchwycić za pomocą krotki wymiarów w operacji binarnej. Gdy dane wejściowe operacji mają różne rangi, ta krotka rozgłaszania określa, który wymiar (y) w tablicy wyższego rzędu ma być dopasowany do tablicy niższego rzędu .

Rozważmy poprzedni przykład, zamiast dodawać skalar do macierzy (2,3), dodaj wektor wymiaru (3) do macierzy wymiarów (2,3). Bez określenia nadawania ta operacja jest nieprawidłowa. Aby poprawnie zażądać dodania macierzy-wektorów, określ wymiar rozgłaszania na (1), co oznacza, że ​​wymiar wektora jest dopasowany do wymiaru 1 macierzy. W 2D, jeśli wymiar 0 jest traktowany jako wiersze, a wymiar 1 jako kolumny, oznacza to, że każdy element wektora staje się kolumną o rozmiarze odpowiadającym liczbie wierszy w macierzy:

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

Jako bardziej złożony przykład rozważ dodanie 3-elementowego wektora (wymiar (3)) do macierzy 3x3 (wymiary (3,3)). W tym przykładzie nadawanie może odbywać się na dwa sposoby:

(1) Można zastosować wymiar nadawczy 1. Każdy element wektora staje się kolumną, a wektor jest powielany dla każdego wiersza macierzy.

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

(2) Można użyć wymiaru nadawania równego 0. Każdy element wektora staje się wierszem, a wektor jest duplikowany dla każdej kolumny macierzy.

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

Rozgłaszane wymiary mogą być krotką, która opisuje, w jaki sposób mniejszy kształt rangi jest transmitowany do większego kształtu rangi. Na przykład, biorąc pod uwagę prostopadłościan 2x3x4 i macierz 3x4, krotka rozgłoszeniowa (1,2) oznacza dopasowanie macierzy do wymiarów 1 i 2 prostopadłościanu.

Ten typ emisji jest używany w XlaBuilder binarnych w XlaBuilder , jeśli podano argument broadcast_dimensions . Na przykład zobacz XlaBuilder :: Add . W kodzie źródłowym XLA ten typ emisji jest czasami nazywany nadawaniem „InDim”.

Definicja formalna

Atrybut rozgłaszania umożliwia dopasowanie tablicy o niższej randze do tablicy o wyższej randze przez określenie, które wymiary tablicy o wyższej randze mają być dopasowane. Na przykład dla tablicy o wymiarach MxNxPxQ wektor o wymiarze T można dopasować w następujący sposób:

           MxNxPxQ

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

W każdym przypadku T musi być równe dopasowanemu wymiarowi tablicy wyższego rzędu. Wartości wektora są następnie transmitowane z dopasowanego wymiaru do wszystkich innych wymiarów.

Aby dopasować macierz TxV do macierzy MxNxPxQ, stosuje się parę wymiarów transmisji:

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

Kolejność wymiarów w krotce rozgłaszania musi być kolejnością, w której oczekuje się, że wymiary tablicy niższego rzędu będą pasować do wymiarów tablicy wyższego rzędu. Pierwszy element krotki mówi, który wymiar w tablicy wyższego rzędu musi pasować do wymiaru 0 w tablicy niższego rzędu. Drugi element wymiaru 1 i tak dalej. Kolejność wymiarów transmisji musi być ściśle zwiększana. Na przykład w poprzednim przykładzie niedozwolone jest dopasowanie V do N i T do P; niezgodne z prawem jest również dopasowanie V do P i N.

Nadawanie tablic o podobnej randze ze zdegenerowanymi wymiarami

Powiązany problem z rozgłaszaniem polega na rozgłaszaniu dwóch tablic, które mają tę samą rangę, ale różne rozmiary wymiarów. Podobnie jak w przypadku reguł Numpy, jest to możliwe tylko wtedy, gdy tablice są kompatybilne . Dwie tablice są zgodne, gdy wszystkie ich wymiary są zgodne. Dwa wymiary są kompatybilne, jeśli:

  • Są równe lub
  • Jeden z nich to 1 („zdegenerowany” wymiar)

W przypadku napotkania dwóch zgodnych tablic kształt wyniku ma maksimum spośród dwóch danych wejściowych w każdym indeksie wymiaru.

Przykłady:

  1. (2,1) i (2,3) nadawane do (2,3).
  2. (1,2,5) i (7,2,5) nadawane do (7,2,5)
  3. (7,2,5) i (7,1,5) nadawane do (7,2,5)
  4. (7,2,5) i (7,2,6) są niekompatybilne i nie mogą być nadawane.

Pojawia się specjalny przypadek i jest również obsługiwany, w którym każda z tablic wejściowych ma zdegenerowany wymiar przy innym indeksie. W tym przypadku wynikiem jest „operacja zewnętrzna”: (2,1) i (1,3) rozgłaszanie do (2,3). Więcej przykładów znajdziesz w dokumentacji Numpy na temat nadawania .

Skład transmisji

Rozgłaszanie tablicy niższego rzędu do tablicy wyższego rzędu i rozgłaszanie przy użyciu zdegenerowanych wymiarów może być wykonywane w tej samej operacji binarnej. Na przykład wektor o rozmiarze 4 i macierz o rozmiarze 1x2 można dodać razem, używając wartości wymiarów transmisji wynoszącej (0):

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

Najpierw wektor jest transmitowany do rzędu 2 (macierz) przy użyciu wymiarów rozgłoszeniowych. Pojedyncza wartość (0) w wymiarach rozgłoszeniowych wskazuje, że zerowy wymiar wektora pasuje do zerowego wymiaru macierzy. Daje to macierz o rozmiarze 4xM, w której wartość M jest wybierana tak, aby pasowała do odpowiedniego rozmiaru wymiaru w tablicy 1x2. Dlatego powstaje matryca 4x2:

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

Następnie „nadawanie zdegenerowanych wymiarów” nadaje wymiar zerowy macierzy 1x2, aby dopasować odpowiedni rozmiar wymiaru po prawej stronie:

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

Bardziej skomplikowanym przykładem jest macierz o rozmiarze 1x2 dodana do tablicy o rozmiarze 4x3x1 przy użyciu wymiarów transmisji (1, 2). Najpierw macierz 1x2 jest rozgłaszana do rzędu 3 przy użyciu wymiarów rozgłoszeniowych w celu utworzenia pośredniej tablicy Mx1x2, w której rozmiar wymiaru M jest określony przez rozmiar większego operandu (macierzy 4x3x1), tworząc pośrednią tablicę 4x1x2. M znajduje się w wymiarze 0 (skrajny lewy wymiar), ponieważ wymiary 1 i 2 są odwzorowywane na wymiary oryginalnej macierzy 1x2 jako wymiar transmisji (1, 2). Ta pośrednia tablica może zostać dodana do macierzy 4x3x1 przy użyciu rozgłaszania zdegenerowanych wymiarów w celu uzyskania wyniku w postaci tablicy 4x3x2.