Ch.6 §6.4 — 대칭 행렬 (Symmetric Matrices)

실수 고유값·직교 고유벡터·스펙트럼 정리 \(A = Q\Lambda Q^\top\) 와 ML 응용

Strang Ch.6.4를 기반으로 대칭 행렬이 왜 선형대수에서 가장 중요한 행렬 부류인지 다룬다. 실수 고유값과 직교 고유벡터의 증명, 스펙트럼 정리 \(A = Q\Lambda Q^\top\) 의 기하학적 해석, 피벗과 고유값 부호 일치, 반복 고유값에서도 대각화가 보장되는 Schur 정리, 그리고 PCA·커널·그래프 라플라시안 등 ML 응용까지 직관과 수식을 함께 제시한다.

Math
Linear Algebra
저자

Kwangmin Kim

공개

2026년 04월 10일

1 왜 대칭 행렬인가

Strang은 Ch.6.4를 이렇게 연다: “과장 없이, 대칭 행렬은 이 세상이 보게 될 가장 중요한 행렬이다”. 이 문장이 과장이 아닌 이유는 응용 수학에서 실제로 마주치는 행렬의 대부분이 대칭이기 때문이다.

분야 자연스럽게 등장하는 대칭 행렬 왜 대칭인가
통계 공분산 행렬 \(\mathbf{\Sigma} = \mathbb{E}[(\mathbf{x}-\bar{\mathbf{x}})(\mathbf{x}-\bar{\mathbf{x}})^\top]\) 정의상 \(\mathbf{\Sigma}^\top = \mathbf{\Sigma}\)
최적화 헤시안 \(\mathbf{H}_{ij} = \partial^2 f / \partial x_i \partial x_j\) 편미분 교환법칙 (Clairaut)
머신러닝 그람 행렬 \(\mathbf{K} = \mathbf{X}^\top \mathbf{X}\), 커널 행렬 \(K_{ij} = k(x_i, x_j)\) 대칭 커널
그래프 인접 행렬·라플라시안 \(\mathbf{L} = \mathbf{D} - \mathbf{A}\) (무방향 그래프) 간선이 양방향
물리 관성 모멘트·응력 텐서·양자역학 관측 가능량(에르미트) 물리 법칙의 대칭성

이들은 우연이 아니라 “어떤 양이 두 변수에 대해 대칭적으로 의존한다” 는 수학적 사실의 반영이다. 예를 들어 공분산 \(\text{Cov}(X_i, X_j) = \text{Cov}(X_j, X_i)\) 는 곱셈의 교환 법칙에서 직접 나오는 대칭이다.

대칭 행렬이 일반 행렬과 결정적으로 다른 점 두 가지는 다음과 같다:

대칭 행렬의 두 기둥 (Two Pillars)

\(\mathbf{A} = \mathbf{A}^\top\) 이면 다음이 항상 성립한다:

  1. 실수 고유값 (Real Eigenvalues): 모든 고유값 \(\lambda_i \in \mathbb{R}\) 이다.
  2. 직교 고유벡터 (Orthonormal Eigenvectors): \(n\) 개의 고유벡터를 정규직교 기저로 선택할 수 있다.

두 기둥은 함께 스펙트럼 정리 \(\mathbf{A} = \mathbf{Q}\mathbf{\Lambda}\mathbf{Q}^\top\) 를 보장한다. 이 식 하나가 대칭 행렬 이론의 전부이다.

일반 행렬에서는 고유값이 복소수일 수 있고(예: 회전 행렬), 고유벡터가 직교하지 않으며(예: 가위 변형), 심지어 대각화 자체가 불가능할 수도 있다(결함 행렬). 이 세 가지 재앙이 대칭 행렬에서는 동시에 사라진다.


2 스펙트럼 정리: 직관부터

\(\mathbf{A} = \mathbf{A}^\top\) 이면 일반 대각화 \(\mathbf{A} = \mathbf{S}\mathbf{\Lambda}\mathbf{S}^{-1}\) 가 훨씬 더 깔끔한 형태로 바뀐다.

\[ \boxed{\; \mathbf{A} = \mathbf{Q}\mathbf{\Lambda}\mathbf{Q}^\top, \quad \mathbf{Q}^\top \mathbf{Q} = \mathbf{I}, \quad \mathbf{\Lambda} = \text{diag}(\lambda_1, \dots, \lambda_n) \;} \]

여기서 \(\mathbf{Q}\) 의 열은 \(\mathbf{A}\)정규직교 고유벡터 \(\mathbf{q}_1, \dots, \mathbf{q}_n\) 이다. 이것이 스펙트럼 정리(Spectral Theorem)이자 기하학·물리에서 주축 정리(Principal Axis Theorem)로 불리는 결과이다.

2.1 힌트: 왜 \(\mathbf{S}^{-1}\)\(\mathbf{Q}^\top\) 으로 바뀌는가

Strang의 스케치를 따라가 보자. \(\mathbf{A}\) 가 대칭이라고 가정하고 대각화 식을 전치한다.

\[ \mathbf{A} = \mathbf{S}\mathbf{\Lambda}\mathbf{S}^{-1} \quad \Longrightarrow \quad \mathbf{A}^\top = (\mathbf{S}^{-1})^\top \mathbf{\Lambda}^\top \mathbf{S}^\top = (\mathbf{S}^{-1})^\top \mathbf{\Lambda} \mathbf{S}^\top \]

\(\mathbf{A} = \mathbf{A}^\top\) 이므로 두 표현은 같아야 한다. 이를 만족시키는 가장 자연스러운 선택은 \(\mathbf{S}^{-1} = \mathbf{S}^\top\), 즉 \(\mathbf{S}^\top \mathbf{S} = \mathbf{I}\) 이다. 이것이 바로 직교 행렬의 정의이다. 이 관찰은 증명은 아니지만, 왜 대칭 행렬의 고유벡터가 직교해야 “식이 맞는지” 보여준다.

2.2 기하학적 의미: 주축 회전

\(\mathbf{A} = \mathbf{Q}\mathbf{\Lambda}\mathbf{Q}^\top\) 을 벡터 \(\mathbf{x}\) 에 작용시켜 보자.

\[ \mathbf{A}\mathbf{x} = \mathbf{Q}\mathbf{\Lambda}\mathbf{Q}^\top \mathbf{x} \]

이 식을 오른쪽에서 왼쪽으로 읽으면 세 단계 변환이 보인다.

단계 연산 의미
1 \(\mathbf{Q}^\top \mathbf{x}\) 벡터를 고유벡터 좌표계로 회전한다
2 \(\mathbf{\Lambda}(\cdot)\) 각 축마다 \(\lambda_i\) 배 스케일링
3 \(\mathbf{Q}(\cdot)\) 원래 좌표계로 역회전

즉, 대칭 행렬은 “회전 → 축별 스케일링 → 역회전”이라는 가장 단순한 변환으로 완전히 분해된다. 비대칭 행렬은 여기에 “전단(shear)”이라는 찌그러뜨림이 섞이는데, 대칭이라는 조건이 그 찌그러뜨림을 제거한다.

직관: 타원과 주축

\(\mathbf{A}\) 가 양정치 대칭 행렬일 때 이차형식 \(\mathbf{x}^\top \mathbf{A} \mathbf{x} = 1\)\(\mathbb{R}^n\)타원(ellipsoid)이다. 스펙트럼 정리는 이 타원의 주축이 정확히 고유벡터 방향이고, 반축의 길이가 \(1/\sqrt{\lambda_i}\) 임을 말한다. 공분산 행렬을 생각하면 — 고유벡터는 데이터 구름의 주성분 방향이고, 고유값은 그 방향의 분산이다. PCA가 바로 이 이야기이다.


3 증명 1: 고유값이 실수인 이유

\(\mathbf{A}\) 가 실수 대칭 행렬이면 그 고유값이 반드시 실수임을 증명한다. 핵심 트릭은 복소 켤레 전치를 이용한 자기 자신과의 비교이다.

Step 1 — 복소수일 수도 있다고 가정한다. 특성 방정식 \(\det(\mathbf{A} - \lambda\mathbf{I}) = 0\) 은 실수 계수 다항식이지만 해 \(\lambda\) 는 복소수 \(a + ib\) 일 수도 있다. 대응하는 고유벡터 \(\mathbf{x}\) 도 복소수 성분을 가질 수 있다.

Step 2 — 양변에 켤레를 취한다. \(\mathbf{A}\) 가 실수이므로 \(\overline{\mathbf{A}} = \mathbf{A}\) 이다.

\[ \mathbf{A}\mathbf{x} = \lambda \mathbf{x} \quad \xrightarrow{\text{켤레}} \quad \mathbf{A}\overline{\mathbf{x}} = \overline{\lambda}\,\overline{\mathbf{x}} \]

Step 3 — 전치한다. 두 번째 식을 전치하고 \(\mathbf{A}^\top = \mathbf{A}\) 를 쓴다.

\[ \overline{\mathbf{x}}^\top \mathbf{A} = \overline{\lambda}\,\overline{\mathbf{x}}^\top \]

Step 4 — 두 식을 곱해 비교한다. 첫 번째 식의 왼쪽에서 \(\overline{\mathbf{x}}^\top\) 을 곱하고, 방금 얻은 식의 오른쪽에서 \(\mathbf{x}\) 를 곱한다.

\[ \overline{\mathbf{x}}^\top \mathbf{A} \mathbf{x} = \lambda\, \overline{\mathbf{x}}^\top \mathbf{x} \qquad \text{및} \qquad \overline{\mathbf{x}}^\top \mathbf{A} \mathbf{x} = \overline{\lambda}\,\overline{\mathbf{x}}^\top \mathbf{x} \]

두 식의 좌변이 같으므로 우변도 같아야 한다.

\[ \lambda\, \overline{\mathbf{x}}^\top \mathbf{x} = \overline{\lambda}\,\overline{\mathbf{x}}^\top \mathbf{x} \]

Step 5 — 양변을 \(\overline{\mathbf{x}}^\top \mathbf{x}\) 로 나눈다. 이 양은 \(|x_1|^2 + |x_2|^2 + \dots = \|\mathbf{x}\|^2 > 0\) 이므로 0이 아니다. 따라서

\[ \lambda = \overline{\lambda} \quad \Longleftrightarrow \quad \text{Im}(\lambda) = 0 \]

\(\lambda\) 는 실수이다. QED

이 증명이 말해주는 것

증명의 심장은 “대칭성이 켤레 대칭과 정확히 맞물린다”는 점이다. \(\mathbf{A} = \mathbf{A}^\top\) 이기 때문에 \(\overline{\mathbf{x}}^\top \mathbf{A} \mathbf{x}\) 가 두 가지 방식으로 읽히고, 두 읽기가 일치하려면 \(\lambda\) 가 자기 자신의 켤레여야만 한다. 대칭성이 깨지면 이 일치가 깨지고 복소 고유값이 등장한다. Ch.6.4의 회전 행렬 예시가 그 증거이다.


4 증명 2: 고유벡터가 직교하는 이유

다른 고유값에 대응하는 고유벡터는 자동으로 직교한다는 사실의 증명은 두 줄이면 끝난다. 이것은 가끔 학생들이 마법처럼 느끼는 결과이지만, 알고 보면 전치의 정의만 사용한다.

두 쌍의 고유 관계를 놓자.

\[ \mathbf{A}\mathbf{x} = \lambda_1 \mathbf{x}, \qquad \mathbf{A}\mathbf{y} = \lambda_2 \mathbf{y}, \qquad \lambda_1 \neq \lambda_2 \]

첫 번째 식의 양변에 왼쪽에서 \(\mathbf{y}^\top\) 을 곱한다.

\[ \mathbf{y}^\top \mathbf{A} \mathbf{x} = \lambda_1\, \mathbf{y}^\top \mathbf{x} \]

좌변을 두 번째 방식으로도 계산한다. \(\mathbf{A} = \mathbf{A}^\top\) 를 쓰면 \(\mathbf{y}^\top \mathbf{A} = (\mathbf{A}\mathbf{y})^\top = \lambda_2\, \mathbf{y}^\top\) 이므로

\[ \mathbf{y}^\top \mathbf{A} \mathbf{x} = \lambda_2\, \mathbf{y}^\top \mathbf{x} \]

두 결과를 비교한다.

\[ \lambda_1\, \mathbf{y}^\top \mathbf{x} = \lambda_2\, \mathbf{y}^\top \mathbf{x} \quad \Longrightarrow \quad (\lambda_1 - \lambda_2)\, \mathbf{y}^\top \mathbf{x} = 0 \]

\(\lambda_1 \neq \lambda_2\) 라는 가정에서 \(\mathbf{y}^\top \mathbf{x} = 0\), 즉 두 고유벡터는 직교한다. QED

왜 투영 행렬이 실마리였는가

Ch.6.4 도입부의 투영 행렬 \(\mathbf{P}\) 예시(고유값 1, 1, 0)를 기억하자. 평면 위 두 고유벡터는 자동 직교가 아니라 “직교로 선택 가능”했다. 이 “선택 가능”이 일반 현상이 아닌 이유는 — 다른 고유값에 대한 고유벡터는 자동 직교지만, 같은 고유값(반복근)에 대한 고유벡터들은 고유공간 안에서 자유롭게 회전할 수 있기 때문이다. 그 자유도 덕분에 우리는 Gram-Schmidt를 써서 같은 고유공간 내부에서 직교 기저를 구성할 수 있다.

4.1 반복 고유값의 경우: 선택의 자유

고유값 \(\lambda\)\(k\) 중근이면 그 고유공간 \(E_\lambda = \ker(\mathbf{A} - \lambda\mathbf{I})\)\(k\) 차원이다. 대칭 행렬에서는 이 차원이 정확히 대수적 중복도와 일치함이 보장된다(Schur 정리로 뒤에서 증명). 그 \(k\) 차원 공간 내부에서는 어떤 직교 기저든 택할 수 있고, 서로 다른 고유값의 고유공간끼리는 자동 직교이므로, 전체 \(n\) 개의 정규직교 고유벡터가 항상 존재한다.


5 스펙트럼 분해: 랭크-1 투영의 가중합

\(\mathbf{A} = \mathbf{Q}\mathbf{\Lambda}\mathbf{Q}^\top\) 을 열-행 분해로 전개하면 대칭 행렬의 가장 통찰력 있는 표현이 나온다.

\[ \boxed{\;\mathbf{A} = \sum_{i=1}^{n} \lambda_i\, \mathbf{q}_i \mathbf{q}_i^\top = \lambda_1 \mathbf{P}_1 + \lambda_2 \mathbf{P}_2 + \dots + \lambda_n \mathbf{P}_n\;} \]

여기서 \(\mathbf{P}_i = \mathbf{q}_i \mathbf{q}_i^\top\)\(\mathbf{q}_i\) 방향으로의 랭크-1 직교 투영 행렬이다. 이 합 분해가 말하는 바는 극적이다:

대칭 행렬 = 직교 투영들의 가중 합

대칭 행렬 \(\mathbf{A}\) 가 벡터 \(\mathbf{v}\) 에 작용하는 과정은 다음과 같이 읽힌다:

  1. \(\mathbf{v}\) 를 각 고유 방향 \(\mathbf{q}_i\)투영한다: \(\mathbf{P}_i \mathbf{v}\).
  2. 각 투영을 해당 고유값으로 스케일한다: \(\lambda_i \mathbf{P}_i \mathbf{v}\).
  3. 결과를 모두 더한다.

즉, 대칭 행렬은 서로 직교하는 \(n\) 개의 1차원 고유 공간으로 벡터를 분해한 뒤, 각 공간에서 \(\lambda_i\) 배 확대/축소하는 것에 불과하다.

투영 행렬 \(\mathbf{P}_i\) 의 주요 성질:

  • \(\mathbf{P}_i^2 = \mathbf{P}_i\) (투영은 한 번으로 충분)
  • \(\mathbf{P}_i^\top = \mathbf{P}_i\) (자기자신이 대칭)
  • \(\mathbf{P}_i \mathbf{P}_j = \mathbf{0}\) (\(i \neq j\), 서로 직교)
  • \(\sum_i \mathbf{P}_i = \mathbf{I}\) (완비성 — 모든 방향을 합치면 항등 행렬)

이 마지막 성질은 단위 분해(Resolution of Identity)라 부르며, 양자역학·함수해석학의 스펙트럼 이론으로 직접 확장되는 출발점이다.

5.1 스펙트럼 분해의 함수적 확장

\(\mathbf{A} = \sum \lambda_i \mathbf{P}_i\) 에서 각 \(\mathbf{P}_i\) 가 서로 직교하므로, \(\mathbf{A}^k\) 도 같은 투영들의 합으로 계산된다.

\[ \mathbf{A}^k = \sum_i \lambda_i^k\, \mathbf{P}_i, \qquad e^{\mathbf{A}t} = \sum_i e^{\lambda_i t}\, \mathbf{P}_i, \qquad f(\mathbf{A}) = \sum_i f(\lambda_i)\, \mathbf{P}_i \]

마지막 식이 행렬 함수 미적분(Functional Calculus)의 출발점이다. 대칭 행렬에 대해서는 스칼라 함수 \(f\) 를 고유값에 적용한 뒤 투영으로 짜맞추면 된다. 이 공식 덕분에 \(\mathbf{A}^{1/2}\) (제곱근), \(\log \mathbf{A}\), \(\mathbf{A}^{-1}\) 같은 양이 잘 정의된다 — 단, \(f(\lambda_i)\) 가 각 고유값에서 정의되어야 한다.


6 피벗과 고유값: 부호가 일치한다

대칭 행렬의 또 다른 놀라운 성질: 고유값과 피벗의 개수별 부호가 일치한다.

Sylvester 관성 법칙 (Sylvester’s Law of Inertia)

대칭 행렬 \(\mathbf{A} = \mathbf{A}^\top\) 에 대해 다음이 성립한다:

  • 양의 고유값의 개수 = 양의 피벗의 개수
  • 음의 고유값의 개수 = 음의 피벗의 개수
  • 0인 고유값의 개수 = 0인 피벗의 개수

특히 모든 피벗이 양수 \(\iff\) 모든 고유값이 양수 이다. 이것이 다음 절(§6.5)에서 다룰 양정치 행렬의 판별 기준이다.

6.1 왜 맞는가: 연속성 논증

Strang의 증명은 연속성에 기반한다. 대칭 행렬 \(\mathbf{A}\)\(\mathbf{A} = \mathbf{L}\mathbf{D}\mathbf{L}^\top\) 으로 분해된다(여기서 \(\mathbf{D}\) 는 피벗 대각 행렬). 이제 \(\mathbf{L}\) 의 비대각 성분을 연속적으로 0으로 수축시킨다고 상상하자.

\[ \mathbf{L}(t) = (1-t)\mathbf{L} + t\mathbf{I}, \qquad t \in [0, 1] \]

그러면 \(\mathbf{A}(t) = \mathbf{L}(t)\mathbf{D}\mathbf{L}(t)^\top\)\(t=0\) 에서 \(\mathbf{A}\) 였다가 \(t=1\) 에서 \(\mathbf{D}\) (대각 행렬 — 피벗이 곧 고유값)가 된다. 이 경로 전체에 걸쳐 피벗 \(\mathbf{D}\) 는 변하지 않으므로 \(\mathbf{A}(t)\) 는 어느 시점에도 특이(singular)하지 않다. 고유값은 특성 방정식의 근으로서 행렬 성분에 연속적으로 의존하므로, \(\mathbf{A}(t)\) 의 고유값도 0을 가로지르지 않고 연속적으로 움직인다. 부호가 바뀌려면 반드시 0을 지나야 하는데 그럴 수 없으므로, 고유값의 부호는 경로 전체에서 보존된다. 종착점 \(t=1\) 에서 고유값 = 피벗이므로, 출발점 \(t=0\) 에서도 개수별 부호가 일치한다. QED

실무 임팩트: 고유값 대신 피벗을 세라

고차원 대칭 행렬에서 “양정치인지”를 확인하려면 고유값을 계산할 필요가 없다. 가우스 소거로 얻은 피벗의 부호만 보면 된다. 이는 \(O(n^3/3)\)의 Cholesky 분해가 고유값 분해보다 훨씬 빠른 양정치 판별 방법인 이유이다. NumPy의 np.linalg.cholesky(A)가 예외를 던지지 않고 통과하면 \(\mathbf{A}\) 는 양정치이다.

6.2 예시: 부호 매칭

\[ \mathbf{A} = \begin{bmatrix} 1 & 3 \\ 3 & 1 \end{bmatrix} \]

  • 피벗: 첫 행 유지 \((1)\), 두 번째 피벗은 \(1 - 3 \cdot 3 = -8\). 따라서 피벗 \(\{+, -\}\).
  • 고유값: 특성 방정식 \((1-\lambda)^2 - 9 = 0 \Rightarrow \lambda = 4, -2\). 부호 \(\{+, -\}\).

피벗과 고유값의 부호 패턴이 정확히 일치한다. 대각 성분 \(\{1, 1\}\) 은 이 이야기와 무관하다는 점에 주의 — 대각 성분의 부호는 고유값 부호를 말해주지 않는다.


7 반복 고유값도 괜찮다: Schur 정리

일반 행렬에서는 결함 행렬(defective matrix)이 존재한다. \(\mathbf{A} = \begin{bmatrix} 3 & 1 \\ 0 & 3 \end{bmatrix}\) 처럼 고유값 3이 중근이지만 고유벡터가 하나뿐인 경우이다. 이런 행렬은 대각화가 불가능하고 Jordan 표준형으로 내려가야 한다. 그런데 대칭 행렬에서는 이런 일이 절대 일어나지 않는다.

모든 대칭 행렬은 대각화 가능하다

\(\mathbf{A} = \mathbf{A}^\top\) 이면, 고유값이 반복되더라도 항상 \(n\) 개의 정규직교 고유벡터가 존재한다.

7.1 Schur 정리를 통한 증명

Strang이 제시하는 깔끔한 증명 경로는 다음과 같다.

Schur 정리: 모든 정사각 행렬 \(\mathbf{A}\)\(\mathbf{A} = \mathbf{Q}\mathbf{T}\mathbf{Q}^\top\) 로 분해된다. 여기서 \(\mathbf{Q}\) 는 (유니터리) 직교 행렬이고 \(\mathbf{T}\) 는 상삼각 행렬이다.

이 정리는 대칭과 무관하게 임의의 행렬에 대해 성립한다(증명은 고유벡터를 하나씩 선택해 Gram-Schmidt로 직교 기저를 완성하는 귀납적 구성). 이제 \(\mathbf{A}\) 가 대칭이라고 가정하자.

\[ \mathbf{T} = \mathbf{Q}^\top \mathbf{A} \mathbf{Q} \]

이 식의 전치를 계산한다.

\[ \mathbf{T}^\top = \mathbf{Q}^\top \mathbf{A}^\top \mathbf{Q} = \mathbf{Q}^\top \mathbf{A} \mathbf{Q} = \mathbf{T} \]

\(\mathbf{T}\)대칭이자 상삼각이다. 그런데 상삼각이면서 동시에 대칭인 행렬은 대각 행렬 뿐이다(하삼각 부분이 전치의 상삼각 부분과 같아야 하는데, 상삼각이라는 조건에서 그 부분은 0이므로 비대각 성분이 모두 0). 따라서

\[ \mathbf{T} = \mathbf{\Lambda}, \qquad \mathbf{A} = \mathbf{Q}\mathbf{\Lambda}\mathbf{Q}^\top \]

반복 고유값 여부와 관계없이 \(n\) 개의 정규직교 고유벡터 존재가 증명된다. QED

왜 이 증명이 중요한가

일반 대각화 증명은 고유벡터의 선형독립을 직접 세어야 해서 반복 고유값에서 막힌다. Schur 정리는 “대각화가 아니라 삼각화”라는 약한 목표로 시작해 모든 행렬에 대해 성립하는 보편적 결과를 먼저 확보한 뒤, 대칭성이라는 추가 조건이 삼각을 대각으로 강제한다는 논리이다. 이 우회가 반복근 문제를 깔끔히 피해간다.


8 비대칭이면 어떻게 되는가

대칭성이 깨지면 앞서 본 두 기둥이 동시에 무너진다.

8.1 복소 고유값의 등장: 회전 행렬

\[ \mathbf{R}(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}, \qquad \mathbf{R}^\top \neq \mathbf{R} \]

특성 방정식 \((\cos\theta - \lambda)^2 + \sin^2\theta = 0\) 에서

\[ \lambda_{1,2} = \cos\theta \pm i\sin\theta = e^{\pm i\theta} \]

고유값이 켤레 복소수 쌍으로 나온다. 고유벡터도 \(\mathbf{x} = (1, -i)\), \(\overline{\mathbf{x}} = (1, i)\) 로 복소수이다. 이것은 우연이 아니라 “회전은 어떤 실수 방향도 자기 자신으로 보내지 않는다” 는 기하학적 사실의 대수적 표현이다. 실수 고유벡터가 존재한다면 그 방향은 회전 후에도 스스로를 가리켜야 하는데, \(0 < \theta < \pi\) 에서는 그런 방향이 없다.

\(|\lambda_{1,2}| = \sqrt{\cos^2\theta + \sin^2\theta} = 1\) — 모든 직교 행렬의 고유값은 단위원 위에 있다는 일반 사실의 특수 경우이다.

8.2 대칭의 실용적 관점

대칭이 아니면 그람 행렬로: 데이터 분석에서 만나는 \(\mathbf{X} \in \mathbb{R}^{m \times n}\) 은 거의 항상 직사각형이고 비대칭이다. 이 경우 \(\mathbf{X}^\top \mathbf{X}\) (그람 행렬)와 \(\mathbf{X}\mathbf{X}^\top\) (상관 행렬)을 만들면 자동으로 대칭이 되고, 스펙트럼 정리를 적용할 수 있다.

\[ \mathbf{x}^\top(\mathbf{X}^\top \mathbf{X})\mathbf{x} = (\mathbf{X}\mathbf{x})^\top(\mathbf{X}\mathbf{x}) = \|\mathbf{X}\mathbf{x}\|^2 \geq 0 \]

\(\mathbf{X}^\top \mathbf{X}\)대칭 양반정치(symmetric positive semi-definite)이다. 이 사실이 SVD(특이값 분해)의 출발점이며, SVD는 “비대칭·직사각 행렬에 스펙트럼 정리를 일반화하는” 도구이다.


9 치환 행렬과 이산 푸리에: \(-1, 2, -1\) 행렬

Strang이 Ch.6.4에서 소개하는 \(-1, 2, -1\) 패턴 행렬은 대칭 행렬의 응용을 보여주는 대표 사례이다.

\[ \mathbf{A}_3 = \begin{bmatrix} 2 & -1 & 0 \\ -1 & 2 & -1 \\ 0 & -1 & 2 \end{bmatrix} \]

이 행렬은 이산 이계 차분(discrete second difference) 작용자이다. 함수 \(u(t)\) 의 이계 도함수 \(u''(t)\) 를 격자점에서 근사한 것이 정확히 \(-u_{i-1} + 2u_i - u_{i+1}\) 이기 때문이다. 연속 문제 \(-u''(t) = \lambda u(t)\) 의 해는 \(\sin(kt), \cos(kt)\) 이고, 이산 버전의 고유벡터는 그 격자 샘플인 이산 사인/코사인이 된다.

결과적으로 \(\mathbf{A}_3\) 의 고유벡터는 DST(Discrete Sine Transform) 기저이다. \(\mathbf{B}_4\) 처럼 경계 조건이 다른 변형은 DCT(Discrete Cosine Transform)를 만들어낸다. DCT-II는 JPEG 이미지 압축의 핵심이며, 8×8 블록에 대해 \(\mathbf{B}_8\) 의 고유벡터가 주파수 기저를 이룬다.

분야 대칭 행렬 고유벡터가 주는 것
신호처리 \(-1, 2, -1\) 행렬 \(\mathbf{B}_n\) 이산 코사인 기저 (JPEG, MP3)
그래프 라플라시안 \(\mathbf{L}\) 스펙트럼 클러스터링, 그래프 임베딩
양자역학 해밀토니안 \(\mathbf{H}\) 에너지 고유 상태
통계 공분산 \(\mathbf{\Sigma}\) 주성분 방향 (PCA)
딥러닝 \(\mathbf{W}^\top \mathbf{W}\) (가중치 대칭화) 손실 곡면의 주축

대칭 행렬의 고유벡터는 거의 모든 경우에 “이 시스템의 자연스러운 진동 모드”로 해석된다. 이것이 고유값 문제가 물리·공학·데이터과학 전반에서 반복 등장하는 이유이다.


10 ML 응용 심화: 주성분 분석 (PCA)

PCA는 스펙트럼 정리의 가장 유명한 ML 응용이다. 데이터 행렬 \(\mathbf{X} \in \mathbb{R}^{m \times n}\) (행 = 샘플, 열 = 특성)이 주어졌을 때, 공분산 행렬

\[ \mathbf{\Sigma} = \frac{1}{m-1}\mathbf{X}_c^\top \mathbf{X}_c \]

(여기서 \(\mathbf{X}_c\) 는 중심화된 데이터)는 대칭 양반정치 행렬이다. 스펙트럼 정리를 적용한다.

\[ \mathbf{\Sigma} = \mathbf{Q}\mathbf{\Lambda}\mathbf{Q}^\top, \qquad \lambda_1 \geq \lambda_2 \geq \dots \geq \lambda_n \geq 0 \]

해석:

  • \(\mathbf{q}_1\) (최대 고유값의 고유벡터) = 분산이 최대인 방향. 데이터 구름이 가장 퍼져 있는 축.
  • \(\lambda_i\) = 해당 축 방향의 분산. \(\lambda_i / \sum_j \lambda_j\) = 그 축이 설명하는 총 분산 비율.
  • 상위 \(k\) 개 고유벡터를 기저로 쓰면 \(k\) 차원 부공간으로의 최적 투영(재구성 오차 최소).

왜 공분산 행렬이 나타나는가: 임의 단위 벡터 \(\mathbf{u}\) 방향으로 데이터를 투영했을 때의 분산은

\[ \text{Var}(\mathbf{X}_c \mathbf{u}) = \mathbf{u}^\top \mathbf{\Sigma} \mathbf{u} \]

이것을 최대화하는 단위 벡터를 찾는 문제는 Rayleigh 몫 \(\mathbf{u}^\top \mathbf{\Sigma} \mathbf{u} / \mathbf{u}^\top \mathbf{u}\) 의 최대화이고, 그 최대값은 정확히 \(\lambda_1\), 최대 달성점은 \(\mathbf{q}_1\) 이다. 대칭 행렬이어야 이 이야기가 깔끔하게 성립한다 — 비대칭이면 “분산” 자체가 의미가 없기 때문이다.

10.1 PCA와 SVD의 관계

실무에서는 공분산 행렬을 만들지 않고 \(\mathbf{X}_c\) 에 직접 SVD를 적용한다.

\[ \mathbf{X}_c = \mathbf{U}\mathbf{\Sigma}_{\text{sv}}\mathbf{V}^\top \quad \Longrightarrow \quad \mathbf{X}_c^\top \mathbf{X}_c = \mathbf{V}\mathbf{\Sigma}_{\text{sv}}^2 \mathbf{V}^\top \]

즉 SVD의 오른쪽 특이벡터 \(\mathbf{V}\) 가 공분산 행렬의 고유벡터이고, 특이값 제곱이 고유값이다. 이 경로가 수치적으로 훨씬 안정적이다(공분산을 만들면 조건수가 제곱되기 때문). SVD는 비대칭 직사각 행렬에 스펙트럼 정리의 일반화이며, 그 증명은 \(\mathbf{X}^\top \mathbf{X}\)\(\mathbf{X}\mathbf{X}^\top\) (둘 다 대칭)의 스펙트럼 정리에 정확히 의존한다.


11 다른 ML 응용들

11.1 그래프 라플라시안과 스펙트럼 클러스터링

무방향 그래프 \(G = (V, E)\) 의 라플라시안 \(\mathbf{L} = \mathbf{D} - \mathbf{A}\) (차수 행렬 - 인접 행렬)는 대칭 양반정치 행렬이다.

  • \(\lambda_1 = 0\) 은 항상 성립하며, 0 고유값의 중복도 = 그래프의 연결 성분 개수.
  • 작은 양의 고유값에 대응하는 고유벡터(Fiedler 벡터)는 그래프를 “잘라서” 균형 잡힌 두 부분으로 나누는 방향을 제시한다. 이것이 스펙트럼 클러스터링의 핵심이다.
  • GNN(그래프 신경망)의 기초도 라플라시안의 고유분해이며, 그래프 푸리에 변환이라 불린다.

11.2 커널 방법과 재생 커널 힐베르트 공간

커널 함수 \(k(x, y)\) 가 대칭이고 양정치이면 (Mercer 조건), 데이터에 대한 커널 행렬 \(\mathbf{K}_{ij} = k(x_i, x_j)\) 는 대칭 양반정치이다. 이 행렬의 고유분해는 “무한 차원 특성 공간에서의 PCA”를 가능케 하며, 이것이 커널 PCA, SVM의 쌍대 형식, 가우시안 프로세스의 수학적 근간이다.

11.3 최적화와 헤시안

함수 \(f: \mathbb{R}^n \to \mathbb{R}\) 의 헤시안 \(\mathbf{H}\) 는 Clairaut 정리에 의해 대칭이다. 극점에서 \(\mathbf{H}\)

  • 양정치 → 엄밀한 극소
  • 음정치 → 엄밀한 극대
  • 부정치 → 안장점

이다. 이 판별은 정확히 스펙트럼 정리와 Sylvester 관성 법칙의 응용이다. 뉴턴 방법, 신뢰 영역 방법, 준뉴턴 방법(BFGS) 모두 헤시안의 대칭성을 활용한다.

11.4 딥러닝의 손실 곡면

최근 연구는 신경망의 손실 함수 \(\mathcal{L}(\theta)\) 의 헤시안 고유값 분포가 학습 동역학을 지배함을 보였다. 큰 양의 고유값 방향은 “급경사 계곡”, 0에 가까운 방향은 “평탄한 해공간”이다. SGD의 일반화 성능과 “평탄한 최소값 가설”의 논의가 모두 스펙트럼 해석에 기반한다.


12 계산 예시: 손으로 풀어보기

\(\mathbf{A} = \begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix}\) 를 스펙트럼 분해한다.

Step 1 — 고유값: \(\det(\mathbf{A} - \lambda\mathbf{I}) = (2-\lambda)^2 - 1 = \lambda^2 - 4\lambda + 3 = 0\).

\(\lambda_1 = 1, \lambda_2 = 3\). (검산: trace = 4 = \(\lambda_1 + \lambda_2\), det = 3 = \(\lambda_1 \lambda_2\). OK.)

Step 2 — 고유벡터:

\(\lambda_1 = 1\): \((\mathbf{A} - \mathbf{I})\mathbf{x} = \begin{bmatrix} 1 & 1 \\ 1 & 1 \end{bmatrix}\mathbf{x} = \mathbf{0}\), 해 \(\mathbf{x}_1 = (1, -1)\).

\(\lambda_2 = 3\): \((\mathbf{A} - 3\mathbf{I})\mathbf{x} = \begin{bmatrix} -1 & 1 \\ 1 & -1 \end{bmatrix}\mathbf{x} = \mathbf{0}\), 해 \(\mathbf{x}_2 = (1, 1)\).

직교 확인: \(\mathbf{x}_1^\top \mathbf{x}_2 = 1 - 1 = 0\). 자동 직교.

Step 3 — 정규화: 길이가 \(\sqrt{2}\) 이므로 각각 \(1/\sqrt{2}\) 로 나눈다.

\[ \mathbf{q}_1 = \frac{1}{\sqrt{2}}\begin{bmatrix} 1 \\ -1 \end{bmatrix}, \qquad \mathbf{q}_2 = \frac{1}{\sqrt{2}}\begin{bmatrix} 1 \\ 1 \end{bmatrix} \]

Step 4 — 스펙트럼 분해:

\[ \mathbf{Q} = \frac{1}{\sqrt{2}}\begin{bmatrix} 1 & 1 \\ -1 & 1 \end{bmatrix}, \qquad \mathbf{\Lambda} = \begin{bmatrix} 1 & 0 \\ 0 & 3 \end{bmatrix} \]

Step 5 — 랭크-1 투영 합:

\[ \mathbf{A} = 1 \cdot \frac{1}{2}\begin{bmatrix} 1 & -1 \\ -1 & 1 \end{bmatrix} + 3 \cdot \frac{1}{2}\begin{bmatrix} 1 & 1 \\ 1 & 1 \end{bmatrix} \]

직접 더해서 확인: \(\frac{1}{2}\begin{bmatrix} 1+3 & -1+3 \\ -1+3 & 1+3 \end{bmatrix} = \begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix} = \mathbf{A}\). OK.

해석: \(\mathbf{A}\)\((1,1)\) 방향으로는 3배, \((1,-1)\) 방향으로는 1배 늘리는 변환이다. 두 방향은 수직이므로 타원의 주축이고, 타원 \(\mathbf{x}^\top \mathbf{A}^{-1}\mathbf{x} = 1\) 의 반축 길이는 \(\sqrt{1} = 1\)\(\sqrt{3}\) 이 된다.


13 코드 예시

import numpy as np

A = np.array([[2, 1],
              [1, 2]], dtype=float)

# 대칭 행렬 전용 eigh — 고유값이 정렬되어 반환된다
eigvals, Q = np.linalg.eigh(A)
Lambda = np.diag(eigvals)

print("Eigenvalues:", eigvals)
print("Q (orthonormal eigenvectors):\n", Q)

# 직교성 검증: Q^T Q = I
print("\nQ^T Q:\n", Q.T @ Q)

# 스펙트럼 정리 검증: A = Q Lambda Q^T
A_reconstructed = Q @ Lambda @ Q.T
print("\nReconstructed A:\n", A_reconstructed)
print("Match:", np.allclose(A, A_reconstructed))

# 랭크-1 투영의 합으로 A 재구성
A_spectral = sum(
    lam * np.outer(Q[:, i], Q[:, i])
    for i, lam in enumerate(eigvals)
)
print("\nSum of rank-1 projections:\n", A_spectral)
import numpy as np
from scipy.linalg import lu

A = np.array([[1, 3],
              [3, 1]], dtype=float)

# LU 분해로 피벗 추출
P, L, U = lu(A)
pivots = np.diag(U)
print("Pivots:", pivots)

# 고유값
eigvals = np.linalg.eigvalsh(A)
print("Eigenvalues:", eigvals)

# 부호 매칭: 양의 피벗 개수 = 양의 고유값 개수
print("Positive pivots:", int((pivots > 0).sum()))
print("Positive eigenvalues:", int((eigvals > 0).sum()))
print("Negative pivots:", int((pivots < 0).sum()))
print("Negative eigenvalues:", int((eigvals < 0).sum()))
import numpy as np

# 가상의 2D 데이터: 주로 (1,1) 방향으로 퍼져 있다
rng = np.random.default_rng(42)
n = 500
x = rng.normal(0, 2, n)
y = x + rng.normal(0, 0.5, n)
X = np.column_stack([x, y])

# 중심화
X_c = X - X.mean(axis=0)

# 공분산 행렬 (대칭)
Sigma = (X_c.T @ X_c) / (n - 1)
print("Covariance:\n", Sigma)

# 스펙트럼 분해 — PCA
eigvals, eigvecs = np.linalg.eigh(Sigma)
# eigh는 오름차순 반환, 내림차순으로 뒤집는다
eigvals = eigvals[::-1]
eigvecs = eigvecs[:, ::-1]

print("\nPrincipal variances:", eigvals)
print("Principal directions (columns):\n", eigvecs)

# 설명된 분산 비율
explained_ratio = eigvals / eigvals.sum()
print("Explained variance ratio:", explained_ratio)

# 1차원으로 투영
X_pca = X_c @ eigvecs[:, [0]]
print("\nProjected shape:", X_pca.shape)
import numpy as np

# Strang Ch.6.4의 B_n 행렬 (경계 조건 변형된 -1, 2, -1)
def build_B(n):
    B = 2 * np.eye(n) - np.eye(n, k=1) - np.eye(n, k=-1)
    B[0, 0] = 1  # 경계 조정
    B[-1, -1] = 1
    return B

B8 = build_B(8)
print("B_8 symmetric?", np.allclose(B8, B8.T))

eigvals, C = np.linalg.eigh(B8)
print("Eigenvalues (sorted):", eigvals)

# C의 열이 DCT 기저 — 이산 코사인 패턴이 나타난다
# 각 열은 주파수가 다른 코사인 파동의 샘플링이다
for i in range(3):
    print(f"\nEigenvector {i} (frequency {i}):")
    print(C[:, i].round(3))
A <- matrix(c(2, 1, 1, 2), nrow = 2)

# 대칭 확인
isSymmetric(A)

# 고유분해
eig <- eigen(A)
Lambda <- diag(eig$values)
Q <- eig$vectors

cat("Eigenvalues:", eig$values, "\n")
print(Q)

# Q^T Q = I 확인
print(crossprod(Q))

# A = Q Lambda Q^T 재구성
A_reconstructed <- Q %*% Lambda %*% t(Q)
print(A_reconstructed)
all.equal(A, A_reconstructed)

# 랭크-1 분해
A_sum <- Reduce(`+`, lapply(seq_along(eig$values), function(i) {
  eig$values[i] * tcrossprod(Q[, i])
}))
print(A_sum)

14 정리

주제 핵심
대칭의 정의 \(\mathbf{A}^\top = \mathbf{A}\), \(a_{ij} = a_{ji}\)
두 기둥 실수 고유값, 직교 고유벡터
스펙트럼 정리 \(\mathbf{A} = \mathbf{Q}\mathbf{\Lambda}\mathbf{Q}^\top\), \(\mathbf{Q}^\top\mathbf{Q} = \mathbf{I}\)
기하학적 의미 회전 → 축별 스케일링 → 역회전 (주축 정리)
스펙트럼 분해 \(\mathbf{A} = \sum \lambda_i \mathbf{q}_i \mathbf{q}_i^\top = \sum \lambda_i \mathbf{P}_i\)
함수 미적분 \(f(\mathbf{A}) = \sum f(\lambda_i) \mathbf{P}_i\)
피벗 부호 매칭 Sylvester 관성 법칙 — 양·음·0 고유값 수 = 양·음·0 피벗 수
반복 고유값 Schur 정리로 대각화 항상 보장
비대칭 확장 \(\mathbf{X}^\top\mathbf{X}\) 는 대칭 양반정치 → SVD의 출발
ML 응용 PCA, 커널, 라플라시안, 헤시안, JPEG(DCT), 스펙트럼 클러스터링

대칭 행렬은 “가장 단순한 변환”(회전·스케일링·역회전)이라는 기하학적 본질을 가지며, 이 단순성 덕분에 증명·계산·응용 모든 면에서 특권적 지위를 누린다. 다음 절 §6.5에서는 모든 고유값이 양수인 대칭 행렬 — 양정치 행렬 — 을 다루며, 피벗 부호 매칭이 실전 판별 기준으로 어떻게 쓰이는지 확인한다.

Strang은 이렇게 요약한다: “At this point the matrix is as simple as it can be. \(\mathbf{Q}^\top \mathbf{A} \mathbf{Q} = \mathbf{\Lambda}\) is as good as it gets” (Strang, 2009, Ch.6.4).


15 관련 주제

선행 지식

후속 주제

관련 강의 노트

다른 카테고리 연결

Subscribe

Enjoy this blog? Get notified of new posts by email: