Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

semantica broadcasting

Questo documento descrive come la semantica di radiodiffusione nel lavoro XLA.

Che cosa è la trasmissione?

Broadcasting è il processo di creazione di array con forme diverse hanno forme compatibili per le operazioni aritmetiche. La terminologia è preso in prestito da Numpy broadcasting .

Radiodiffusione può essere richiesto per le operazioni tra matrici multidimensionali di varie classi, o tra array multidimensionali con forme differenti ma compatibili. Considerare l'aggiunta X+v dove X è una matrice (un array di rango 2) e v è un vettore (un array di rango 1). Per eseguire l'aggiunta elemento-saggio, XLA bisogno di "broadcast" il vettore v allo stesso valore della matrice X , replicando v un certo numero di volte. lunghezza del vettore deve corrispondere almeno una delle dimensioni della matrice.

Per esempio:

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

Le dimensioni della matrice sono (2,3), il vettore di sono (3). Il vettore viene trasmesso replicando sopra le righe per ottenere:

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

In Numpy, questo è chiamato a trasmettere .

I principi

La lingua XLA è altrettanto rigorose ed esplicito possibile, evitando implicite e le caratteristiche "magiche". Tali caratteristiche possono fare alcuni calcoli leggermente più facile da definire, a costo di più ipotesi cotto in codice utente che sarà difficile cambiare nel lungo periodo. Se le caratteristiche necessarie, implicite e magici possono essere aggiunti in involucri a livello di client.

Per quanto riguarda la trasmissione, sono necessari specifiche di radiodiffusione esplicite sulle operazioni tra array di varie classi. Questo è diverso da Numpy, che deduce la specifica quando possibile.

Trasmettere una matrice inferiore rango su un rango più elevato matrice

Scalari possono sempre essere trasmessi su array senza un'esplicita specificazione delle dimensioni di radiodiffusione. Un'operazione binaria elemento saggio tra uno scalare e un mezzo di matrice applicando l'operazione con lo scalare per ogni elemento dell'array. Ad esempio, l'aggiunta di uno scalare di una matrice significa produrre una matrice di ciascun elemento che è una somma di scalare con l'elemento corrispondente della matrice di ingresso.

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

Maggior parte delle esigenze di trasmissione possono essere acquisiti utilizzando una tupla di dimensioni su un'operazione binaria. Quando gli ingressi al funzionamento hanno diversi ranghi, questa trasmissione specifica tupla quale dimensione (i) nella matrice superiore rango per corrispondere con la matrice inferiore rango.

Si consideri l'esempio precedente, invece di aggiungere uno scalare ad una (2,3) della matrice, aggiungere un vettore di dimensione (3) ad una matrice di dimensioni (2,3). Senza specificare radiodiffusione, questa operazione non è valida. Per correttamente richiesta Oltre matrice-vettore, specificare la dimensione radiodiffusione di essere (1), il che significa la dimensione del vettore è abbinato a quota 1 della matrice. In 2D, se la dimensione 0 è considerato come righe e dimensioni 1 come colonne, ciò significa che ogni elemento del vettore diventa una colonna di dimensioni corrispondenti al numero di righe della matrice:

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

Come esempio più complesso, è possibile aggiungere un vettore 3 elementi (dimensione (3)) a una matrice 3x3 (dimensioni (3,3)). Ci sono due modi di radiodiffusione può accadere per questo esempio:

(1) Una dimensione di trasmissione di 1 può essere utilizzato. Ogni elemento vettoriale diventa una colonna e il vettore è duplicata per ogni riga della matrice.

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

(2) Una dimensione diffusione di 0 può essere utilizzato. Ogni elemento vettoriale diventa una riga e il vettore è duplicata per ogni colonna della matrice.

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

Le dimensioni che trasmettono può essere una tupla che descrive come una forma di rango minore viene trasmesso in una forma di rango più grande. Ad esempio, dato un cuboide 2x3x4 ed una matrice 3x4, una tupla radiodiffusione (1,2) implica far combaciare la matrice di dimensioni 1 e 2 del parallelepipedo.

Questo tipo di trasmissione è utilizzato nelle ops binari in XlaBuilder , se il broadcast_dimensions è dato argomento. Ad esempio, vedere XlaBuilder :: Aggiungi . Nel codice sorgente di XLA, questo tipo di trasmissione è talvolta chiamato "InDim" broadcasting.

definizione formale

L'attributo radiotelevisivo permette corrispondenza a una matrice inferiore rango di una matrice superiore rango, da specificare quali dimensioni della matrice superiore rango da abbinare. Ad esempio, per un array di dimensioni MxNxPxQ, un vettore con dimensione T può essere abbinato come segue:

           MxNxPxQ

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

In ogni caso, T deve essere uguale alla dimensione corrispondente della matrice superiore rango. I valori del vettore vengono quindi trasmessi dalla dimensione abbinato a tutte le altre dimensioni.

Per trovare una matrice TXV sulla matrice MxNxPxQ, una coppia di dimensioni radiotelevisivo sono utilizzati:

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

L'ordine di dimensioni della tupla trasmissione deve essere l'ordine in cui si prevede che le dimensioni della matrice inferiore rango per corrispondere alle dimensioni della matrice superiore rango. Il primo elemento nella tupla dice quale dimensione nella matrice superiore rango deve corrispondere dimensione 0 nella matrice inferiore rango. Il secondo elemento di dimensione 1, e così via. L'ordine di dimensioni di trasmissione deve essere strettamente crescente. Ad esempio, nell'esempio precedente è illegale abbinare V N e T a P; è anche illegale per abbinare V sia P e N.

Broadcasting array simile rango con dimensioni degenerate

Un problema correlato broadcasting sta trasmettendo due array che hanno lo stesso rango, ma dimensioni diverse dimensioni. Analogamente alle regole di NumPy, questo è possibile solo quando le matrici sono compatibili. Due matrici sono compatibili quando tutte le loro dimensioni sono compatibili. Due dimensioni sono compatibili se:

  • Essi sono uguali, o
  • Uno di loro è 1 (una dimensione "degenerata")

Quando si incontrano due matrici compatibili, la forma risultante ha la massima tra i due ingressi a ogni indice dimensione.

Esempi:

  1. (2,1) e (2,3) broadcast a (2,3).
  2. (1,2,5) e (7,2,5) broadcast a (7,2,5)
  3. (7,2,5) e (7,1,5) broadcast a (7,2,5)
  4. (7,2,5) e (7,2,6) sono incompatibili e non può essere trasmesso.

Un caso particolare si pone, ed è anche supportato, in cui ciascuna delle matrici di ingresso ha una dimensione degenerata un diverso indice. In questo caso, il risultato è un "operazione esterna": (2,1) e (1,3) broadcast a (2,3). Per ulteriori esempi, consultare il documentazione Numpy sulla radiodiffusione .

composizione Broadcast

Trasmissione di una matrice inferiore rango di una matrice superiore rango e trasmettendo utilizzando dimensioni degenerate possono essere entrambi eseguiti nella stessa operazione binaria. Ad esempio, un vettore di dimensione 4 e una matrice di dimensione 1x2 possono essere sommate mediante valore dimensioni trasmissione di (0):

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

Prima il vettore viene trasmesso fino a rango 2 (matrice) utilizzando le dimensioni broadcast. Il valore singolo (0) nelle dimensioni di trasmissione indica quella dimensione zero partite vettore di dimensione zero della matrice. Questo produce una matrice di dimensione 4xM dove il valore M viene scelto in base al formato di dimensione corrispondente nella matrice 1x2. Pertanto, una matrice 4x2 viene prodotto:

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

Poi "degenerata broadcasting dimensione" emittenti Dimension Zero della matrice 1x2 in base al formato di dimensione corrispondente della destra:

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

Un esempio più complicato è una matrice di dimensione 1x2 inserito in un array di dimensioni 4x3x1 con dimensioni di trasmissione (1, 2). Prima matrice 1x2 viene trasmesso fino al rango 3 utilizzando le dimensioni di trasmissione per produce una matrice Mx1x2 intermedia in cui la dimensione dimensione M è determinata dalla dimensione della maggiore operando (matrice 4x3x1) producendo una matrice intermedia 4x1x2. La M è a dimensione 0 (più a sinistra dimensione) perché le dimensioni 1 e 2 sono mappati sui dimensioni della matrice 1x2 originale come dimensione trasmissione sono (1, 2). Questa matrice intermedia può essere aggiunto alla matrice 4x3x1 mediante trasmissione di dimensioni degenerate per produrre un risultato matrice 4x3x2.