28.21 텐서의 기본 연산 3: 축 기반 축소(Reduction) 연산

28.21 텐서의 기본 연산 3: 축 기반 축소(Reduction) 연산

축 기반 축소 연산은 입력 텐서의 특정 축(들)을 선택하여 해당 축을 따라 원소들을 집계(aggregate)함으로써, 해당 축이 제거되거나 크기 1로 축소된 출력 텐서를 생성하는 연산이다. 이 범주에는 합(sum), 평균(mean), 최댓값/최솟값(max/min), 곱(product), 표준편차, 분산, 노름(norm) 등 다양한 통계적·대수적 집계 함수가 포함된다. 축소 연산은 딥러닝에서 손실 함수 계산, 정규화, 어텐션 집계, 풀링 등 핵심 과정에서 필수적으로 사용된다.

1. 축소 연산의 형식적 정의

형상 (d_1, d_2, \ldots, d_n)인 텐서 T에 대하여, 축 k를 따르는 축소 연산은 이항 결합 연산 \oplus(또는 이에 대응하는 집계 함수 R)를 사용하여 다음과 같이 정의된다.

[R_k(T)]_{i_1 \cdots i_{k-1} i_{k+1} \cdots i_n} = \bigoplus_{i_k = 0}^{d_k - 1} T_{i_1 \cdots i_{k-1} i_k i_{k+1} \cdots i_n}

결과 텐서의 형상은 (d_1, \ldots, d_{k-1}, d_{k+1}, \ldots, d_n)이 되어 축 k가 제거되며, 차수가 n에서 n-1로 감소한다. 축을 유지한 채 크기만 1로 축소하는 keepdim 옵션이 사용되면 결과의 형상은 (d_1, \ldots, d_{k-1}, 1, d_{k+1}, \ldots, d_n)이 된다. 모든 축에 대한 전역 축소를 수행하면 결과는 스칼라(0차 텐서)가 된다.

R(T) = \bigoplus_{i_1, i_2, \ldots, i_n} T_{i_1 i_2 \cdots i_n}

2. 대표적 축소 연산의 수학적 형태

연산정의이항 연산 \oplus항등원
합 (sum)\sum_{i_k} T_{\cdots i_k \cdots}+0
곱 (product)\prod_{i_k} T_{\cdots i_k \cdots}\times1
최댓값 (max)\max_{i_k} T_{\cdots i_k \cdots}\max-\infty
최솟값 (min)\min_{i_k} T_{\cdots i_k \cdots}\min+\infty
평균 (mean)\tfrac{1}{d_k} \sum_{i_k} T_{\cdots i_k \cdots}+ (후 나눗셈)0
L_p 노름\left(\sum_{i_k} \vert T_{\cdots i_k \cdots} \vert^p\right)^{1/p}+ (후 지수)0

합과 평균 연산은 딥러닝 손실 함수(평균 제곱 오차, 교차 엔트로피 등)에서 배치 차원에 대해 축소하는 용도로 가장 많이 사용된다. 최댓값 연산은 맥스 풀링(max pooling)과 소프트맥스의 수치적 안정화를 위한 정규화에 쓰인다.

3. 결합성과 병렬화

축소 연산의 핵심적인 수학적 성질은 사용된 이항 연산 \oplus가 결합법칙(associativity)을 만족한다는 점이다.

(a \oplus b) \oplus c = a \oplus (b \oplus c)

결합법칙이 성립하면 축소 순서를 자유롭게 재배열할 수 있으므로, O(\log d_k) 깊이의 병렬 트리 축소(tree reduction) 알고리즘을 적용할 수 있다. 순차적 축소는 O(d_k)의 계산 단계를 요구하지만, 병렬 트리 축소는 이를 O(\log d_k)의 깊이와 O(d_k)의 총 작업량으로 단축한다. GPU에서는 이러한 구조를 워프(warp) 및 블록(block) 단위의 공유 메모리 축소로 구현하여 높은 처리량을 달성한다.

4. 부동소수점 연산과 결정론

이론적으로 결합법칙을 만족하는 덧셈이나 곱셈이라도, 부동소수점 연산에서는 반올림 오차로 인하여 엄밀한 결합성이 성립하지 않는다. 즉, 다음 부등식이 일반적으로 유효할 수 있다.

\mathrm{fl}\!\left((a + b) + c\right) \neq \mathrm{fl}\!\left(a + (b + c)\right)

이로 인해 병렬 축소 알고리즘의 합산 순서가 실행 시점마다 달라지면 결과가 미세하게 변동할 수 있으며, 비결정적(non-deterministic) 동작이 발생할 수 있다. 수치적 안정성과 정밀도를 높이기 위해서는 카한 합(Kahan summation) 또는 쌍대합(pairwise summation)과 같은 기법이 사용되기도 한다.

5. 딥러닝에서의 활용

축소 연산은 딥러닝의 다양한 단계에서 필수적으로 등장한다. 첫째, 손실 함수의 계산이다. 배치 크기 B에 대한 평균 손실은 다음과 같이 표현된다.

\mathcal{L} = \frac{1}{B} \sum_{b=1}^{B} \ell(y_b, \hat{y}_b)

둘째, 배치 정규화와 층 정규화에서 평균과 분산을 계산할 때이다.

\mu = \frac{1}{N} \sum_i x_i,\qquad \sigma^2 = \frac{1}{N} \sum_i (x_i - \mu)^2

셋째, 소프트맥스의 분모 계산과 어텐션 가중치의 합산, 마지막으로 합성곱 및 행렬 곱에서도 내부적으로 특정 축에 대한 합 축소가 포함된다. 축소 연산은 또한 자동 미분에서 브로드캐스팅의 역연산에 해당하며, 순전파에서 축소된 차원은 역전파에서 브로드캐스팅으로 확장된다. 이러한 보편적 중요성으로 인해 축소 연산은 텐서 라이브러리의 기본 연산 집합 중 가장 자주 사용되는 구성 요소 중 하나이다.