Transmisja

Ten dokument opisuje semantykę transmisji XLA.

Co to jest transmisja?

Transmitowanie to proces przygotowywania macierzy o różnych kształtach o kształtach zgodnych w operacjach arytmetycznych. Terminologia jest zapożyczona z transmisji NumPy.

Nadawanie może być wymagane w przypadku operacji między wielowymiarowymi tablicami o różnych poziomach lub między wielowymiarowymi tablicami o różnych, ale zgodnych kształtach. Rozważ dodanie X+v, w którym X jest macierz (tablica o pozycji 2), a v to wektor (tablica rangi 1). Aby wykonać dodawanie na podstawie elementów, XLA musi „transmitować” wektor v na tę samą pozycję 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), a wymiar wektora to (3). Wektor jest transmitowany przez replikację go po wierszach, aby uzyskać:

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

W NumPy jest to tzw. transmitowanie.

Zasady

Język XLA jest jak najbardziej rygorystyczny i jednoznaczny, dzięki czemu unikniesz „magicznych” funkcji. Takie funkcje mogą nieco ułatwić definiowanie niektórych obliczeń, ale kosztem większej liczby założeń wbudowanych w kod użytkownika, które w dłuższej perspektywie będą trudne do zmiany. W razie potrzeby w kodach na poziomie klienta można dodać niejawne magiczne funkcje.

XLA wymaga wyraźnej specyfikacji transmisji podczas operacji między tablicami o różnych poziomach. Różni się to od metody NumPy, która w miarę możliwości określa specyfikację.

Transmitowanie tablicy o niższej pozycji do tablicy wyższej

Skalary zawsze mogą być transmitowane w tablicach bez wyraźnego określania wymiarów transmitowania. Operacja binarna oparta na elementach między skalarem a tablicą oznacza zastosowanie wartości skalarnej do każdego elementu w tablicy. Na przykład dodanie do macierzy skalarnej oznacza utworzenie macierzy, w której każdy element jest sumą skalarnego i odpowiadającego mu elementu macierzy wejściowej.

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

Większość potrzeb związanych z transmisjami można uchwycić, wykorzystując kropkę wymiarów w operacji binarnej. Gdy dane wejściowe operacji mają różne pozycje w rankingu, ta krotka transmisji określa, które wymiary w tablicy wyższych pozycji mają być zgodne z tablicą niższa pozycja.

Przeanalizuj poprzedni przykład. Zamiast dodawać skalar do macierzy (2,3), dodaj wektor wymiaru (3) do macierzy wymiarów (2,3). Jeśli nie określisz transmisji, ta operacja jest nieprawidłowa. Aby prawidłowo zażądać dodania wektora macierzystego, jako wymiar transmitowania podaj wartość (1), co oznacza, że wymiar wektora jest dopasowywany do wymiaru 1 macierzy. W 2D, jeśli wymiar 0 reprezentuje wiersze, a wymiar 1 reprezentuje 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|

W bardziej złożonym przykładzie dodaj do macierzy 3 x 3 wektor 3-elementowy (wymiar (3)) (wymiary (3,3)). W tym przykładzie transmisja może odbywać się na 2 sposoby:

(1) Można użyć wymiaru transmitowania o wartości 1. Każdy element wektorowy staje się kolumną, a wektor jest duplikowany w każdym wierszu macierzy.

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

(2) Można użyć wymiaru transmitowania o wartości 0. Każdy element wektorowy staje się wierszem, a wektor jest duplikowany w każdej kolumnie macierzy.

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

Wymiary transmisji mogą być kropką opisującą, w jaki sposób mniejszy kształt rankingu jest przenoszony na większy kształt rankingu. Na przykład w sześciokątach 2 x 3 x 4 i macierz 3 x 4 krzywa transmisji (1,2) oznacza dopasowanie macierzy do wymiarów 1 i 2 prostopadłościanu.

Ten typ komunikatu jest używany w operacjach binarnych w XlaBuilder, jeśli podany jest argument broadcast_dimensions. Możesz na przykład użyć instrukcji XlaBuilder::Add. W kodzie źródłowym XLA tego typu transmisja jest czasami nazywana przesyłaniem „InDim”.

Definicja formalna

Atrybut rozgłaszania umożliwia dopasowanie tablicy o niższej pozycji do tablicy o wyższej pozycji przez określenie, do których wymiarów macie wyższej pozycji pasować. Na przykład w przypadku tablicy o wymiarach MxNxPxQ wektor o wymiarze T może zostać dopasowany w ten sposób:

          MxNxPxQ

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

W każdym przypadku T musi być równemu wymiarowi tablicy o wyższej pozycji. Wartości wektora są następnie przekazywane z pasującego wymiaru do wszystkich pozostałych wymiarów.

Aby dopasować macierz TxV do tablicy MxNxPxQ, używana jest para wymiarów nadawania:

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

Kolejność wymiarów w krotce przesyłania musi być kolejnością, w której wymiary tablicy o niższej pozycji muszą być zgodne z wymiarami tablicy o wyższej pozycji. Pierwszy element w krócie określa, który wymiar w tablicy wyższej pozycji musi odpowiadać wymiarowi 0 w tablicy o niższej pozycji. Drugi element w kropce określa, który wymiar w tablicy wyższej pozycji musi odpowiadać wymiarowi 1 w tablicy o niższej pozycji itd. Kolejność wymiarów transmisji musi rosnąć. Na przykład w poprzednim przykładzie dopasowanie V do N, a T do P jest nielegalne. Poza tym dopasowanie V do P i N jest nielegalne.

Transmitowanie tablic o podobnej pozycji o zdegenerowanych wymiarach

Powiązany problem polega na przesyłaniu 2 tablic o tej samej pozycji w rankingu, ale o różnych rozmiarach. Tak jak w przypadku NumPy, jest to możliwe tylko wtedy, gdy tablice są zgodne. Dwie macierze są zgodne, gdy wszystkie ich wymiary są zgodne. Dwa wymiary są zgodne, jeśli:

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

Jeśli występują 2 zgodne tablice, kształt wyniku ma maksymalną liczbę 2 danych wejściowych w każdym indeksie wymiaru.

Przykłady:

  1. (2,1) i (2,3) przesyłają dane do (2,3).
  2. (1,2,5) i (7,2,5) przesyłanie do (7,2,5).
  3. (7,2,5) i (7,1,5) przesyłają dane do (7,2,5).
  4. (7,2,5) i (7,2,6) są niezgodne i nie mogą być transmitowane.

Zdarza się taki przypadek, który jest też obsługiwany, gdy każda tablica wejściowa ma zdegenerowany wymiar w innym indeksie. W tym przypadku wynikiem jest „operacja zewnętrzna”: (2,1) i (1,3) przesyłanie do (2,3). Więcej przykładów znajdziesz w dokumentacji NumPy dotyczącej transmitowania.

Kompozycja transmisji

Przesyłanie tablicy o niższej pozycji do tablicy o wyższej pozycji oraz transmisja z wykorzystaniem zdegenerowanych wymiarów można przeprowadzić w ramach tej samej operacji binarnej. Na przykład wektor o rozmiarze 4 i macierz o rozmiarach 1 x 2 można dodać do siebie, używając przesyłanych wymiarów o wartości (0):

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

Najpierw wektor jest transmitowany na pozycję 2. (macierz) za pomocą wymiarów transmisji. Pojedyncza wartość (0) w wymiarach przekazu oznacza, że wymiar 0 wektora odpowiada wymiarowi 0 macierzy. Otrzymuje się macierz o wymiarach 4 x M, w której wartość M jest wybierana zgodnie z odpowiednim rozmiarem wymiaru w tablicy 1 x 2. W efekcie powstaje macierz 4 x 2:

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

Następnie funkcja „degeneruj przesyłanie wymiarów” transmituje zerowy wymiar macierzy 1 x 2, aby dopasować go do odpowiedniego rozmiaru 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 skomplikowany przykład to macierz rozmiarów 1 x 2 dodana do tablicy o rozmiarach 4 x 3 x 1 przy użyciu wymiarów transmisji (1, 2). Najpierw macierz 1 x 2 jest przekazywana do rangi 3 przy użyciu wymiarów komunikatów służących do utworzenia pośredniej tablicy Mx1 x 2, w której rozmiar wymiaru M jest określany na podstawie rozmiaru większego argumentu (tablica 4 x 3 x 1) tworzącego tablicę pośrednią 4 x 1 x 2. M znajduje się w wymiarze 0 (wymiar znajdujący się skrajnie z lewej strony), ponieważ wymiary 1 i 2 są zmapowane na wymiary pierwotnej macierzy 1 x 2, ponieważ rozkładane wymiary to (1, 2). Tę tablicę pośrednią można dodać do macierzy 4 x 3 x 1 przy użyciu transmitowania zdegenerowanych wymiarów, aby otrzymać wynik w postaci tablicy 4 x 3 x 2.