이 페이지는 Cloud Translation API를 통해 번역되었습니다.
Switch to English

방송 의미론

이 문서는 XLA의 브로드 캐스트 의미론이 어떻게 작동하는지 설명합니다.

방송이란?

브로드 캐스팅은 다른 모양을 가진 배열을 산술 연산을 위해 호환되는 모양으로 만드는 프로세스입니다. 이 용어는 Numpy 방송 에서 빌려온 것입니다.

상이한 등급의 다차원 어레이 사이 또는 상이한 그러나 호환 가능한 형상을 갖는 다차원 어레이 사이의 동작을 위해 방송이 필요할 수있다. 추가 고려 X+v 여기서 X 매트릭스 및 (2 레벨의 어레이)이고 v 벡터 (랭크 1의 배열)이다. 요소 별 가산을 수행하려면 XLA는 v 를 특정 횟수만큼 복제하여 벡터 v 를 행렬 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 언어는 암시적이고 "마법적인"기능을 피하면서 가능한 한 엄격하고 명시 적입니다. 이러한 특징들은 장기적으로 변경하기 어려운 사용자 코드에 포함 된 더 많은 가정을 희생시키면서 일부 계산을 정의하기 쉽게 할 수있다. 필요한 경우 암시적이고 마술적인 기능을 클라이언트 수준 래퍼에 추가 할 수 있습니다.

방송과 관련하여, 다른 등급의 어레이들 사이의 동작에 대한 명시적인 방송 사양이 요구된다. 이는 가능한 경우 사양을 유추하는 Numpy와 다릅니다.

하위 순위 배열을 상위 순위 배열로 브로드 캐스팅

스칼라 는 브로드 캐스트 차원을 명시 적으로 지정하지 않고 항상 어레이를 통해 브로드 캐스트 할 수 있습니다. 스칼라와 배열 사이의 요소 별 이진 연산은 배열의 각 요소에 대해 스칼라로 연산을 적용하는 것을 의미합니다. 예를 들어, 행렬에 스칼라를 추가한다는 것은 각 요소가 해당 입력 행렬의 요소와 스칼라의 합인 행렬을 생성하는 것을 의미합니다.

 |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에 일치시키는 것을 의미합니다.

broadcast_dimensions 인수가 제공되면이 유형의 브로드 캐스트는 XlaBuilder 의 바이너리 ops에 사용됩니다. 예를 들어 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를 P와 N에 일치시키는 것도 불법입니다.

차원이 다른 유사한 등급의 어레이 방송

관련된 방송 문제는 순위는 같지만 차원 크기가 다른 두 개의 어레이를 방송하는 것입니다. 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 인 행렬이 생성되며 여기서 값 M은 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|
 

더 복잡한 예는 (1, 2)의 브로드 캐스트 차원을 사용하여 크기 4x3x1의 배열에 1x2 크기의 행렬이 추가 된 것입니다. 먼저, 1x2 행렬은 브로드 캐스트 차원을 사용하여 3 등급까지 브로드 캐스트되어 중간 Mx1x2 배열을 생성합니다. 여기서 차원 크기 M은 4x1x2 중간 배열을 생성하는 더 큰 피연산자 (4x3x1 배열)의 크기에 의해 결정됩니다. 브로드 캐스트 차원이 (1, 2)이므로 차원 1과 2가 원래 1x2 행렬의 차원에 매핑되므로 M은 차원 0 (가장 왼쪽 차원)입니다. 이 중간 어레이는 축퇴 차원의 브로드 캐스팅을 사용하여 4x3x1 매트릭스에 추가되어 4x3x2 어레이 결과를 생성 할 수 있습니다.