Loading [MathJax]/jax/element/mml/optable/BasicLatin.js

추천시스템과 Matrix Decompositions — 3. 고유값과 고유벡터, Cholesky Decomposition

이번엔 내용이 좀 많고 어려웠습니다..! Matrix decomposition의 원리를 다 이해해보려고 며칠동안 독기품고 정리했습니다..!! 말투를 반말로 바꾸겠습니다 😄

좌표를 잃지 않기 위해 4단원 ‘Matrix Decompositions의 목차를 다시 한 번 정리하고 오늘 다룰 부분을 알아보자.

4.1 Determinant and Trace

4.2 Eigenvalues and Eigenvectors ← 여기 끝부분

4.3 Cholesky Decomposition ← 여기

4.4 Eigendecomposition and Diagonalization ← 여기

4.5 Singular Value Decomposition

이번 글에서 다룰 내용은 4.2의 끝부분, 4.3, 4.4 단원이다.

뒤에도 더 있지만, SVD까지 정리하는 것을 목표로 하고 있다!

Eigenvector 이야기가 아직 끝나지 않았다!

Example 4.9 (Google’s PageRank - Webpages as Eigenvectors) 구글은 행렬 A의 고유값 중 최대값에 대응되는 고유벡터를 이용하여 검색 시 페이지에 대한 랭크를 결정한다. 이러한 ‘PageRank’라고 불리는 알고리즘은 1996년 스탠포드 대학교의 래리 페이지(Larry Page)와 세르게이 브린(Sergey Brin)에 의해 탄생했다. 어느 웹페이지의 중요도는 해당 웹페이지를 링크한 페이지의 중요도에 의해 계산될 수 있다. 개발자들은 모든 웹사이트들을 하나의 거대한 directed graph로 만든 후, 각 페이지가 어디에 링크되는지 보았다. PageRank는 웹사이트 ai의 가중치(중요도) xi0ai를 가리키는 페이지의 수를 사용한다. 추가적으로, ai를 가리키는 웹사이트의 중요도도 고려한다. 어느 유저의 탐색은 이 그래프의 전이 행렬(transition matrix) A로 나타낼 수 있을 것이다. 그럼 이 행렬은 누군가가 얼마의 확률로 어느 페이지에 도달할지 알려준다. 어느 웹사이트의 초기 중요도 벡터를 x라고 해보자. x, Ax, A2x, x라는 벡터로 수렴한다. A의 특성이 그렇다. 이 벡터 x를 PageRank라고 부르며, Ax=x를 만족한다. 즉, 어느 웹사이트의 중요도 벡터는 행렬 A의 고유값 1에 상응하는 고유벡터인 셈이다. x를 정규화하면(||x||=1), 각 요소는 확률로 해석될 수 있다. 상세한 사항은 원논문 Page et al., 1999에서 찾아볼 수 있다.

Graphical Intuition in Two Dimensions

0

determinants, eigenvectors, 그리고 eigenvalues에 대해 직관적인 이해로 들어가보자. Figure 4.4는 행렬 A1, …, A5와 이들에 의한 점들의 변형을 보여주고 있다.

  • A1=[12102]. 두 고유벡터들의 방향이 2차원 canonical basis 벡터들과 나란한 상황이다. 수직축 방향으로 2만큼 늘어나고(고유값 λ1=2), 수평축 방향으로 12만큼 압축된다. 넓이는 보존된다.
  • A2=[11201]은 전단 매핑(sheering mapping)인데, 즉, y축의 양의 방향에 있다면 오른쪽으로, 음의 방향에 있다면 왼쪽으로 전단한다. 이 매핑도 넓이를 보존한다. 고유값은 두 값이 동일한 λ1=1=λ2이며, 고유 벡터들은 collinear이다. 즉, 그림처럼 수평 축 방향으로만 늘어나거나 줄어든다.
  • A3=[cosπ6sinπ6sinπ6cosπ6]=12[3113]은 점들을 π6, 즉 30도만큼 반시계 방향으로 회전시키다. 그리고 허수의 고유값을 갖는다.
  • A4=[1111]은 표준 기저에서의 2차원 도메인을 1차원으로 줄이는 매핑이다. 한 고유값이 0이기 때문에, 이에 해당하는 파란색 고유벡터 방향의 점들은 넓이가 0이 된다. 반면 이와 수직인 빨간색 고유벡터 방향으로는 고유값인 λ2=2만큼 늘어난다.
  • A5=[112121]는 전단도 하고 늘리기도 하는 매핑이다. 이 행렬의 determinant는 |det이기 때문에, 넓이를 75%로 만든다. 빨간 고유벡터 방향의 넓이는 \lambda_2=1.5에 의해 늘어나고, 파란 고유벡터 방향의 넓이는 \lambda_1=0.5에 의해 줄어든다.

Theorem 4.12. 서로 다른 고유값 \lambda_1, ..., \lambda_n을 갖는 행렬 \mathbf{A}\in \mathbb{R}^{n\times n}의 고유벡터 x_1, ..., x_n는 선형 독립이다.

위 정리는 n개의 서로 다른 고유값을 갖는 행렬의 고유 벡터들은 \mathbb{R}^n의 기저를 형성한다는 것이 된다.

Definition 4.14. 만약 정방행렬 \mathbf{A} \in \mathbb{R}^{n \times n}n보다 적은 선형 독립의 고유 벡터를 갖는다면 defective이다.

non-defective 행렬 \mathbf{A} \in \mathbb{R}^{n \times n}이 필수적으로 n개의 서로 다른 고유값을 필요로 하는 것은 아니다. 하지만, 고유 벡터들이 \mathbb{R}^n의 기저를 형성해야한다.


4.3 Cholesky Decomposition

머신러닝에서 우리가 자주 마주하는 특별한 유형의 행렬을 분해하는데는 다양한 방법들이 있다. 양의 실수에서 93\cdot 3으로 분해되는걸 생각해보자. 행렬에 대해서 비슷하게 하려면 좀 조심해야한다. symmetric, positive definite matrices에 대해서는, Cholesky 분해가 유용하다!

Theorem 4.18 (Cholesky Decomposition). Symmetric, positive definite 행렬 \mathbf{A}\mathbf{A}=\mathbf{L}\mathbf{L}^{\top}로 분해될 수 있다. \mathbf{L}은 양의 대각 요소를 가진 lower triangular 행렬이다.

\begin{bmatrix}a_{11} & \cdots & a_{1n} \\\vdots & \ddots & \vdots \\a_{n1} & \cdots & a_{nn}\end{bmatrix}=\begin{bmatrix}l_{11} & \cdots & 0 \\\vdots & \ddots & \vdots \\l_{n1} & \cdots & l_{nn}\end{bmatrix}\begin{bmatrix}l_{11} & \cdots & l_{1n} \\\vdots & \ddots & \vdots \\0 & \cdots & l_{nn}\end{bmatrix}

이 때의 \mathbf{L}\mathbf{A}의 Cholesky factor라고 부르며, \mathbf{L}은 유일하다.

Symmetric positive definite 행렬은 3단원에 나오는데, 잠시 살펴보자.

Definition 3.4 (Symmetric, Positive Definite Matrix)

\forall x \in V \setminus \left\{ \mathbf{0}\right\} : x^{\top}\mathbf{A} x > 0

위 식을 만족하는 대칭 행렬 \mathbf{A} \in \mathbb{R}^{n \times n}을 symmetric, positive definite, 또는 그냥 positive definite이라고 부른다.

예를 들어 \mathbf{A} = \begin{bmatrix} 9 & 6 \\ 6 & 5 \end{bmatrix}의 경우, \begin{bmatrix} x_1 & x_2 \end{bmatrix} \begin{bmatrix} 9 & 6 \\ 6 & 5 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} = (3x_1 + 2x_2)^2 + x_2^2 > 0이기 때문에 symmetric, positive definite이다.

이제 symmetric positive definite 행렬에 대해 Cholesky 분해하는 예제를 보자.

Example 4.10 (Cholesky Factorization) Symmetric, positive definite 행렬 \mathbf{A} \in \mathbb{R}^{3 \times 3}이 있다고 하자. Cholesky 분해 \mathbf{A}=\mathbf{L}\mathbf{L}^\top을 해보자.

\mathbf{A} = \begin{bmatrix}a_{11} & a_{21} & a_{31} \\ a_{21} & a_{22} & a_{32} \\a_{31} & a_{32} & a_{33}\end{bmatrix}=\mathbf{L}\mathbf{L}^{\top}=\begin{bmatrix}l_{11} & 0 & 0 \\ l_{21} & l_{22} & 0 \\l_{31} & l_{32} & l_{33}\end{bmatrix} \begin{bmatrix}l_{11} & l_{21} & l_{31} \\ 0 & l_{22} & l_{32} \\0 & 0 & l_{33}\end{bmatrix}

우변을 곱한 결과는

\mathbf{A} = \begin{bmatrix}l_{11}^2 & l_{21}l_{11} & l_{31}l_{11} \\ l_{21}l_{11} & l_{21}^2 + l_{22}^2 & l_{31}l_{21} + l_{32}l_{22} \\l_{31}l_{11} & l_{31}l_{21} + l_{32}l_{22} & l_{31}^2 + l_{32}^2 + l_{33}^2\end{bmatrix}

그럼 다음과 같은 관계가 도출된다.

l_{11} = \sqrt{a_{11}},\;\; l_{22}=\sqrt{a_{22}-l_{21}^2}, \;\; l_{33}=\sqrt{a_{33} - (l_{31}^2) + l_{32}^2)}

이런 방식으로 어떠한 symmetric, positive definite 3 \times 3 행렬에 대하여도 Cholesky 분해를 할 수 있다.

Cholesky 분해는 머신러닝에서 수 계산을 할 때 매우 중요한 도구이다! 예를 들어, 공분산 행렬은 symmetric positive definite 행렬인데, 많은 곱셈이 필요하다. 하지만 Cholesky 행렬을 통하면 가우시안 분산으로부터 샘플들을 생성할 수 있다든가(?), 랜덤 변수의 선형 변환을 가능하게 해서 오토인코더같은 통계 모델에서 그래디언트를 계산할 때 널리 사용된다든가 하는 것이다. (음..어렵네)

또, Cholesky 분해를 통해 determinant를 쉽게 계산할 수 있다. A=L L^{\top}일 때, \det{A} = \det({L})\det({L}^{\top})=\det(L)^2라는 걸 알고있다(이전 글에서 전치를 해도 determinant는 변하지 않는다고 배웠다). L은 triangular 행렬이기 때문에, determinant는 단지 대각요소들의 제곱의 곱인 \det(A)=\Pi_i l_{ii}^2가 된다! 대각행렬의 determinant는 대각 요소들의 곱이기 때문이다.

4.4 Eigendecomposition and Diagonalization

대각 행렬(diagonal matrix)은 대각 위치가 아닌 요소들이 모두 0인 행렬이다. 즉,

D=\begin{bmatrix} c_1 & \cdots & 0 \\ \vdots & \ddots & \vdots \\ 0 & \cdots & c_n \end{bmatrix}

과 같은 형태이다. 대각 행렬의 determinant, powers, inverse는 빠르게 계산할 수 있다. determinant는 대각 요소들의 곱이며, 거듭제곱 D^k는 각 요소들의 k 제곱으로 표현되며, 대각 요소들이 모두 0이 아닐 경우 역함수 D^{-1}는 대각 요소들의 역수로 표현된다.

행렬을 어떻게 diagonal 형태로 변환할 수 있는지 살펴보자. A, D가 similar 관계라고 하자.

Definition 2.22 (Similarity). 만약 \tilde{A}=S^{-1}AS인 regular(=invertible) 행렬 S \in \mathbb{R}^{n \times n}가 존재한다면, 두 행렬 A, \tilde{A}은 similar하다.

Similarity에 대해서는 추후에 자세히 다뤄보도록 하고… 일단 D = P^{-1}AP를 만족하는 invertible 행렬 P가 있다고 하자. 좀 더 구체적으로는, A의 고유값들을 대각 요소로 갖는 대각 행렬 D이다. A, D는 similar하다는 것을 잊지 말자.

Definition 4.19 (Diagonalizable). 만약 행렬 A \in \mathbb{R}^{n \times n}가 diagonal matrix와 similar이면, 즉, D = P^{-1}AP를 만족하는 invertible 행렬 P \in \mathbb{R}^{n \times n}이 존재하면 A는 diagonalizable하다.

이제부터 A \in \mathbb{R}^{n \times n}을 대각화(diagonalizing)하는 것이 다른 기저에서의 선형 매핑(Section 2.6.1)을 표현하는 방법이라는 것을 알아볼 것이다. 이는 A의 고유벡터로 구성된 기저가 된다는 사실!

A \in \mathbb{R}^{n \times n}, \lambda_1, \cdots, \lambda_n라는 스칼라 집합, p_1, \cdots , p_n \in \mathbb{R}^{n}이라는 벡터 집합이 있다고 하자. P:=[p_1, \cdots, p_n], D \in \mathbb{R}^{n \times n}\lambda_1, \cdots, \lambda_n라는 대각 요소를 가진 대각 행렬이라고 정의하자. 만약 \lambda_1, \cdots, \lambda_nA의 고유벡터이고 p_1, \cdots, p_n가 이에 상응하는 A의 고유벡터라면, 다음을 보일 수 있다:

AP=PD

0

말은 복잡하지만, 결국 다음과 같이 표현만 바꾼 것이라고 보인다.

Ap_1 = \lambda_1 p_1 \\ Ap_2 = \lambda_2 p_2 \\ \vdots \\ Ap_n = \lambda_np_n

대각화(diagonalization) 정의는 P \in \mathbb{R}^{n \times n}가 invertible이어야만 한다.즉, P는 full rank(Theorem 4.3)여야 한다. n개의 선형 독립 고유벡터 p_1, \cdots, p_n, 즉, p_i\mathbb{R}^{n}의 기저를 형성해야한다.

Theorem 4.20 (Eigendecomposition). 정방 행렬 A \in \mathbb{R}^{n\times n}은 다음과 같이 분해될 수 있다.

A = PDP^{-1}

P\in \mathbb{R}^{n \times n}이고 D는 대각 요소가 A의 고유값인 대각 행렬, A의 고유벡터가 \mathbb{R}^n의 기저를 형성해야 한다.

Theorem 4.20은 non-defective인 행렬만이 대각화 될 수 있고 P의 열벡터는 An개의 고유벡터여야 한다는 것을 내포한다.

Symmetric 행렬에 대하여, 우리는 고유값 분해에 대해 심지어 더욱 강력한 결과를 얻을 수 있다.

Theorem 4.21. Symmetric 행렬 S \in \mathbb{R}^{n \times n}은 항상 대각화 될 수 있다.

위 정리는 spectral 정리 4.15로부터 곧바로 정리되는 것이다. 추가적으로, spectral 정리는 우리가 \mathbb{R}^n의 고유벡터의 ONB를 찾을 수 있다는 것을 의미한다. 즉, P는 orthogonal matrix(직교 행렬)가 되어, D=P^{\top}AP를 만족하게 된다.

Geometric Intuition for the Eigendecomposition

행렬의 eigendecomposition을 다음과 같이 해석할 수 있다: A가 표준 기저 관점에서의 선형 매핑의 변환 행렬이라고 하자. P^{-1}는 표준 기저로부터 eigenbasis로의 기저로의 기저 변환을 수행한다. 이는 고유벡터 p_i (빨간색, 오렌지색 화살표)를 표준 기저 벡터 e_i로 대응시킨다. 그 후, 대각행렬 D는 고유값 \lambda_i만큼 축방향으로 벡터의 크기를 변환시킨다. 마지막으로, P는 이렇게 크기가 바뀐 벡터들을 다시 표준 좌표계로 되돌리며 \lambda_iP_i로 만든다.

Example 4.11 (Eigendecomposition) A = \begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix}의 eigendecomposition을 계산해보자. Step1 : 고유값과 고유벡터를 계산하자. A의 특성방정식은 다음과 같다.

\det(A - \lambda I) = \det \left( \begin{bmatrix} 2-\lambda & 1 \\ 1 & 2 - \lambda \end{bmatrix} \right) \\ =(2-\lambda)^2 - 1 \\ =\lambda^2 - 4\lambda + 3 \\ =(\lambda-3)(\lambda -1)

A의 고유값은 \lambda_1=1\lambda_2=3이 된다. 특성 방정식의 근이 곧 고유값이니 말이다. 그리고 고유벡터의 정의를 통해 다음을 계산하면,

\begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix}p_1 = 1p_1,\;\;\;\begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix}p_2=3p_2

를 계산한

p_1=\frac{1}{\sqrt{2}} \begin{bmatrix} 1 \\ -1 \end{bmatrix}, \;\;\; p_2=\frac{1}{\sqrt{2}} \begin{bmatrix} 1 \\ 1 \end{bmatrix}

가 고유벡터 p_1, p_2를 계산할 수있다.

Step2 : 존재여부 판단. 고유벡터 p_1, p_2\mathbb{R}^2의 기저를 형성할 수 있다. 그러므로 A는 대각화 가능하다.

Step3 : A를 대각화하기 위해 행렬 P를 만든다. A의 고유벡터를 모아 P를 만들자.

P=[p_1, p_2] = \frac{1}{\sqrt{2}}\begin{bmatrix} 1 & 1 \\ -1 & 1 \end{bmatrix}

그러면 다음을 얻을 수 있다.

P^{-1}AP=\begin{bmatrix} 1 & 0 \\ 0 & 3 \end{bmatrix}=D

동일하게, 다음을 얻는다. (이 때는 P=P^{\top}이라는 것을 이용한다. 고유벡터 p_1p_2가 ONB를 구성하기 때문이다.)

\underbrace{\begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix}}_{A} = \underbrace{\frac{1}{\sqrt{2}}\begin{bmatrix} 1 & 1 \\ -1 & 1 \end{bmatrix}}_{P} \underbrace{\begin{bmatrix} 1 & 0 \\ 0 & 3 \end{bmatrix}}_{D} \underbrace{\frac{1}{\sqrt{2}} \begin{bmatrix} 1 & 0 \\ 0 & 3 \end{bmatrix}}_{P^{\top}}
  • 대각행렬 D의 제곱은 효율적으로 이루어진다. 그러므로, eigenvalue decomposition(만약 존재한다면)을 통해서 행렬 A \in \mathbb{R}^{n \times n}에 대한 행렬 제곱을 찾을 수 있다

    A^k=(PDP^{-1})^k=PD^kP^{-1}

    D^k를 계산하는 것은 효율적인데, 각각의 대각 요소에 제곱만 하면 되기 때문이다!

  • eigendecomposition A=PDP^{-1}이 존재한다고 가정하자. 그럼,

    \det(A)=\det(PDP^{-1}) = \det(P)\det(D)\det(P^{-1})=\det(D)=\Pi_i d_{ii}

    위처럼 A의 determinant 계산이 쉬워진다.

고유값 분해는 정방행렬에 대해서만 사용된다. 일반적인 형태의 행렬을 분해하면 매우 유용할 것이다! 다음 챕터에서 일반적인 형태의 행렬 분해 방법인 singular value decomposition에 대해 알아본다!