방송 중

이 문서에서는 XLA의 브로드캐스팅 의미 체계를 설명합니다.

브로드캐스팅이란 무엇인가요?

브로드캐스팅은 다양한 모양의 배열을 만드는 과정입니다. 사용할 수 있습니다. 이 용어는 NumPy 브로드캐스팅.

브로드캐스팅은 다음의 다차원 배열 간 작업에 필요할 수 있습니다. 또는 다른 모든 행을 가진 도형을 사용할 수 있습니다. X가 행렬 (배열)인 X+v를 더해 보겠습니다. v는 벡터 (순위 1의 배열)입니다. 요소별로 수행 게다가 XLA는 벡터 vv를 특정 횟수만큼 복제하여 X 행렬입니다. 벡터의 길이 행렬의 차원 중 하나 이상과 일치해야 합니다.

예를 들면 다음과 같습니다.

|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 언어는 최대한 엄격하고 명시적이며, 암시적 '마법' 기능을 살펴보겠습니다 이러한 기능은 일부 계산이 약간 더 쉬워질 수 있습니다. 하지만 사용자 코드에 더 많은 가정을 적용해야 하지만, 이로 인해 장기적으로 변경하기 어렵습니다 필요한 경우 암시적인 마법 기능 클라이언트 수준 래퍼에 추가할 수 있습니다.

브로드캐스팅과 관련하여 XLA는 명시적인 브로드캐스팅 사양이 다른 순위의 배열 간 연산에 대한 값입니다. 이는 NumPy와는 다르며 이는 가능한 경우 사양을 추론합니다.

낮은 순위 배열을 더 높은 순위 배열로 브로드캐스팅

Scalars는 명시적인 사양 없이 항상 배열을 통해 브로드캐스트할 수 있습니다. 매우 유용합니다. 스칼라 간의 요소별 이진 연산 배열은 스칼라가 포함된 연산을 배열됩니다. 예를 들어 행렬에 스칼라를 추가한다는 것은 여기서 각 요소는 스칼라와 입력 행렬입니다.

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

대부분의 브로드캐스팅 요구는 시스템의 차원 튜플을 사용하여 포착할 수 있습니다. 바이너리 연산입니다. 연산에 대한 입력의 순위가 다른 경우 브로드캐스팅 튜플은 상위 배열에서 어떤 차원을 하위 순위 배열과 일치합니다.

이전 예를 생각해 보세요. (2,3) 행렬에 스칼라를 추가하는 대신 차원 (3)의 벡터를 차원 (2,3)의 행렬로 변환합니다. 지정하지 않는 경우 이 작업은 유효하지 않습니다. 행렬 벡터를 올바르게 요청하는 방법 브로드캐스팅 차원을 (1)로 지정합니다. 이는 벡터의 차원은 행렬의 차원 1과 일치합니다. 2D에서 측정기준이 0인 경우 행, 측정기준 1은 열을 나타냅니다. 즉, 각 요소는 는 벡터의 행 수와 일치하는 크기의 열이 됩니다. 행렬:

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

좀 더 복잡한 예로, 3-요소 벡터 (차원 (3))를 3x3 행렬 (차원 (3,3)) 브로드캐스팅은 두 가지 방법으로 다음 예를 참고하세요.

(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를 나타냅니다.

이 유형의 브로드캐스트는 XlaBuilder의 바이너리 작업에 사용됩니다. broadcast_dimensions 인수가 제공됩니다. 예를 들면 다음과 같습니다. 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과 일치해야 하는 식입니다. 순서 반드시 증가해야 합니다 예를 들어 이전 예를 들어 V를 N과 일치시키고 T를 P와 일치시키는 것은 불법입니다. V를 매치시키는 것은 두 가지입니다.

변질된 차원으로 비슷한 순위 배열 브로드캐스팅

관련된 문제는 순위가 같지만 동일한 값을 가진 두 개의 배열을 브로드캐스팅하는 것입니다. 여러 개의 크기가 있습니다. NumPy와 마찬가지로 이는 배열이 호환되어야 합니다. 두 배열은 모든 차원이 다음과 같을 때 호환됩니다. 있습니다. 두 측정기준은 다음과 같은 경우에 호환됩니다.

  • 둘이 같거나
  • 그중 하나는 1('변화' 차원)입니다.

두 개의 호환되는 배열이 있는 경우 결과 도형은 두 개의 입력을 나타냅니다.

예:

  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 문서

방송 구성

낮은 순위의 배열을 더 높은 순위의 배열로 브로드캐스팅하고 브로드캐스팅 동일한 이진 연산으로 수행할 수 있습니다. 예를 들어 크기가 4인 벡터와 1x2 크기의 행렬을 더할 수 있습니다. 값 (0)의 브로드캐스트 크기를 사용합니다.

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

먼저 벡터는 브로드캐스트를 사용하여 순위 2 (행렬)까지 브로드캐스트됩니다. 측정기준에 따라 달라집니다. 브로드캐스트 크기의 단일 값 (0)은 벡터의 차원 0은 행렬의 차원 0과 일치합니다. 이를 통해 4xM 크기의 행렬을 생성합니다. 여기서 1x2 배열의 치수 크기를 나타냅니다. 따라서 다음과 같이 4x2 행렬이 생성됩니다.

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

그런 다음 '차원 브로드캐스팅을 저하시킵니다' 1x2 디코더의 차원 0을 브로드캐스트하고 행렬을 사용하여 오른쪽의 해당 측정기준 크기와 일치시킵니다.

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

더 복잡한 예는 1x2 크기의 행렬에 크기 배열에 더한 것입니다. 방송 크기 (1, 2)를 사용하는 4x3x1 먼저 1x2 행렬은 방송 크기를 사용하여 중간 Mx1x2 배열을 생성하고 순위를 3으로 여기서 차원 크기 M은 더 큰 피연산자의 크기( 4x3x1 배열) 4x1x2 중간 배열을 생성합니다. M은 차원 0( 측정기준 1과 2가 입니다. 이 중간 배열을 브로드캐스팅하여 4x3x1 행렬에 추가할 수 있습니다. 4x3x2 배열 결과를 생성합니다.