27.24 대각 행렬(Diagonal Matrix)의 성질과 연산 효율성

1. 대각 행렬의 정의

대각 행렬(diagonal matrix)은 주대각선 이외의 원소가 모두 0인 정사각 행렬이다. n \times n 대각 행렬 \mathbf{D}는 다음과 같이 정의된다.

d_{ij} = 0 \quad \text{for } i \neq j

대각 원소 d_1, d_2, \ldots, d_n을 사용하여 \mathbf{D} = \text{diag}(d_1, d_2, \ldots, d_n)으로 간결하게 표기한다. 명시적으로 쓰면 다음과 같다.

\mathbf{D} = \begin{pmatrix} d_1 & 0 & \cdots & 0 \\ 0 & d_2 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & d_n \end{pmatrix}

단위 행렬 \mathbf{I}_n = \text{diag}(1, 1, \ldots, 1)과 영 행렬 \mathbf{O}_n = \text{diag}(0, 0, \ldots, 0)은 모두 대각 행렬의 특수한 경우이다. 대각 원소가 모두 동일한 값 c인 경우 c\mathbf{I}_n으로 표현되며, 이를 스칼라 행렬(scalar matrix)이라 한다.

2. 대각 행렬의 대수적 성질

대각 행렬은 일반 행렬에 비해 연산이 현저하게 단순화되는 우수한 대수적 성질을 가진다.

대각 행렬의 곱셈: 두 대각 행렬 \mathbf{D}_1 = \text{diag}(a_1, \ldots, a_n)\mathbf{D}_2 = \text{diag}(b_1, \ldots, b_n)의 곱은 다음과 같다.

\mathbf{D}_1 \mathbf{D}_2 = \text{diag}(a_1 b_1, a_2 b_2, \ldots, a_n b_n)

따라서 대각 행렬끼리의 곱셈은 교환법칙이 성립한다. \mathbf{D}_1 \mathbf{D}_2 = \mathbf{D}_2 \mathbf{D}_1이다. 이는 일반 행렬 곱셈과 구별되는 중요한 특성이다.

거듭제곱: 대각 행렬의 k제곱은 각 대각 원소를 k제곱한 것과 같다.

\mathbf{D}^k = \text{diag}(d_1^k, d_2^k, \ldots, d_n^k)

이 성질은 수학적 귀납법으로 용이하게 증명된다. k = 1일 때 자명하고, \mathbf{D}^k = \text{diag}(d_1^k, \ldots, d_n^k)를 가정하면 \mathbf{D}^{k+1} = \mathbf{D}^k \mathbf{D} = \text{diag}(d_1^{k+1}, \ldots, d_n^{k+1})이다.

행렬식: 대각 행렬의 행렬식은 대각 원소의 곱이다.

\det(\mathbf{D}) = \prod_{i=1}^{n} d_i

트레이스: 대각 행렬의 트레이스는 대각 원소의 합이다.

\text{tr}(\mathbf{D}) = \sum_{i=1}^{n} d_i

고유값: 대각 행렬의 고유값은 대각 원소 자체이다. \mathbf{D}\mathbf{e}_i = d_i \mathbf{e}_i이므로, 표준 기저 벡터 \mathbf{e}_i가 고유값 d_i에 대응하는 고유벡터이다.

역행렬: 모든 대각 원소가 0이 아닌 경우, 대각 행렬의 역행렬은 각 대각 원소의 역수로 구성된다.

\mathbf{D}^{-1} = \text{diag}\left(\frac{1}{d_1}, \frac{1}{d_2}, \ldots, \frac{1}{d_n}\right)

하나 이상의 대각 원소가 0이면 행렬은 특이(singular)하며 역행렬이 존재하지 않는다.

3. 대각 행렬과 일반 행렬의 곱셈

대각 행렬과 일반 행렬의 곱셈은 행 또는 열의 스케일링(scaling)으로 해석된다. 행렬 \mathbf{A} \in \mathbb{R}^{m \times n}에 대하여 다음이 성립한다.

왼쪽 곱셈(행 스케일링): \mathbf{D}\mathbf{A}에서 \mathbf{D} = \text{diag}(d_1, \ldots, d_m)이면, 결과 행렬의 i번째 행은 \mathbf{A}i번째 행에 d_i를 곱한 것이다.

(\mathbf{D}\mathbf{A})_{ij} = d_i \cdot a_{ij}

오른쪽 곱셈(열 스케일링): \mathbf{A}\mathbf{D}에서 \mathbf{D} = \text{diag}(d_1, \ldots, d_n)이면, 결과 행렬의 j번째 열은 \mathbf{A}j번째 열에 d_j를 곱한 것이다.

(\mathbf{A}\mathbf{D})_{ij} = a_{ij} \cdot d_j

이러한 스케일링 해석은 실용적으로 매우 중요하다. 대각 행렬과의 곱셈은 원소별(element-wise) 곱셈으로 환원되므로, 일반 행렬 곱셈의 O(n^3) 복잡도 대신 O(n^2) 복잡도만 필요하다.

4. 연산 효율성 분석

대각 행렬의 연산 효율성을 일반 행렬과 비교하면 다음과 같다. n \times n 행렬을 기준으로 각 연산의 시간 복잡도를 정리한다.

연산일반 행렬대각 행렬
행렬 곱셈O(n^3)O(n)
역행렬 계산O(n^3)O(n)
행렬식 계산O(n^3)O(n)
거듭제곱 \mathbf{A}^kO(n^3 \log k)O(n)
고유값 분해O(n^3)O(1) (이미 분해된 형태)
저장 공간O(n^2)O(n)

이처럼 대각 행렬에 대한 연산은 차원에 대해 선형 복잡도를 가지므로, 대규모 문제에서 막대한 계산 절감을 가져온다. 이것이 많은 수치 알고리즘이 행렬을 대각화(diagonalization)하는 것을 목표로 하는 근본적 이유이다.

5. 대각화와 행렬 분해에서의 역할

정사각 행렬 \mathbf{A}가 대각화 가능(diagonalizable)하다 함은, 가역 행렬 \mathbf{P}가 존재하여 다음이 성립함을 의미한다.

\mathbf{A} = \mathbf{P}\mathbf{D}\mathbf{P}^{-1}

여기서 \mathbf{D}\mathbf{A}의 고유값을 대각 원소로 가지는 대각 행렬이고, \mathbf{P}의 열벡터는 대응하는 고유벡터이다. 이 분해를 고유값 분해(eigendecomposition)라 한다.

대각화가 이루어지면 행렬 거듭제곱이 매우 효율적으로 계산된다.

\mathbf{A}^k = \mathbf{P}\mathbf{D}^k\mathbf{P}^{-1} = \mathbf{P}\,\text{diag}(d_1^k, \ldots, d_n^k)\,\mathbf{P}^{-1}

특이값 분해(SVD) \mathbf{A} = \mathbf{U}\boldsymbol{\Sigma}\mathbf{V}^\top에서도 \boldsymbol{\Sigma}는 특이값을 대각 원소로 가지는 대각 행렬이다. 이처럼 대각 행렬은 행렬 분해의 핵심 구성 요소로서, 복잡한 행렬의 구조를 해석하고 효율적 연산을 가능하게 하는 중추적 역할을 한다.

6. 딥러닝에서의 대각 행렬 활용

딥러닝에서 대각 행렬 구조는 연산 효율성과 모델 해석의 두 측면에서 활용된다.

배치 정규화(Batch Normalization): 배치 정규화의 스케일링 단계에서 학습 가능한 매개변수 \boldsymbol{\gamma} = (\gamma_1, \ldots, \gamma_d)는 대각 행렬 \text{diag}(\gamma_1, \ldots, \gamma_d)에 의한 채널별 스케일링과 동등하다. 이를 대각 행렬로 명시적으로 저장하는 대신 벡터로 저장하고 원소별 곱셈으로 구현하여, O(d)의 시간과 공간 복잡도만 소요된다.

대각 근사(Diagonal Approximation): 자연 기울기법(natural gradient method)에서 피셔 정보 행렬(Fisher information matrix) \mathbf{F}를 대각 행렬로 근사하면, 역행렬 계산이 O(n^3)에서 O(n)으로 감소한다. Adam 옵티마이저는 적응적 학습률을 매개변수별로 독립적으로 조정하는데, 이는 피셔 정보 행렬의 대각 근사에 기반한 것으로 해석할 수 있다. 2차 모멘트 추정 \hat{v}_t를 사용하여 \theta_{t+1} = \theta_t - \eta / (\sqrt{\hat{v}_t} + \epsilon)으로 갱신하는 것은, 전체 곡률 정보 대신 각 축 방향의 곡률만을 사용하는 대각 근사이다.

희소 연결과 채널별 연산: 깊이별 분리 합성곱(depthwise separable convolution)의 깊이별 단계에서는 각 채널에 독립적인 필터를 적용하며, 이는 블록 대각 구조로 이해할 수 있다. 채널 수를 C, 공간 크기를 H \times W라 하면, 일반 합성곱의 O(C^2 H W k^2) 복잡도가 깊이별 합성곱에서는 O(C H W k^2)로 감소한다. 이 효율성은 가중치 행렬이 (블록) 대각 구조를 가지기 때문에 달성되는 것이다.