기초 수학 · 6
고윳값과 SVD
지난 장에서는 행렬로 풀었고, 이 장에서는 행렬을 분해한다. 행렬이 공간에 하는 일의 거의 전부가 몇 개의 수에 담긴다 — 그 수를 찾는 것이 압축·PCA·추천 시스템·저랭크 파인튜닝(LoRA)이 작동하는 방식이다. 분해는 둘이다: 행렬이 늘이기만 하는 방향을 주는 고유분해, 그리고 그것을 임의의 행렬로 일반화하는 SVD. 아래 모든 것은 이 페이지에서, 양 언어로 돈다.
고유벡터: 행렬이 늘이기만 하는 방향
대부분의 벡터는 행렬을 곱하면 방향이 돈다. 소수의 특별한 벡터만 같은 방향으로, 길이만
달라져 나온다 — 그것이 고유벡터이고, 각각이 스케일되는 배수가
고윳값이다: A v = λ v. 행렬이 단순하게 작용하는 축이다.
대칭 행렬은 고윳값이 실수이고 고유벡터가 직교하므로 eigh 가
도구다 — 고윳값을 values 에, 고유벡터를 vectors 의 열로
돌려준다. 첫 쌍을 꺼내 A·v 가 정말 λ·v 인지 확인하라.
SVD: 임의의 행렬을 세 조각으로
고유벡터는 정사각 행렬이 필요하지만, 머신러닝의 행렬은 대개 정사각이 아니다.
특이값 분해에는 그 제약이 없다. 임의의 행렬을
A = U diag(S) Vᵀ 로 쓴다 — 기하로는 회전(Vᵀ), 특이값 S
만큼 축을 따라 스케일, 다시 회전(U). 특이값은 음이 아니고 큰 것부터
정렬돼 있다: 각 방향이 얼마나 중요한지를 매긴다.
왜 몇 개의 수로 충분한가
여기가 핵심이고, 말보다 보기가 쉽다. 아래 행렬은 사실 세 개의 독립 방향으로만 만들어졌고 그 위에 약간의 노이즈가 얹혀 있다. 돌려서 그려지는 스펙트럼을 보라: 처음 세 특이값이 나머지를 압도한다. 그 절벽이 이미지·임베딩·가중치 행렬이 압축되는 이유다 — 큰 특이값 몇 개만 남기고 긴 꼬리를 버려도 잃는 게 거의 없다. LoRA 가 저랭크 업데이트로 파인튜닝할 때 노리는 것도 바로 이것이다.
직접: SVD 로 A 를 되짚기
조각을 다시 맞추는 것이 제대로 이해했는지의 확인이다. 이 블록은 U·
S·V 로 A 를 재구성하지만 V 의 전치를
빠뜨린다. 더해서 U diag(S) Vᵀ 가 A 를 되돌리고 gap 이 0 으로
떨어지게 하라.
기억할 것
- 고유벡터: 행렬이 스케일만 하는 방향 —
A v = λ v. 대칭 행렬엔eigh(실수 고윳값, 직교 고유벡터). - SVD: 임의의 행렬은
U diag(S) Vᵀ— 회전·스케일·회전.svd가U·S·V를 준다. - 특이값은 정렬돼 있고 대개 빨리 감쇠한다. 상위 몇 개만 남기는 것이 저랭크 근사 — 압축·PCA·LoRA 밑에 있는 생각이다.
- borch 에서는
A.eigh()·A.svd(); 둘 다await로 읽는다.