7.1. Image Processing by Linear Algebra
선형대수학 글 목록
연결 강의: MIT 18.06 Linear Algebra - Lecture 29: Singular Value Decomposition
1. 이번 강의의 위치
이번 강의는 singular value decomposition, 즉 SVD를 다룬다.
SVD는 행렬분해 중에서도 가장 중요한 분해 중 하나이다. 강의에서는 SVD를 “final and best factorization”이라고 표현한다.
지금까지 여러 행렬분해를 봤다.
- elimination에서 나온 A=LU
- orthonormal basis에서 나온 A=QR
- 고유값 분해에서 나온 A=SΛS−1
- 대칭행렬에서 나온 A=QΛQT
SVD는 이 흐름을 가장 일반적인 행렬까지 확장한다.
핵심 형태는 다음이다.
A=UΣVT
여기서 U와 V는 orthogonal matrix이고, Σ는 diagonal에 가까운 직사각 대각행렬이다.
SVD의 가장 강한 점은 A가 어떤 행렬이어도 가능하다는 것이다.
A∈Rm×n
이어도 SVD는 존재한다.
2. 대칭 양의 정부호 행렬과 SVD의 관계
먼저 익숙한 경우부터 보자.
A가 symmetric positive definite matrix라면 다음처럼 분해할 수 있다.
A=QΛQT
대칭행렬이므로 eigenvector를 orthonormal하게 잡을 수 있고, positive definite이므로 eigenvalue가 모두 양수이다.
이 경우에는 SVD가 거의 eigenvalue decomposition과 같다.
A=QΛQT
여기서 왼쪽 orthogonal matrix와 오른쪽 orthogonal matrix가 같은 Q이다.
하지만 일반적인 행렬에서는 이렇게 하나의 Q만으로는 부족하다. 행렬이 대칭이 아닐 수도 있고, 정사각행렬이 아닐 수도 있기 때문이다.
그래서 SVD에서는 두 개의 orthogonal matrix가 필요하다.
A=UΣVT
U는 column space 쪽의 orthonormal basis를 담고, V는 row space 쪽의 orthonormal basis를 담는다.
3. SVD의 그림: Row Space에서 Column Space로
행렬 A는 선형변환이다.
A:Rn→Rm
즉 A는 입력공간의 벡터를 출력공간의 벡터로 보낸다.
SVD는 이 선형변환을 가장 좋은 basis에서 보는 방법이다.
입력 쪽에서는 row space의 orthonormal basis를 고른다.
v1,v2,…,vr
출력 쪽에서는 column space의 orthonormal basis를 고른다.
u1,u2,…,ur
여기서 r은 rank이다.
SVD의 목표는 다음이 성립하도록 basis를 고르는 것이다.
Av1=σ1u1
Av2=σ2u2
계속해서,
Avr=σrur
이다.
즉 입력공간의 직교기저 vi들이 A에 의해 출력공간의 직교기저 ui 방향으로 이동한다.
σi는 그 방향에서 얼마나 늘어나는지를 나타내는 값이다.
이 값을 singular value라고 한다.
4. Singular Value의 의미
고유값 분해에서는 다음 식을 봤다.
Ax=λx
즉 어떤 특별한 방향 x는 행렬 A를 곱해도 방향이 바뀌지 않고 크기만 λ배 된다.
SVD에서는 조금 다르다.
Avi=σiui
여기서는 입력 방향 vi가 출력 방향 ui로 간다.
A가 일반적인 직사각행렬이면 입력공간과 출력공간의 차원 자체가 다를 수 있다. 따라서 같은 방향으로 남는다는 eigenvector 관점이 항상 맞지 않는다.
대신 SVD는 입력공간의 좋은 방향 vi와 출력공간의 좋은 방향 ui를 따로 찾는다.
그리고 그 사이의 stretching factor가 σi이다.
위 식들을 한 번에 모으면 다음과 같다.
A∣v1∣∣v2∣⋯∣vr∣=∣u1∣∣u2∣⋯∣ur∣σ10⋮00σ2⋮0⋯⋯⋱⋯00⋮σr
이를 간단히 쓰면,
AVr=UrΣr
이다.
full SVD에서는 null space와 left null space까지 포함해서 V와 U를 전체 orthogonal matrix로 확장한다.
그러면 최종적으로 다음이 된다.
A=UΣVT
A가 m×n 행렬이면,
U∈Rm×m
Σ∈Rm×n
V∈Rn×n
이다.
U와 V는 orthogonal matrix이므로,
UTU=I
VTV=I
이다.
6. Null Space는 어떻게 들어가는가
A의 rank가 r이면 row space의 차원은 r이다.
나머지 n−r차원은 null space이다.
null space에 있는 벡터 v는 다음을 만족한다.
Av=0
따라서 SVD에서 null space 방향은 singular value가 0인 방향으로 들어간다.
즉 Σ의 diagonal 뒤쪽에는 0이 들어간다.
이 때문에 null space는 SVD에서 자연스럽게 처리된다.
row space의 basis는 양수 singular value를 만들고, null space의 basis는 0 singular value를 만든다.
7. ATA로 V를 구하는 이유
SVD를 다음처럼 쓰자.
A=UΣVT
이때 U와 V를 동시에 찾는 것은 어렵다.
그래서 먼저 V만 남기는 조합을 만든다.
그 조합이 바로 다음이다.
ATA
계산해 보자.
AT=(UΣVT)T=VΣTUT
따라서,
ATA=VΣTUTUΣVT
U는 orthogonal matrix이므로,
UTU=I
이다.
따라서,
ATA=VΣTΣVT
ΣTΣ는 diagonal matrix이고, 대각성분은 singular value의 제곱이다.
ΣTΣ=σ120⋮00σ22⋮0⋯⋯⋱⋯00⋮σn2
즉 ATA의 eigenvector가 V의 열벡터이고, ATA의 eigenvalue가 σi2이다.
ATAvi=σi2vi
따라서,
σi=λi(ATA)
이다.
8. AAT로 U를 구하는 이유
이번에는 반대로 AAT를 본다.
AAT=UΣVTVΣTUT
V는 orthogonal matrix이므로,
VTV=I
이다.
따라서,
AAT=UΣΣTUT
즉 AAT의 eigenvector가 U의 열벡터이고, eigenvalue는 마찬가지로 σi2이다.
AATui=σi2ui
정리하면 다음과 같다.
- V는 ATA의 orthonormal eigenvectors이다.
- U는 AAT의 orthonormal eigenvectors이다.
- singular values는 ATA 또는 AAT의 eigenvalue의 양의 제곱근이다.
9. 예시 1: Full-Rank 2×2 Matrix
다음 행렬을 생각하자.
A=[4−343]
이 행렬은 invertible이므로 rank가 2이다.
따라서 row space와 column space는 모두 R2 전체이다.
SVD를 위해 다음을 찾는다.
- row space의 orthonormal basis v1,v2
- column space의 orthonormal basis u1,u2
- singular values σ1,σ2
10. ATA 계산
먼저 ATA를 계산한다.
AT=[44−33]
따라서,
ATA=[44−33][4−343]
계산하면,
ATA=[257725]
이 행렬은 대칭행렬이고 positive definite이다.
이제 이 행렬의 eigenvectors가 v1,v2가 된다.
11. ATA의 Eigenvalues와 V
행렬
[257725]
의 고유벡터는 익숙한 형태이다.
첫 번째 고유벡터는 다음이다.
[11]
실제로,
[257725][11]=[3232]=32[11]
따라서 첫 번째 eigenvalue는 32이다.
두 번째 고유벡터는 다음이다.
[1−1]
실제로,
[257725][1−1]=[18−18]=18[1−1]
따라서 두 번째 eigenvalue는 18이다.
unit vector로 만들면,
v1=21[11]
v2=21[1−1]
이다.
따라서,
V=21[111−1]
이다.
singular values는 eigenvalue의 양의 제곱근이다.
σ1=32
σ2=18
12. AAT 계산
이제 U를 구하기 위해 AAT를 계산한다.
AAT=[4−343][44−33]
계산하면,
AAT=[320018]
이번 예시는 운 좋게 AAT가 이미 diagonal matrix이다.
따라서 eigenvectors는 표준기저이다.
첫 번째 eigenvector는 다음이다.
[10]
두 번째 eigenvector는 부호 선택을 고려해서 다음처럼 잡는다.
[0−1]
고유벡터의 부호는 자유롭게 바꿀 수 있다. 여기서는 최종 곱이 원래 A와 맞도록 두 번째 vector의 부호를 음수로 잡는다.
따라서,
U=[100−1]
이다.
13. SVD 조립
이제 세 조각을 모은다.
A=UΣVT
여기서,
U=[100−1]
Σ=[320018]
VT=21[111−1]
이다.
곱하면,
ΣVT=[320018]21[111−1]
=[434−3]
여기에 U를 곱하면,
UΣVT=[100−1][434−3]=[4−343]
따라서 원래 행렬 A가 복원된다.
이 예시에서 중요한 점은 고유벡터의 부호 선택이다. ui나 vi는 eigenvector이므로 부호를 바꿔도 여전히 eigenvector이다. SVD에서는 singular value를 양수로 유지하고, 필요한 부호는 U나 V의 vector 쪽에서 조정한다.
14. Image Processing 관점의 연결
Reading 제목이 “Image Processing by Linear Algebra”인 이유는 SVD가 이미지 처리에서 바로 쓰이기 때문이다.
흑백 이미지는 숫자 행렬로 볼 수 있다. 각 entry는 pixel의 밝기이다.
SVD는 이미지를 다음처럼 여러 rank-one matrix의 합으로 분해한다.
A=σ1u1v1T+σ2u2v2T+⋯+σrurvrT
큰 singular value에 해당하는 항들은 이미지의 중요한 구조를 많이 담고, 작은 singular value에 해당하는 항들은 상대적으로 덜 중요한 세부 정보를 담는다.
그래서 큰 singular value 몇 개만 남기면 이미지를 압축할 수 있다.
즉 SVD는 단순한 분해 공식이 아니라, 행렬 안의 중요한 방향과 크기를 순서대로 꺼내는 방법이다.
15. 핵심 정리
SVD는 임의의 행렬 A를 다음처럼 분해한다.
A=UΣVT
V는 입력공간, 특히 row space와 null space 쪽의 orthonormal basis를 담는다.
U는 출력공간, 즉 column space와 left null space 쪽의 orthonormal basis를 담는다.
Σ의 대각성분은 singular values이다.
핵심 관계는 다음이다.
Avi=σiui
또 V와 U는 각각 다음에서 나온다.
ATA=VΣTΣVT
AAT=UΣΣTUT
즉,
- ATA의 eigenvectors가 V이다.
- AAT의 eigenvectors가 U이다.
- eigenvalues의 양의 제곱근이 singular values이다.
다음 글에서는 rank가 부족한 행렬에서 null space가 SVD에 어떻게 들어가는지, 그리고 SVD가 네 기본 부분공간의 좋은 basis를 어떻게 만들어 주는지 본다.