Quick Reference
실수 m×n 행렬은 A=UΣVᵀ로 분해할 수 있습니다. U·V는 직교행렬이고 Σ의 대각에는 0 이상의 특이값을 큰 순서로 둡니다. 정사각 가역행렬에만 가능한 분해가 아닙니다.
입력 x → Vᵀx → 축별 크기 변경 Σ → U → 출력 Ax
특이값 σ₁ ≥ σ₂ ≥ … ≥ 0
계수 = 0이 아닌 특이값 개수 [정확한 수학 기준]작은 직사각행렬의 분해
A = [ 0 2 ] U = [ 0 1 0 ] Σ = [ 3 0 ] V = I₂
[ 3 0 ] [ 1 0 0 ] [ 0 2 ]
[ 0 0 ] [ 0 0 1 ] [ 0 0 ]
AᵀA = [ 9 0 ] → 특이값은 √9=3, √4=2
[ 0 4 ]입력 첫 축은 출력 y 방향으로 3배, 둘째 축은 출력 x 방향으로 2배 늘어납니다. 단위 원은 출력 평면의 두 반축 길이가 각각 3과 2인 타원이 됩니다. U·V의 직교 변환에는 반사도 포함될 수 있으므로 항상 순수 회전이라고 설명하지 않습니다.
전체 SVD에서 U는 m×m, Σ는 m×n, V는 n×n입니다. 위 예는 U가 3×3, Σ가 3×2입니다. r=rank(A)라 하고 0이 아닌 특이성분 r개를 모두 남긴 표현은 A=U_rΣ_rV_rᵀ로 쓰며 크기는 각각 m×r, r×r, n×r입니다.
고유분해와 차이
고유분해는 Av=λv처럼 같은 공간의 특별한 방향을 찾습니다. SVD는 입력의 직교 방향과 출력의 직교 방향을 따로 찾습니다. 일반 직사각행렬이나 대각화할 수 없는 정사각행렬에도 사용할 수 있습니다.
V의 열은 AᵀA의 고유벡터로 볼 수 있고, 특이값은 대응하는 0 이상 고유값의 제곱근입니다. 하지만 수치 구현에서 AᵀA를 먼저 만들면 민감도가 커질 수 있으므로 이것을 항상 권장하는 계산 알고리즘으로 받아들이지 않습니다.
낮은 계수 근사
가장 큰 특이값 k개만 남기면 A_k=σ₁u₁v₁ᵀ+…+σₖuₖvₖᵀ입니다. 위 A에서 3에 해당하는 성분만 남기면 다음과 같습니다.
A₁ = [ 0 0 ] A-A₁ = [ 0 2 ]
[ 3 0 ] [ 0 0 ]
[ 0 0 ] [ 0 0 ]
계수는 1로 줄고, 버린 성분의 Frobenius 노름은 2Frobenius 노름은 모든 행렬 성분 제곱합의 제곱근입니다. 특이값 절단은 주어진 계수 제한에서 표준 2-노름·Frobenius 노름 오차가 최소인 근사를 제공합니다. 남길 성분과 버릴 성분의 경계에서 특이값이 동률이면 최적 근사가 유일하지 않을 수 있습니다. 이미지 압축에서는 근사 오차와 저장할 자료량을 함께 판단합니다.
의사역으로 최소제곱 풀기
0이 아닌 특이값을 뒤집고 0은 그대로 두어 A⁺=V_rΣ_r⁻¹U_rᵀ를 만듭니다. 위 예에서 다음과 같습니다.
A⁺ = [ 0 1/3 0 ]
[ 1/2 0 0 ]
b=(2,3,4)
x=A⁺b=(1,1)
Ax=(2,3,0), 잔차=(0,0,4)A는 출력의 z 성분을 만들 수 없으므로 b를 정확히 맞출 수 없습니다. 의사역은 최소제곱 해 중 노름이 가장 작은 해를 고르는 일반화입니다. 이 예에서는 열들이 독립이어서 최소제곱 계수 자체가 유일합니다.
작은 특이값을 실무적으로 0으로 처리하면 오차 증폭을 줄일 수 있지만 원래 문제의 모든 정보를 보존하지는 않습니다. 절단 기준과 조건수를 함께 기록합니다.
참고 링크
2 sources