28.13 텐서 축약(Contraction)의 정의와 차수 감소 메커니즘
1. 텐서 축약의 개념
1.1 직관적 이해
텐서 축약(tensor contraction)은 텐서의 한 반변 지표(contravariant index)와 한 공변 지표(covariant index)를 동일하게 설정하고 합산하여, 텐서의 차수(order)를 2만큼 감소시키는 연산이다. 축약은 텐서 대수학(tensor algebra)의 가장 기본적인 연산 중 하나이며, 행렬의 자취(trace), 벡터의 내적, 행렬 곱셈 등이 모두 텐서 축약의 특수한 사례이다.
1.2 형식적 정의
(p, q)형 텐서 T \in V^{\otimes p} \otimes (V^*)^{\otimes q}의 i번째 반변 지표와 j번째 공변 지표에 대한 축약 C^i_j: V^{\otimes p} \otimes (V^*)^{\otimes q} \to V^{\otimes (p-1)} \otimes (V^*)^{\otimes (q-1)}은 다음과 같이 정의된다. 성분 표현에서:
(C^i_j T)^{k_1 \cdots \hat{k_i} \cdots k_p}{}_{l_1 \cdots \hat{l_j} \cdots l_q} = \sum_{m=1}^{n} T^{k_1 \cdots m \cdots k_p}{}_{l_1 \cdots m \cdots l_q}
여기서 \hat{k_i}와 \hat{l_j}는 해당 지표가 제거됨을 나타내며, 합산되는 지표 m이 원래의 i번째 반변 위치와 j번째 공변 위치에 들어간다.
1.3 결과 텐서의 차수
(p, q)형 텐서의 축약은 (p-1, q-1)형 텐서를 산출한다. 따라서 한 번의 축약은 텐서의 총 차수(total rank) p + q를 2만큼 감소시킨다. 반복 축약을 통해 고차 텐서를 점진적으로 더 낮은 차수의 텐서로 변환할 수 있다.
2. 좌표 변환과의 일관성
2.1 축약의 좌표 무관성
축약 연산이 의미를 가지기 위해서는 그 결과가 좌표계의 선택에 무관해야 한다. (1, 1)형 텐서 T^i{}_j의 축약 C T = T^i{}_i에 대해 좌표 변환 \mathbf{e}'_j = A^i{}_j \mathbf{e}_i 하에서:
T'^k{}_k = \sum_{i, j} (A^{-1})^k{}_i A^j{}_k T^i{}_j = \sum_{i, j} \delta^j{}_i T^i{}_j = \sum_i T^i{}_i = T^i{}_i
여기서 \sum_k (A^{-1})^k{}_i A^j{}_k = \delta^j{}_i를 사용하였다. 따라서 축약의 결과는 기저 변환에 대해 불변이며, 이는 축약이 좌표 무관 텐서 연산임을 확인한다.
2.2 반변-공변 균형의 필연성
이 일관성은 축약이 반드시 한 반변 지표와 한 공변 지표 사이에서만 정의되는 이유를 설명한다. 두 반변 지표나 두 공변 지표 사이의 합산은 좌표 변환에 대해 불변하지 않으므로, 메트릭 텐서가 명시적으로 부재한 일반 벡터 공간에서는 텐서적으로 정의되지 않는다. 메트릭이 주어진 경우에는 메트릭을 통해 한 지표를 올리거나 내린 후 축약할 수 있다.
3. 축약의 주요 사례
3.1 행렬의 자취
(1, 1)형 텐서, 즉 선형 변환의 행렬 표현 T^i{}_j의 축약은:
\text{tr}(\mathbf{T}) = T^i{}_i = \sum_{i=1}^{n} T^i{}_i
이는 행렬의 대각합(trace)이며, 닮음 변환에 대해 불변인 가장 기본적인 행렬 불변량이다.
3.2 벡터-코벡터 내적
벡터 v^i와 코벡터 \omega_j의 텐서곱 v^i \omega_j는 (1, 1)형 텐서이며, 그 축약은:
v^i \omega_i = \sum_{i=1}^{n} v^i \omega_i = \omega(\mathbf{v})
이는 코벡터의 벡터에 대한 작용으로 해석되며, 메트릭이 있는 경우 두 벡터의 내적과 동일하다.
3.3 행렬 곱셈
두 행렬 A^i{}_k와 B^k{}_j의 곱은 텐서곱 A^i{}_k B^l{}_j의 (k, l) 지표에 대한 축약으로 표현할 수 있다:
C^i{}_j = A^i{}_k B^k{}_j = \sum_{k=1}^{n} A^i{}_k B^k{}_j
따라서 행렬 곱셈은 두 (1, 1)형 텐서의 축약을 통한 또 다른 (1, 1)형 텐서의 생성이다.
3.4 메트릭에 의한 축약
리만 다양체에서 리치 텐서로부터 스칼라 곡률(scalar curvature)을 얻는 과정은 메트릭을 이용한 축약의 사례이다:
R = g^{ij} R_{ij}
여기서 g^{ij}는 역메트릭이며, 두 공변 지표 i, j를 메트릭으로 올린 후 축약하는 것과 동등하다.
4. 부분 축약과 다중 축약
4.1 부분 축약
고차 텐서에서는 일부 지표만 축약하는 부분 축약(partial contraction)이 가능하다. (2, 2)형 텐서 T^{ij}{}_{kl}의 첫 번째 반변과 첫 번째 공변 지표 사이의 축약은:
S^j{}_l = T^{ij}{}_{il} = \sum_{i=1}^{n} T^{ij}{}_{il}
이 결과는 (1, 1)형 텐서이다.
4.2 다중 축약
여러 지표 쌍에 대해 동시에 축약을 수행할 수 있다. (2, 2)형 텐서의 모든 지표를 축약하면 스칼라가 얻어진다:
T^{ij}{}_{ij} = \sum_{i, j} T^{ij}{}_{ij}
이러한 다중 축약은 텐서로부터 좌표 무관 스칼라 불변량(scalar invariant)을 추출하는 표준적 방법이다.
5. 차수 감소 메커니즘의 의미
5.1 정보의 응축
축약은 텐서가 담고 있는 정보를 더 낮은 차원의 구조로 응축하는 과정이다. (1, 1)형 텐서가 n^2개의 성분을 가지는 데 비해, 그 축약인 자취는 단일 스칼라이다. 이 응축 과정에서 정보의 일부가 손실되지만, 손실되지 않은 부분은 좌표 변환에 무관한 본질적 양으로서 보존된다.
5.2 불변량 추출
축약은 텐서로부터 좌표계에 의존하지 않는 불변량을 추출하는 메커니즘이다. 행렬의 자취, 행렬식, 행렬의 거듭제곱의 자취 \text{tr}(\mathbf{A}^k) 등은 모두 축약을 통해 정의되며, 이들은 행렬의 닮음 불변량을 형성한다.
6. 딥러닝에서의 텐서 축약
6.1 신경망 연산의 본질
심층 신경망의 핵심 연산은 본질적으로 텐서 축약이다. 완전 연결 층에서의 행렬-벡터 곱, 합성곱 층(convolutional layer)에서의 합성곱, 트랜스포머의 주의 메커니즘에서의 점수 계산 등이 모두 텐서의 특정 지표 쌍에 대한 축약으로 표현된다.
6.2 einsum 함수와 축약
numpy.einsum, torch.einsum, tf.einsum 등의 함수는 임의의 텐서 축약을 단일 호출로 수행한다. 예를 들어, 트랜스포머의 주의 점수 계산:
S_{bhij} = \sum_d Q_{bhid} K_{bhjd}
는 einsum("bhid,bhjd->bhij", Q, K)로 표현된다. 여기서 지표 d가 축약되어 결과 텐서의 차수가 4 + 4 = 8에서 4로 감소한다.
6.3 텐서 네트워크와 축약 순서
복잡한 신경망 구조는 다수 텐서의 연쇄적 축약으로 모형화할 수 있다. 이 경우 축약 순서에 따라 계산 복잡도가 크게 달라지며, 최적 축약 순서의 결정은 NP-난해(NP-hard) 문제이다. opt_einsum 등의 라이브러리는 동적 계획법과 휴리스틱을 결합하여 실용적 최적 순서를 탐색한다.
7. 결론
텐서 축약은 한 반변 지표와 한 공변 지표를 동일시하고 합산하여 텐서의 차수를 2만큼 감소시키는 기본 연산이다. 이 연산의 좌표 무관성은 반변-공변 균형으로부터 보장되며, 행렬의 자취, 벡터의 내적, 행렬 곱셈 등 친숙한 선형대수 연산이 모두 텐서 축약의 특수한 사례임을 드러낸다. 축약은 텐서로부터 좌표 무관 불변량을 추출하는 핵심 메커니즘이며, 현대 딥러닝의 거의 모든 핵심 연산이 텐서 축약의 형태로 표현되고 효율적으로 구현된다.