← --library
이과 · 02이과

선형대수학 및 텐서 해석

Linear Algebra & Tensors

단계1단계2단계3단계4단계5

3단계 — SVD, PCA, 행렬 놈, 이차 형식: "데이터의 뼈대를 발견하다"


배경지식: 우리가 여기까지 온 이유

1단계에서 너는 행렬의 rank를 배웠다. 행렬이 실제로 몇 개의 독립적인 방향을 품고 있는지 세는 것, 그리고 det = 0이면 역행렬이 존재하지 않는다는 사실. 2단계에서는 고유값과 고유벡터를 배웠다. 행렬 A에 어떤 특별한 벡터 v를 곱하면 방향은 바뀌지 않고 크기만 λ배 변한다는 것, 즉 Av = λv. 대칭행렬은 고유값이 반드시 실수이고 고유벡터들이 서로 직교한다는 보장도 얻었다(스펙트럼 정리, Spectral Theorem). 그리고 그람-슈미트 과정으로 임의의 기저를 직교 정규 기저로 바꾸는 법도 익혔다.

그런데 여기서 잠깐 생각해봐야 할 문제가 있다. 고유값 분해(Eigendecomposition)는 **정방행렬(square matrix)**에서만 정의된다. 게다가 실수 고유값 보장은 대칭행렬일 때만 성립한다. 그렇다면 3 × 5 크기의 행렬은? 비대칭 행렬은? 현실 데이터에서 우리가 다루는 행렬 — 예를 들어 1,000명의 사용자(행)와 500개의 영화 평점(열)으로 이루어진 행렬 — 은 절대 정방도 아니고 대칭도 아니다. 고유값 분해는 바로 여기서 무너진다. **특이값 분해(Singular Value Decomposition, SVD)**는 이 한계를 돌파하기 위해 등장한, 선형대수학에서 가장 강력한 분해 도구다. Gilbert Strang이 그의 저서 Introduction to Linear Algebra(5th ed., 2016)에서 "The SVD is not just a computational tool; it is a framework for understanding what a matrix really does"라고 말한 것은 과장이 아니다.


특이값 분해(SVD): 모든 행렬의 해부학

먼저 직관부터 잡자. 7살짜리 아이에게 설명한다면 이렇게 말할 수 있다. 사진 한 장을 생각해봐. 그 사진은 수백만 개의 픽셀로 이루어져 있어. 근데 사진에 찍힌 풍경을 완벽히 재현하려면 그 수백만 픽셀이 전부 필요할까? 하늘은 그냥 "파란 그라데이션"이고, 잔디밭은 "초록색 균일한 면"이야. 이걸 몇 개의 핵심 패턴으로 요약할 수 있다면? SVD는 바로 그 "핵심 패턴 추출기"야.

이제 수학적으로 올라가 보자. m행 n열 실수 행렬 A가 주어졌다고 하자. SVD는 다음과 같이 A를 세 행렬의 곱으로 분해한다.

[노트 기록] 여기서 U는 m×m 직교행렬(orthogonal matrix), Σ는 m×n 대각행렬(diagonal matrix), V는 n×n 직교행렬이다. Σ의 대각 성분은 이고, 이 값들을 **특이값(singular values)**이라 한다. U의 열벡터를 좌특이벡터(left singular vectors), V의 열벡터를 **우특이벡터(right singular vectors)**라 한다.

기하학적으로 이 분해를 해석하면 정말 아름답다. 행렬 A가 벡터에 가하는 변환을 단계적으로 분리할 수 있다. 는 입력 공간에서의 회전(rotation), 는 각 축 방향으로의 신축(scaling), 는 출력 공간에서의 회전이다. 즉, 어떤 선형변환이든 — 아무리 뒤틀려 보여도 — 결국 "회전 → 늘리기/줄이기 → 다시 회전"의 세 단계로 분해된다는 뜻이다. 이것은 2단계에서 배운 "대칭행렬은 직교 기저에서 대각화된다"는 사실의 완전한 일반화다. 대칭행렬이라면 가 되어 SVD가 곧 고유값 분해와 일치한다는 걸 스스로 확인해 봐라.

[노트 기록] rank와 특이값의 관계: rank(A) = 0이 아닌 특이값의 개수. 이건 SVD를 구하자마자 rank를 즉시 읽어낼 수 있다는 뜻이다. 2단계에서 rank를 가우스 소거로 계산하는 법을 배웠다면, 이제는 "0이 아닌 σᵢ의 수"로 더 우아하게 파악할 수 있다.

SVD에서 나오는 가장 강력한 결과 중 하나가 **저랭크 근사(Low-Rank Approximation)**이다. 라고 쓸 수 있는데, 각 항은 rank-1 행렬이다. 상위 k개 항만 취하면:

프로베니우스 놈(Frobenius norm) 의미에서 A에 가장 가까운 rank-k 행렬임이 수학적으로 증명되어 있다. 이것이 Eckart-Young 정리(Eckart & Young, 1936)이다. 이미지 압축에서 상위 k개 특이값만 저장하면 되는 이유가 바로 이것이다. m×n 이미지를 rank-k로 근사하면 저장 비용이 원래의 mn에서 k(m + n + 1)로 줄어든다. k가 작을수록 압축률은 높아지지만 품질은 떨어진다. 여기서 **트레이드오프(trade-off)**가 발생한다 — 학습 목표 ⑤번이 바로 이것이다.


주성분 분석(PCA): 데이터가 스스로 말하는 방향

SVD가 행렬 분해 자체에 관한 것이라면, **PCA(Principal Component Analysis, 주성분 분석)**는 고차원 데이터셋에서 가장 중요한 방향을 찾는 통계적 분석 도구다. 이 둘은 깊이 연결되어 있지만, 출발점이 다르다. 이 차이를 이해하는 것이 학습 목표 ④의 핵심이다.

구체적인 문제로 시작하자. 100명의 학생이 있고 각각 수학, 물리, 화학, 생물, 영어 — 총 5과목의 점수를 갖고 있다. 데이터는 100 × 5 행렬이다. 이 데이터를 2차원 그래프에 시각화하고 싶다면? 5차원을 2차원으로 "줄여야" 한다. 그런데 무작정 처음 두 과목만 쓰면 나머지 3과목의 정보를 버리는 것이다. 정보 손실을 최소화하면서 차원을 줄이는 최선의 방법은 무엇일까? PCA는 바로 이 질문에 답한다.

PCA의 핵심 아이디어는 분산(variance)이 가장 큰 방향으로 데이터를 투영하는 것이다. 분산이 크다는 건 데이터가 그 방향으로 많이 퍼져 있다는 뜻이고, 퍼져 있는 정보가 많다는 건 그 방향이 데이터에 대해 많은 것을 "설명"한다는 뜻이다. 반대로 분산이 거의 0인 방향은 모든 데이터가 비슷한 값을 가지므로, 그 방향의 정보를 버려도 별로 잃을 게 없다.

[노트 기록] PCA 알고리즘:

  1. 데이터를 평균 중심화(centering): (각 특성에서 평균을 뺀다)
  2. 공분산 행렬 계산: (p×p 대칭 양반한정 행렬)
  3. C를 고유값 분해: , 단
  4. 상위 k개 고유벡터(주성분):
  5. 차원 축소된 데이터: (n×k 행렬)

여기서 2단계에서 배운 내용이 다시 등장한다. 공분산 행렬 C는 대칭 행렬이므로, 스펙트럼 정리에 의해 반드시 실수 고유값과 직교하는 고유벡터를 가진다. 그리고 C = /(n-1) 형태이므로 — 이것은 C가 양반한정(positive semidefinite)임을 의미한다. 이 개념은 이차 형식 섹션에서 다시 다룬다.

SVD와 PCA의 연결은 아름답다. 라 하면, . 즉 V의 열벡터가 C의 고유벡터이고, 이 C의 i번째 고유값이다. PCA의 주성분 방향은 중심화된 데이터 행렬의 우특이벡터와 일치한다. 이것이 "차원 축소 = PCA, 행렬 분해 = SVD"라는 눈치밥 스킬의 이면에 있는 수학적 진실이다.

[노트 기록] 설명 분산 비율(Explained Variance Ratio): k번째 주성분이 설명하는 분산의 비율은 이다. 상위 k개 주성분의 누적 설명 분산 비율이 보통 90~95%를 넘으면 충분한 것으로 간주한다. 이 비율이 바로 학습 목표 ⑤의 "정보 손실 트레이드오프"를 수치화한다.


PCA vs SVD: 언제 무엇을 쓰는가

이 질문은 학습 목표 ④다. 먼저 스스로 생각해봐라: 위의 설명을 읽고 나서, 둘이 어떻게 다른지 한 문장으로 표현할 수 있겠는가?

SVD는 행렬 그 자체를 분해하는 도구다. 데이터 행렬 A가 주어지면 A = UΣV^T로 분해한다. 행렬의 수학적 구조(rank, 최적 근사, 조건수)를 분석하는 데 쓴다. 이미지, 텍스트, 추천시스템처럼 "행렬 자체를 압축하거나 분석"하는 상황에 직접 쓴다. PCA는 데이터셋의 통계적 구조를 분석한다. 중심화 과정이 포함되고, 공분산 구조를 분석하여 "데이터가 어느 방향으로 가장 많이 퍼져 있는가?"를 묻는다. 측정값들(키, 몸무게, 성적 등) 사이의 상관 관계를 파악하거나 고차원 데이터를 시각화할 때 쓴다.

실무 결정 기준: 행렬 자체를 다루면 SVD, 데이터 분포를 다루면 PCA. 단, 데이터가 이미 중심화되어 있다면 SVD를 곧바로 PCA처럼 쓸 수 있다. 계산 비용 측면에서 SVD를 먼저 구하고 PCA를 도출하는 것이 공분산 행렬을 명시적으로 구하는 것보다 수치적으로 안정적이다(고차원에서 공분산 행렬 계산이 정밀도 손실을 초래할 수 있으므로). Golub & Van Loan의 Matrix Computations(4th ed., 2013)은 이를 "SVD is the numerically preferred method for PCA"로 정리한다.


행렬 놈(Norm)과 조건수(Condition Number): 행렬의 체력 측정

2단계에서 내적(inner product)과 벡터 놈을 배웠다. . 행렬에도 "크기"를 측정하는 방법이 필요하다. 그것이 **행렬 놈(matrix norm)**이다.

[노트 기록] 주요 행렬 놈 세 가지:

  • 프로베니우스 놈(Frobenius norm): (모든 원소 제곱합의 제곱근, SVD의 특이값으로도 표현된다)
  • 스펙트럼 놈(spectral norm / 2-norm): (최대 특이값, A가 벡터를 최대로 늘릴 수 있는 배율)
  • 핵 놈(nuclear norm): (모든 특이값의 합, 행렬 완성 문제에서 rank를 근사하는 데 사용됨)

이제 핵심 개념인 **조건수(condition number)**로 넘어간다. 조건수는 선형 시스템 Ax = b를 풀 때 수치적으로 얼마나 민감한가를 나타내는 지표다. 직관적으로 말하면, b가 아주 조금 변했을 때 해 x가 얼마나 크게 변하는가를 측정한다.

[노트 기록]

조건수는 1 이상이고, 이상적인 경우 κ = 1이다. 조건수가 크다는 것은 행렬이 "거의 특이(nearly singular)"하다는 신호다. 실용적인 규칙: κ ≈ 10^k이면 수치 계산에서 약 k자리의 유효 숫자를 잃는다. 64비트 부동소수점 연산은 약 15~16자리의 정밀도를 가지므로, κ > 10^12인 행렬의 역행렬 계산은 신뢰할 수 없다.

구체적 예를 통해 생각해보자. 를 비교해봐라. A의 두 행은 거의 평행하다 — 즉, A는 거의 특이행렬이고 조건수가 매우 크다. 같은 Ax = b에서 b를 조금만 바꿔도 x가 극적으로 달라진다. 반면 B(단위행렬)는 κ = 1로 완벽히 안정적이다. 이것이 수치해석에서 ill-conditioned system(조건수 큰 시스템)을 경계해야 하는 이유이며, 학습 목표 ②의 핵심 내용이다.


이차 형식과 양한정 행렬: 최적화의 지형도

이제 세 번째 큰 주제로 넘어간다. **이차 형식(Quadratic Form)**이란 n차원 벡터 x와 n×n 대칭행렬 A에 대해 정의되는 실수값 함수다.

[노트 기록]

2D 예시로 시작하자. 이면 다. 이건 중학교 때 배운 이차식의 확장이다. 이제 스스로 생각해봐라: 이 함수가 원점 말고 모든 점에서 양수가 되려면 a, b, c 사이에 어떤 조건이 필요할까?

이 질문에 답하는 것이 **양한정성(positive definiteness)**의 개념이다. 대칭행렬 A가 **양한정(positive definite, PD)**이라는 것은 인 모든 벡터에 대해 임을 의미한다. 2단계에서 배운 고유값 분해를 활용하면 이를 아름답게 분석할 수 있다. A = QΛQ^T로 분해하고 y = Q^T x로 치환하면 (Q가 직교행렬이므로 x ↦ y는 일대일 대응):

이제 답이 보인다. 이 합이 항상 양수이려면 모든 λᵢ > 0이어야 한다.

[노트 기록] 양한정성 판별 조건 (4가지 동치 조건):

  • 모든 고유값이 양수: for all i
  • Sylvester's criterion: 모든 leading principal minor(1×1, 2×2, ..., n×n 좌상단 부분행렬의 행렬식)이 양수
  • Cholesky 분해 가능: 형태로 분해 가능 (L은 하삼각 행렬)
  • 이차 형식이 항상 양수: for all

비슷하게 **양반한정(positive semidefinite, PSD)**은 모든 고유값 ≥ 0, **음한정(negative definite, ND)**은 모든 고유값 < 0, **부정부호(indefinite)**는 양수와 음수 고유값이 섞인 경우다.

이것이 최적화와 어떻게 연결되는지가 학습 목표 ③이다. 다변수 함수 의 임계점(gradient = 0인 점)에서 헤시안 행렬(Hessian matrix) 를 분석한다. H가 양한정이면 극소점(local minimum), 음한정이면 극대점(local maximum), **부정부호이면 안장점(saddle point)**이다. 딥러닝에서 신경망 손실 함수의 헤시안이 양한정인지 부정부호인지는 최적화 알고리즘(SGD, Adam 등)의 거동을 결정하는 핵심 요소다(Goodfellow et al., Deep Learning, 2016, Chapter 4). 앞서 이차 형식이 형태로 분리됨을 보았는데, 이것이 기하학적으로 **타원형 그릇(양한정) vs 안장(부정부호) vs 포물선(양반한정)**에 대응한다는 것을 시각화하면 직관이 훨씬 깊어진다.


눈치밥 스킬 총정리 — "3단계 즉시 판단 회로"

지금까지 배운 내용을 학습 목표에 맞춰 즉시 판단할 수 있는 회로로 정리하자. 행렬을 보면 먼저 어떤 분석이 필요한지 판단하라. "데이터 차원을 줄여야 해 → PCA(공분산 고유값 분해 또는 SVD)" / "행렬 자체를 압축하거나 rank를 파악해야 해 → SVD". "이 연립방정식이 수치적으로 안전한가? → 조건수 κ = σ_max/σ_min를 계산하라, 크면 위험 신호". "이 최적화 문제에서 현재 점이 극소인가? → 헤시안 고유값이 모두 양수인가 확인하라". SVD를 구하는 즉시 rank(0이 아닌 σ의 수), Frobenius norm(√(Σσᵢ²)), 조건수(σ_max/σ_min)를 동시에 읽어낼 수 있다는 것을 기억하라. SVD는 단순한 분해 기법이 아니라 행렬에 관한 거의 모든 정보를 담은 완전한 X-레이 사진이다.


프로젝트 — Eigenface 압축기 예비 훈련 (40분)

아래 문제들은 이번 단계의 핵심 개념을 직접 손으로 작동시켜 보는 훈련이다. 계산기 사용은 허용하나 수식 전개 과정을 반드시 손으로 쓸 것. 정답은 제공하지 않는다. 풀이 과정과 해석이 더 중요하다.


[문제 1] SVD 직접 계산과 저랭크 근사 (약 12분)

행렬 (3×2 행렬)이 주어졌다.

(a) 를 직접 계산하고, 그 고유값과 고유벡터를 구하여라. 이 고유값들의 제곱근이 A의 특이값 가 됨을 확인하여라.

(b) 를 계산하고 고유값을 구하여라. 의 고유값과 의 고유값 사이에 어떤 관계가 있는가? 이 관계가 왜 성립하는지 행렬의 성질로 설명하여라.

(c) A의 rank를 특이값으로 즉시 판단하여라. 가우스 소거로도 확인하여라.

(d) A를 rank-1 행렬 로 근사했을 때, 근사 오차 를 특이값만을 이용하여 계산하여라. (Hint: Eckart-Young 정리를 활용하되, 오차와 버려진 특이값의 관계를 먼저 추론하라.)


[문제 2] 이미지 압축 트레이드오프 분석 (약 10분)

어떤 512×512 흑백 이미지 행렬 A의 특이값이 다음과 같다고 하자: 이후 부터 까지는 모두 10 이하의 값이며, 그 제곱합의 합계가 전체 의 2%라고 하자.

(a) 이 전체 분산에서 차지하는 비율을 계산하여라.

(b) rank-6 근사를 사용할 경우, 원래 이미지 저장에 필요한 개의 숫자 대신 몇 개의 숫자만 저장하면 되는가? 압축률(compression ratio)을 계산하여라.

(c) "95% 설명 분산 비율"을 달성하기 위해 필요한 최소 k를 위의 데이터로 추정하여라. (정확한 계산이 아니라 논리적 추론 과정을 쓰는 것이 중요하다.)

(d) 압축률을 높이면(k를 줄이면) 어떤 트레이드오프가 발생하는가? Eckart-Young 정리를 인용하여 수식과 말로 동시에 설명하여라.


[문제 3] 공분산 행렬과 PCA (약 10분)

다음 4개의 2차원 데이터 포인트가 있다: , , , .

(a) 데이터를 평균 중심화(centering)하여라.

(b) 중심화된 데이터 행렬 (4×2)을 구성하고, 공분산 행렬 를 계산하여라.

(c) C의 고유값을 구하여라. 고유값 중 하나가 0임을 발견할 것이다 — 이것이 무엇을 의미하는지 데이터의 기하학적 구조와 연결하여 설명하여라.

(d) 첫 번째 주성분(PC1)의 방향을 구하고, 원래 데이터를 1차원으로 투영하여라. 투영 후 데이터의 분산이 원래 데이터 전체 분산의 몇 %를 설명하는가?

(e) 이 데이터에 PCA를 적용하는 것이 "의미 있는" 차원 축소인가, 아닌가? 조건수와 연결하여 논하여라.


[문제 4] 조건수와 수치 안정성 (약 8분)

(a) 행렬 의 행렬식을 계산하고, 이 행렬이 가역인지 판단하여라. (Hint: det(M) = 10 × 8.1 - 9 × 9)

(b) 의 고유값을 구하여라. (2×2 특성방정식 을 사용하라.) 최대 고유값과 최소 고유값의 비를 이용하여 **대칭 양한정 행렬의 경우 조건수 κ₂(M) ≈ σ_max/σ_min = √(λ_max/λ_min)**임을 이용해 조건수를 추정하여라.

(c) 조건수가 10^4 정도라면, 64비트 부동소수점 연산(약 15자리 정밀도)으로 Mx = b를 풀 때 해의 유효 숫자가 몇 자리나 신뢰 가능한가?

(d) M의 두 행이 "거의 평행"하다는 것을 벡터의 관점에서 설명하고, 이것이 왜 조건수를 크게 만드는지 기하학적으로 논하여라.


[문제 5] 양한정 판별과 최적화 적용 (약 10분)

다음 세 행렬 각각에 대해 양한정(PD) / 양반한정(PSD) / 음한정(ND) / 부정부호(indefinite)를 판별하고, 이유를 고유값 계산 또는 Sylvester's criterion으로 정당화하여라.

, ,

(a) 각 행렬의 이차 형식 형태로 써라.

(b) 함수 의 임계점을 구하고 (∂g/∂x = 0, ∂g/∂y = 0), 헤시안 행렬을 계산하여 그 임계점이 극소인지, 극대인지, 안장점인지 판별하여라.

(c) 공분산 행렬이 항상 양반한정임을 일반적으로 증명하여라. (Hint: 를 대입하고 변형하여라.)


[종합 사고 문제 — 선택] Netflix 추천 시스템에는 1억 명의 사용자와 1만 개의 영화 평점으로 이루어진 10^8 × 10^4 행렬이 있다. 대부분의 사용자는 대부분의 영화를 보지 않았으므로 행렬의 99% 이상이 빈칸이다. (a) 이 행렬에 SVD와 PCA 중 어느 것이 더 적절한가, 그 이유를 3단계 내용을 근거로 설명하여라. (b) rank-100 근사를 사용한다면 저장 공간이 얼마나 줄어드는가? (c) 조건수가 매우 크다면 어떤 문제가 생기며, 어떻게 완화할 수 있는가?


이번 단계는 선형대수학에서 가장 강력한 세 도구를 한꺼번에 다뤘다. SVD는 모든 행렬에 작동하는 보편적 해부 도구이고, PCA는 그것을 통계적 데이터 분석에 연결하며, 조건수는 수치 연산의 신뢰도를 측정하고, 이차 형식은 최적화의 지형을 읽는 언어다. 4단계에서는 이 도구들이 곡선 좌표계와 텐서로 확장된다.

← 단계 2단계 4