28.20 텐서의 기본 연산 2: 브로드캐스팅(Broadcasting) 규칙과 확장 메커니즘

28.20 텐서의 기본 연산 2: 브로드캐스팅(Broadcasting) 규칙과 확장 메커니즘

브로드캐스팅은 형상(shape)이 서로 다른 두 텐서 사이에서 원소별 연산을 수행할 수 있도록, 작은 쪽 텐서의 일부 축을 논리적으로 반복(replication)하여 큰 쪽 텐서의 형상에 맞추는 메커니즘이다. 이 규약은 1995년 NumPy 라이브러리에서 체계화된 이래 PyTorch, TensorFlow, JAX 등 거의 모든 현대 텐서 라이브러리에 표준으로 채택되었다. 브로드캐스팅은 명시적 반복 연산 없이도 벡터화된 코드 작성을 가능하게 하며, 실제 메모리 복사를 수반하지 않으므로 메모리 효율과 연산 성능 면에서 매우 유리하다.

1. 브로드캐스팅 규칙의 형식적 정의

두 텐서 AB가 각각 형상 (a_1, a_2, \ldots, a_m)(b_1, b_2, \ldots, b_n)을 가진다고 하자. 브로드캐스팅은 다음 세 단계 절차를 통해 수행된다.

첫째, 두 형상의 길이가 같지 않을 경우, 짧은 쪽의 형상 앞에 1을 추가하여 두 형상의 길이를 맞춘다. 즉, m < n이면 A의 형상은 (1, \ldots, 1, a_1, \ldots, a_m)으로 확장된다.

둘째, 이제 길이가 같아진 두 형상의 각 축 k에 대하여 다음 호환 조건(compatibility condition) 중 하나가 성립해야 한다.

a_k = b_k \quad \text{또는} \quad a_k = 1 \quad \text{또는} \quad b_k = 1

셋째, 각 축의 출력 크기는 다음과 같이 결정된다.

c_k = \max(a_k, b_k)

어느 하나의 축에서 호환 조건이 만족되지 않으면 브로드캐스팅은 실패하고, 두 텐서는 원소별 연산을 수행할 수 없다.

2. 확장 메커니즘과 가상 복제

크기가 1인 축을 크기가 c_k인 축으로 확장할 때, 해당 방향의 스트라이드를 0으로 설정함으로써 실제 메모리 복사 없이 논리적 반복을 구현한다. 즉, 지표가 그 축에서 증가하더라도 메모리 주소는 변화하지 않으며, 동일한 원소가 반복 참조된다. 원소별 연산 수행 시 AB의 원소는 다음과 같이 색인된다.

[A \oplus B]_{i_1 i_2 \cdots i_n} = A_{j_1 j_2 \cdots j_n} \oplus B_{k_1 k_2 \cdots k_n}

j_k = \begin{cases} i_k & (a_k = c_k) \\ 0 & (a_k = 1) \end{cases}, \qquad k_k = \begin{cases} i_k & (b_k = c_k) \\ 0 & (b_k = 1) \end{cases}

이러한 방식으로 AB의 각 원소가 출력 형상의 모든 위치로 올바르게 매핑된다.

3. 구체적 예시

다음 표는 대표적인 브로드캐스팅 사례를 정리한 것이다.

입력 A의 형상입력 B의 형상출력 형상호환 여부
(3, 4)(4,)(3, 4)가능
(3, 4)(3, 1)(3, 4)가능
(2, 3, 4)(3, 4)(2, 3, 4)가능
(5, 1, 4)(1, 3, 1)(5, 3, 4)가능
(3, 4)(4, 3)오류불가능
(2, 3)(2, 4)오류불가능

예를 들어 형상 (5, 1, 4)의 텐서와 형상 (1, 3, 1)의 텐서가 주어지면, 첫 번째 축은 515가 선택되고, 두 번째 축은 13으로 3이 선택되며, 세 번째 축은 414가 선택되어 출력 형상은 (5, 3, 4)가 된다.

4. 편미분과 역전파에서의 의미

브로드캐스팅을 포함한 원소별 연산의 역전파는 순전파에서 반복된 원소들에 대한 기울기를 모두 합산함으로써 수행된다. 예를 들어 z = x + y에서 x의 형상이 출력 z보다 작아 브로드캐스팅이 발생했다면, z에 대한 상류 기울기 \partial L / \partial z는 다음과 같이 x의 원래 형상에 맞게 축소된다.

\frac{\partial L}{\partial x_{j_1 \cdots j_m}} = \sum_{(i_1, \ldots, i_n)\ \text{for which}\ j_k = i_{k+\text{offset}}}\ \frac{\partial L}{\partial z_{i_1 \cdots i_n}}

즉, 브로드캐스트된 축에 대해서는 z의 기울기를 합산(reduce-sum)하여 x의 원래 형상으로 환원시킨다. 이 합산 규칙은 아다마르 곱, 스칼라 곱 등 모든 원소별 연산의 역전파에서 동일하게 적용된다.

5. 성능 및 메모리 효율

브로드캐스팅의 가장 큰 실용적 장점은 메모리 효율과 코드 간결성에 있다. 형상이 다른 두 텐서를 명시적으로 확장(tiling)하지 않고도 연산을 수행할 수 있으므로, 메모리 사용량이 획기적으로 감소하고 불필요한 복사 연산이 제거된다. 예를 들어 배치 정규화에서 배치 차원에 대한 평균과 분산을 계산한 후, 이를 입력 텐서의 각 샘플에 대해 뺄셈과 나눗셈을 수행하는 연산은 브로드캐스팅을 통해 다음과 같이 간결하게 표현된다.

\hat{x} = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}}

이때 x의 형상이 (B, C)이고 \mu\sigma^2의 형상이 (C,)이면, 브로드캐스팅에 의해 \mu\sigma^2는 논리적으로 (B, C) 형상으로 확장되어 원소별 연산이 수행된다. 이러한 메커니즘은 딥러닝에서 가중치 공유, 편향 가산, 마스킹 등 핵심 연산의 표현을 극도로 단순화시키며, 오늘날 텐서 기반 수치 계산 패러다임의 근간을 이룬다.