선형대수 2: 고유값 · 고유벡터 · 특잇값 분해(SVD)
고유값 · 고유벡터 · 대칭 행렬 분해 · SVD · 낮은 랭크 근사 · PCA를 2×2 손계산과 넘파이 검산으로 익히는 수업
먼저 알아야 할 것
다루는 내용
행렬을 "어느 방향으로 얼마나 늘리는가"로 쪼개는 고유값 분해와, 아무 행렬이나 돌리기 · 늘리기 · 돌리기로 쪼개는 SVD를 다룹니다. 특성 방정식 · 대각합 · 행렬식 검산, 거듭제곱법, 평점 행렬의 랭크 2 근사와 근사 오차(에카르트-영 정리)를 직접 계산하고, 공분산 행렬의 고유벡터가 주성분임을 5개 점으로 확인해 PCA · 추천 · LoRA로 연결합니다.
해설
선형대수 2: 고유값 · 고유벡터 · 특잇값 분해(SVD)
행렬은 공간을 늘리고 돌리는 변환입니다. 고유값 분해는 "어느 방향으로 얼마나 늘리는가"를, 특잇값 분해(SVD)는 어떤 행렬이든 "돌리기 → 늘리기 → 돌리기"로 쪼개 보여 줍니다. 이 수업은 2 × 2 행렬로 고유값을 손으로 구하고, 거듭제곱법으로 확인하고, SVD로 평점 행렬을 낮은 랭크로 근사한 뒤, 공분산 행렬의 고유벡터가 곧 주성분(PCA)임을 5개 점으로 계산합니다.
| 항목 | 내용 |
|---|---|
| 참고 자료 | Dive into Deep Learning 부록 'Eigendecompositions' · d2l.ai/chapter_appendix-mathematics-for-deep-learning/eigendecomposition.html, 『Mathematics for Machine Learning』 4장 |
| 트랙 · 수준 | 수학 · 중급 |
| 이 수업의 범위 | 고유값 · 고유벡터의 뜻, 특성 방정식, 대각합 · 행렬식과의 관계, 대칭 행렬의 고유값 분해, 양의 정부호, 거듭제곱법, SVD, 낮은 랭크 근사와 근사 오차, 공분산 행렬과 PCA, 설명된 분산 비율 |
| 먼저 알면 좋은 것 | 선형대수 1의 행렬-벡터 곱 · 전치 · 행렬식 · 랭크, 분산의 뜻 |
들어가기 전에
- 선형대수 1: 벡터 · 행렬 · 내적 · 행렬 곱 · 노름 — 행렬-벡터 곱을 "변환"으로 읽는 법과 2 × 2 행렬식을 알고 오면 됩니다.
한눈에 보기
- 고유벡터 = "변환해도 방향이 안 바뀌는 벡터", 고유값 = "그 방향으로 늘어나는 배율"임을 압니다.
- 2 × 2 행렬의 고유값을 특성 방정식으로 직접 구하고, 대각합 · 행렬식으로 검산합니다.
- 대칭 행렬은 로 분해된다는 것과 그 뜻을 압니다.
- SVD 로 아무 행렬이나 쪼개고, 큰 특잇값 몇 개로 행렬을 근사합니다.
- PCA가 "공분산 행렬의 고유벡터 방향으로 데이터를 다시 보는 것"임을 숫자로 확인합니다.
1. 고유벡터와 고유값: 방향이 안 바뀌는 벡터
직관(해설용 비유): 고무판을 한쪽으로 잡아당기면 판 위의 화살표 대부분은 방향이 비틀어집니다. 그런데 당기는 방향과 나란한 화살표는 방향은 그대로이고 길이만 늘어납니다. 그 화살표가 고유벡터(eigenvector), 늘어난 배율이 고유값(eigenvalue)입니다.
| 기호 | 뜻 |
|---|---|
| 정사각 행렬 () | |
| 고유벡터 — 변환 뒤에도 같은(또는 정반대) 방향 | |
| 고유값 — 늘어나는 배율 (음수면 방향이 뒤집힘, 0이면 눌려 사라짐) |
숫자로 해 보기(해설용): 에 두 벡터를 넣어 봅니다.
- → 고유값 3
- → 고유값 1
- → 방향이 바뀜, 고유벡터 아님
이 행렬은 대각선 방향으로 3배 늘리고, 그와 수직인 방향은 그대로 둡니다.
2. 고유값 구하기: 특성 방정식
단계
- 를 으로 옮깁니다.
- 이 아닌 가 있으려면 가 공간을 눌러야 하므로(역행렬이 없어야 하므로) 행렬식이 0이어야 합니다.
- — 특성 방정식(characteristic equation) — 을 풀어 를 구합니다.
- 각 를 1단계 식에 넣어 를 구합니다.
숫자로 해 보기(해설용): 위 에서
이므로 입니다. 이면 → , 즉 방향입니다.
검산 요령: 고유값의 합은 대각합(trace, 대각 원소의 합), 곱은 행렬식과 같습니다. 여기서 , ✓.
3. 대칭 행렬의 고유값 분해
직관: 대칭 행렬()은 특히 다루기 쉽습니다. 고유값이 모두 실수이고, 고유벡터들을 서로 수직으로 고를 수 있습니다. 그래서 변환을 "고유벡터 축으로 돌리기 → 축마다 늘리기 → 되돌리기"로 쪼갤 수 있습니다.
| 기호 | 뜻 |
|---|---|
| 열이 길이 1인 고유벡터들인 직교 행렬 () | |
| 대각선에 고유값을 놓은 대각 행렬 | |
| 직교 행렬의 역행렬 — 전치만 하면 됨 |
숫자로 해 보기(해설용): 위 예에서 , 이고, 곱해 보면 원래 가 나옵니다. 넘파이 np.linalg.eigh도 고유값 과 같은 방향(부호만 다를 수 있음)의 고유벡터를 냅니다. 고유벡터는 방향만 정해지므로 도 고유벡터입니다.
양의 정부호(positive definite): 고유값이 모두 양수인 대칭 행렬입니다. 모든 에 대해 이고, 그릇 모양의 이차 함수를 만듭니다. 손실 함수의 곡률(헤세 행렬)이 양의 정부호이면 그 점은 극소점입니다 — 최적화 기초에서 볼록성과 연결됩니다.
왜 이렇게 쪼개나: 분해해 두면 행렬의 거듭제곱이 쉬워집니다. 이라, 같은 변환을 여러 번 하면 가장 큰 고유값 방향이 압도하게 됩니다. RNN에서 같은 가중치를 수십 번 곱하면 기울기가 폭발하거나 사라지는 이유도 이것입니다(고유값이 1보다 크면 폭발, 작으면 소멸).
4. 거듭제곱법: 가장 큰 고유값을 반복으로 찾기
직관: 아무 벡터나 골라 를 계속 곱하고 길이를 1로 맞추면, 3절의 이유로 가장 큰 고유값의 고유벡터 쪽으로 끌려갑니다.
숫자로 해 보기(해설용, 넘파이로 실행): 에서 시작해 를 반복하고, 로 고유값을 추정합니다.
| 반복 | 고유값 추정 | |
|---|---|---|
| 1 | (0.894, 0.447) | 2.800 |
| 2 | (0.781, 0.625) | 2.976 |
| 3 | (0.733, 0.680) | 2.997 |
| 5 | (0.710, 0.704) | 3.000 |
과 고유값 3으로 빠르게 다가갑니다. 수렴 속도는 두 고유값의 비 에 달려 있어, 비가 1에 가까우면 느립니다. 아주 큰 행렬에서 가장 큰 고유값 몇 개만 필요할 때 이런 반복 방법이 쓰입니다.
5. 특잇값 분해(SVD): 어떤 행렬이든 쪼개기
직관: 고유값 분해는 정사각 행렬에만, 깔끔한 분해는 대칭 행렬에만 됩니다. 데이터 행렬은 보통 직사각형(예제 수 ≠ 특성 수)입니다. 특잇값 분해(Singular Value Decomposition, SVD)는 모든 행렬을 "돌리기 → 축마다 늘리기 → 돌리기"로 쪼갭니다.
| 기호 | 뜻 |
|---|---|
| () | 입력 공간의 직교 축 — 오른쪽 특이벡터 |
| () | 대각선에 특잇값 |
| () | 출력 공간의 직교 축 — 왼쪽 특이벡터 |
고유값과의 관계: 이므로, 의 고유값이 특잇값의 제곱이고 고유벡터가 의 열입니다.
숫자로 해 보기(해설용): 이면 이고, 2절과 같은 방법으로 고유값은 , 즉 입니다. 따라서 특잇값은 , 입니다. 넘파이 np.linalg.svd의 결과와 같습니다.
6. 낮은 랭크 근사: 큰 특잇값만 남기기
직관: SVD는 행렬을 "랭크 1짜리 조각들의 합"으로 펼칩니다. 특잇값이 큰 조각이 행렬의 큰 줄기, 작은 조각은 세부 · 잡음입니다. 큰 조각 개만 남기면 가장 좋은 랭크 근사가 됩니다(에카르트-영 정리, Eckart–Young theorem).
는 프로베니우스 노름(모든 원소 제곱합의 제곱근)입니다.
숫자로 해 보기(해설용, 넘파이로 실행): 사용자 4명 × 영화 3편 평점 행렬입니다. 앞의 두 사람은 영화 1 · 2를, 뒤의 두 사람은 영화 3을 좋아합니다.
| 항목 | 값 |
|---|---|
| 특잇값 | 10.491, 5.514, 0.733 |
| 제곱 비율(에너지) | 78.1%, 21.6%, 0.4% |
| 랭크 1 근사 오차 | 5.563 |
| 랭크 2 근사 오차 | 0.733 |
랭크 2 근사의 첫 행은 로 원래 과 가깝습니다. 두 개의 "취향 축"(액션 쪽 · 로맨스 쪽 같은 숨은 요인)만으로 평점 거의 전부를 설명한 셈입니다. 이것이 추천 시스템의 행렬 분해, 그리고 큰 모델의 가중치 변화를 낮은 랭크로 표현하는 LoRA의 직관입니다.
왜 유용한가: 저장 공간이 에서 로 줄고, 작은 특잇값(잡음)을 버리므로 오히려 일반화가 좋아지기도 합니다. 이미지 압축, 잠재 의미 분석(LSA), 추천에 두루 쓰입니다.
7. PCA는 공분산 행렬의 고유값 분해
직관: 점들이 비스듬한 타원 모양으로 퍼져 있으면, 가장 길게 퍼진 방향이 데이터의 "주된 변화"입니다. 주성분 분석(Principal Component Analysis, PCA)은 그 방향을 찾아 좌표축을 새로 잡습니다. 그 방향이 바로 공분산 행렬의 가장 큰 고유값의 고유벡터입니다.
단계
- 열마다 평균을 빼 데이터를 가운데로 옮깁니다:
- 공분산 행렬 을 만듭니다 (대칭 행렬).
- 를 고유값 분해합니다. 고유값 = 그 방향의 분산, 고유벡터 = 주성분 방향.
- 큰 고유값 개의 고유벡터에 데이터를 투영해 차원으로 줄입니다.
(실무에서는 에 바로 SVD를 해 같은 결과를 얻습니다. 이면 의 열이 주성분이고 고유값은 입니다.)
숫자로 해 보기(해설용, 넘파이로 실행): 점 5개 .
- 평균 를 뺍니다.
- 공분산
- 고유값 , / 첫 주성분 방향
- 설명된 분산 비율(explained variance ratio):
2차원 점들이 거의 한 직선 위에 있어서, 1차원(첫 주성분 좌표 )만으로 퍼짐의 98.7%를 담을 수 있습니다. scikit-learn PCA의 explained_variance_ratio_도 같은 값을 냅니다. 실제 쓰임과 t-SNE · UMAP 비교는 차원 축소에서 봅니다.
flowchart LR
A[행렬 A] --> B{정사각 · 대칭인가?}
B -- 예 --> C[고유값 분해 A = QΛQᵀ]
B -- 아니요 --> D[SVD A = UΣVᵀ]
C --> E[고유값 = 축별 배율 · 분산]
D --> F[특잇값 큰 순으로 정렬]
F --> G[상위 k개만 남김: 낮은 랭크 근사]
E --> H[공분산의 고유벡터 = 주성분]
G --> I[추천 · 압축 · LoRA]
H --> J[PCA 차원 축소]연습 문제
1. 의 고유값은? 대각합 · 행렬식으로 검산하세요.
풀이: → . 합 , 곱 ✓.
2. 위 행렬에서 의 고유벡터 방향은?
풀이: → , 방향입니다. 확인: .
3. 특잇값이 인 행렬의 최선 랭크 1 근사 오차(프로베니우스 노름)와 랭크 1이 담는 에너지 비율은?
풀이: 오차 , 비율 입니다.
4. 공분산 행렬의 고유값이 이면 첫 주성분의 설명된 분산 비율은?
풀이: 입니다.
스스로 점검
- 고유벡터는 왜 "방향"만 정해지고 길이는 자유인가요?
- 답: 이면 도 성립하기 때문입니다. 그래서 보통 길이를 1로 맞춰 씁니다.
- 고유값 분해 대신 SVD를 쓰는 경우는?
- 답: 행렬이 정사각이 아니거나 대칭이 아닐 때입니다. 데이터 행렬(예제 × 특성)처럼 직사각형 행렬도 SVD는 항상 됩니다.
- PCA에서 첫 주성분이 "가장 정보가 많은 방향"인 이유는?
- 답: 공분산 행렬의 가장 큰 고유값이 그 방향으로의 분산이고, 데이터가 가장 넓게 퍼진 방향이 점들을 가장 잘 구별하기 때문입니다.
용어 정리
| 용어 | 쉬운 뜻 |
|---|---|
| 고유벡터(eigenvector) | 변환해도 방향이 안 바뀌는 벡터 |
| 고유값(eigenvalue) | 그 방향으로 늘어나는 배율 |
| 특성 방정식(characteristic equation) | , 고유값을 구하는 식 |
| 대각합(trace) | 대각 원소의 합 = 고유값의 합 |
| 직교 행렬(orthogonal matrix) | 열들이 서로 수직이고 길이 1, 역행렬 = 전치 |
| 고유값 분해(eigendecomposition) | 로 쪼개기 |
| 양의 정부호(positive definite) | 고유값이 모두 양수인 대칭 행렬 |
| 거듭제곱법(power iteration) | 곱하기를 반복해 가장 큰 고유벡터 찾기 |
| 특잇값 분해(SVD) | 아무 행렬을 로 쪼개기 |
| 특잇값(singular value) | 의 대각 원소, 축별 늘림 배율 |
| 낮은 랭크 근사(low-rank approximation) | 큰 특잇값 몇 개로 행렬을 근사 |
| 공분산 행렬(covariance matrix) | 특성끼리 함께 변하는 정도를 모은 대칭 행렬 |
| 주성분 분석(PCA) | 분산이 큰 방향으로 축을 다시 잡아 차원을 줄이는 방법 |
| 설명된 분산 비율 | 한 주성분이 전체 분산에서 차지하는 비율 |
더 깊이 보려면
D2L 부록의 'Eigendecompositions'는 고유값 찾기, 행렬 분해, 대칭 행렬의 분해, 게르슈고린 원 정리, 그리고 행렬을 반복해 곱할 때 고유값이 왜 신경망의 기울기 폭발 · 소멸과 연결되는지를 다룹니다. 『Mathematics for Machine Learning』 4장(Matrix Decompositions)은 행렬식 · 대각합, 고유값 분해, 촐레스키 분해, SVD, 행렬 근사를 증명과 함께, 10장은 PCA를 자세히 설명합니다.
다음에 볼 것
- 미분 최소한: 도함수 · 편미분 · 기울기 · 연쇄 법칙 — 손실을 줄이는 방향(기울기)을 구하는 도구를 배웁니다.
- 차원 축소: PCA · t-SNE · UMAP — 오늘 계산한 PCA를 실제 데이터에 써 봅니다(머신러닝 트랙).
라이선스
이 글은 원문 번역이 아니라 KAITABASE가 직접 쓴 해설이며, 숫자 예는 모두 설명용으로 만들고 넘파이로 다시 계산해 확인했습니다. 참고 자료 D2L은 CC BY-SA 4.0으로 공개되어 있고, 『Mathematics for Machine Learning』은 저자들이 무료 PDF를 제공하는 저작권 보호 도서입니다.
출처
- 참고: d2l.ai/chapter_appendix-mathematics-for-d… (D2L, Eigendecompositions)
- 참고: mml-book.github.io (Deisenroth · Faisal · Ong, 4장 Matrix Decompositions · 10장 PCA)
AI 원리부터 이해하기 · 수학 모듈
수학 모듈 학습
이 글은 수학 모듈의 학습 자료입니다. 전체 9개 자료 중 2번째입니다.
출처·원문
원문 보기요약만