Direct Linear Transform

상솜공방·2025년 4월 30일

Visual SLAM

목록 보기
10/10
post-thumbnail

Direct Linear Transform의 개념

DLT (Direct Linear Transform): 3D 세계 좌표를 카메라 이미지로 투영하는 과정을 수학적으로 유도하는 과정.

3D Point to Pixel

  • 목표: 3D 월드 좌표 (X) 상의 한 점을 이미지 픽셀 좌표 (x)로 변환하는 투영 행렬 PP의 파라미터를 추정하는 것.
  • 이때 PP내부 파라미터 + 외부 파라미터를 모두 포함한 카메라 투영 행렬입니다.

Geometry가 주어진 상태에서의 Camera Parameters 추정

  • Given:
    • 3D 물체의 위치 Xi=[X,Y,Z]X_i = [X, Y, Z]는 알고 있음
  • Observed:
    • 이 3D 포인트들이 이미지 플레인 상에서 나타나는 위치 xi=[u,v]x_i = [u, v]는 관측됨
  • Wanted:
    • 카메라의 내부 파라미터(초점 거리, 주점 등)와 외부 파라미터(카메라의 위치 및 자세)

매핑 개념 (Mapping via DLT)

  • DLT는 3D 객체 점 → 2D 이미지 점으로의 선형 사상(linear mapping)을 구성
  • 간단한 수식 표현:
    x=PXx = P X \quad
  • 여기서 PP3×43 \times 4 투영 행렬이며, 아래와 같이 구성됨:
    P=K[Rt]P = K [R \mid t]
    • KK: 카메라 내부(intrinsic) 파라미터 행렬
    • RR, tt: 카메라 외부(extrinsic) 파라미터 행렬

추정해야 할 파라미터 수

  • 우리가 추정하고 싶은 건 다음과 같은 11개의 파라미터:

    • 회전 3개 (roll, ptich, yaw)
    • 이동 3개 (x, t, z 축)
    • 내부 파라미터 5개 (초점 거리, 주점, 왜곡)
  • 총 11개의 파라미터 → PR3×4P \in \mathbb{R}^{3 \times 4}에서, 스케일을 하나 고정하면 11개

  • 3D 상의 한 점 (X,Y,Z)(X, Y, Z)가 2D 이미지 플레인에서 두 점 (u,v)(u, v)으로 대응되므로, 두 개의 선형 방정식을 만들 수 있다.

  • 따라서 11개의 파라미터를 풀기 위해서는:

    • 최소 6개 이상의 대응점이 필요 (2식 × 6점 = 12식 ≥ 11 unknowns)
  • 따라서 6개 이상의 대응점(control points)이 필요하며, 더 많을수록 안정적

Direct Linear Transform의 수식

Spatial Resection

만약 카메라가 이미 보정(calibrated)되어 있다면, 내부 파라미터는 파악하였으니 외부 파라미터인 6개(3회전 + 3이동)만 추정하면 된다. 이 경우에는 3개의 대응점만 있어도 계산이 가능하며, 이를 spatial resection이라고 부른다.

DLT (Direct Linear Transform)

반면, 보정되지 않은(uncalibrated) 카메라는 내부 파라미터까지 포함해서 11개의 파라미터를 추정해야 하므로 최소 6점이 필요하다. 이때 사용하는 방법이 DLT이다.

DLT는 입력으로 3D object point들의 좌표와 그에 대응하는 2D 이미지 좌표가 주어졌을 때, 출력으로는 투영 행렬 PR3×4P \in \mathbb{R}^{3 \times 4}의 11개 요소를 추정하는 것이다. 대응 관계는 다음과 같은 형태다.

xPX[xy1][p1Tp2Tp3T]X\mathbf{x} \sim P \mathbf{X} \quad \Rightarrow \quad \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} \sim \begin{bmatrix} p_1^T \\ p_2^T \\ p_3^T \end{bmatrix} \mathbf{X}
이 때, P=[p1Tp2Tp3T]=[p11p12p13p14p21p22p23p24p31p32p33p34]\text{이 때, } P = \begin{bmatrix} p_1^T \\ p_2^T \\ p_3^T \end{bmatrix} = \begin{bmatrix} p_{11} & p_{12} & p_{13} & p_{14} \\ p_{21} & p_{22} & p_{23} & p_{24} \\ p_{31} & p_{32} & p_{33} & p_{34} \end{bmatrix}

이것을 명확히 쓰면 다음처럼 정리된다:

x=p1TXp3TX,y=p2TXp3TXx = \frac{p_1^T \mathbf{X}}{p_3^T \mathbf{X}}, \quad y = \frac{p_2^T \mathbf{X}}{p_3^T \mathbf{X}}

이 식은 비선형(fraction 포함)이기 때문에 선형 시스템으로 풀 수 없다. 따라서 양변에 p3TXp_3^T \mathbf{X}를 곱해 분모를 없애고 선형화한다.

이 과정을 정리하면:

x(p3TX)=p1TXx(p3TX)p1TX=0x (p_3^T \mathbf{X}) = p_1^T \mathbf{X} \quad \Rightarrow \quad x(p_3^T \mathbf{X}) - p_1^T \mathbf{X} = 0
y(p3TX)=p2TXy(p3TX)p2TX=0y (p_3^T \mathbf{X}) = p_2^T \mathbf{X} \quad \Rightarrow \quad y(p_3^T \mathbf{X}) - p_2^T \mathbf{X} = 0

이 두 식은 하나의 대응점 (X,x)(\mathbf{X}, \mathbf{x})으로부터 얻을 수 있는 두 개의 선형식이다.

이제 이 식을 행렬 곱 형태로 다시 쓰자.

1단계: 수식 전개

먼저 우리는 첫번째 식

x(p3TX)p1TX=0x(p_3^T X) - p_1^T X = 0

을 다음처럼 계산할 수 있다.

먼저 각 항을 풀어 쓰면:

  • p3TX=p31X+p32Y+p33Z+p34p_3^T X = p_{31}X + p_{32}Y + p_{33}Z + p_{34}
  • p1TX=p11X+p12Y+p13Z+p14p_1^T X = p_{11}X + p_{12}Y + p_{13}Z + p_{14}

그러면 원래 식은 다음과 같다:

x(p31X+p32Y+p33Z+p34)(p11X+p12Y+p13Z+p14)=0x(p_{31}X + p_{32}Y + p_{33}Z + p_{34}) - (p_{11}X + p_{12}Y + p_{13}Z + p_{14}) = 0

이걸 정리하면:

p11X+p12Y+p13Z+p14xp31Xxp32Yxp33Zxp34=0p_{11}X + p_{12}Y + p_{13}Z + p_{14} - x p_{31}X - x p_{32}Y - x p_{33}Z - x p_{34} = 0

항을 한 줄로 다시 쓰면:

(p11X+p12Y+p13Z+p14)+0×(p2 계열 없음)+(xp31Xxp32Yxp33Zxp34)=0(p_{11}X + p_{12}Y + p_{13}Z + p_{14}) + 0 \times \text{(p2 계열 없음)} + (-x p_{31}X - x p_{32}Y - x p_{33}Z - x p_{34}) = 0

2단계: 선형 방정식 형태로 정리

위 식을 pR12\mathbf{p} \in \mathbb{R}^{12}에 대해 선형 결합으로 바꾸기 위해, 각 파라미터 pijp_{ij}에 대응하는 계수를 위치별로 정리하면 다음과 같다:

  • p11p_{11}: XX
  • p12p_{12}: YY
  • p13p_{13}: ZZ
  • p14p_{14}: 11
  • p21p24p_{21} \sim p_{24}: 없음 → 계수를 0으로 취급
  • p31p_{31}: xX-xX
  • p32p_{32}: xY-xY
  • p33p_{33}: xZ-xZ
  • p34p_{34}: x-x

이걸 하나의 행 벡터로 정리하면 다음과 같다:

[X,Y,Z,1, 0,0,0,0, xX,xY,xZ,x][X, Y, Z, 1,\ 0, 0, 0, 0,\ -xX, -xY, -xZ, -x]

이 행 벡터와 pR12\mathbf{p} \in \mathbb{R}^{12} (투영 행렬을 column-wise로 쌓은 열벡터)를 내적한 결과가 0이 된다.

즉,

[X,Y,Z,1,0,0,0,0,xX,xY,xZ,x][p11p12p13p14p21p22p23p24p31p32p33p34]=0[X, Y, Z, 1, 0, 0, 0, 0, -xX, -xY, -xZ, -x] \cdot \begin{bmatrix} p_{11} \\ p_{12} \\ p_{13} \\ p_{14} \\ p_{21} \\ p_{22} \\ p_{23} \\ p_{24} \\ p_{31} \\ p_{32} \\ p_{33} \\ p_{34} \end{bmatrix} = 0

형태로 정리할 수 있다.

두 번째 식 y(p3TX)p2TX=0y(p_3^T X) - p_2^T X = 0도 전개하면 똑같은 방식으로

[0,0,0,0, X,Y,Z,1, yX,yY,yZ,y][0, 0, 0, 0,\ X, Y, Z, 1,\ -yX, -yY, -yZ, -y]

이라는 또 다른 row가 만들어지며, 이는 아래처럼 정리할 수 있다.

[0,0,0,0,X,Y,Z,1,yX,yY,yZ,y][p11p12p13p14p21p22p23p24p31p32p33p34]=0[0, 0, 0, 0, X, Y, Z, 1, -yX, -yY, -yZ, -y] \cdot \begin{bmatrix} p_{11} \\ p_{12} \\ p_{13} \\ p_{14} \\ p_{21} \\ p_{22} \\ p_{23} \\ p_{24} \\ p_{31} \\ p_{32} \\ p_{33} \\ p_{34} \end{bmatrix} = 0

이렇게 한 쌍의 대응점에서 얻은 두 개의 방정식을 모아 아래와 같은 행렬식을 유도할 수 있다.

[X,Y,Z,1, 0,0,0,0, xX,xY,xZ,x0,0,0,0,X,Y,Z,1,yX,yY,yZ,y][p11p12p13p14p21p22p23p24p31p32p33p34]=0\begin{bmatrix} X, Y, Z, 1,\ 0, 0, 0, 0,\ -xX, -xY, -xZ, -x \\ 0, 0, 0, 0, X, Y, Z, 1, -yX, -yY, -yZ, -y \end{bmatrix} \begin{bmatrix} p_{11} \\ p_{12} \\ p_{13} \\ p_{14} \\ p_{21} \\ p_{22} \\ p_{23} \\ p_{24} \\ p_{31} \\ p_{32} \\ p_{33} \\ p_{34} \end{bmatrix} =0

위 방법을 nn개의 대응 점에 대해 정리하여 행렬 AR2n×12A \in \mathbb{R}^{2n \times 12}을 구성하고, 투영 행렬의 요소를 pR12\mathbf{p} \in \mathbb{R}^{12}로 벡터화하여

Ap=0A \mathbf{p} = 0

이라는 homogeneous linear system으로 정리한다.

SVD를 이용한 풀이

1. 목표

우리가 찾고자 하는 건 AR2n×12A \in \mathbb{R}^{2n \times 12}에 대해 다음 조건을 만족하는 pR12\mathbf{p} \in \mathbb{R}^{12}:

Ap=0,단 p0A \mathbf{p} = 0, \quad \text{단 } \mathbf{p} \neq 0

즉, 0이 아닌 해를 가지는 null space 벡터를 구하는 것이다.
그러나 이건 일반적인 Ax=bA \mathbf{x} = \mathbf{b} 형태가 아니라 우변이 0인 homogeneous system이기 때문에, 해가 유일하지 않다. 우리가 원하는 건 크기를 정규화한 상태에서 A의 null space에 있는 벡터이다.

(1) Homogeneous system이란?

homogeneous system이란 선형 방정식의 우변이 모두 0인 경우를 말한다. 일반적인 선형 시스템이 다음과 같다면:

Ax=bA \mathbf{x} = \mathbf{b}

homogeneous system은 다음처럼 생긴다:

Ax=0A \mathbf{x} = \mathbf{0}

예를 들어,

[2142][x1x2]=[00]\begin{bmatrix} 2 & 1 \\ 4 & 2 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \end{bmatrix}

이런 형태다. 즉, 모든 방정식이 “= 0”으로 끝난다.

(2) 우변이 0인 homogeneous system은 왜 해가 유일하지 않은가?

이유는 간단하다:
무조건 x=0\mathbf{x} = \mathbf{0} (영벡터)는 항상 해가 되기 때문이다.

그러나 만약 행렬 AA의 rank가 전체 열 개수보다 작다면, 즉 열 벡터들이 선형 종속이면,
x0\mathbf{x} \neq \mathbf{0}무한한 해가 존재한다.
이러한 해들은 null space (kernel) 안에 있는 벡터들이고, 그 차원만큼 자유도를 가진다.

다음과 같은 AR2×3A \in \mathbb{R}^{2 \times 3} 행렬을 보자:

A=[123246]A = \begin{bmatrix} 1 & 2 & 3 \\ 2 & 4 & 6 \end{bmatrix}

그리고 우리는 homogeneous system을 푼다고 가정한다:

Ax=0A \mathbf{x} = 0

즉, xR3\mathbf{x} \in \mathbb{R}^3 이고 Ax=0A \mathbf{x} = \mathbf{0}을 만족하는 x\mathbf{x}를 찾는 것이다.

(3) 행렬 A의 rank란 무엇인가?

행렬의 rank는 "서로 선형 독립인 행이나 열의 최대 개수"이다.

  • 위 행렬에서 두 번째 행은 첫 번째 행의 2배다.

    row2=2row1\text{row}_2 = 2 \cdot \text{row}_1
  • 따라서 이 두 행은 선형 종속(linearly dependent)이다.

  • → rank = 1 (독립인 행은 하나뿐)

요약:
이 행렬의 rank는 1이다.
이는 이 행렬이 정보를 하나의 방향에서만 담고 있다는 뜻이다.

(4) 행렬 A의 rank가 전체 열 개수보다 작다는 것이 무엇인가?

  • AA2×32 \times 3 행렬이다. 열이 3개다.
  • rank가 1이면, 세 개의 열 중 오직 하나만이 독립이고 나머지는 그것의 선형 결합이라는 뜻이다.

즉, 열의 수 > ranknull space가 존재한다는 의미다.

(5) 열벡터들이 종속이라는 뜻이 무엇인가?

위 행렬의 열을 보자:

col1=[12], col2=[24], col3=[36]\text{col}_1 = \begin{bmatrix}1 \\ 2\end{bmatrix},\ \text{col}_2 = \begin{bmatrix}2 \\ 4\end{bmatrix},\ \text{col}_3 = \begin{bmatrix}3 \\ 6\end{bmatrix}
  • col2=2col1\text{col}_2 = 2 \cdot \text{col}_1
  • col3=3col1\text{col}_3 = 3 \cdot \text{col}_1

모두 col1\text{col}_1의 배수다. 즉, 종속(linearly dependent)이다.

이는 3개의 벡터가 한 방향(직선) 위에 있다는 뜻이다.

(6) 왜 이럴 경우 x0x \neq 0인 무한한 해가 존재하는가?

동차 선형 시스템에서는 항상 0\mathbf{0}은 해다.
그러나 Ax=0A \mathbf{x} = \mathbf{0}에 대해 열의 개수 > rank일 때, 해 공간이 0이 아닌 벡터까지 포함하게 된다.

구체적으로 풀어보자.

A=[123246],x=[x1x2x3]A = \begin{bmatrix} 1 & 2 & 3 \\ 2 & 4 & 6 \end{bmatrix},\quad \mathbf{x} = \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix}

곱하면:

  • 1차 방정식: x1+2x2+3x3=0x_1 + 2x_2 + 3x_3 = 0
  • 2차 방정식: 2x1+4x2+6x3=02x_1 + 4x_2 + 6x_3 = 0

두 번째 방정식은 첫 번째의 2배다. 즉, 실제로는 하나의 독립 방정식만 있음.

그러면,

x1+2x2+3x3=0x_1 + 2x_2 + 3x_3 = 0

만 만족하면 된다.

이건 해가 무수히 많다.

예를 들어 x2=1,x3=0x_2 = 1, x_3 = 0이면 x1=2x_1 = -2
또는 x2=0,x3=1x_2 = 0, x_3 = 1이면 x1=3x_1 = -3

(7) Null Space (Kernel)란?

null space는 다음 공간이다:

null(A)={xRn  Ax=0}\text{null}(A) = \{ \mathbf{x} \in \mathbb{R}^n\ |\ A \mathbf{x} = 0 \}
  • 위 예에서 null space는 위 조건을 만족하는 xR3\mathbf{x} \in \mathbb{R}^3 전체 집합이다.
  • 실제로는 평면이 아니라 1차원 직선 공간이다.

위의 방정식 x1+2x2+3x3=0x_1 + 2x_2 + 3x_3 = 0의 해 공간은
두 개의 자유 변수 x2,x3x_2, x_3를 기준으로 움직일 수 있고, x1x_1은 그에 따라 정해진다.

이 시스템에서:

x=x2[210]+x3[301]\mathbf{x} = x_2 \begin{bmatrix}-2 \\ 1 \\ 0\end{bmatrix} + x_3 \begin{bmatrix}-3 \\ 0 \\ 1\end{bmatrix}

즉, null space는 이 두 벡터의 선형 조합으로 이루어진 2차원 평면이다.

개념예시에서 설명
rank독립 행/열의 수row 1만 독립 → rank = 1
열 종속어떤 열이 다른 열의 선형결합col₂ = 2·col₁, col₃ = 3·col₁
null spaceAx=0A x = 0을 만족하는 해 공간무수히 많음, 2차원 평면
자유도해 공간의 차원 = n − rank열 3개 − rank 1 = 2

(8) 왜 우리가 원하는 건 크기를 정규화한 상태에서 A의 null space에 있는 벡터인가?

위에서 본 것처럼 Ap=0A \mathbf{p} = 0인 해는 무수히 많고, 모두 크기만 다른 동일한 방향의 벡터다.

예를 들어,

p1=[2,1,0]T,p2=[4,2,0]T\mathbf{p}_1 = [2, -1, 0]^T,\quad \mathbf{p}_2 = [4, -2, 0]^T

는 방향은 같지만 크기가 다른 해다.

우리는 이 중에서 길이 1로 정규화된 하나의 대표 벡터를 고른다:

p=pp\mathbf{p} = \frac{\mathbf{p}}{\|\mathbf{p}\|}

그 이유는:

  • DLT에서 구한 해는 스케일이 중요하지 않기 때문이다 (동차 좌표계에서는 스케일이 무시됨)
  • 하지만 해가 너무 크거나 작으면 수치적으로 불안정하기 때문에 norm 1인 해를 선호한다

2. 왜 SVD를 활용하는가?

(1) SVD의 정의와 구성 요소의 성질

임의의 실수 행렬 ARm×nA \in \mathbb{R}^{m \times n}에 대해, 다음과 같은 특이값 분해(Singular Value Decomposition, SVD)가 항상 존재한다:

A=UΣVTA = U \Sigma V^T

여기서 각 행렬의 성질은 다음과 같다:

URm×mU \in \mathbb{R}^{m \times m}: 좌직교 행렬

  • 열벡터 ui\mathbf{u}_i들은 서로 직교하며 ui=1\|\mathbf{u}_i\| = 1
  • UTU=IU^T U = I
  • UU의 열은 A Aᵗ의 고유벡터(eigenvectors)

ΣRm×n\Sigma \in \mathbb{R}^{m \times n}: 대각 행렬

  • 대각 성분 σ1σ2σr>0\sigma_1 \ge \sigma_2 \ge \dots \ge \sigma_r > 0, 나머지는 0
  • 이들 σi\sigma_iA의 특이값(singular values)이다
  • 특이값은 λi\sqrt{\lambda_i} 형태로 ATAA^T A 혹은 AATA A^T의 고유값에서 유도됨

VRn×nV \in \mathbb{R}^{n \times n}: 우직교 행렬

  • 열벡터 vi\mathbf{v}_i들 역시 직교하고 단위 벡터
  • VTV=IV^T V = I
  • VV의 열은 AᵗA의 고유벡터

(2) 고유벡터(Eigenvector)와 고유값(Eigenvalue)

행렬 AA에 어떤 벡터 v\mathbf{v}를 곱했을 때, 그 벡터의 방향이 바뀌지 않고 크기만 변하는 경우가 있다.
이때 그 벡터를 고유벡터(eigenvector), 그 크기 변환 계수를 고유값(eigenvalue)라고 한다.

즉,

Av=λvA \mathbf{v} = \lambda \mathbf{v}

이 식을 만족하는 v0\mathbf{v} \neq 0가 있으면:

  • v\mathbf{v}: 고유벡터
  • λ\lambda: 고유값

의미

  • AA는 공간을 변형(회전, 스케일 등)시키는 연산자
  • 어떤 방향의 벡터 v\mathbf{v}AA에 의해 방향은 안 바뀌고, 크기만 λ\lambda배로 늘어나거나 줄어든다

예시

A=[2003]A = \begin{bmatrix} 2 & 0 \\ 0 & 3 \end{bmatrix}

이 행렬은 xx-축 방향 벡터는 2배, yy-축 방향 벡터는 3배로 스케일하는 행렬이다.

  • A[10]=[20]=2[10]A \begin{bmatrix}1\\0\end{bmatrix} = \begin{bmatrix}2\\0\end{bmatrix} = 2 \cdot \begin{bmatrix}1\\0\end{bmatrix}
    → 고유벡터: [1,0]T[1,0]^T, 고유값: 2
  • A[01]=[03]=3[01]A \begin{bmatrix}0\\1\end{bmatrix} = \begin{bmatrix}0\\3\end{bmatrix} = 3 \cdot \begin{bmatrix}0\\1\end{bmatrix}
    → 고유벡터: [0,1]T[0,1]^T, 고유값: 3

(3) 특이값(Singular Value)

고유값은 정방행렬(square matrix)에만 정의된다.
하지만 m×nm \times n직사각형 행렬도 매우 흔하다.
특이값 분해(SVD)는 이를 다루기 위해 고안된 일반화다.

특이값은 행렬이 벡터의 축 방향을 얼마나 늘이거나 줄이는지를 나타내는 값이다.

SVD에서는 다음 분해가 있었다:

A=UΣVTA = U \Sigma V^T

여기서 Σ\Sigma의 대각 성분이 바로 특이값(singular values)이다.
즉, σ1σ2σr0\sigma_1 \ge \sigma_2 \ge \dots \ge \sigma_r \ge 0가 A의 특이값이다.

특이값은 다음과 같이 정의된다:

σi=λiwhere λi is an eigenvalue of ATA\sigma_i = \sqrt{\lambda_i} \quad \text{where } \lambda_i \text{ is an eigenvalue of } A^T A

즉, 특이값 = ATAA^T A의 고유값의 제곱근

의미

  • 고유값은 특정 방향에서의 "스케일 인자"
  • 특이값은 임의의 행렬정규 직교 기저를 따라 벡터를 늘이거나 줄이는 정도
  • SVD에서 이 특이값들을 기준으로 가장 정보량이 큰 방향부터 순서대로 정렬해서 해석할 수 있음 (→ PCA와도 연결됨)

예시

A=[3102]A = \begin{bmatrix} 3 & 1 \\ 0 & 2 \end{bmatrix}

SVD로 분해하면 Σ\Sigma 대각에 σ13.256,σ21.843\sigma_1 \approx 3.256, \sigma_2 \approx 1.843 같은 값이 나올 것이다.
이건 A가 어떤 벡터를 축 1, 축 2 방향으로 그만큼 스케일 시킨다는 뜻이다.

요약 표

개념수식정의어떤 행렬에 사용?
고유값/고유벡터Av=λvA \mathbf{v} = \lambda \mathbf{v}방향을 유지하면서 크기만 변하는 벡터정방행렬에서만 정의됨
특이값σi=λi\sigma_i = \sqrt{\lambda_i} (from ATAA^T A)모든 행렬의 "축방향 스케일"아무 행렬이나 가능 (사각도 OK)

(4) SVD 예제

이제 필요한 개념을 익혔으니 아래 행렬을 SVD로 분해해보자:

A=[100020000]A = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 0 \end{bmatrix}

1단계: ATAA^T A 계산

ATA=[100020000]T[100020000]=[100040000]A^T A = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 0 \end{bmatrix}^T \begin{bmatrix} 1 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 0 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 4 & 0 \\ 0 & 0 & 0 \end{bmatrix}

고유값: λ1=4,λ2=1,λ3=0\lambda_1 = 4, \lambda_2 = 1, \lambda_3 = 0
→ 특이값: σ1=2,σ2=1,σ3=0\sigma_1 = 2, \sigma_2 = 1, \sigma_3 = 0

2단계: VV 확인
VVATAA^T A의 고유벡터
→ 단위 행렬 (이미 대각이므로)

V=I=[100010001]V = I = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}

3단계: Σ\Sigma 확인

Σ\Sigma

Σ=[200010000]\Sigma = \begin{bmatrix} 2 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \end{bmatrix}

4단계: UU 확인

U=AVΣ1U = A V \Sigma^{-1}

U=AVΣ1=AΣ1(V는 I니까 생략)U = A V \Sigma^{-1} = A \Sigma^{-1} \quad \text{(V는 I니까 생략)}
AΣ1=[100020000][1200010001]=[0.500020000]A \Sigma^{-1} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 0 \end{bmatrix} \cdot \begin{bmatrix} \frac{1}{2} & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} 0.5 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 0 \end{bmatrix}

이 행렬을 열별로 정규화하면 단위벡터가 되고 UU가 된다. 결과적으로 U,Σ,VTU, \Sigma, V^T가 모두 SVD 조건을 만족한다.

(5) 왜 SVD에서 V의 마지막 열벡터가 null space 해인가?

우리는 Ap=0A \mathbf{p} = 0을 만족하는 p0\mathbf{p} \neq 0을 찾고자 한다. 이때 해의 공간은 null space, 즉 kerA\ker A이다.

SVD로 분해하면 다음과 같은 구조가 된다:

A=UΣVTAp=UΣVTpA = U \Sigma V^T \Rightarrow A \mathbf{p} = U \Sigma V^T \mathbf{p}

이제 양변에 UTU^T를 곱하면:

ΣVTp=0VTpkerΣ\Sigma V^T \mathbf{p} = 0 \Rightarrow V^T \mathbf{p} \in \ker \Sigma

즉, VTpV^T \mathbf{p}Σ\Sigma의 null space에 있어야 한다.
Σ\Sigma는 대각 행렬이므로, 마지막 특이값이 0이면 마지막 좌표 하나만 남고 나머지는 날아간다.

그래서 p=Ven\mathbf{p} = V \mathbf{e}_n, 즉 VV의 마지막 열벡터가 해가 된다.

직관적으로 말하면

  • Ap=0A \mathbf{p} = 0의 해는 A의 null space
  • null space 방향은 ATAA^T A의 고유벡터 (V의 열벡터)
  • 최소 특이값 σn=0\sigma_n = 0에 해당하는 VV의 마지막 열벡터가 null space 방향
  • 따라서 SVD에서 마지막 열벡터가 우리가 찾는 해

요약하면:

구성 요소의미왜 중요한가?
UUA의 좌측 기저AATA A^T의 방향 해석
Σ\Sigma특이값 (길이, 세기)순서대로 중요도 ↓
VVA의 열 방향 기저ATAA^T A의 고유벡터, null space
profile
상어 인형을 좋아하는 사람

0개의 댓글