日付を保存! Google I / Oが5月18日から20日に戻ってきます今すぐ登録
このページは Cloud Translation API によって翻訳されました。
Switch to English

ブロードキャストセマンティクス

このドキュメントでは、XLAのブロードキャストセマンティクスがどのように機能するかについて説明します。

放送とは?

ブロードキャストとは、さまざまな形状の配列に、算術演算と互換性のある形状を持たせるプロセスです。用語はNumpy放送から借用しています。

異なるランクの多次元配列間、または異なるが互換性のある形状の多次元配列間の操作には、ブロードキャストが必要になる場合があります。 Xが行列(ランク2の配列)であり、 vがベクトル(ランク1の配列)である加算X+vについて考えてみます。要素ごとの加算を実行するには、XLAは、 vを特定の回数複製することにより、ベクトルvを行列Xと同じランクに「ブロードキャスト」する必要があります。ベクトルの長さは、行列の次元の少なく​​とも1つと一致する必要があります。

例えば:

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

行列の次元は(2,3)で、ベクトルの次元は(3)です。ベクトルは、行に複製して次のようにブロードキャストされます。

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

Numpyでは、これはブロードキャストと呼ばます。

原則

XLA言語は可能な限り厳密かつ明示的であり、暗黙的で「魔法の」機能を回避します。このような機能により、一部の計算の定義が少し簡単になる場合がありますが、長期的に変更するのが難しいユーザーコードに組み込まれる仮定が増えるという犠牲が伴います。必要に応じて、暗黙的で魔法の機能をクライアントレベルのラッパーに追加できます。

ブロードキャストに関しては、異なるランクのアレイ間の操作に関する明示的なブロードキャスト仕様が必要です。これは、可能な場合に仕様を推測するNumpyとは異なります。

下位の配列を上位の配列にブロードキャストする

スカラーは、ブロードキャストディメンションを明示的に指定しなくても、常に配列を介してブロードキャストできます。スカラーと配列の間の要素ごとの二項演算は、配列内の各要素にスカラーを使用した演算を適用することを意味します。たとえば、行列にスカラーを追加するということは、各要素が対応する入力行列の要素とスカラーの合計である行列を生成することを意味します。

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

ほとんどの放送ニーズは、二項演算で次元のタプルを使用することでキャプチャできます。操作への入力が異なるランクを有する場合、上位アレイにおけるこの放送タプル指定寸法(S)は、下位配列と一致します。

前の例を考えてみましょう。スカラーを(2,3)行列に追加する代わりに、次元(3)のベクトルを次元(2,3)の行列に追加します。ブロードキャストを指定しないと、この操作は無効になります。行列とベクトルの追加を正しく要求するには、ブロードキャストの次元を(1)に指定します。これは、ベクトルの次元が行列の次元1と一致することを意味します。 2Dでは、次元0が行と見なされ、次元1が列と見なされる場合、これは、ベクトルの各要素が、行列の行数に一致するサイズの列になることを意味します。

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

より複雑な例として、3要素ベクトル(次元(3))を3x3行列(次元(3,3))に追加することを検討してください。この例では、ブロードキャストを実行する方法が2つあります。

(1)1のブロードキャストディメンションを使用できます。各ベクトル要素は列になり、ベクトルはマトリックスの各行に複製されます。

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

(2)0のブロードキャストディメンションを使用できます。各ベクトル要素は行になり、ベクトルはマトリックスの各列に複製されます。

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

ブロードキャストディメンションは、小さいランクの形状がどのように大きいランクの形状にブロードキャストされるかを表すタプルにすることができます。たとえば、2x3x4の直方体と3x4の行列が与えられた場合、ブロードキャストタプル(1,2)は、行列を直方体の次元1と2に一致させることを意味します。

このタイプのブロードキャストは、 broadcast_dimensions引数が指定broadcast_dimensionsいる場合、 XlaBuilderのバイナリ操作で使用されます。たとえば、 XlaBuilder :: Addを参照してください。 XLAソースコードでは、このタイプのブロードキャストは「InDim」ブロードキャストと呼ばれることもあります。

正式な定義

ブロードキャスト属性を使用すると、上位配列のどの次元を照合するかを指定することにより、下位配列を上位配列に照合できます。たとえば、次元がMxNxPxQの配列の場合、次元がTのベクトルは次のように一致させることができます。

          MxNxPxQ

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

いずれの場合も、Tは上位の配列の一致する次元と等しくなければなりません。次に、ベクトルの値は、一致した次元から他のすべての次元にブロードキャストされます。

TxVマトリックスをMxNxPxQ配列に一致させるために、ブロードキャストディメンションのペアが使用されます。

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

ブロードキャストタプルの次元の順序は、下位の配列の次元が上位の配列の次元と一致すると予想される順序である必要があります。タプルの最初の要素は、上位の配列のどの次元が下位の配列の次元0と一致する必要があるかを示します。ディメンション1の2番目の要素など。ブロードキャストディメンションの順序は厳密に増加する必要があります。たとえば、前の例では、VをNに、TをPに一致させることは違法です。 VをPとNの両方に一致させることも違法です。

縮退した次元で同様のランクの配列をブロードキャストする

関連するブロードキャストの問題は、ランクは同じで次元サイズが異なる2つのアレイをブロードキャストすることです。 Numpyのルールと同様に、これは配列に互換性がある場合にのみ可能です。 2つのアレイは、すべての寸法に互換性がある場合に互換性があります。次の場合、2つのディメンションに互換性があります。

  • それらは等しい、または
  • それらの1つは1(「縮退」次元)です

2つの互換性のある配列が検出されると、結果の形状は、すべての次元インデックスで2つの入力の中で最大になります。

例:

  1. (2,1)と(2,3)は(2,3)にブロードキャストされます。
  2. (1,2,5)と(7,2,5)が(7,2,5)にブロードキャストされます
  3. (7,2,5)と(7,1,5)は(7,2,5)にブロードキャストされます
  4. (7,2,5)と(7,2,6)は互換性がなく、ブロードキャストできません。

各入力配列が異なるインデックスで縮退した次元を持つ特別なケースが発生し、サポートされます。この場合、結果は「外部操作」になります。(2,1)と(1,3)が(2,3)にブロードキャストされます。その他の例については、ブロードキャストに関するNumpyのドキュメントを参照してください。

放送作曲

下位配列から上位配列へのブロードキャストと縮退次元を使用したブロードキャストは、どちらも同じ2項演算で実行できます。たとえば、サイズ4のベクトルとサイズ1x2の行列は、ブロードキャストディメンション値(0)を使用して加算できます。

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

最初に、ベクトルはブロードキャストディメンションを使用してランク2(マトリックス)までブロードキャストされます。ブロードキャスト次元の単一の値(0)は、ベクトルの次元ゼロがマトリックスの次元ゼロと一致することを示します。これにより、サイズ4xMの行列が生成されます。ここで、値Mは、1x2配列の対応する次元サイズに一致するように選択されます。したがって、4x2行列が生成されます。

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

次に、「縮退次元ブロードキャスト」は、右側の対応する次元サイズに一致するように、1x2行列の次元ゼロをブロードキャストします。

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

より複雑な例は、(1、2)のブロードキャスト次元を使用してサイズ4x3x1の配列に追加されたサイズ1x2のマトリックスです。最初に、1x2行列がブロードキャストディメンションを使用してランク3までブロードキャストされ、中間Mx1x2配列が生成されます。ここで、次元サイズMは、4x1x2中間配列を生成する大きい方のオペランド(4x3x1配列)のサイズによって決定されます。ブロードキャスト次元が(1、2)であるため、次元1と2が元の1x2マトリックスの次元にマップされるため、Mは次元0(左端の次元)にあります。この中間配列は、縮退した次元のブロードキャストを使用して4x3x1行列に追加し、4x3x2配列の結果を生成できます。