고유값과 고유벡터: 변환의 뼈대 찾기

변환을 해도 방향이 바뀌지 않는 특별한 벡터인 고유벡터와 그 배율인 고유값을 그림과 계산으로 이해해요. 특성 방정식, 대각화, 거듭제곱이 쉬워지는 이유, 마르코프 체인의 장기 상태와 페이지랭크, 대칭 행렬과 공분산, 안정성까지 연결해요.

고급강의 5 / 6약 8분

행렬로 공간을 변환하면 대부분의 화살표는 방향이 틀어져요. 그런데 어떤 화살표들은 변환을 거쳐도 자기가 놓인 직선 위에 그대로 남고, 길이만 몇 배가 돼요. 이런 화살표가 고유벡터, 그 배율이 고유값이에요. 이 둘은 변환의 "뼈대"라서, 고유벡터를 알면 복잡한 변환이 단순한 늘이기로 보이고, 같은 변환을 수백 번 반복했을 때 무슨 일이 일어날지 예측할 수 있어요. 구글의 검색 순위, 데이터의 주성분, 시스템의 안정성이 모두 이 개념 위에 있어요.

정의

Av=λv,v≠0A\mathbf{v} = \lambda \mathbf{v}, \qquad \mathbf{v} \neq \mathbf{0}

행렬 AA를 곱한 결과가 원래 벡터의 λ\lambda(람다)배라면, v\mathbf{v}는 고유벡터이고 λ\lambda는 고유값이에요. "고유"는 독일어 eigen(자기 자신의)에서 왔어요. 변환이 자기 자신의 방향으로 돌려보내는 벡터라는 뜻이에요.

그림으로 보기

A=[3102]A = \begin{bmatrix} 3 & 1 \\ 0 & 2 \end{bmatrix}
  • (1,0)(1, 0)을 넣으면 (3,0)(3, 0)이 나와요. x축 위에 그대로 있고 3배가 됐어요. 고유값 3인 고유벡터예요.
  • (−1,1)(-1, 1)을 넣으면 (−3+1,2)=(−2,2)(-3 + 1, 2) = (-2, 2)가 나와요. 원래 방향 그대로 2배예요. 고유값 2인 고유벡터예요.
  • (1,1)(1, 1)을 넣으면 (4,2)(4, 2)가 나와요. 방향이 틀어졌으니 고유벡터가 아니에요.

고유벡터의 배수도 모두 고유벡터예요. (−2,2)(-2, 2)도, (5,−5)(5, -5)도 고유값 2인 고유벡터예요. 그래서 고유벡터는 보통 "방향", 즉 직선 하나로 생각해요.

고유값의 뜻

고유값그 방향에서 일어나는 일
1보다 큼늘어남
0과 1 사이줄어듦
1그대로
0원점으로 찌그러짐
음수뒤집히며 늘어나거나 줄어듦

고유값 구하기

Av=λvA\mathbf{v} = \lambda\mathbf{v}를 옮기면

(A−λI)v=0(A - \lambda I)\mathbf{v} = \mathbf{0}

0이 아닌 v\mathbf{v}가 0으로 보내진다는 건, 변환 A−λIA - \lambda I가 공간을 찌그러뜨린다는 뜻이에요. 지난 강의에서 배웠듯 그건 행렬식이 0이라는 말이죠.

det⁡(A−λI)=0\det(A - \lambda I) = 0

이 식을 특성 방정식이라고 해요. 예를 들어 볼게요.

A=[2112],det⁡[2−λ112−λ]=(2−λ)2−1=0A = \begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix}, \qquad \det \begin{bmatrix} 2 - \lambda & 1 \\ 1 & 2 - \lambda \end{bmatrix} = (2 - \lambda)^2 - 1 = 0

λ2−4λ+3=0\lambda^2 - 4\lambda + 3 = 0을 풀면 λ=1,3\lambda = 1, 3이에요. λ=3\lambda = 3을 넣고 (A−3I)v=0(A - 3I)\mathbf{v} = \mathbf{0}을 풀면 v=(1,1)\mathbf{v} = (1, 1), λ=1\lambda = 1이면 v=(1,−1)\mathbf{v} = (1, -1)이에요. 이 변환은 대각선 (1,1)(1,1) 방향으로 3배 늘이고, 반대 대각선 방향은 그대로 두는 변환이었던 거예요. 숫자만 봐서는 안 보이던 모양이 고유벡터로 드러났어요.

바로 확인할 수 있는 성질

  • 모든 고유값의 곱 = 행렬식. 위 예에서 1×3=3=4−11 \times 3 = 3 = 4 - 1. 각 방향의 배율을 곱하면 넓이 배율이 되니까요.
  • 모든 고유값의 합 = 대각합(대각 원소의 합). 1+3=2+21 + 3 = 2 + 2.
import numpy as np

A = np.array([[2, 1], [1, 2]])
values, vectors = np.linalg.eig(A)
print(values)    # [3. 1.]
print(vectors)   # 열마다 단위 길이의 고유벡터

실제 계산은 넘파이에 맡겨요. 크기가 큰 행렬의 고유값은 특성 방정식이 아니라 반복적인 수치 알고리즘으로 구해요. 특성 방정식은 "왜 그런가"를 이해하는 용도예요.

대각화: 변환을 고유벡터의 눈으로 보기

n×nn \times n 행렬에 서로 다른 방향의 고유벡터가 nn개 있으면, 행렬을 이렇게 쪼갤 수 있어요.

A=PDP−1A = P D P^{-1}
  • PP: 고유벡터들을 열로 세운 행렬
  • DD: 고유값들을 대각선에 놓은 대각 행렬

오른쪽부터 읽으면 이런 뜻이에요. "좌표를 고유벡터 기준으로 바꾸고(P−1P^{-1}), 각 축을 고유값만큼 늘이고(DD), 원래 좌표로 돌아온다(PP)." 복잡해 보이던 변환이 적절한 눈으로 보면 그냥 축마다 늘이기였던 거예요.

거듭제곱이 쉬워진다

같은 변환을 100번 하면 A100A^{100}인데, 대각화하면

A100=PD100P−1A^{100} = P D^{100} P^{-1}

대각 행렬의 거듭제곱은 대각 원소만 거듭제곱하면 돼요. 그래서 시간에 따라 같은 규칙이 반복되는 시스템의 먼 미래를 쉽게 계산할 수 있어요.

반복하면 가장 큰 고유값이 이긴다

아무 벡터나 고유벡터들의 조합으로 쓸 수 있어요. 여기에 AA를 계속 곱하면 각 성분이 자기 고유값만큼씩 커지거나 작아지니, 시간이 지날수록 절댓값이 가장 큰 고유값의 방향이 나머지를 압도해요. 이것을 이용해 가장 큰 고유값의 고유벡터를 찾는 방법이 거듭제곱법이에요. 그냥 아무 벡터에 행렬을 계속 곱하면 돼요.

마르코프 체인: 날씨의 장기 예측

오늘 맑으면 내일 맑을 확률 0.9, 오늘 비가 오면 내일 맑을 확률 0.5라고 해 볼게요. 상태 변화를 행렬로 쓰면(열이 오늘, 행이 내일)

P=[0.90.50.10.5]P = \begin{bmatrix} 0.9 & 0.5 \\ 0.1 & 0.5 \end{bmatrix}

오늘 비가 왔다면 (0,1)(0, 1)에서 시작해 PP를 계속 곱하면 돼요.

P = np.array([[0.9, 0.5],
              [0.1, 0.5]])
x = np.array([0.0, 1.0])     # 오늘 비
for day in range(30):
    x = P @ x
print(x)    # [0.8333 0.1667]  오늘 날씨와 상관없이 맑음 83%, 비 17%로 수렴

어디서 시작하든 같은 분포로 수렴해요. 이 분포가 고유값 1인 고유벡터예요. Pv=vP\mathbf{v} = \mathbf{v}, 즉 하루가 지나도 바뀌지 않는 상태죠. 다른 고유값은 0.4라서 반복할수록 그 성분은 0.4n0.4^n으로 빠르게 사라져요. 수렴 속도도 고유값이 알려 줘요.

페이지랭크

구글의 초기 핵심 아이디어인 페이지랭크가 바로 이 구조예요. 웹 서핑하는 사람이 현재 페이지의 링크 중 하나를 무작위로 눌러 이동한다고 상상해요(가끔은 아무 페이지로 순간이동도 해요). 이걸 아주 오래 반복하면 각 페이지에 머무는 시간의 비율이 안정되는데, 그 비율이 페이지의 중요도예요. 수학적으로는 수십억 페이지짜리 링크 행렬의 고유값 1인 고유벡터를 거듭제곱법으로 구한 거예요.

대칭 행렬: 가장 착한 행렬

AT=AA^T = A인 행렬을 대칭 행렬이라고 해요. 대칭 행렬에는 아주 좋은 성질이 있어요.

  1. 고유값이 모두 실수예요.
  2. 서로 다른 고유값의 고유벡터들은 서로 직교해요.

그래서 대칭 행렬은 "서로 수직인 축들을 따라 각각 늘이거나 줄이는 변환"으로 깔끔하게 분해돼요.

A=QΛQT(Q는 직교하는 단위 고유벡터들)A = Q \Lambda Q^T \qquad (Q\text{는 직교하는 단위 고유벡터들})

공분산 행렬과 데이터의 주축

데이터에서 가장 중요한 대칭 행렬이 공분산 행렬이에요. 특징들이 서로 얼마나 함께 변하는지를 담고 있어요(확률과 통계 트랙에서 자세히 다뤄요). 공분산 행렬의 고유벡터는 데이터가 가장 넓게 퍼진 방향들이고, 고유값은 그 방향으로 퍼진 정도(분산)예요.

키와 몸무게 데이터를 점으로 찍으면 비스듬한 타원 모양이 돼요. 공분산 행렬의 첫 고유벡터는 그 타원의 긴 축, 둘째 고유벡터는 짧은 축이에요. 데이터를 이 축들로 다시 보는 것이 다음 강의의 주성분 분석(PCA)이에요.

회전에는 실수 고유벡터가 없다

90도 회전 행렬 [0−110]\begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix}은 모든 화살표를 돌려 버리니, 방향이 그대로인 화살표가 없어요. 특성 방정식은 λ2+1=0\lambda^2 + 1 = 0이라 고유값이 허수 ±i\pm i예요. 복소수 고유값은 회전의 흔적이에요. 진동하는 시스템이나 주기적인 패턴을 분석할 때 이 성질을 써요.

안정성: 반복이 폭발하는가 사라지는가

같은 변환을 계속 반복하는 시스템에서

  • 모든 고유값의 절댓값이 1보다 작으면, 결국 0으로 사그라져요.
  • 하나라도 1보다 크면, 그 방향으로 폭발해요.

딥러닝에서 순서를 다루는 RNN이 긴 문장을 학습하기 어려웠던 이유가 이거예요. 같은 가중치 행렬을 문장 길이만큼 반복해서 곱하니, 고유값이 1보다 조금만 작아도 앞쪽 정보가 사라지고(기울기 소실), 조금만 커도 값이 폭발했어요(기울기 폭발). 이 문제를 풀려는 노력이 LSTM을 거쳐 어텐션과 트랜스포머로 이어졌어요. 딥러닝 트랙에서 다시 만나요.

실습

  1. [4123]\begin{bmatrix} 4 & 1 \\ 2 & 3 \end{bmatrix}의 고유값을 특성 방정식으로 손으로 구하고 넘파이로 확인하세요.
  2. 날씨 예제에서 "맑은 날 다음 날도 맑을 확률"을 0.7로 바꾸면 장기적으로 맑은 날의 비율은 어떻게 될까요? 반복 계산과 np.linalg.eig 두 방법으로 구해 보세요.
  3. 아무 3×33 \times 3 행렬 M으로 S = M + M.T를 만들면 대칭 행렬이에요. np.linalg.eigh(S)로 구한 고유벡터들의 내적이 0인지(직교하는지) 확인하세요.

자주 하는 실수

  • 0벡터를 고유벡터로 치기. 정의에서 0벡터는 빼요. 아무 행렬이나 A0=λ0A\mathbf{0} = \lambda\mathbf{0}이니까요.
  • 고유벡터의 크기에 의미 두기. 방향만 중요해요. 넘파이는 길이 1로 정규화해서 줘요.
  • 대칭 행렬에 eig 쓰기. 대칭 행렬에는 eigh가 더 빠르고 정확해요.
  • 모든 행렬이 대각화된다고 믿기. 고유벡터 방향이 모자라는 행렬도 있어요. 대칭 행렬은 항상 돼요.

점검 문제

  1. [500−2]\begin{bmatrix} 5 & 0 \\ 0 & -2 \end{bmatrix}의 고유값과 고유벡터는?
  2. 고유값이 2와 3인 2×22 \times 2 행렬의 행렬식은?
  3. 마르코프 체인의 장기 상태는 어떤 고유값의 고유벡터인가요?
  4. 대칭 행렬의 고유벡터가 가진 특별한 성질은?

정답

  1. 대각 행렬이니 고유값은 5와 -2이고, 고유벡터는 각각 (1,0)(1, 0)과 (0,1)(0, 1) 방향이에요.
  2. 고유값의 곱이니 6이에요.
  3. 고유값 1인 고유벡터예요. 한 단계가 지나도 변하지 않는 상태이기 때문이에요.
  4. 서로 직교하고, 고유값이 모두 실수예요.

다음 강의

선형대수 트랙의 마지막 강의는 SVD와 PCA예요. 고유값 분해를 모든 행렬로 넓힌 SVD로 이미지를 압축하고, 추천 시스템의 원리를 보고, 수백 차원 데이터를 2차원으로 줄여 눈으로 보는 PCA를 직접 해 봐요.