Mathematics for Machine Learning-Chapter4-5

Mathematics for Machine Learning chapter4-5

Deisenroth, Marc Peter, A. Aldo Faisal, and Cheng Soon Ong. Mathematics for machine learning. Cambridge University Press, 2020.

4

Matrix Decompositions

2장과 3장에서는 벡터를 조작하고 측정하는 방법, 벡터의 projection, 그리고 선형 매핑에 대해 살펴보았다. 벡터의 매핑과 변환은 행렬에 의해 수행되는 연산으로 편리하게 설명될 수 있다. 또한, 데이터는 종종 행렬 형태로 표현되기도 한다. 예를 들어, 행렬의 행은 다른 사람들을 나타내고 열은 체중, 키, 사회경제적 지위와 같은 사람들의 다른 특징들을 설명한다. 이 장에서는 행렬의 세 가지 측면을 제시한다: 행렬을 요약하는 방법, 행렬이 분해될 수 있는 방법, 그리고 이러한 분해가 행렬 근사에 어떻게 사용될 수 있는지.

우리는 먼저 행렬의 전반적인 특성을 나타내는 몇 개의 숫자로 행렬을 설명할 수 있는 방법을 고려한다. 이는 정방 행렬의 중요한 특수 사례에 대한 행렬식(determinant)(4.1절)과 고유값(eigenvalue)(4.2절) 섹션에서 다룰 것이다. 이러한 **특성 숫자(characteristic numbers)**는 중요한 수학적 결과를 가지며, 행렬이 어떤 유용한 속성을 가지고 있는지 빠르게 파악할 수 있게 해준다. 여기에서 우리는 행렬 분해(matrix decomposition) 방법으로 넘어갈 것이다. 행렬 분해의 비유는 21을 소수 737 \cdot 3으로 인수분해하는 것과 같은 숫자의 인수분해이다. 이러한 이유로 행렬 분해는 종종 **행렬 인수분해(matrix factorization)**라고도 불린다. 행렬 분해는 해석 가능한 행렬의 인수를 사용하여 다른 표현 방식으로 행렬을 설명하는 데 사용된다.

우리는 먼저 대칭, 양의 정부호 행렬에 대한 제곱근과 유사한 연산인 Cholesky 분해(4.3절)를 다룰 것이다. 여기에서 우리는 행렬을 **정규 형식(canonical forms)**으로 인수분해하는 두 가지 관련 방법을 살펴볼 것이다. 첫 번째는 행렬 대각화(matrix diagonalization)(4.4절)로 알려져 있으며, 적절한 기저를 선택하면 대각 변환 행렬을 사용하여 선형 매핑을 표현할 수 있게 해준다. 두 번째 방법인 특이값 분해(singular value decomposition)(4.5절)는 이 인수분해를 비정방 행렬로 확장하며, 선형 대수학의 근본적인 개념 중 하나로 간주된다. 이러한 분해는 수치 데이터를 나타내는 행렬이 종종 매우 크고 분석하기 어렵기 때문에 유용하다. 우리는 행렬의 유형과 그들을 구별하는 특성 속성에 대한 체계적인 개요를 행렬 분류(matrix taxonomy)(4.7절) 형태로 제시하며 이 장을 마무리한다.

이 장에서 다루는 방법들은

그림 4.1 이 장에서 소개된 개념들의 마인드맵과 책의 다른 부분에서 사용되는 위치.

6장과 같은 후속 수학 장뿐만 아니라 10장의 차원 축소(dimensionality reduction) 또는 11장의 **밀도 추정(density estimation)**과 같은 응용 장에서도 중요해질 것이다. 이 장의 전체 구조는 그림 4.1의 마인드맵에 묘사되어 있다.

4.1 Determinant and Trace

**행렬식(Determinant)**은 선형대수학에서 중요한 개념이다. 행렬식은 선형 방정식 시스템의 분석 및 해법에 사용되는 수학적 객체이다. 행렬식은 정방행렬 ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}, 즉 행과 열의 수가 같은 행렬에 대해서만 정의된다. 이 책에서는 행렬식을 det(A)\operatorname{det}(\boldsymbol{A}) 또는 때로는 A|\boldsymbol{A}|로 표기하며, 다음과 같이 나타낸다.

det(A)=a11a12a1na21a22a2nan1an2ann.\operatorname{det}(\boldsymbol{A})=\left|\begin{array}{cccc} a_{11} & a_{12} & \ldots & a_{1 n} \\ a_{21} & a_{22} & \ldots & a_{2 n} \\ \vdots & & \ddots & \vdots \\ a_{n 1} & a_{n 2} & \ldots & a_{n n} \end{array}\right| .

행렬식 표기 A|\boldsymbol{A}|는 **절댓값(absolute value)**과 혼동해서는 안 된다.

정방행렬 ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}의 행렬식은 A\boldsymbol{A}를 실수로 매핑하는 함수이다. 일반적인 n×nn \times n 행렬에 대한 행렬식의 정의를 제시하기 전에, 몇 가지 동기 부여 예시를 살펴보고 특정 행렬에 대한 행렬식을 정의해 보자.

Example 4.1 (Testing for Matrix Invertibility)

정방 행렬 A\boldsymbol{A}가 **가역 행렬(invertible matrix)**인지 살펴보는 것부터 시작하자(2.2.2절 참조). 가장 작은 경우에 대해서는 행렬이 언제 가역적인지 이미 알고 있다. 만약 A\boldsymbol{A}1×11 \times 1 행렬, 즉 스칼라 숫자라면, A=aA1=1a\boldsymbol{A}=a \Longrightarrow \boldsymbol{A}^{-1}=\frac{1}{a}이다. 따라서 a1a=1a \frac{1}{a}=1a0a \neq 0일 때만 성립한다.

2×22 \times 2 행렬의 경우, 역행렬의 정의(정의 2.3)에 따라 AA1=I\boldsymbol{A} \boldsymbol{A}^{-1}=\boldsymbol{I}임을 알고 있다. 그러면 (2.24)에 의해 A\boldsymbol{A}의 역행렬은 다음과 같다.

A1=1a11a22a12a21[a22a12a21a11].\boldsymbol{A}^{-1}=\frac{1}{a_{11} a_{22}-a_{12} a_{21}}\left[\begin{array}{cc} a_{22} & -a_{12} \\ -a_{21} & a_{11} \end{array}\right] .

따라서 A\boldsymbol{A}는 다음 조건이 충족될 때만 가역적이다.

a11a22a12a210a_{11} a_{22}-a_{12} a_{21} \neq 0

이 값은 AR2×2\boldsymbol{A} \in \mathbb{R}^{2 \times 2}의 **행렬식(determinant)**이다. 즉,

det(A)=a11a12a21a22=a11a22a12a21.\operatorname{det}(\boldsymbol{A})=\left|\begin{array}{ll} a_{11} & a_{12} \\ a_{21} & a_{22} \end{array}\right|=a_{11} a_{22}-a_{12} a_{21} .

예제 4.1은 이미 행렬식과 역행렬의 존재 사이의 관계를 보여준다. 다음 정리는 n×nn \times n 행렬에 대해서도 동일한 결과를 나타낸다.

정리 4.1. 임의의 정방 행렬 ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}에 대해 A\boldsymbol{A}det(A)0\operatorname{det}(\boldsymbol{A}) \neq 0일 때만 가역적이다.

우리는 행렬의 원소들을 사용하여 작은 행렬의 행렬식에 대한 명시적인 (닫힌 형태의) 표현을 가지고 있다. n=1n=1일 때,

det(A)=det(a11)=a11\operatorname{det}(\boldsymbol{A})=\operatorname{det}\left(a_{11}\right)=a_{11}

n=2n=2일 때,

det(A)=a11a12a21a22=a11a22a12a21,\operatorname{det}(\boldsymbol{A})=\left|\begin{array}{ll} a_{11} & a_{12} \\ a_{21} & a_{22} \end{array}\right|=a_{11} a_{22}-a_{12} a_{21},

이는 앞선 예시에서 관찰한 바 있다. n=3n=3일 때 (**사러스의 규칙(Sarrus' rule)**으로 알려져 있다),

a11a12a13a21a22a23a31a32a33=a11a22a33+a21a32a13+a31a12a23a31a22a13a11a32a23a21a12a33\begin{aligned} \left|\begin{array}{lll} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{array}\right|= & a_{11} a_{22} a_{33}+a_{21} a_{32} a_{13}+a_{31} a_{12} a_{23} \\ & -a_{31} a_{22} a_{13}-a_{11} a_{32} a_{23}-a_{21} a_{12} a_{33} \end{aligned}

사러스의 규칙에서 곱셈 항들을 기억하기 위해 행렬에서 세 원소의 곱을 추적해 보라.

정방 행렬 T\boldsymbol{T}i>ji>j일 때 Tij=0T_{i j}=0이면, 즉 대각선 아래의 원소가 모두 0이면 **상삼각 행렬(upper-triangular matrix)**이라고 부른다. 유사하게, 대각선 위의 원소가 모두 0인 행렬을 **하삼각 행렬(lower-triangular matrix)**이라고 정의한다. 삼각 행렬 TRn×n\boldsymbol{T} \in \mathbb{R}^{n \times n}의 행렬식은 대각선 원소들의 곱이다. 즉,

det(T)=i=1nTii\operatorname{det}(\boldsymbol{T})=\prod_{i=1}^{n} T_{i i}

Example 4.2 (Determinants as Measures of Volume)

**행렬식(determinant)**의 개념은 Rn\mathbb{R}^{n} 공간에서 객체를 형성하는 nn개의 벡터 집합으로부터의 매핑으로 간주할 때 자연스럽다. 행렬식 det(A)\operatorname{det}(\boldsymbol{A})는 행렬 A\boldsymbol{A}의 열 벡터들이 형성하는 nn차원 **평행육면체(parallelepiped)**의 부호 있는 부피(signed volume)임이 밝혀졌다.

n=2n=2일 때, 행렬의 열 벡터들은 평행사변형을 형성한다. 그림 4.2를 참조하라. 벡터 사이의 각도가 작아질수록 평행사변형의 넓이도 줄어든다. 행렬 A=[b,g]\boldsymbol{A}=[\boldsymbol{b}, \boldsymbol{g}]의 열을 형성하는 두 벡터 b,g\boldsymbol{b}, \boldsymbol{g}를 고려해보자. 그러면 A\boldsymbol{A}의 행렬식의 절댓값은 꼭짓점이 0,b,g,b+g\mathbf{0}, \boldsymbol{b}, \boldsymbol{g}, \boldsymbol{b}+\boldsymbol{g}인 평행사변형의 넓이가 된다. 특히, b,g\boldsymbol{b}, \boldsymbol{g}가 선형 종속이어서 어떤 λR\lambda \in \mathbb{R}에 대해 b=λg\boldsymbol{b}=\lambda \boldsymbol{g}라면, 이들은 더 이상 2차원 평행사변형을 형성하지 않는다. 따라서 해당 넓이는 0이다. 반대로, b,g\boldsymbol{b}, \boldsymbol{g}가 선형 독립이고 표준 기저 벡터(canonical basis vectors) e1,e2\boldsymbol{e}_{1}, \boldsymbol{e}_{2}의 배수라면, 이들은 b=[b0]\boldsymbol{b}=\left[\begin{array}{l}b \\ 0\end{array}\right]g=[0g]\boldsymbol{g}=\left[\begin{array}{l}0 \\ g\end{array}\right]로 쓸 수 있으며, 행렬식은 b00g=bg0=bg\left|\begin{array}{ll}b & 0 \\ 0 & g\end{array}\right|=b g-0=b g가 된다.

행렬식의 부호는 표준 기저(e1,e2\boldsymbol{e}_{1}, \boldsymbol{e}_{2})에 대한 생성 벡터(spanning vectors) b,g\boldsymbol{b}, \boldsymbol{g}의 **방향(orientation)**을 나타낸다. 그림에서 순서를 g,b\boldsymbol{g}, \boldsymbol{b}로 바꾸면 A\boldsymbol{A}의 열이 바뀌고 음영 처리된 영역의 방향이 반전된다. 이는 익숙한 공식인 '넓이 = 높이 × 길이'가 된다. 이러한 직관은 더 높은 차원으로 확장된다. R3\mathbb{R}^{3}에서 우리는 평행육면체의 모서리를 형성하는 세 벡터 r,b,gR3\boldsymbol{r}, \boldsymbol{b}, \boldsymbol{g} \in \mathbb{R}^{3}를 고려한다. 즉, 면이 평행한 평행사변형으로 이루어진 입체이다(그림 4.3 참조). 3×33 \times 3 행렬 [r,b,g][\boldsymbol{r}, \boldsymbol{b}, \boldsymbol{g}]의 행렬식의 절댓값은 이 입체의 부피이다. 따라서 행렬식은 행렬로 구성된 열 벡터들이 형성하는 부호 있는 부피를 측정하는 함수 역할을 한다.

다음과 같이 주어진 세 개의 선형 독립 벡터 r,g,bR3\boldsymbol{r}, \boldsymbol{g}, \boldsymbol{b} \in \mathbb{R}^{3}를 고려해보자.

r=[208],g=[610],b=[141].\boldsymbol{r}=\left[\begin{array}{c} 2 \\ 0 \\ -8 \end{array}\right], \quad \boldsymbol{g}=\left[\begin{array}{l} 6 \\ 1 \\ 0 \end{array}\right], \quad \boldsymbol{b}=\left[\begin{array}{c} 1 \\ 4 \\ -1 \end{array}\right] .

상삼각행렬(upper-triangular matrix) 하삼각행렬(lower-triangular matrix)

행렬식은 행렬의 열 벡터들이 형성하는 평행육면체의 부호 있는 부피이다. Figure 4.2 벡터 b\boldsymbol{b}g\boldsymbol{g}에 의해 형성되는 평행사변형(음영 영역)의 넓이는 det([b,g])|\operatorname{det}([\boldsymbol{b}, \boldsymbol{g}])|이다.

Figure 4.3 벡터 r,b,g\boldsymbol{r}, \boldsymbol{b}, \boldsymbol{g}에 의해 형성되는 평행육면체(음영 부피)의 부피는 det([r,b,g])|\operatorname{det}([\boldsymbol{r}, \boldsymbol{b}, \boldsymbol{g}])|이다.

행렬식의 부호는 생성 벡터의 방향을 나타낸다.

라플라스 전개(Laplace expansion) det(Ak,j)\operatorname{det}\left(\boldsymbol{A}_{k, j}\right)는 **소행렬식(minor)**이라고 불리며, (1)k+jdet(Ak,j)(-1)^{k+j} \operatorname{det}\left(\boldsymbol{A}_{k, j}\right)는 **여인수(cofactor)**라고 불린다.

이 벡터들을 행렬의 열로 작성하면

A=[r,g,b]=[261014801]\boldsymbol{A}=[\boldsymbol{r}, \boldsymbol{g}, \boldsymbol{b}]=\left[\begin{array}{ccc} 2 & 6 & 1 \\ 0 & 1 & 4 \\ -8 & 0 & -1 \end{array}\right]

원하는 부피를 다음과 같이 계산할 수 있다.

V=det(A)=186V=|\operatorname{det}(\boldsymbol{A})|=186

n×nn \times n 행렬의 행렬식을 계산하려면 n>3n>3인 경우를 해결하기 위한 일반적인 알고리즘이 필요하며, 이에 대해 다음에서 살펴볼 것이다. 아래의 정리 4.2는 n×nn \times n 행렬의 행렬식 계산 문제를 (n1)×(n1)(n-1) \times(n-1) 행렬의 행렬식 계산 문제로 축소시킨다. 라플라스 전개(Laplace expansion)(정리 4.2)를 재귀적으로 적용함으로써, 궁극적으로 2×22 \times 2 행렬의 행렬식을 계산하여 n×nn \times n 행렬의 행렬식을 계산할 수 있다.

정리 4.2 (라플라스 전개). 행렬 ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}를 고려하자. 그러면 모든 j=1,,nj=1, \ldots, n에 대해 다음이 성립한다:

  1. jj번째 열에 대한 전개
det(A)=k=1n(1)k+jakjdet(Ak,j)\operatorname{det}(\boldsymbol{A})=\sum_{k=1}^{n}(-1)^{k+j} a_{k j} \operatorname{det}\left(\boldsymbol{A}_{k, j}\right)
  1. jj번째 행에 대한 전개
det(A)=k=1n(1)k+jajkdet(Aj,k)\operatorname{det}(\boldsymbol{A})=\sum_{k=1}^{n}(-1)^{k+j} a_{j k} \operatorname{det}\left(\boldsymbol{A}_{j, k}\right)

여기서 Ak,jR(n1)×(n1)\boldsymbol{A}_{k, j} \in \mathbb{R}^{(n-1) \times(n-1)}는 행 kk와 열 jj를 삭제하여 얻는 A\boldsymbol{A}의 **부분행렬(submatrix)**이다.

Example 4.3 (Laplace Expansion)

다음 행렬의 determinant를 계산해 보자.

A=[123312001]\boldsymbol{A}=\left[\begin{array}{lll} 1 & 2 & 3 \\ 3 & 1 & 2 \\ 0 & 0 & 1 \end{array}\right]

첫 번째 행을 따라 Laplace expansion을 사용한다. (4.13)을 적용하면 다음과 같다.

123312001=(1)1+111201+(1)1+223201+(1)1+333100\begin{aligned} \left|\begin{array}{lll} 1 & 2 & 3 \\ 3 & 1 & 2 \\ 0 & 0 & 1 \end{array}\right|= & (-1)^{1+1} \cdot 1\left|\begin{array}{ll} 1 & 2 \\ 0 & 1 \end{array}\right| \\ & +(-1)^{1+2} \cdot 2\left|\begin{array}{ll} 3 & 2 \\ 0 & 1 \end{array}\right|+(-1)^{1+3} \cdot 3\left|\begin{array}{ll} 3 & 1 \\ 0 & 0 \end{array}\right| \end{aligned}

모든 2×22 \times 2 행렬의 determinant를 계산하기 위해 (4.6)을 사용하면 다음과 같다.

det(A)=1(10)2(30)+3(00)=5\operatorname{det}(\boldsymbol{A})=1(1-0)-2(3-0)+3(0-0)=-5

완전성을 위해 이 결과를 Sarrus' rule (4.7)을 사용하여 determinant를 계산한 것과 비교할 수 있다.

det(A)=111+303+022013102321=16=5.\operatorname{det}(\boldsymbol{A})=1 \cdot 1 \cdot 1+3 \cdot 0 \cdot 3+0 \cdot 2 \cdot 2-0 \cdot 1 \cdot 3-1 \cdot 0 \cdot 2-3 \cdot 2 \cdot 1=1-6=-5 .

ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}에 대해 determinant는 다음 속성들을 나타낸다.

  • 행렬 곱의 determinant는 해당 determinant들의 곱이다: det(AB)=det(A)det(B)\operatorname{det}(\boldsymbol{A B})=\operatorname{det}(\boldsymbol{A}) \operatorname{det}(\boldsymbol{B}).
  • Determinanttransposition에 대해 불변이다. 즉, det(A)=det(A)\operatorname{det}(\boldsymbol{A})=\operatorname{det}\left(\boldsymbol{A}^{\top}\right)이다.
  • A\boldsymbol{A}가 **regular (invertible)**이면, det(A1)=1det(A)\operatorname{det}\left(\boldsymbol{A}^{-1}\right)=\frac{1}{\operatorname{det}(\boldsymbol{A})}이다.
  • Similar matrices (정의 2.22)는 동일한 determinant를 갖는다. 따라서 선형 사상 Φ:VV\Phi: V \rightarrow V에 대해 Φ\Phi의 모든 transformation matrices AΦ\boldsymbol{A}_{\Phi}는 동일한 determinant를 갖는다. 즉, determinant는 선형 사상의 basis 선택에 불변이다.
  • 한 열/행의 배수를 다른 열/행에 더해도 det(A)\operatorname{det}(\boldsymbol{A})는 변하지 않는다.
  • 열/행에 λR\lambda \in \mathbb{R}를 곱하면 det(A)\operatorname{det}(\boldsymbol{A})λ\lambda만큼 스케일링된다. 특히, det(λA)=λndet(A)\operatorname{det}(\lambda \boldsymbol{A})=\lambda^{n} \operatorname{det}(\boldsymbol{A})이다.
  • 두 행/열을 바꾸면 det(A)\operatorname{det}(\boldsymbol{A})의 부호가 바뀐다.

마지막 세 가지 속성 때문에 Gaussian elimination (섹션 2.1 참조)을 사용하여 A\boldsymbol{A}row-echelon form으로 만들어 det(A)\operatorname{det}(\boldsymbol{A})를 계산할 수 있다. Gaussian eliminationA\boldsymbol{A}triangular form이 되어 diagonal 아래의 모든 요소가 0이 될 때 멈출 수 있다. (4.8)에서 triangular matrixdeterminantdiagonal 요소들의 곱이라는 것을 상기하자.

정리 4.3. Square matrix ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}det(A)0\operatorname{det}(\boldsymbol{A}) \neq 0인 경우에만 rk(A)=n\operatorname{rk}(\boldsymbol{A})=n이다. 다시 말해, A\boldsymbol{A}full rank인 경우에만 invertible이다.

수학이 주로 수작업으로 이루어지던 시절에는 determinant 계산이 행렬의 invertibility를 분석하는 필수적인 방법으로 여겨졌다. 그러나 현대 머신러닝 접근 방식에서는 determinant의 명시적인 계산을 대체하는 직접적인 수치적 방법을 사용한다. 예를 들어, 2장에서 inverse matricesGaussian elimination으로 계산할 수 있다는 것을 배웠다. 따라서 Gaussian elimination은 행렬의 determinant를 계산하는 데 사용될 수 있다.

Determinant는 다음 섹션들, 특히 characteristic polynomial을 통해 eigenvalueseigenvectors (섹션 4.2)를 배울 때 중요한 이론적 역할을 할 것이다.

정의 4.4. Square matrix ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}trace는 다음과 같이 정의된다.

Tracecyclic permutations에 대해 불변이다. characteristic polynomial

tr(A):=i=1naii\operatorname{tr}(\boldsymbol{A}):=\sum_{i=1}^{n} a_{i i}

즉, traceA\boldsymbol{A}diagonal 요소들의 합이다. Trace는 다음 속성들을 만족한다.

  • tr(A+B)=tr(A)+tr(B)\operatorname{tr}(\boldsymbol{A}+\boldsymbol{B})=\operatorname{tr}(\boldsymbol{A})+\operatorname{tr}(\boldsymbol{B}) (단, A,BRn×n\boldsymbol{A}, \boldsymbol{B} \in \mathbb{R}^{n \times n})
  • tr(αA)=αtr(A)\operatorname{tr}(\alpha \boldsymbol{A})=\alpha \operatorname{tr}(\boldsymbol{A}) (단, αR\alpha \in \mathbb{R}, ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n})
  • tr(In)=n\operatorname{tr}\left(\boldsymbol{I}_{n}\right)=n
  • tr(AB)=tr(BA)\operatorname{tr}(\boldsymbol{A B})=\operatorname{tr}(\boldsymbol{B A}) (단, ARn×k,BRk×n\boldsymbol{A} \in \mathbb{R}^{n \times k}, \boldsymbol{B} \in \mathbb{R}^{k \times n})

이 네 가지 속성을 모두 만족하는 함수는 trace뿐이라는 것을 보일 수 있다 (Gohberg et al., 2012).

행렬 곱의 trace 속성은 더 일반적이다. 특히, tracecyclic permutations에 대해 불변이다. 즉,

tr(AKL)=tr(KLA)\operatorname{tr}(\boldsymbol{A} \boldsymbol{K} \boldsymbol{L})=\operatorname{tr}(\boldsymbol{K} \boldsymbol{L} \boldsymbol{A})

(단, ARa×k,KRk×l,LRl×a\boldsymbol{A} \in \mathbb{R}^{a \times k}, \boldsymbol{K} \in \mathbb{R}^{k \times l}, \boldsymbol{L} \in \mathbb{R}^{l \times a})이다. 이 속성은 임의의 수의 행렬 곱으로 일반화된다. (4.19)의 특수한 경우로, 두 벡터 x,yRn\boldsymbol{x}, \boldsymbol{y} \in \mathbb{R}^{n}에 대해 다음이 성립한다.

tr(xy)=tr(yx)=yxR\operatorname{tr}\left(\boldsymbol{x} \boldsymbol{y}^{\top}\right)=\operatorname{tr}\left(\boldsymbol{y}^{\top} \boldsymbol{x}\right)=\boldsymbol{y}^{\top} \boldsymbol{x} \in \mathbb{R}

벡터 공간 VV에 대한 선형 사상 Φ:VV\Phi: V \rightarrow V가 주어졌을 때, 이 사상의 traceΦ\Phi의 행렬 표현의 trace를 사용하여 정의한다. VV의 주어진 basis에 대해 Φ\Phitransformation matrix A\boldsymbol{A}로 설명될 수 있다. 그러면 Φ\PhitraceA\boldsymbol{A}trace이다. VV의 다른 basis에 대해, Φ\Phi의 해당 transformation matrix B\boldsymbol{B}는 적절한 S\boldsymbol{S}에 대해 S1AS\boldsymbol{S}^{-1} \boldsymbol{A} \boldsymbol{S} 형태의 basis change를 통해 얻을 수 있다 (섹션 2.7.2 참조). Φ\Phi의 해당 trace에 대해 다음이 의미한다.

tr(B)=tr(S1AS)=(4.19)tr(ASS1)=tr(A)\operatorname{tr}(\boldsymbol{B})=\operatorname{tr}\left(\boldsymbol{S}^{-1} \boldsymbol{A} \boldsymbol{S}\right) \stackrel{(4.19)}{=} \operatorname{tr}\left(\boldsymbol{A} \boldsymbol{S} \boldsymbol{S}^{-1}\right)=\operatorname{tr}(\boldsymbol{A})

따라서 선형 사상의 행렬 표현은 basis에 의존하지만, 선형 사상 Φ\Phitracebasis에 독립적이다.

이 섹션에서는 square matrix를 특징짓는 함수로서 determinanttrace를 다루었다. Determinanttrace에 대한 이해를 종합하여, 이제 행렬 A\boldsymbol{A}polynomial로 설명하는 중요한 방정식을 정의할 수 있으며, 이는 다음 섹션들에서 광범위하게 사용될 것이다.

정의 4.5 (Characteristic Polynomial). λR\lambda \in \mathbb{R}square matrix ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}에 대해

pA(λ):=det(AλI)=c0+c1λ+c2λ2++cn1λn1+(1)nλn\begin{aligned} p_{\boldsymbol{A}}(\lambda) & :=\operatorname{det}(\boldsymbol{A}-\lambda \boldsymbol{I}) \\ & =c_{0}+c_{1} \lambda+c_{2} \lambda^{2}+\cdots+c_{n-1} \lambda^{n-1}+(-1)^{n} \lambda^{n} \end{aligned}

c0,,cn1Rc_{0}, \ldots, c_{n-1} \in \mathbb{R}A\boldsymbol{A}characteristic polynomial이다. 특히,

초안 (2021-07-29) "Mathematics for Machine Learning". 피드백: https://mml-book.com.

c0=det(A),cn1=(1)n1tr(A).\begin{aligned} c_{0} & =\operatorname{det}(\boldsymbol{A}), \\ c_{n-1} & =(-1)^{n-1} \operatorname{tr}(\boldsymbol{A}) . \end{aligned}

Characteristic polynomial (4.22a)을 통해 다음 섹션에서 다룰 eigenvalueseigenvectors를 계산할 수 있다.

4.2 Eigenvalues and Eigenvectors

이제 행렬과 그에 관련된 선형 매핑을 특징화하는 새로운 방법을 알아볼 것이다. 2.7.1절에서 모든 선형 매핑은 정렬된 기저(ordered basis)가 주어지면 고유한 **변환 행렬(transformation matrix)**을 가진다는 것을 상기하자. 우리는 "eigen" 분석을 수행하여 선형 매핑과 그에 관련된 변환 행렬을 해석할 수 있다. 곧 알게 되겠지만, 선형 매핑의 **고유값(eigenvalue)**은 특별한 벡터 집합인 **고유 벡터(eigenvector)**가 선형 매핑에 의해 어떻게 변환되는지를 알려줄 것이다.

정의 4.6. ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}가 정방 행렬이라고 하자. 이때 λR\lambda \in \mathbb{R}A\boldsymbol{A}의 고유값이고 xRn\{0}\boldsymbol{x} \in \mathbb{R}^{n} \backslash\{\mathbf{0}\}A\boldsymbol{A}의 해당 고유 벡터이다. 만약 다음 식이 성립한다면:

Ax=λx.\boldsymbol{A} \boldsymbol{x}=\lambda \boldsymbol{x} .

우리는 (4.25)를 **고유값 방정식(eigenvalue equation)**이라고 부른다.

비고. 선형 대수 문헌 및 소프트웨어에서는 고유값을 내림차순으로 정렬하는 것이 일반적인 관례이다. 따라서 가장 큰 고유값과 그에 관련된 고유 벡터를 첫 번째 고유값 및 그에 관련된 고유 벡터라고 부르고, 두 번째로 큰 고유값을 두 번째 고유값 및 그에 관련된 고유 벡터라고 부르는 식이다. 그러나 교과서나 출판물에서는 순서에 대한 개념이 다르거나 없을 수도 있다. 이 책에서는 명시적으로 언급되지 않는 한 순서를 가정하지 않을 것이다.

다음 진술들은 동등하다:

  • λ\lambdaARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}의 고유값이다.
  • Ax=λx\boldsymbol{A} \boldsymbol{x}=\lambda \boldsymbol{x}를 만족하는 xRn\{0}\boldsymbol{x} \in \mathbb{R}^{n} \backslash\{\mathbf{0}\}가 존재한다. 또는 동등하게, (AλIn)x=0(\boldsymbol{A} - \lambda \boldsymbol{I}_{n}) \boldsymbol{x}=\mathbf{0}가 자명하지 않은 해, 즉 x0\boldsymbol{x} \neq \mathbf{0}를 가질 수 있다.
  • rk(AλIn)<n\operatorname{rk}\left(\boldsymbol{A}-\lambda \boldsymbol{I}_{n}\right)<n.
  • det(AλIn)=0\operatorname{det}\left(\boldsymbol{A}-\lambda \boldsymbol{I}_{n}\right)=0.

정의 4.7 (Collinearity와 Codirection). 같은 방향을 가리키는 두 벡터를 codirected라고 한다. 두 벡터가 같은 방향 또는 반대 방향을 가리키면 collinear라고 한다.

비고 (고유 벡터의 비고유성). 만약 x\boldsymbol{x}가 고유값 λ\lambda에 해당하는 A\boldsymbol{A}의 고유 벡터라면, cR\{0}c \in \mathbb{R} \backslash\{0\}인 모든 cc에 대해 cxc \boldsymbol{x}도 같은 고유값 λ\lambda를 갖는 A\boldsymbol{A}의 고유 벡터이다. 왜냐하면

A(cx)=cAx=cλx=λ(cx).\boldsymbol{A}(c \boldsymbol{x})=c \boldsymbol{A} \boldsymbol{x}=c \lambda \boldsymbol{x}=\lambda(c \boldsymbol{x}) .

Eigen은 독일어로 "characteristic", "self", 또는 "own"을 의미한다.

따라서 x\boldsymbol{x}와 collinear한 모든 벡터 또한 A\boldsymbol{A}의 고유 벡터이다.

정리 4.8. λR\lambda \in \mathbb{R}ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}의 고유값인 것은 λ\lambdaA\boldsymbol{A}특성 다항식(characteristic polynomial) pA(λ)p_{\boldsymbol{A}}(\lambda)의 근인 것과 필요충분조건이다.

정의 4.9. 정방 행렬 A\boldsymbol{A}가 고유값 λi\lambda_{i}를 가진다고 하자. λi\lambda_{i}의 **대수적 중복도(algebraic multiplicity)**는 특성 다항식에서 해당 근이 나타나는 횟수이다.

정의 4.10 (Eigenspace와 Eigenspectrum). ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}에 대해, 고유값 λ\lambda에 해당하는 A\boldsymbol{A}의 모든 고유 벡터 집합은 Rn\mathbb{R}^{n}의 부분 공간을 형성하며, 이를 λ\lambda에 대한 A\boldsymbol{A}의 **고유 공간(eigenspace)**이라고 하고 EλE_{\lambda}로 표기한다. A\boldsymbol{A}의 모든 고유값 집합을 고유 스펙트럼(eigenspectrum) 또는 단순히 **스펙트럼(spectrum)**이라고 한다.

만약 λ\lambdaARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}의 고유값이라면, 해당 고유 공간 EλE_{\lambda}는 동차 선형 방정식 시스템 (AλI)x=0(\boldsymbol{A}-\lambda \boldsymbol{I}) \boldsymbol{x}=\mathbf{0}의 해 공간이다. 기하학적으로, 0이 아닌 고유값에 해당하는 고유 벡터는 선형 매핑에 의해 늘어나는 방향을 가리킨다. 고유값은 늘어나는 비율을 나타내는 요소이다. 만약 고유값이 음수이면, 늘어나는 방향이 뒤집힌다.

Example 4.4 (The Case of the Identity Matrix)

항등 행렬 IRn×n\boldsymbol{I} \in \mathbb{R}^{n \times n}의 특성 다항식은 pI(λ)=det(IλI)=(1λ)n=0p_{\boldsymbol{I}}(\lambda)= \operatorname{det}(\boldsymbol{I}-\lambda \boldsymbol{I})=(1-\lambda)^{n}=0이며, 이는 λ=1\lambda=1이라는 하나의 고유값만 nn번 발생한다. 또한, 모든 벡터 xRn\{0}\boldsymbol{x} \in \mathbb{R}^{n} \backslash\{\mathbf{0}\}에 대해 Ix=λx=1x\boldsymbol{I} \boldsymbol{x}=\lambda \boldsymbol{x}=1 \boldsymbol{x}가 성립한다. 이 때문에 항등 행렬의 유일한 고유 공간(eigenspace) E1E_{1}nn차원을 가지며, Rn\mathbb{R}^{n}의 모든 nn개의 표준 기저 벡터는 I\boldsymbol{I}의 고유 벡터이다.

고유값과 고유 벡터에 관한 유용한 속성은 다음과 같다:

  • 행렬 A\boldsymbol{A}와 그 전치 행렬 A\boldsymbol{A}^{\top}는 동일한 고유값을 가지지만, 반드시 동일한 고유 벡터를 가지는 것은 아니다.
  • 고유 공간 EλE_{\lambda}AλI\boldsymbol{A}-\lambda \boldsymbol{I}의 **영 공간(null space)**이다. 그 이유는 다음과 같다:
Ax=λxAxλx=0(AλI)x=0xker(AλI).\begin{aligned} \boldsymbol{A} \boldsymbol{x}=\lambda \boldsymbol{x} & \Longleftrightarrow \boldsymbol{A} \boldsymbol{x}-\lambda \boldsymbol{x}=\mathbf{0} \\ & \Longleftrightarrow(\boldsymbol{A}-\lambda \boldsymbol{I}) \boldsymbol{x}=\mathbf{0} \Longleftrightarrow \boldsymbol{x} \in \operatorname{ker}(\boldsymbol{A}-\lambda \boldsymbol{I}) . \end{aligned}
  • 닮은 행렬(similar matrices)(정의 2.22 참조)은 동일한 고유값을 가진다. 따라서 선형 사상 Φ\Phi의 고유값은 변환 행렬의 기저 선택과 무관하다. 이로 인해 고유값은 행렬식(determinant) 및 **대각합(trace)**과 함께 선형 사상의 주요 특성 매개변수가 되는데, 이는 모두 기저 변경에 대해 불변하기 때문이다.
  • 대칭, 양의 정부호 행렬은 항상 양의 실수 고유값을 가진다.

Example 4.5 (Computing Eigenvalues, Eigenvectors, and Eigenspaces)

2×22 \times 2 행렬 A\boldsymbol{A}의 고유값(eigenvalue)과 고유벡터(eigenvector)를 찾아보자.

A=[4213]\boldsymbol{A}=\left[\begin{array}{ll} 4 & 2 \\ 1 & 3 \end{array}\right]

1단계: 특성 다항식(Characteristic Polynomial). A\boldsymbol{A}의 고유벡터 x0\boldsymbol{x} \neq \mathbf{0}와 고유값 λ\lambda의 정의에 따르면, Ax=λx\boldsymbol{A} \boldsymbol{x}=\lambda \boldsymbol{x}, 즉 (AλI)x=0(\boldsymbol{A}-\lambda \boldsymbol{I}) \boldsymbol{x}=\mathbf{0}을 만족하는 벡터가 존재한다. x0\boldsymbol{x} \neq \mathbf{0}이므로, 이는 AλI\boldsymbol{A}-\lambda \boldsymbol{I}의 커널(null space)이 0\mathbf{0} 외에 다른 원소를 포함해야 함을 의미한다. 이는 AλI\boldsymbol{A}-\lambda \boldsymbol{I}역행렬을 갖지 않으며, 따라서 det(AλI)=0\operatorname{det}(\boldsymbol{A}-\lambda \boldsymbol{I})=0임을 뜻한다. 그러므로 고유값을 찾기 위해 특성 다항식 (4.22a)의 근을 계산해야 한다.

2단계: 고유값(Eigenvalues). 특성 다항식은 다음과 같다.

pA(λ)=det(AλI)=det([4213][λ00λ])=4λ213λ=(4λ)(3λ)21\begin{aligned} p_{\boldsymbol{A}}(\lambda) & =\operatorname{det}(\boldsymbol{A}-\lambda \boldsymbol{I}) \\ & =\operatorname{det}\left(\left[\begin{array}{cc} 4 & 2 \\ 1 & 3 \end{array}\right]-\left[\begin{array}{cc} \lambda & 0 \\ 0 & \lambda \end{array}\right]\right)=\left|\begin{array}{cc} 4-\lambda & 2 \\ 1 & 3-\lambda \end{array}\right| \\ & =(4-\lambda)(3-\lambda)-2 \cdot 1 \end{aligned}

특성 다항식을 인수분해하면 다음과 같다.

p(λ)=(4λ)(3λ)21=107λ+λ2=(2λ)(5λ)p(\lambda)=(4-\lambda)(3-\lambda)-2 \cdot 1=10-7 \lambda+\lambda^{2}=(2-\lambda)(5-\lambda)

이를 통해 근 λ1=2\lambda_{1}=2λ2=5\lambda_{2}=5를 얻는다.

3단계: 고유벡터(Eigenvectors) 및 고유공간(Eigenspaces). 이 고유값에 해당하는 고유벡터를 찾기 위해 다음을 만족하는 벡터 x\boldsymbol{x}를 살펴본다.

[4λ213λ]x=0\left[\begin{array}{cc} 4-\lambda & 2 \\ 1 & 3-\lambda \end{array}\right] \boldsymbol{x}=\mathbf{0}

λ=5\lambda=5인 경우 다음을 얻는다.

[452135][x1x2]=[1212][x1x2]=0\left[\begin{array}{cc} 4-5 & 2 \\ 1 & 3-5 \end{array}\right]\left[\begin{array}{l} x_{1} \\ x_{2} \end{array}\right]=\left[\begin{array}{cc} -1 & 2 \\ 1 & -2 \end{array}\right]\left[\begin{array}{l} x_{1} \\ x_{2} \end{array}\right]=\mathbf{0}

이 동차 시스템을 풀면 해 공간은 다음과 같다.

E5=span[[21]E_{5}=\operatorname{span}\left[\left[\begin{array}{l} 2 \\ 1 \end{array}\right]\right.

이 고유공간은 단일 기저 벡터를 가지므로 1차원이다.
마찬가지로, λ=2\lambda=2에 대한 고유벡터는 다음 동차 연립방정식을 풀어 찾는다.

[422132]x=[2211]x=0\left[\begin{array}{cc} 4-2 & 2 \\ 1 & 3-2 \end{array}\right] \boldsymbol{x}=\left[\begin{array}{cc} 2 & 2 \\ 1 & 1 \end{array}\right] \boldsymbol{x}=\mathbf{0}

기하적 중복도(geometric multiplicity)

기하학에서, 축에 평행한 이러한 유형의 전단(shearing)의 면적 보존 특성은 평행사변형에 대한 카발리에리의 등면적 원리(Cavalieri's principle of equal areas)로도 알려져 있다 (Katz, 2004).

이는 x2=x1x_{2}=-x_{1}인 모든 벡터 x=[x1x2]\boldsymbol{x}=\left[\begin{array}{l}x_{1} \\ x_{2}\end{array}\right], 예를 들어 [11]\left[\begin{array}{c}1 \\ -1\end{array}\right]이 고유값 2에 해당하는 고유벡터임을 의미한다. 해당 고유공간은 다음과 같이 주어진다.

E2=span[[11]E_{2}=\operatorname{span}\left[\left[\begin{array}{c} 1 \\ -1 \end{array}\right]\right.

예제 4.5의 두 고유공간 E5E_{5}E2E_{2}는 각각 단일 벡터에 의해 생성되므로 1차원이다. 그러나 다른 경우에는 여러 개의 동일한 고유값을 가질 수 있으며(정의 4.9 참조), 고유공간은 1차원보다 클 수 있다.
정의 4.11. λi\lambda_{i}가 정방 행렬 A\boldsymbol{A}의 고유값이라고 하자. 그러면 λi\lambda_{i}의 **기하적 중복도(geometric multiplicity)**는 λi\lambda_{i}와 관련된 선형 독립 고유벡터의 개수이다. 다시 말해, λi\lambda_{i}와 관련된 고유벡터에 의해 생성되는 고유공간의 차원이다.

비고. 특정 고유값의 기하적 중복도는 최소한 1이어야 하는데, 모든 고유값은 적어도 하나의 관련 고유벡터를 가지기 때문이다. 고유값의 기하적 중복도는 대수적 중복도를 초과할 수 없지만, 더 낮을 수도 있다.

Example 4.6

행렬 A=[2102]\boldsymbol{A}=\left[\begin{array}{ll}2 & 1 \\ 0 & 2\end{array}\right]는 두 개의 중복된 고유값 λ1=λ2=2\lambda_{1}=\lambda_{2}=2를 가지며, 대수적 중복도는 2이다. 그러나 이 고유값은 단 하나의 고유 단위 고유벡터 x1=[10]\boldsymbol{x}_{1}=\left[\begin{array}{l}1 \\ 0\end{array}\right]만을 가지므로, 기하적 중복도는 1이다.

Graphical Intuition in Two Dimensions

서로 다른 선형 매핑을 사용하여 행렬식(determinant), 고유 벡터(eigenvector), **고유값(eigenvalue)**에 대한 직관을 얻어보자. 그림 4.4는 원점을 중심으로 하는 정사각형 격자 점들에 대한 다섯 가지 변환 행렬 A1,,A5\boldsymbol{A}_{1}, \ldots, \boldsymbol{A}_{5}와 그 영향을 보여준다.

  • A1=[12002]\boldsymbol{A}_{1}=\left[\begin{array}{cc}\frac{1}{2} & 0 \\ 0 & 2\end{array}\right]. 두 고유 벡터의 방향은 R2\mathbb{R}^{2}표준 기저 벡터, 즉 두 주축에 해당한다. 수직축은 2배 확장되고(고유값 λ1=2\lambda_{1}=2), 수평축은 12\frac{1}{2}배 압축된다(고유값 λ2=12\lambda_{2}=\frac{1}{2}). 이 매핑은 면적을 보존한다(det(A1)=1=212\operatorname{det}\left(\boldsymbol{A}_{1}\right)=1=2 \cdot \frac{1}{2}).
  • A2=[11201]\boldsymbol{A}_{2}=\left[\begin{array}{cc}1 & \frac{1}{2} \\ 0 & 1\end{array}\right]는 **전단 매핑(shearing mapping)**에 해당한다. 즉, 수직축의 양의 절반에 있는 점들은 오른쪽으로, 음의 절반에 있는 점들은 왼쪽으로 수평축을 따라 전단한다. 이 매핑은 면적을 보존한다(det(A2)=1\operatorname{det}\left(\boldsymbol{A}_{2}\right)=1). 고유값 λ1=1=λ2\lambda_{1}=1=\lambda_{2}는 중복되며, 고유 벡터는 동일 선상에 있다(여기서는 강조를 위해 두 개의 반대 방향으로 그려져 있다). 이는 매핑이 한 방향(수평축)으로만 작용함을 나타낸다.

λ1=(0.870.5j)\lambda_{1}=(0.87-0.5 \mathrm{j}) λ2=(0.87+0.5j)\lambda_{2}=(0.87+0.5 \mathrm{j}) det(A)=1.0\operatorname{det}(\boldsymbol{A})=1.0

  • A3=[cos(π6)sin(π6)sin(π6)cos(π6)]=12[3113]\boldsymbol{A}_{3}=\left[\begin{array}{cc}\cos \left(\frac{\pi}{6}\right) & -\sin \left(\frac{\pi}{6}\right) \\ \sin \left(\frac{\pi}{6}\right) & \cos \left(\frac{\pi}{6}\right)\end{array}\right]=\frac{1}{2}\left[\begin{array}{cc}\sqrt{3} & -1 \\ 1 & \sqrt{3}\end{array}\right]. 행렬 A3\boldsymbol{A}_{3}는 점들을 반시계 방향으로 π6rad=30\frac{\pi}{6} \mathrm{rad}=30^{\circ} 회전시키며, 복소 고유값만 가진다. 이는 매핑이 회전임을 반영한다(따라서 고유 벡터는 그려져 있지 않다). 회전은 부피를 보존해야 하므로 행렬식은 1이다. 회전에 대한 자세한 내용은 섹션 3.9를 참조한다.
  • A4=[1111]\boldsymbol{A}_{4}=\left[\begin{array}{cc}1 & -1 \\ -1 & 1\end{array}\right]는 2차원 도메인을 1차원으로 축소하는 표준 기저에서의 매핑을 나타낸다. 하나의 고유값이 0이므로, 이 매핑은 2차원 공간을 1차원 공간으로 축소한다.

Figure 4.4

행렬식(Determinant)과 고유공간(Eigenspaces)

다섯 가지 선형 매핑과 그에 상응하는 변환 행렬 AiR2×2\boldsymbol{A}_{i} \in \mathbb{R}^{2 \times 2}에 대한 개요. 400개의 색상으로 구분된 점 xR2\boldsymbol{x} \in \mathbb{R}^{2} (왼쪽 열)을 목표 점 Aix\boldsymbol{A}_{i} \boldsymbol{x} (오른쪽 열)으로 투영한다. 가운데 열은 첫 번째 **고유벡터(eigenvector)**가 해당 고유값(eigenvalue) λ1\lambda_{1}에 의해 늘어난 모습과 두 번째 고유벡터가 고유값 λ2\lambda_{2}에 의해 늘어난 모습을 보여준다. 각 행은 표준 기저(standard basis)에 대한 다섯 가지 변환 행렬 Ai\boldsymbol{A}_{i} 중 하나의 효과를 나타낸다.

값이 0일 때, λ1=0\lambda_{1}=0에 해당하는 (파란색) 고유벡터 방향의 공간은 붕괴되는 반면, 직교하는 (빨간색) 고유벡터는 공간을 λ2=2\lambda_{2}=2만큼 늘린다. 따라서 이미지의 넓이는 0이 된다.

  • A5=[112121]\boldsymbol{A}_{5}=\left[\begin{array}{cc}1 & \frac{1}{2} \\ \frac{1}{2} & 1\end{array}\right]shear-and-stretch 매핑으로, det(A5)=34|\operatorname{det}(\boldsymbol{A}_{5})|=\frac{3}{4}이므로 공간을 75%만큼 스케일링한다. 이 매핑은 λ2\lambda_{2}의 (빨간색) 고유벡터를 따라 공간을 1.5배 늘리고, 직교하는 (파란색) 고유벡터를 따라 0.5배 압축한다.

Example 4.7 (Eigenspectrum of a Biological Neural Network)

Figure 4.5 Caenorhabditis elegans 신경망 (Kaiser and Hilgetag, 2006). (a) 대칭화된 연결 행렬; (b) Eigenspectrum.

(a) Connectivity matrix.

(b) Eigenspectrum.

네트워크 데이터를 분석하고 학습하는 방법은 머신러닝 방법의 필수적인 구성 요소이다. 네트워크를 이해하는 핵심은 네트워크 노드 간의 연결성, 특히 두 노드가 서로 연결되어 있는지 여부이다. 데이터 과학 애플리케이션에서는 이러한 연결성 데이터를 포착하는 행렬을 연구하는 것이 종종 유용하다.

우리는 선충 C.Elegans의 완전한 신경망에 대한 연결성/인접 행렬 AR277×277\boldsymbol{A} \in \mathbb{R}^{277 \times 277}을 구축한다. 각 행/열은 이 선충 뇌의 277개 뉴런 중 하나를 나타낸다. 연결성 행렬 A\boldsymbol{A}는 뉴런 ii가 시냅스를 통해 뉴런 jj와 통신하면 aij=1a_{i j}=1이고, 그렇지 않으면 aij=0a_{i j}=0의 값을 갖는다. 연결성 행렬은 대칭이 아니므로, 고유값(eigenvalues)이 실수 값을 갖지 않을 수 있다. 따라서 우리는 연결성 행렬의 대칭화된 버전인 Asym :=A+A\boldsymbol{A}_{\text {sym }}:=\boldsymbol{A}+\boldsymbol{A}^{\top}를 계산한다. 이 새로운 행렬 Asym \boldsymbol{A}_{\text {sym }}은 Figure 4.5(a)에 나와 있으며, 연결 방향에 관계없이 두 뉴런이 연결된 경우에만 0이 아닌 값 aija_{i j}를 갖는다(흰색 픽셀). Figure 4.5(b)에서는 Asym \boldsymbol{A}_{\text {sym }}의 해당 eigenspectrum을 보여준다. 가로축은 내림차순으로 정렬된 고유값의 인덱스를 나타낸다. 세로축은 해당 고유값을 나타낸다. 이 eigenspectrum의 S자형 모양은 많은 생물학적 신경망에서 전형적이다. 이에 대한 근본적인 메커니즘은 활발한 신경과학 연구 분야이다.

정리 4.12. nn개의 서로 다른 고유값 λ1,,λn\lambda_{1}, \ldots, \lambda_{n}을 갖는 행렬 ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}의 고유 벡터 x1,,xn\boldsymbol{x}_{1}, \ldots, \boldsymbol{x}_{n}은 선형 독립이다.

이 정리는 nn개의 서로 다른 고유값을 갖는 행렬의 고유 벡터가 Rn\mathbb{R}^{n}의 기저를 형성한다는 것을 나타낸다.

정의 4.13. 정방 행렬 ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}nn개 미만의 선형 독립 고유 벡터를 가질 경우 **결함(defective)**이 있다고 한다.

결함이 없는 행렬 ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}은 반드시 nn개의 서로 다른 고유값을 요구하지는 않지만, 고유 벡터가 Rn\mathbb{R}^{n}의 기저를 형성해야 한다. 결함이 있는 행렬의 고유 공간을 살펴보면, 고유 공간의 차원 합이 nn보다 작다는 것을 알 수 있다. 특히, 결함이 있는 행렬은 대수적 중복도(algebraic multiplicity) m>1m>1을 가지면서 기하적 중복도(geometric multiplicity)가 mm보다 작은 고유값 λi\lambda_{i}를 적어도 하나 갖는다. 비고. 결함이 있는 행렬은 nn개의 서로 다른 고유값을 가질 수 없다. 왜냐하면 서로 다른 고유값은 선형 독립 고유 벡터를 갖기 때문이다 (정리 4.12).

정리 4.14. 행렬 ARm×n\boldsymbol{A} \in \mathbb{R}^{m \times n}이 주어졌을 때, 다음을 정의함으로써 항상 대칭, 양의 준정부호 행렬 SRn×n\boldsymbol{S} \in \mathbb{R}^{n \times n}을 얻을 수 있다.

S:=AA\boldsymbol{S}:=\boldsymbol{A}^{\top} \boldsymbol{A}

비고. 만약 rk(A)=n\operatorname{rk}(\boldsymbol{A})=n이면, S:=AA\boldsymbol{S}:=\boldsymbol{A}^{\top} \boldsymbol{A}는 대칭, 양의 정부호이다.

정리 4.14가 왜 성립하는지 이해하는 것은 대칭화된 행렬을 어떻게 사용할 수 있는지에 대한 통찰력을 제공한다: 대칭성은 S=S\boldsymbol{S}=\boldsymbol{S}^{\top}를 요구하며, (4.36)을 대입하면 S=AA=A(A)=(AA)=S\boldsymbol{S}=\boldsymbol{A}^{\top} \boldsymbol{A}=\boldsymbol{A}^{\top}\left(\boldsymbol{A}^{\top}\right)^{\top}=\left(\boldsymbol{A}^{\top} \boldsymbol{A}\right)^{\top}=\boldsymbol{S}^{\top}를 얻는다. 또한, 양의 준정부호성(섹션 3.2.3)은 xSx0\boldsymbol{x}^{\top} \boldsymbol{S} \boldsymbol{x} \geqslant 0를 요구하며, (4.36)을 대입하면 xSx=xAAx=(xA)(Ax)=(Ax)(Ax)0\boldsymbol{x}^{\top} \boldsymbol{S} \boldsymbol{x}=\boldsymbol{x}^{\top} \boldsymbol{A}^{\top} \boldsymbol{A} \boldsymbol{x}=\left(\boldsymbol{x}^{\top} \boldsymbol{A}^{\top}\right)(\boldsymbol{A} \boldsymbol{x})= (\boldsymbol{A} \boldsymbol{x})^{\top}(\boldsymbol{A} \boldsymbol{x}) \geqslant 0를 얻는다. 이는 내적(dot product)이 제곱의 합(그 자체로 음수가 아님)을 계산하기 때문이다.

정리 4.15 (Spectral Theorem). ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}이 대칭이면, 해당 벡터 공간 VV의 정규 직교 기저(orthonormal basis)가 A\boldsymbol{A}의 고유 벡터로 구성되며, 각 고유값은 실수이다.

Spectral Theorem의 직접적인 함의는 대칭 행렬 A\boldsymbol{A}eigendecomposition이 존재하며(실수 고유값을 가짐), A=PDP\boldsymbol{A}=\boldsymbol{P} \boldsymbol{D} \boldsymbol{P}^{\top}와 같이 고유 벡터의 ONB를 찾을 수 있다는 것이다. 여기서 D\boldsymbol{D}는 대각 행렬이고 P\boldsymbol{P}의 열은 고유 벡터를 포함한다.

Example 4.8

다음 행렬을 고려해 보자.

A=[322232223]\boldsymbol{A}=\left[\begin{array}{lll} 3 & 2 & 2 \\ 2 & 3 & 2 \\ 2 & 2 & 3 \end{array}\right]

A\boldsymbol{A}의 특성 다항식은 다음과 같다.

pA(λ)=(λ1)2(λ7),p_{\boldsymbol{A}}(\lambda)=-(\lambda-1)^{2}(\lambda-7),

따라서 고유값 λ1=1\lambda_{1}=1λ2=7\lambda_{2}=7을 얻으며, 여기서 λ1\lambda_{1}은 중복된 고유값이다. 고유 벡터를 계산하는 표준 절차에 따라 다음 고유 공간을 얻는다.

E1=span[[110]=:x1,[101]=:x2],E7=span[111].E_{1}=\operatorname{span}[\underbrace{\left[\begin{array}{c} -1 \\ 1 \\ 0 \end{array}\right]}_{=: \boldsymbol{x}_{1}}, \underbrace{\left[\begin{array}{c} -1 \\ 0 \\ 1 \end{array}\right]}_{=: \boldsymbol{x}_{2}}], \quad E_{7}=\operatorname{span}\left[\begin{array}{l} 1 \\ 1 \\ 1 \end{array}\right] .

x3\boldsymbol{x}_{3}x1\boldsymbol{x}_{1}x2\boldsymbol{x}_{2} 모두에 직교함을 알 수 있다. 그러나 x1x2=10\boldsymbol{x}_{1}^{\top} \boldsymbol{x}_{2}= 1 \neq 0이므로 이들은 직교하지 않는다. 스펙트럼 정리(Spectral Theorem) (정리 4.15)는 직교 기저가 존재한다고 명시하지만, 우리가 가진 기저는 직교하지 않는다. 하지만 우리는 직교 기저를 구성할 수 있다.

이러한 기저를 구성하기 위해, x1,x2\boldsymbol{x}_{1}, \boldsymbol{x}_{2}가 동일한 고유값 λ\lambda에 연관된 고유 벡터라는 사실을 활용한다. 따라서 임의의 α,βR\alpha, \beta \in \mathbb{R}에 대해 다음이 성립한다.

A(αx1+βx2)=Ax1α+Ax2β=λ(αx1+βx2),\boldsymbol{A}\left(\alpha \boldsymbol{x}_{1}+\beta \boldsymbol{x}_{2}\right)=\boldsymbol{A} \boldsymbol{x}_{1} \alpha+\boldsymbol{A} \boldsymbol{x}_{2} \beta=\lambda\left(\alpha \boldsymbol{x}_{1}+\beta \boldsymbol{x}_{2}\right),

즉, x1\boldsymbol{x}_{1}x2\boldsymbol{x}_{2}의 모든 선형 결합 또한 λ\lambda에 연관된 A\boldsymbol{A}의 고유 벡터이다. 그램-슈미트 알고리즘(Gram-Schmidt algorithm) (섹션 3.8.3)은 이러한 선형 결합을 사용하여 기저 벡터 집합으로부터 직교/정규 직교 기저를 반복적으로 구성하는 방법이다. 따라서 x1\boldsymbol{x}_{1}x2\boldsymbol{x}_{2}가 직교하지 않더라도, 그램-슈미트 알고리즘을 적용하여 서로 (그리고 x3\boldsymbol{x}_{3}에) 직교하는 λ1=1\lambda_{1}=1에 연관된 고유 벡터를 찾을 수 있다. 이 예시에서는 다음을 얻게 될 것이다.

x1=[110],x2=12[112],\boldsymbol{x}_{1}^{\prime}=\left[\begin{array}{c} -1 \\ 1 \\ 0 \end{array}\right], \quad \boldsymbol{x}_{2}^{\prime}=\frac{1}{2}\left[\begin{array}{c} -1 \\ -1 \\ 2 \end{array}\right],

이들은 서로 직교하고, x3\boldsymbol{x}_{3}에 직교하며, λ1=1\lambda_{1}=1에 연관된 A\boldsymbol{A}의 고유 벡터이다.

고유값과 고유 벡터에 대한 논의를 마치기 전에, 이러한 행렬 특성들을 **행렬식(determinant)**과 **대각합(trace)**의 개념과 연결하는 것이 유용하다.

정리 4.16. 행렬 ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}의 행렬식은 그 고유값들의 곱이다. 즉,

det(A)=i=1nλi,\operatorname{det}(\boldsymbol{A})=\prod_{i=1}^{n} \lambda_{i},

여기서 λiC\lambda_{i} \in \mathbb{C}A\boldsymbol{A}의 (중복될 수 있는) 고유값이다.

정리 4.17. 행렬 ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}의 대각합은 그 고유값들의 합이다. 즉,

tr(A)=i=1nλi,\operatorname{tr}(\boldsymbol{A})=\sum_{i=1}^{n} \lambda_{i},

여기서 λiC\lambda_{i} \in \mathbb{C}A\boldsymbol{A}의 (중복될 수 있는) 고유값이다. 이 두 정리에 대한 기하학적 직관을 제공해 보자. 두 개의 선형 독립적인 고유 벡터 x1,x2\boldsymbol{x}_{1}, \boldsymbol{x}_{2}를 갖는 행렬 AR2×2\boldsymbol{A} \in \mathbb{R}^{2 \times 2}를 고려해 보자. 이 예시에서는 (x1,x2\boldsymbol{x}_{1}, \boldsymbol{x}_{2})가 R2\mathbb{R}^{2}의 ONB(정규 직교 기저)라고 가정하여, 이들이 직교하고 이들이 이루는 정사각형의 넓이가 1이라고 가정한다. 그림 4.6을 참조하라. 섹션 4.1에서 우리는 행렬식이 변환 A\boldsymbol{A}에 따른 단위 정사각형의 넓이 변화를 계산한다는 것을 알고 있다. 이 예시에서는 넓이 변화를 명시적으로 계산할 수 있다: 고유 벡터를 A\boldsymbol{A}를 사용하여 매핑하면 벡터 v1=Ax1=λ1x1\boldsymbol{v}_{1}=\boldsymbol{A} \boldsymbol{x}_{1}=\lambda_{1} \boldsymbol{x}_{1}v2=Ax2=λ2x2\boldsymbol{v}_{2}=\boldsymbol{A} \boldsymbol{x}_{2}=\lambda_{2} \boldsymbol{x}_{2}를 얻는다. 즉, 새로운 벡터 vi\boldsymbol{v}_{i}는 고유 벡터 xi\boldsymbol{x}_{i}의 스케일된 버전이며, 스케일링 인자는 해당 고유값 λi\lambda_{i}이다. v1,v2\boldsymbol{v}_{1}, \boldsymbol{v}_{2}는 여전히 직교하며, 이들이 이루는 직사각형의 넓이는 λ1λ2\left|\lambda_{1} \lambda_{2}\right|이다.

(이 예시에서) x1,x2\boldsymbol{x}_{1}, \boldsymbol{x}_{2}가 정규 직교한다고 가정하면, 단위 정사각형의 둘레를 2(1+1)2(1+1)로 직접 계산할 수 있다. A\boldsymbol{A}를 사용하여 고유 벡터를 매핑하면 둘레가 2(λ1+λ2)2\left(\left|\lambda_{1}\right|+\left|\lambda_{2}\right|\right)인 직사각형이 생성된다. 따라서 고유값의 절댓값의 합은 변환 행렬 A\boldsymbol{A}에 따라 단위 정사각형의 둘레가 어떻게 변하는지를 알려준다.

Example 4.9 (Google's PageRank - Webpages as Eigenvectors)

Google은 검색을 위한 페이지 순위를 결정하기 위해 행렬 A\boldsymbol{A}의 **최대 고유값(maximal eigenvalue)**에 해당하는 **고유 벡터(eigenvector)**를 사용한다. 1996년 래리 페이지(Larry Page)와 세르게이 브린(Sergey Brin)이 스탠퍼드 대학교에서 개발한 PageRank 알고리즘의 아이디어는 어떤 웹 페이지의 중요성은 해당 페이지로 연결되는 페이지들의 중요성으로 근사할 수 있다는 것이었다. 이를 위해 그들은 모든 웹사이트를 어떤 페이지가 어떤 페이지로 연결되는지를 보여주는 거대한 **방향성 그래프(directed graph)**로 작성한다. PageRank는 웹사이트 aia_{i}의 가중치(중요도) xi0x_{i} \geqslant 0aia_{i}를 가리키는 페이지 수를 세어 계산한다. 또한 PageRank는 aia_{i}로 연결되는 웹사이트의 중요도를 고려한다. 사용자의 탐색 행동은 이 그래프의 전이 행렬(transition matrix) A\boldsymbol{A}로 모델링되며, 이는 누군가가 어떤 (클릭) 확률로 특정 페이지에 도달할지를 알려준다.

Figure 4.6 고유값의 기하학적 해석. A\boldsymbol{A}의 고유 벡터는 해당 고유값에 의해 늘어난다. 단위 정사각형의 면적은 λ1λ2\left|\lambda_{1} \lambda_{2}\right|만큼 변하고, 둘레는 12(λ1+λ2)\frac{1}{2}\left(\left|\lambda_{1}\right|+\left|\lambda_{2}\right|\right)배만큼 변한다.

PageRank

다른 웹사이트로 이동한다. 행렬 A\boldsymbol{A}는 웹사이트의 초기 랭크/중요도 벡터 x\boldsymbol{x}에 대해 시퀀스 x,Ax,A2x,\boldsymbol{x}, \boldsymbol{A} \boldsymbol{x}, \boldsymbol{A}^{2} \boldsymbol{x}, \ldots가 벡터 x\boldsymbol{x}^{*}로 수렴하는 속성을 갖는다. 이 벡터를 PageRank라고 하며, Ax=x\boldsymbol{A} \boldsymbol{x}^{*}=\boldsymbol{x}^{*}를 만족한다. 즉, A\boldsymbol{A}의 (해당 고유값 1을 갖는) 고유벡터이다. x\boldsymbol{x}^{*}x=1\|\boldsymbol{x}^{*}\|=1이 되도록 정규화하면, 그 엔트리들을 확률로 해석할 수 있다. PageRank에 대한 더 자세한 내용과 다양한 관점은 원본 기술 보고서(Page et al., 1999)에서 찾아볼 수 있다.

4.3 Cholesky Decomposition

머신러닝에서 자주 접하는 특수한 유형의 행렬을 **분해(factorize)**하는 방법은 여러 가지가 있다. 양의 실수에서는 숫자를 동일한 구성 요소로 분해하는 제곱근 연산이 있다 (예: 9=339=3 \cdot 3). 행렬의 경우, 양의 값에 대해 제곱근과 유사한 연산을 계산할 때 주의해야 한다. 대칭 양의 정부호 행렬(symmetric, positive definite matrices, 섹션 3.2.3 참조)의 경우, 여러 제곱근 등가 연산 중에서 선택할 수 있다. **Cholesky 분해(Cholesky decomposition)/Cholesky 인수분해(Cholesky factorization)**는 대칭 양의 정부호 행렬에 대해 실용적으로 유용한 제곱근 등가 연산을 제공한다.

정리 4.18 (Cholesky 분해). 대칭 양의 정부호 행렬 A\boldsymbol{A}A=LL\boldsymbol{A}=\boldsymbol{L} \boldsymbol{L}^{\top}의 곱으로 인수분해될 수 있으며, 여기서 L\boldsymbol{L}은 양의 대각선 요소를 갖는 하삼각 행렬(lower-triangular matrix)이다:

[a11a1nan1ann]=[l110ln1lnn][l11ln10lnn].\left[\begin{array}{ccc} a_{11} & \cdots & a_{1 n} \\ \vdots & \ddots & \vdots \\ a_{n 1} & \cdots & a_{n n} \end{array}\right]=\left[\begin{array}{ccc} l_{11} & \cdots & 0 \\ \vdots & \ddots & \vdots \\ l_{n 1} & \cdots & l_{n n} \end{array}\right]\left[\begin{array}{ccc} l_{11} & \cdots & l_{n 1} \\ \vdots & \ddots & \vdots \\ 0 & \cdots & l_{n n} \end{array}\right] .

L\boldsymbol{L}A\boldsymbol{A}Cholesky factor라고 불리며, L\boldsymbol{L}은 유일하다.

Example 4.10 (Cholesky Factorization)

대칭 양의 정부호 행렬 AR3×3\boldsymbol{A} \in \mathbb{R}^{3 \times 3}를 고려해 보자. 우리는 이 행렬의 Cholesky factorization A=LL\boldsymbol{A}=\boldsymbol{L} \boldsymbol{L}^{\top}를 찾는 데 관심이 있다. 즉,

A=[a11a21a31a21a22a32a31a32a33]=LL=[l1100l21l220l31l32l33][l11l21l310l22l3200l33]\boldsymbol{A}=\left[\begin{array}{lll}a_{11} & a_{21} & a_{31} \\ a_{21} & a_{22} & a_{32} \\ a_{31} & a_{32} & a_{33}\end{array}\right]=\boldsymbol{L} \boldsymbol{L}^{\top}=\left[\begin{array}{ccc}l_{11} & 0 & 0 \\ l_{21} & l_{22} & 0 \\ l_{31} & l_{32} & l_{33}\end{array}\right]\left[\begin{array}{ccc}l_{11} & l_{21} & l_{31} \\ 0 & l_{22} & l_{32} \\ 0 & 0 & l_{33}\end{array}\right].

우변을 전개하면 다음과 같다.

A=[l112l21l11l31l11l21l11l212+l222l31l21+l32l22l31l11l31l21+l32l22l312+l322+l332].\boldsymbol{A}=\left[\begin{array}{ccc} 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{array}\right] .

(4.45)의 좌변과 (4.46)의 우변을 비교하면 대각선 요소 liil_{i i}에 간단한 패턴이 있음을 알 수 있다.

l11=a11,l22=a22l212,l33=a33(l312+l322)l_{11}=\sqrt{a_{11}}, \quad l_{22}=\sqrt{a_{22}-l_{21}^{2}}, \quad l_{33}=\sqrt{a_{33}-\left(l_{31}^{2}+l_{32}^{2}\right)}

마찬가지로 대각선 아래 요소(lijl_{i j}, 여기서 i>ji>j)에도 반복되는 패턴이 있다.

l21=1l11a21,l31=1l11a31,l32=1l22(a32l31l21).l_{21}=\frac{1}{l_{11}} a_{21}, \quad l_{31}=\frac{1}{l_{11}} a_{31}, \quad l_{32}=\frac{1}{l_{22}}\left(a_{32}-l_{31} l_{21}\right) .

이처럼 우리는 모든 대칭 양의 정부호 3×33 \times 3 행렬에 대한 Cholesky decomposition을 구성했다. 핵심적인 깨달음은 A\boldsymbol{A}의 값 aija_{i j}와 이전에 계산된 lijl_{i j} 값을 사용하여 L\boldsymbol{L}의 구성 요소 lijl_{i j}가 무엇이어야 하는지 역으로 계산할 수 있다는 것이다.

Cholesky decomposition은 머신러닝의 기반이 되는 수치 계산에서 중요한 도구이다. 여기서 대칭 양의 정부호 행렬은 자주 조작해야 하는데, 예를 들어 다변수 Gaussian 변수의 공분산 행렬(6.5절 참조)은 대칭 양의 정부호이다. 이 공분산 행렬의 Cholesky factorization을 통해 Gaussian 분포에서 샘플을 생성할 수 있다. 또한 확률 변수의 선형 변환을 수행할 수 있게 해주는데, 이는 variational auto-encoder와 같은 deep stochastic model에서 gradient를 계산할 때 많이 활용된다 (Jimenez Rezende et al., 2014; Kingma and Welling, 2014). Cholesky decomposition은 또한 determinant를 매우 효율적으로 계산할 수 있게 해준다. Cholesky decomposition A=LL\boldsymbol{A}=\boldsymbol{L} \boldsymbol{L}^{\top}가 주어지면, 우리는 det(A)=det(L)det(L)=det(L)2\operatorname{det}(\boldsymbol{A})=\operatorname{det}(\boldsymbol{L}) \operatorname{det}\left(\boldsymbol{L}^{\top}\right)=\operatorname{det}(\boldsymbol{L})^{2}임을 안다. L\boldsymbol{L}triangular matrix이므로, determinant는 단순히 대각선 항목의 곱이므로 det(A)=ilii2\operatorname{det}(\boldsymbol{A})=\prod_{i} l_{i i}^{2}이다. 따라서 많은 수치 소프트웨어 패키지는 계산 효율성을 높이기 위해 Cholesky decomposition을 사용한다.

4.4 Eigendecomposition and Diagonalization

**대각 행렬(diagonal matrix)**은 모든 비대각 요소(off-diagonal elements)가 0인 행렬을 의미하며, 다음과 같은 형태를 가진다.

D=[c100cn]\boldsymbol{D}=\left[\begin{array}{ccc} c_{1} & \cdots & 0 \\ \vdots & \ddots & \vdots \\ 0 & \cdots & c_{n} \end{array}\right]

대각 행렬은 행렬식(determinant), 거듭제곱(powers), **역행렬(inverses)**의 빠른 계산을 가능하게 한다. 행렬식은 대각 요소들의 곱이며, 행렬의 거듭제곱 Dk\boldsymbol{D}^{k}는 각 대각 요소를 kk 제곱한 값으로 주어진다. 역행렬 D1\boldsymbol{D}^{-1}은 모든 대각 요소가 0이 아닐 경우, 각 대각 요소의 역수로 구성된다.

이 섹션에서는 행렬을 대각 형태로 변환하는 방법을 다룰 것이다. 이는 섹션 2.7.2에서 논의한 **기저 변환(basis change)**과 섹션 4.2의 **고유값(eigenvalues)**의 중요한 응용이다.

두 행렬 A,D\boldsymbol{A}, \boldsymbol{D}유사하다(similar)(정의 2.22)는 것은 가역 행렬(invertible matrix) P\boldsymbol{P}가 존재하여 D=P1AP\boldsymbol{D}=\boldsymbol{P}^{-1} \boldsymbol{A P}를 만족하는 경우임을 상기하자. 더 구체적으로, 우리는 A\boldsymbol{A}의 고유값을 대각선에 포함하는 대각 행렬 D\boldsymbol{D}와 유사한 행렬 A\boldsymbol{A}를 살펴볼 것이다.

정의 4.19 (대각화 가능(Diagonalizable)). 행렬 ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}는 대각 행렬과 유사할 경우 대각화 가능하다. 즉, 가역 행렬 PRn×n\boldsymbol{P} \in \mathbb{R}^{n \times n}가 존재하여 D=P1AP\boldsymbol{D}=\boldsymbol{P}^{-1} \boldsymbol{A} \boldsymbol{P}를 만족하는 경우이다.

다음에서 우리는 행렬 ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}를 대각화하는 것이 동일한 선형 사상(linear mapping)을 다른 기저(섹션 2.6.1 참조)로 표현하는 방법임을 알게 될 것이다. 이 기저는 A\boldsymbol{A}의 **고유 벡터(eigenvectors)**로 구성된 기저가 될 것이다.

ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}라고 하고, λ1,,λn\lambda_{1}, \ldots, \lambda_{n}을 스칼라 집합, p1,,pn\boldsymbol{p}_{1}, \ldots, \boldsymbol{p}_{n}Rn\mathbb{R}^{n}의 벡터 집합이라고 하자. P:=[p1,,pn]\boldsymbol{P}:=\left[\boldsymbol{p}_{1}, \ldots, \boldsymbol{p}_{n}\right]로 정의하고, DRn×n\boldsymbol{D} \in \mathbb{R}^{n \times n}를 대각 요소가 λ1,,λn\lambda_{1}, \ldots, \lambda_{n}인 대각 행렬이라고 하자. 그러면 다음이 성립함을 보일 수 있다.

AP=PDA P=P D

이는 λ1,,λn\lambda_{1}, \ldots, \lambda_{n}A\boldsymbol{A}의 고유값이고 p1,,pn\boldsymbol{p}_{1}, \ldots, \boldsymbol{p}_{n}A\boldsymbol{A}의 해당 고유 벡터인 경우에만 성립한다.

이 명제가 성립하는 이유는 다음과 같다.

AP=A[p1,,pn]=[Ap1,,Apn]PD=[p1,,pn][λ100λn]=[λ1p1,,λnpn].\begin{aligned} \boldsymbol{A} \boldsymbol{P} & =\boldsymbol{A}\left[\boldsymbol{p}_{1}, \ldots, \boldsymbol{p}_{n}\right]=\left[\boldsymbol{A} \boldsymbol{p}_{1}, \ldots, \boldsymbol{A} \boldsymbol{p}_{n}\right] \\ \boldsymbol{P} \boldsymbol{D} & =\left[\boldsymbol{p}_{1}, \ldots, \boldsymbol{p}_{n}\right]\left[\begin{array}{lll} \lambda_{1} & & 0 \\ & \ddots & \\ 0 & & \lambda_{n} \end{array}\right]=\left[\lambda_{1} \boldsymbol{p}_{1}, \ldots, \lambda_{n} \boldsymbol{p}_{n}\right] . \end{aligned}

따라서 (4.50)은 다음을 의미한다.

Ap1=λ1p1Apn=λnpn.\begin{gathered} \boldsymbol{A} \boldsymbol{p}_{1}=\lambda_{1} \boldsymbol{p}_{1} \\ \vdots \\ \boldsymbol{A} \boldsymbol{p}_{n}=\lambda_{n} \boldsymbol{p}_{n} . \end{gathered}

그러므로 P\boldsymbol{P}의 열(columns)은 A\boldsymbol{A}의 고유 벡터여야 한다. 대각화의 정의는 PRn×n\boldsymbol{P} \in \mathbb{R}^{n \times n}가 가역 행렬이어야 함을 요구한다. 즉, P\boldsymbol{P}는 **완전 랭크(full rank)**를 가져야 한다(정리 4.3). 이는 nn개의 선형 독립(linearly independent)인 고유 벡터 p1,,pn\boldsymbol{p}_{1}, \ldots, \boldsymbol{p}_{n}가 필요하다는 것을 의미하며, 즉 pi\boldsymbol{p}_{i}들이 Rn\mathbb{R}^{n}의 기저를 형성해야 한다.

정리 4.20 (고유값 분해(Eigendecomposition)). 정방 행렬(square matrix) ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}는 다음과 같이 인수분해될 수 있다.

A=PDP1,\boldsymbol{A}=\boldsymbol{P} \boldsymbol{D} \boldsymbol{P}^{-1},

여기서 PRn×n\boldsymbol{P} \in \mathbb{R}^{n \times n}이고 D\boldsymbol{D}는 대각 요소가 A\boldsymbol{A}의 고유값인 대각 행렬이다. 이는 A\boldsymbol{A}의 고유 벡터들이 Rn\mathbb{R}^{n}의 기저를 형성하는 경우에만 성립한다.

정리 4.20은 결함이 없는(non-defective) 행렬만이 대각화될 수 있으며, P\boldsymbol{P}의 열들이 A\boldsymbol{A}nn개 고유 벡터임을 의미한다. 대칭 행렬(symmetric matrices)의 경우, 고유값 분해에 대해 훨씬 더 강력한 결과를 얻을 수 있다.

정리 4.21. 대칭 행렬 SRn×n\boldsymbol{S} \in \mathbb{R}^{n \times n}는 항상 대각화될 수 있다. 정리 4.21은 스펙트럼 정리(spectral theorem) 4.15에서 직접적으로 도출된다. 또한, 스펙트럼 정리는 Rn\mathbb{R}^{n}의 고유 벡터들로 이루어진 **정규 직교 기저(ONB)**를 찾을 수 있음을 명시한다. 이는 P\boldsymbol{P}를 직교 행렬(orthogonal matrix)로 만들어서 D=PAP\boldsymbol{D}=\boldsymbol{P}^{\top} \boldsymbol{A} \boldsymbol{P}가 되게 한다. 비고. 행렬의 **조르당 표준형(Jordan normal form)**은 결함이 있는 행렬(defective matrices)에도 적용되는 분해를 제공하지만(Lang, 1987), 이 책의 범위를 벗어난다.

Geometric Intuition for the Eigendecomposition

행렬의 고유값 분해(eigendecomposition)는 다음과 같이 해석할 수 있다 (그림 4.7 참조): A\boldsymbol{A}를 표준 기저 ei\boldsymbol{e}_{i} (파란색 화살표)에 대한 선형 매핑의 변환 행렬이라고 하자. P1\boldsymbol{P}^{-1}는 표준 기저에서 고유 기저로의 기저 변환을 수행한다. 그런 다음, 대각 행렬 D\boldsymbol{D}는 고유값 λi\lambda_{i}에 따라 이 축을 따라 벡터의 스케일을 조정한다. 마지막으로, P\boldsymbol{P}는 이 스케일링된 벡터들을 다시 표준/정규 좌표로 변환하여 λipi\lambda_{i} \boldsymbol{p}_{i}를 생성한다.

Example 4.11 (Eigendecomposition)

A=12[5225]\boldsymbol{A}=\frac{1}{2}\left[\begin{array}{cc}5 & -2 \\ -2 & 5\end{array}\right]의 **고유값 분해(eigendecomposition)**를 계산해 보자. 1단계: 고유값과 고유 벡터를 계산한다. A\boldsymbol{A}의 특성 다항식은 다음과 같다.

Figure 4.7 고유값 분해를 순차적인 변환으로 이해하는 직관. 왼쪽 위에서 왼쪽 아래로: P1\boldsymbol{P}^{-1}는 표준 기저에서 고유 기저로의 기저 변환(여기서는 R2\mathbb{R}^{2}에서 회전과 유사한 연산으로 표현됨)을 수행한다. 왼쪽 아래에서 오른쪽 아래로: D\boldsymbol{D}는 재매핑된 직교 고유 벡터를 따라 스케일링을 수행하며, 여기서는 원이 타원으로 늘어나는 것으로 묘사된다. 오른쪽 아래에서 오른쪽 위로: P\boldsymbol{P}는 기저 변환을 되돌리고(역회전으로 묘사됨) 원래 좌표계를 복원한다.

Figure 4.7은 A=[5225]\boldsymbol{A}=\left[\begin{array}{cc}5 & -2 \\ -2 & 5\end{array}\right]의 고유값 분해를 일련의 선형 변환으로 시각화한다.

det(AλI)=det([52λ1152λ])=(52λ)21=λ25λ+214=(λ72)(λ32)\begin{aligned} & \operatorname{det}(\boldsymbol{A}-\lambda \boldsymbol{I})=\operatorname{det}\left(\left[\begin{array}{cc} \frac{5}{2}-\lambda & -1 \\ -1 & \frac{5}{2}-\lambda \end{array}\right]\right) \\ & =\left(\frac{5}{2}-\lambda\right)^{2}-1=\lambda^{2}-5 \lambda+\frac{21}{4}=\left(\lambda-\frac{7}{2}\right)\left(\lambda-\frac{3}{2}\right) \end{aligned}

따라서 A\boldsymbol{A}의 고유값은 λ1=72\lambda_{1}=\frac{7}{2}λ2=32\lambda_{2}=\frac{3}{2} (특성 다항식의 근)이며, 관련 (정규화된) 고유 벡터는 다음을 통해 얻어진다.

Ap1=72p1,Ap2=32p2.\boldsymbol{A} \boldsymbol{p}_{1}=\frac{7}{2} \boldsymbol{p}_{1}, \quad \boldsymbol{A} \boldsymbol{p}_{2}=\frac{3}{2} \boldsymbol{p}_{2} .

이를 통해 다음을 얻는다.

p1=12[11],p2=12[11].\boldsymbol{p}_{1}=\frac{1}{\sqrt{2}}\left[\begin{array}{c} 1 \\ -1 \end{array}\right], \quad \boldsymbol{p}_{2}=\frac{1}{\sqrt{2}}\left[\begin{array}{l} 1 \\ 1 \end{array}\right] .

2단계: 존재 여부를 확인한다. 고유 벡터 p1,p2\boldsymbol{p}_{1}, \boldsymbol{p}_{2}R2\mathbb{R}^{2}의 기저를 형성한다. 따라서 A\boldsymbol{A}는 대각화될 수 있다. 3단계: A\boldsymbol{A}를 대각화하기 위한 행렬 P\boldsymbol{P}를 구성한다. A\boldsymbol{A}의 고유 벡터를 P\boldsymbol{P}에 모으면 다음과 같다.

P=[p1,p2]=12[1111]\boldsymbol{P}=\left[\boldsymbol{p}_{1}, \boldsymbol{p}_{2}\right]=\frac{1}{\sqrt{2}}\left[\begin{array}{cc} 1 & 1 \\ -1 & 1 \end{array}\right]

그러면 다음을 얻는다.

P1AP=[720032]=D.\boldsymbol{P}^{-1} \boldsymbol{A} \boldsymbol{P}=\left[\begin{array}{cc} \frac{7}{2} & 0 \\ 0 & \frac{3}{2} \end{array}\right]=\boldsymbol{D} .

동등하게, (이 예시에서 고유 벡터 p1\boldsymbol{p}_{1}p2\boldsymbol{p}_{2}가 ONB를 형성하므로 P1=P\boldsymbol{P}^{-1}=\boldsymbol{P}^{\top}임을 활용하여) 다음을 얻는다.

12[5225]A=12[1111]P[720032]D12[1111]P1\underbrace{\frac{1}{2}\left[\begin{array}{cc} 5 & -2 \\ -2 & 5 \end{array}\right]}_{\boldsymbol{A}}=\underbrace{\frac{1}{\sqrt{2}}\left[\begin{array}{cc} 1 & 1 \\ -1 & 1 \end{array}\right]}_{\boldsymbol{P}} \underbrace{\left[\begin{array}{cc} \frac{7}{2} & 0 \\ 0 & \frac{3}{2} \end{array}\right]}_{\boldsymbol{D}} \underbrace{\frac{1}{\sqrt{2}}\left[\begin{array}{cc} 1 & -1 \\ 1 & 1 \end{array}\right]}_{\boldsymbol{P}^{-1}}
  • 대각 행렬(diagonal matrices) D\boldsymbol{D}는 효율적으로 거듭제곱할 수 있다. 따라서 ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n} 행렬의 거듭제곱은 고유값 분해(존재하는 경우)를 통해 다음과 같이 찾을 수 있다.
Ak=(PDP1)k=PDkP1.\boldsymbol{A}^{k}=\left(\boldsymbol{P} \boldsymbol{D} \boldsymbol{P}^{-1}\right)^{k}=\boldsymbol{P} \boldsymbol{D}^{k} \boldsymbol{P}^{-1} .

Dk\boldsymbol{D}^{k}를 계산하는 것은 이 연산을 각 대각 요소에 개별적으로 적용하기 때문에 효율적이다.

  • 고유값 분해 A=PDP1\boldsymbol{A}=\boldsymbol{P} \boldsymbol{D} \boldsymbol{P}^{-1}가 존재한다고 가정하자. 그러면,
det(A)=det(PDP1)=det(P)det(D)det(P1)\operatorname{det}(\boldsymbol{A})=\operatorname{det}\left(\boldsymbol{P} \boldsymbol{D} \boldsymbol{P}^{-1}\right)=\operatorname{det}(\boldsymbol{P}) \operatorname{det}(\boldsymbol{D}) \operatorname{det}\left(\boldsymbol{P}^{-1}\right)

Draft (2021-07-29) of "Mathematics for Machine Learning". Feedback: https://mml-book.com.

=det(D)=idii=\operatorname{det}(\boldsymbol{D})=\prod_{i} d_{i i}

A\boldsymbol{A}의 **행렬식(determinant)**을 효율적으로 계산할 수 있게 한다.

고유값 분해는 **정방 행렬(square matrices)**을 필요로 한다. 일반적인 행렬에 대해서도 분해를 수행할 수 있다면 유용할 것이다. 다음 섹션에서는 더 일반적인 행렬 분해 기법인 **특이값 분해(singular value decomposition)**를 소개한다.

4.5 Singular Value Decomposition

행렬의 **특이값 분해(SVD, singular value decomposition)**는 선형대수학에서 핵심적인 행렬 분해 방법이다. 이는 모든 행렬에 적용될 수 있고 항상 존재하기 때문에 "선형대수학의 근본 정리(fundamental theorem of linear algebra)"(Strang, 1993)라고 불려왔다. 더욱이, 다음에서 살펴보겠지만, 선형 매핑 Φ:VW\Phi: V \rightarrow W를 나타내는 행렬 A\boldsymbol{A}의 SVD는 이 두 벡터 공간의 기저 기하학 사이의 변화를 정량화한다. SVD의 수학에 대한 더 깊은 개요를 위해 Kalman (1996)과 Roy and Banerjee (2014)의 작업을 추천한다.

SVD 정리

SVD singular value decomposition

정리 4.22 (SVD 정리). ARm×n\boldsymbol{A} \in \mathbb{R}^{m \times n}가 랭크 r[0,min(m,n)]r \in[0, \min (m, n)]인 직사각형 행렬이라고 하자. A\boldsymbol{A}의 SVD는 다음과 같은 형태의 분해이다. 여기서 URm×m\boldsymbol{U} \in \mathbb{R}^{m \times m}는 열 벡터 ui,i=1,,m\boldsymbol{u}_{i}, i=1, \ldots, m를 갖는 직교 행렬이고, VRn×n\boldsymbol{V} \in \mathbb{R}^{n \times n}는 열 벡터 vj,j=1,,n\boldsymbol{v}_{j}, j=1, \ldots, n를 갖는 직교 행렬이다. 또한, Σ\boldsymbol{\Sigma}Σii=σi0\Sigma_{i i}=\sigma_{i} \geqslant 0이고 Σij=0,ij\Sigma_{i j}=0, i \neq jm×nm \times n 행렬이다.

Σ\boldsymbol{\Sigma}의 대각선 원소 σi,i=1,,r\sigma_{i}, i=1, \ldots, r는 **특이값(singular values)**이라고 불리며, ui\boldsymbol{u}_{i}좌특이벡터(left-singular vectors), vj\boldsymbol{v}_{j}는 **우특이벡터(right-singular vectors)**라고 불린다. 관례적으로 특이값은 σ1σ2σr0\sigma_{1} \geqslant \sigma_{2} \geqslant \sigma_{r} \geqslant 0와 같이 정렬된다.

특이값 행렬(singular value matrix) Σ\boldsymbol{\Sigma}는 유일하지만, 몇 가지 주의가 필요하다. ΣRm×n\boldsymbol{\Sigma} \in \mathbb{R}^{m \times n}가 직사각형임을 관찰하라. 특히, Σ\boldsymbol{\Sigma}A\boldsymbol{A}와 같은 크기이다. 이는 Σ\boldsymbol{\Sigma}가 특이값을 포함하는 대각 부분 행렬을 가지며 추가적인 0 채우기(zero padding)가 필요하다는 것을 의미한다. 구체적으로, 만약 m>nm>n이라면, 행렬 Σ\boldsymbol{\Sigma}nn번째 행까지 대각선 구조를 가지며 그 아래로는 다음과 같이 구성된다.

그림 4.8 행렬 AR3×2\boldsymbol{A} \in \mathbb{R}^{3 \times 2}의 SVD에 대한 직관을 순차적인 변환으로 나타낸다. 왼쪽 위에서 왼쪽 아래로: V\boldsymbol{V}^{\top}R2\mathbb{R}^{2}에서 기저 변환을 수행한다. 왼쪽 아래에서 오른쪽 아래로: Σ\boldsymbol{\Sigma}R2\mathbb{R}^{2}에서 R3\mathbb{R}^{3}으로 스케일링하고 매핑한다. 오른쪽 아래의 타원은 R3\mathbb{R}^{3}에 존재한다. 세 번째 차원은 타원형 디스크의 표면에 직교한다. 오른쪽 아래에서 오른쪽 위로: U\boldsymbol{U}R3\mathbb{R}^{3} 내에서 기저 변환을 수행한다. n+1n+1부터 mm까지의 0\mathbf{0}^{\top} 행 벡터로 구성된다.

Σ=[σ1000000σn0000]\boldsymbol{\Sigma}=\left[\begin{array}{ccc} \sigma_{1} & 0 & 0 \\ 0 & \ddots & 0 \\ 0 & 0 & \sigma_{n} \\ 0 & \ldots & 0 \\ \vdots & & \vdots \\ 0 & \ldots & 0 \end{array}\right]

만약 m<nm<n이라면, 행렬 Σ\boldsymbol{\Sigma}mm번째 열까지 대각선 구조를 가지며 m+1m+1부터 nn까지는 0\mathbf{0}으로 구성된 열을 갖는다.

Σ=[σ100000000σm00].\boldsymbol{\Sigma}=\left[\begin{array}{cccccc} \sigma_{1} & 0 & 0 & 0 & \ldots & 0 \\ 0 & \ddots & 0 & \vdots & & \vdots \\ 0 & 0 & \sigma_{m} & 0 & \ldots & 0 \end{array}\right] .

비고. SVD는 모든 행렬 ARm×n\boldsymbol{A} \in \mathbb{R}^{m \times n}에 대해 존재한다.

4.5.1 Geometric Intuitions for the SVD

SVD는 변환 행렬 A\boldsymbol{A}를 설명하는 기하학적 직관을 제공한다. 다음에서는 SVD를 기저(basis)에 대해 수행되는 순차적인 선형 변환으로 논의할 것이다. 이어서 예제 4.12에서는 SVD의 변환 행렬을 R2\mathbb{R}^{2}의 벡터 집합에 적용하여 각 변환의 효과를 더 명확하게 시각화할 것이다.

행렬의 SVD는 해당 선형 매핑(2.7.1절 참조) Φ:RnRm\Phi: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m}을 세 가지 연산으로 분해한 것으로 해석될 수 있다(그림 4.8 참조). SVD의 직관은 표면적으로 고유값 분해(eigendecomposition)의 직관과 유사한 구조를 따른다(그림 4.7 참조): 넓게 보면, SVD는 V\boldsymbol{V}^{\top}를 통한 기저 변경을 수행한 다음, 특이값(singular value) 행렬 Σ\boldsymbol{\Sigma}를 통해 **차원 스케일링 및 증강(또는 축소)**을 수행한다. 마지막으로, U\boldsymbol{U}를 통해 두 번째 기저 변경을 수행한다. SVD는 여러 중요한 세부 사항과 주의 사항을 포함하므로, 우리는 직관을 더 자세히 검토할 것이다.

선형 매핑 Φ:RnRm\Phi: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m}의 변환 행렬이 각각 Rn\mathbb{R}^{n}Rm\mathbb{R}^{m}의 표준 기저 BBCC에 대해 주어졌다고 가정하자. 또한, Rn\mathbb{R}^{n}의 두 번째 기저 B~\tilde{B}Rm\mathbb{R}^{m}C~\tilde{C}를 가정하자. 그러면

  1. 행렬 V\boldsymbol{V}는 정의역 Rn\mathbb{R}^{n}에서 B~\tilde{B} (그림 4.8의 왼쪽 상단에 있는 빨간색 및 주황색 벡터 v1\boldsymbol{v}_{1}v2\boldsymbol{v}_{2}로 표현됨)에서 표준 기저 BB로의 기저 변경을 수행한다. V=V1\boldsymbol{V}^{\top}=\boldsymbol{V}^{-1}BB에서 B~\tilde{B}로의 기저 변경을 수행한다. 빨간색 및 주황색 벡터는 이제 그림 4.8의 왼쪽 하단에 있는 정규 기저(canonical basis)와 정렬된다.
  2. 좌표계를 B~\tilde{B}로 변경한 후, Σ\boldsymbol{\Sigma}는 새로운 좌표를 특이값 σi\sigma_{i}스케일링한다(그리고 차원을 추가하거나 삭제한다). 즉, Σ\boldsymbol{\Sigma}B~\tilde{B}C~\tilde{C}에 대한 Φ\Phi의 변환 행렬이며, 이는 늘어나서 e1e2\boldsymbol{e}_{1}-\boldsymbol{e}_{2} 평면에 놓여 있는 빨간색 및 주황색 벡터로 표현된다. 이 평면은 이제 그림 4.8의 오른쪽 하단에서 세 번째 차원에 내장된다.
  3. U\boldsymbol{U}는 공역 Rm\mathbb{R}^{m}에서 C~\tilde{C}에서 Rm\mathbb{R}^{m}의 정규 기저로의 기저 변경을 수행하며, 이는 e1e2\boldsymbol{e}_{1}-\boldsymbol{e}_{2} 평면 밖으로 회전하는 빨간색 및 주황색 벡터로 표현된다. 이는 그림 4.8의 오른쪽 상단에 나타나 있다.

SVD는 정의역과 공역 모두에서 기저 변경을 표현한다. 이는 동일한 벡터 공간 내에서 작동하며 동일한 기저 변경이 적용되고 다시 되돌려지는 고유값 분해와 대조된다. SVD를 특별하게 만드는 것은 이 두 개의 다른 기저가 특이값 행렬 Σ\boldsymbol{\Sigma}에 의해 동시에 연결된다는 점이다.

Example 4.12 (Vectors and the SVD)

원점을 중심으로 하는 2×22 \times 2 크기의 상자에 맞는 벡터들의 정사각형 그리드 XR2\mathcal{X} \in \mathbb{R}^{2}의 매핑을 고려해 보자. 표준 기저를 사용하여 다음을 통해 이 벡터들을 매핑한다.

A=[10.80110]=UΣV=[0.7900.620.380.780.490.480.620.62][1.62001.000][0.780.620.620.78].\begin{aligned} \boldsymbol{A} & =\left[\begin{array}{cc} 1 & -0.8 \\ 0 & 1 \\ 1 & 0 \end{array}\right]=\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{\top} \\ & =\left[\begin{array}{ccc} -0.79 & 0 & -0.62 \\ 0.38 & -0.78 & -0.49 \\ -0.48 & -0.62 & 0.62 \end{array}\right]\left[\begin{array}{cc} 1.62 & 0 \\ 0 & 1.0 \\ 0 & 0 \end{array}\right]\left[\begin{array}{cc} -0.78 & 0.62 \\ -0.62 & -0.78 \end{array}\right] . \end{aligned}

우리는 그리드에 배열된 벡터 집합 X\mathcal{X} (색깔 있는 점들; 그림 4.9의 왼쪽 상단 패널 참조)로 시작한다. 그런 다음 X\mathcal{X}를 회전시키는 VR2×2\boldsymbol{V}^{\top} \in \mathbb{R}^{2 \times 2}를 적용한다. 회전된 벡터들은 그림 4.9의 왼쪽 하단 패널에 표시되어 있다. 이제 특이값 행렬 Σ\boldsymbol{\Sigma}를 사용하여 이 벡터들을 공역 R3\mathbb{R}^{3}으로 매핑한다 (그림 4.9의 오른쪽 하단 패널 참조). 모든 벡터가 x1x2x_{1}-x_{2} 평면에 놓여 있음을 주목하라.

기저 변화(섹션 2.7.2), 직교 행렬(정의 3.8) 및 정규 직교 기저(섹션 3.5)를 검토하는 것이 유용하다. 세 번째 좌표는 항상 0이다. x1x2x_{1}-x_{2} 평면의 벡터들은 특이값에 의해 늘어났다.

벡터 X\mathcal{X}A\boldsymbol{A}에 의해 공역 R3\mathbb{R}^{3}으로 직접 매핑하는 것은 UΣV\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{\top}에 의한 X\mathcal{X}의 변환과 동일하다. 여기서 U\boldsymbol{U}는 공역 R3\mathbb{R}^{3} 내에서 회전을 수행하여 매핑된 벡터들이 더 이상 x1x2x_{1}-x_{2} 평면에 국한되지 않도록 한다. 이 벡터들은 그림 4.9의 오른쪽 상단 패널에 표시된 것처럼 여전히 한 평면 위에 있다.

그림 4.9 SVD 및 벡터 매핑 (원반으로 표현). 패널들은 그림 4.8과 동일한 반시계 방향 구조를 따른다.

4.5.2 Construction of the SVD

다음으로 SVD가 존재하는 이유를 논의하고, 이를 자세히 계산하는 방법을 보여줄 것이다. 일반 행렬의 SVD는 정방 행렬의 **고유값 분해(eigendecomposition)**와 몇 가지 유사점을 공유한다.

참고. SPD 행렬의 고유값 분해와 비교:

S=S=PDP\boldsymbol{S}=\boldsymbol{S}^{\top}=\boldsymbol{P} \boldsymbol{D} \boldsymbol{P}^{\top}

"Mathematics for Machine Learning" 초안 (2021-07-29). 피드백: https: //mml-book.com. 해당 SVD와 비교:

S=UΣV\boldsymbol{S}=\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{\top}

만약 우리가 다음과 같이 설정한다면:

U=P=V,D=Σ\boldsymbol{U}=\boldsymbol{P}=\boldsymbol{V}, \quad \boldsymbol{D}=\boldsymbol{\Sigma}

SPD 행렬의 SVD가 그들의 고유값 분해임을 알 수 있다. 다음에서는 정리 4.22가 왜 성립하는지, 그리고 SVD가 어떻게 구성되는지 살펴볼 것이다. ARm×n\boldsymbol{A} \in \mathbb{R}^{m \times n}의 SVD를 계산하는 것은 공역(codomain) Rm\mathbb{R}^{m}정의역(domain) Rn\mathbb{R}^{n}의 두 정규 직교 기저 집합 U=(u1,,um)U=\left(\boldsymbol{u}_{1}, \ldots, \boldsymbol{u}_{m}\right)V=(v1,,vn)V= \left(\boldsymbol{v}_{1}, \ldots, \boldsymbol{v}_{n}\right)를 찾는 것과 동일하다. 이 순서화된 기저들로부터 행렬 U\boldsymbol{U}V\boldsymbol{V}를 구성할 것이다.

우리의 계획은 먼저 오른쪽 특이 벡터(right-singular vectors) v1,,vnRn\boldsymbol{v}_{1}, \ldots, \boldsymbol{v}_{n} \in \mathbb{R}^{n}의 정규 직교 집합을 구성하는 것부터 시작한다. 그런 다음 왼쪽 특이 벡터(left-singular vectors) u1,,umRm\boldsymbol{u}_{1}, \ldots, \boldsymbol{u}_{m} \in \mathbb{R}^{m}의 정규 직교 집합을 구성한다. 그 후, 이 둘을 연결하고 vi\boldsymbol{v}_{i}의 직교성이 A\boldsymbol{A}의 변환 하에서도 보존되도록 요구할 것이다. 이는 이미지 Avi\boldsymbol{A} \boldsymbol{v}_{i}가 직교 벡터 집합을 형성한다는 것을 알고 있기 때문에 중요하다. 그런 다음 이 이미지들을 스칼라 인자로 정규화할 것이며, 이 스칼라 인자들이 **특이값(singular values)**이 될 것이다.

오른쪽 특이 벡터를 구성하는 것부터 시작하자. **스펙트럼 정리(Spectral Theorem, 정리 4.15)**는 대칭 행렬의 고유 벡터가 ONB를 형성하며, 이는 또한 대각화될 수 있음을 알려준다. 더욱이, 정리 4.14에 따르면 우리는 어떤 직사각형 행렬 ARm×n\boldsymbol{A} \in \mathbb{R}^{m \times n}로부터 항상 대칭, 양의 준정부호 행렬 AARn×n\boldsymbol{A}^{\top} \boldsymbol{A} \in \mathbb{R}^{n \times n}를 구성할 수 있다. 따라서 우리는 항상 AA\boldsymbol{A}^{\top} \boldsymbol{A}를 대각화하고 다음을 얻을 수 있다:

AA=PDP=P[λ100λn]P\boldsymbol{A}^{\top} \boldsymbol{A}=\boldsymbol{P} \boldsymbol{D} \boldsymbol{P}^{\top}=\boldsymbol{P}\left[\begin{array}{ccc} \lambda_{1} & \cdots & 0 \\ \vdots & \ddots & \vdots \\ 0 & \cdots & \lambda_{n} \end{array}\right] \boldsymbol{P}^{\top}

여기서 P\boldsymbol{P}는 정규 직교 고유 기저로 구성된 직교 행렬이다. λi0\lambda_{i} \geqslant 0AA\boldsymbol{A}^{\top} \boldsymbol{A}의 고유값이다. A\boldsymbol{A}의 SVD가 존재한다고 가정하고 (4.64)를 (4.71)에 대입하자. 그러면 다음이 된다:

AA=(UΣV)(UΣV)=VΣUUΣV,\boldsymbol{A}^{\top} \boldsymbol{A}=\left(\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{\top}\right)^{\top}\left(\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{\top}\right)=\boldsymbol{V} \boldsymbol{\Sigma}^{\top} \boldsymbol{U}^{\top} \boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{\top},

여기서 U,V\boldsymbol{U}, \boldsymbol{V}는 직교 행렬이다. 따라서 UU=I\boldsymbol{U}^{\top} \boldsymbol{U}=\boldsymbol{I}이므로 다음을 얻는다:

AA=VΣΣV=V[σ12000000σn2]V\boldsymbol{A}^{\top} \boldsymbol{A}=\boldsymbol{V} \boldsymbol{\Sigma}^{\top} \boldsymbol{\Sigma} \boldsymbol{V}^{\top}=\boldsymbol{V}\left[\begin{array}{ccc} \sigma_{1}^{2} & 0 & 0 \\ 0 & \ddots & 0 \\ 0 & 0 & \sigma_{n}^{2} \end{array}\right] \boldsymbol{V}^{\top}

이제 (4.71)과 (4.73)을 비교하면 다음을 알 수 있다:

V=Pσi2=λi\begin{aligned} \boldsymbol{V}^{\top} & =\boldsymbol{P}^{\top} \\ \sigma_{i}^{2} & =\lambda_{i} \end{aligned}

따라서 P\boldsymbol{P}를 구성하는 AA\boldsymbol{A}^{\top} \boldsymbol{A}의 고유 벡터는 A\boldsymbol{A}의 오른쪽 특이 벡터 V\boldsymbol{V}이다 ((4.74) 참조). AA\boldsymbol{A}^{\top} \boldsymbol{A}의 고유값은 Σ\boldsymbol{\Sigma}의 제곱된 특이값이다 ((4.75) 참조).

왼쪽 특이 벡터 U\boldsymbol{U}를 얻기 위해 유사한 절차를 따른다. (이전의 AARn×n\boldsymbol{A}^{\top} \boldsymbol{A} \in \mathbb{R}^{n \times n} 대신) 대칭 행렬 AARm×m\boldsymbol{A} \boldsymbol{A}^{\top} \in \mathbb{R}^{m \times m}의 SVD를 계산하는 것부터 시작한다. A\boldsymbol{A}의 SVD는 다음을 산출한다:

AA=(UΣV)(UΣV)=UΣVVΣU=U[σ12000000σm2]U.\begin{aligned} \boldsymbol{A} \boldsymbol{A}^{\top} & =\left(\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{\top}\right)\left(\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{\top}\right)^{\top}=\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{\top} \boldsymbol{V} \boldsymbol{\Sigma}^{\top} \boldsymbol{U}^{\top} \\ & =\boldsymbol{U}\left[\begin{array}{ccc} \sigma_{1}^{2} & 0 & 0 \\ 0 & \ddots & 0 \\ 0 & 0 & \sigma_{m}^{2} \end{array}\right] \boldsymbol{U}^{\top} . \end{aligned}

스펙트럼 정리는 AA=SDS\boldsymbol{A} \boldsymbol{A}^{\top}=\boldsymbol{S} \boldsymbol{D} \boldsymbol{S}^{\top}가 대각화될 수 있으며, AA\boldsymbol{A} \boldsymbol{A}^{\top}의 고유 벡터로 구성된 ONB를 찾을 수 있음을 알려준다. 이 ONB는 S\boldsymbol{S}에 모아져 있다. AA\boldsymbol{A} \boldsymbol{A}^{\top}의 정규 직교 고유 벡터는 왼쪽 특이 벡터 U\boldsymbol{U}이며, SVD의 공역에서 정규 직교 기저를 형성한다.

이제 행렬 Σ\boldsymbol{\Sigma}의 구조에 대한 질문이 남는다. AA\boldsymbol{A} \boldsymbol{A}^{\top}AA\boldsymbol{A}^{\top} \boldsymbol{A}는 동일한 0이 아닌 고유값을 가지므로 (106페이지 참조), 두 경우의 SVD에서 Σ\boldsymbol{\Sigma} 행렬의 0이 아닌 항목은 동일해야 한다.

마지막 단계는 지금까지 다룬 모든 부분을 연결하는 것이다. 우리는 V\boldsymbol{V}에 정규 직교 오른쪽 특이 벡터 집합을 가지고 있다. SVD 구성을 완료하기 위해 이들을 정규 직교 벡터 U\boldsymbol{U}와 연결한다. 이 목표를 달성하기 위해 A\boldsymbol{A}에 의한 vi\boldsymbol{v}_{i}의 이미지 또한 직교해야 한다는 사실을 사용한다. 이는 섹션 3.4의 결과를 사용하여 보여줄 수 있다. 우리는 Avi\boldsymbol{A} \boldsymbol{v}_{i}Avj\boldsymbol{A} \boldsymbol{v}_{j} 사이의 내적이 iji \neq j일 때 0이어야 한다고 요구한다. 두 직교 고유 벡터 vi,vj,ij\boldsymbol{v}_{i}, \boldsymbol{v}_{j}, i \neq j에 대해 다음이 성립한다:

(Avi)(Avj)=vi(AA)vj=vi(λjvj)=λjvivj=0.\left(\boldsymbol{A} \boldsymbol{v}_{i}\right)^{\top}\left(\boldsymbol{A} \boldsymbol{v}_{j}\right)=\boldsymbol{v}_{i}^{\top}\left(\boldsymbol{A}^{\top} \boldsymbol{A}\right) \boldsymbol{v}_{j}=\boldsymbol{v}_{i}^{\top}\left(\lambda_{j} \boldsymbol{v}_{j}\right)=\lambda_{j} \boldsymbol{v}_{i}^{\top} \boldsymbol{v}_{j}=0 .

mrm \geqslant r인 경우, {Av1,,Avr}\left\{\boldsymbol{A} \boldsymbol{v}_{1}, \ldots, \boldsymbol{A} \boldsymbol{v}_{r}\right\}Rm\mathbb{R}^{m}rr차원 부분 공간의 기저이다.

SVD 구성을 완료하기 위해 정규 직교 왼쪽 특이 벡터가 필요하다: 오른쪽 특이 벡터 Avi\boldsymbol{A} \boldsymbol{v}_{i}의 이미지를 정규화하여 다음을 얻는다:

ui:=AviAvi=1λiAvi=1σiAvi,\boldsymbol{u}_{i}:=\frac{\boldsymbol{A} \boldsymbol{v}_{i}}{\left\|\boldsymbol{A} \boldsymbol{v}_{i}\right\|}=\frac{1}{\sqrt{\lambda_{i}}} \boldsymbol{A} \boldsymbol{v}_{i}=\frac{1}{\sigma_{i}} \boldsymbol{A} \boldsymbol{v}_{i},

여기서 마지막 등식은 (4.75)와 (4.76b)에서 얻어졌으며, AA\boldsymbol{A} \boldsymbol{A}^{\top}의 고유값이 σi2=λi\sigma_{i}^{2}=\lambda_{i}임을 보여준다.

따라서 우리가 오른쪽 특이 벡터 vi\boldsymbol{v}_{i}임을 아는 AA\boldsymbol{A}^{\top} \boldsymbol{A}의 고유 벡터와, A\boldsymbol{A}에 의한 그들의 정규화된 이미지인 왼쪽 특이 벡터 ui\boldsymbol{u}_{i}는 특이값 행렬 Σ\Sigma를 통해 연결된 두 개의 자기 일관적인 ONB를 형성한다. 특이값 방정식

(4.78)을 재배열하여 특이값 방정식을 얻자:

Avi=σiui,i=1,,r\boldsymbol{A} \boldsymbol{v}_{i}=\sigma_{i} \boldsymbol{u}_{i}, \quad i=1, \ldots, r

이 방정식은 고유값 방정식 (4.25)와 매우 유사하지만, 좌변과 우변의 벡터는 동일하지 않다.

n<mn<m인 경우, (4.79)는 ini \leqslant n에 대해서만 성립하지만, (4.79)는 i>ni>nui\boldsymbol{u}_{i}에 대해서는 아무것도 말해주지 않는다. 그러나 우리는 구성상 그들이 정규 직교임을 알고 있다. 반대로, m<nm<n인 경우, (4.79)는 imi \leqslant m에 대해서만 성립한다. i>mi>m인 경우, Avi=0\boldsymbol{A} \boldsymbol{v}_{i}=\mathbf{0}이며, 우리는 여전히 vi\boldsymbol{v}_{i}가 정규 직교 집합을 형성한다는 것을 알고 있다. 이는 SVD가 A\boldsymbol{A}핵(kernel, null space), 즉 Ax=0\boldsymbol{A} \boldsymbol{x}=\mathbf{0}인 벡터 x\boldsymbol{x}의 집합에 대한 정규 직교 기저도 제공한다는 것을 의미한다 (섹션 2.7.3 참조).

vi\boldsymbol{v}_{i}V\boldsymbol{V}의 열로, ui\boldsymbol{u}_{i}U\boldsymbol{U}의 열로 연결하면 다음이 된다:

AV=UΣA V=U \Sigma

여기서 Σ\boldsymbol{\Sigma}A\boldsymbol{A}와 동일한 차원을 가지며, 1,,r1, \ldots, r 행에 대해 대각 구조를 가진다. 따라서 V\boldsymbol{V}^{\top}를 오른쪽으로 곱하면 A=UΣV\boldsymbol{A}=\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{\top}가 되며, 이는 A\boldsymbol{A}의 SVD이다.

Example 4.13 (Computing the SVD)

다음 행렬의 **특이값 분해(singular value decomposition)**를 찾아보자.

A=[101210]\boldsymbol{A}=\left[\begin{array}{ccc} 1 & 0 & 1 \\ -2 & 1 & 0 \end{array}\right]

SVD는 우측 특이 벡터(right-singular vectors) vj\boldsymbol{v}_{j}, 특이값(singular values) σk\sigma_{k}, 그리고 좌측 특이 벡터(left-singular vectors) ui\boldsymbol{u}_{i}를 계산해야 한다.

1단계: AA\boldsymbol{A}^{\top} \boldsymbol{A}의 고유 기저(eigenbasis)로서의 우측 특이 벡터. 먼저 다음을 계산한다.

AA=[120110][101210]=[521210101]\boldsymbol{A}^{\top} \boldsymbol{A}=\left[\begin{array}{cc} 1 & -2 \\ 0 & 1 \\ 1 & 0 \end{array}\right]\left[\begin{array}{ccc} 1 & 0 & 1 \\ -2 & 1 & 0 \end{array}\right]=\left[\begin{array}{ccc} 5 & -2 & 1 \\ -2 & 1 & 0 \\ 1 & 0 & 1 \end{array}\right]

AA\boldsymbol{A}^{\top} \boldsymbol{A}의 고유값 분해(eigenvalue decomposition)를 통해 특이값과 우측 특이 벡터 vj\boldsymbol{v}_{j}를 계산한다. 고유값 분해는 다음과 같다.

AA=[53001623015261302516][600010000][53023013001525162616]=PDP,\boldsymbol{A}^{\top} \boldsymbol{A}=\left[\begin{array}{ccc} \frac{5}{\sqrt{30}} & 0 & \frac{-1}{\sqrt{6}} \\ \frac{-2}{\sqrt{30}} & \frac{1}{\sqrt{5}} & \frac{-2}{\sqrt{6}} \\ \frac{1}{\sqrt{30}} & \frac{2}{\sqrt{5}} & \frac{1}{\sqrt{6}} \end{array}\right]\left[\begin{array}{ccc} 6 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \end{array}\right]\left[\begin{array}{ccc} \frac{5}{\sqrt{30}} & \frac{-2}{\sqrt{30}} & \frac{1}{\sqrt{30}} \\ 0 & \frac{1}{\sqrt{5}} & \frac{2}{\sqrt{5}} \\ \frac{-1}{\sqrt{6}} & \frac{-2}{\sqrt{6}} & \frac{1}{\sqrt{6}} \end{array}\right]=\boldsymbol{P} \boldsymbol{D} \boldsymbol{P}^{\top},

그리고 P\boldsymbol{P}의 열(column)을 우측 특이 벡터로 얻는다.

V=P=[53001623015261302516]\boldsymbol{V}=\boldsymbol{P}=\left[\begin{array}{ccc} \frac{5}{\sqrt{30}} & 0 & \frac{-1}{\sqrt{6}} \\ \frac{-2}{\sqrt{30}} & \frac{1}{\sqrt{5}} & \frac{-2}{\sqrt{6}} \\ \frac{1}{\sqrt{30}} & \frac{2}{\sqrt{5}} & \frac{1}{\sqrt{6}} \end{array}\right]

Step 2: Singular-value matrix.

특이값 σi\sigma_{i}AA\boldsymbol{A}^{\top} \boldsymbol{A}의 고유값의 제곱근이므로, D\boldsymbol{D}에서 직접 얻을 수 있다. rk(A)=2\operatorname{rk}(\boldsymbol{A})=2이므로, 0이 아닌 특이값은 두 개뿐이다: σ1=6\sigma_{1}=\sqrt{6}σ2=1\sigma_{2}=1. 특이값 행렬은 A\boldsymbol{A}와 같은 크기여야 하며, 다음과 같이 얻을 수 있다.

Σ=[600010]\boldsymbol{\Sigma}=\left[\begin{array}{ccc} \sqrt{6} & 0 & 0 \\ 0 & 1 & 0 \end{array}\right]

3단계: **좌특이벡터(left-singular vectors)**는 **우특이벡터(right-singular vectors)**의 정규화된 이미지이다.

좌특이벡터A\boldsymbol{A}에 대한 우특이벡터의 이미지를 계산하고, 해당 특이값으로 나누어 정규화함으로써 찾을 수 있다. 다음과 같이 얻을 수 있다.

u1=1σ1Av1=16[101210][530230130]=[1525]u2=1σ2Av2=11[101210][01525]=[2515]U=[u1,u2]=15[1221]\begin{aligned} & \boldsymbol{u}_{1}=\frac{1}{\sigma_{1}} \boldsymbol{A} \boldsymbol{v}_{1}=\frac{1}{\sqrt{6}}\left[\begin{array}{ccc} 1 & 0 & 1 \\ -2 & 1 & 0 \end{array}\right]\left[\begin{array}{c} \frac{5}{\sqrt{30}} \\ \frac{-2}{\sqrt{30}} \\ \frac{1}{\sqrt{30}} \end{array}\right]=\left[\begin{array}{c} \frac{1}{\sqrt{5}} \\ -\frac{2}{\sqrt{5}} \end{array}\right] \\ & \boldsymbol{u}_{2}=\frac{1}{\sigma_{2}} \boldsymbol{A} \boldsymbol{v}_{2}=\frac{1}{1}\left[\begin{array}{ccc} 1 & 0 & 1 \\ -2 & 1 & 0 \end{array}\right]\left[\begin{array}{c} 0 \\ \frac{1}{\sqrt{5}} \\ \frac{2}{\sqrt{5}} \end{array}\right]=\left[\begin{array}{c} \frac{2}{\sqrt{5}} \\ \frac{1}{\sqrt{5}} \end{array}\right] \\ & \boldsymbol{U}=\left[\boldsymbol{u}_{1}, \boldsymbol{u}_{2}\right]=\frac{1}{\sqrt{5}}\left[\begin{array}{cc} 1 & 2 \\ -2 & 1 \end{array}\right] \end{aligned}

컴퓨터에서는 여기에 설명된 접근 방식이 수치적으로 좋지 않은 동작을 보이며, A\boldsymbol{A}SVD는 일반적으로 AA\boldsymbol{A}^{\top} \boldsymbol{A}의 고유값 분해를 사용하지 않고 계산된다는 점에 유의해야 한다.

4.5.3 Eigenvalue Decomposition vs. Singular Value Decomposition

고유값 분해(eigendecomposition) A=PDP1\boldsymbol{A}=\boldsymbol{P} \boldsymbol{D} \boldsymbol{P}^{-1}와 특이값 분해(SVD) A=UΣV\boldsymbol{A}= \boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{\top}를 고려하고 이전 섹션의 핵심 요소를 검토해 보자.

  • SVD는 모든 행렬 Rm×n\mathbb{R}^{m \times n}에 대해 항상 존재한다. 고유값 분해는 정방 행렬 Rn×n\mathbb{R}^{n \times n}에 대해서만 정의되며, Rn\mathbb{R}^{n}의 고유 벡터 기저를 찾을 수 있는 경우에만 존재한다.

  • 고유값 분해 행렬 P\boldsymbol{P}의 벡터는 반드시 직교하지는 않는다. 즉, 기저 변환은 단순한 회전 및 스케일링이 아니다. 반면에 SVD의 행렬 U\boldsymbol{U}V\boldsymbol{V}의 벡터는 정규 직교(orthonormal)이므로 회전을 나타낸다.

  • 고유값 분해와 SVD는 모두 세 가지 선형 매핑의 합성이다.

    1. 도메인(domain)에서의 기저 변환
    2. 각 새 기저 벡터의 독립적인 스케일링 및 도메인에서 코도메인(codomain)으로의 매핑
    3. 코도메인에서의 기저 변환
     বk  Star Wars  Blade Runner  Amelie  Delicatessen [541550005104]=[0.67100.02360.46470.57740.71970.20540.47590.46190.09390.77050.52680.34640.15150.60300.52930.5774][9.64380006.36390000.7056000][0.73670.65150.18110.08520.17620.98070.67080.73790.0743]\begin{gathered} \stackrel{\text { বk }}{\rightarrow} \\ \begin{array}{r} \text { Star Wars } \\ \text { Blade Runner } \\ \text { Amelie } \\ \text { Delicatessen } \end{array}\left[\begin{array}{lll} 5 & 4 & 1 \\ 5 & 5 & 0 \\ 0 & 0 & 5 \\ 1 & 0 & 4 \end{array}\right]=\left[\begin{array}{rrrr} -0.6710 & 0.0236 & 0.4647 & -0.5774 \\ -0.7197 & 0.2054 & -0.4759 & 0.4619 \\ -0.0939 & -0.7705 & -0.5268 & -0.3464 \\ -0.1515 & -0.6030 & 0.5293 & -0.5774 \end{array}\right] \\ {\left[\begin{array}{rrrr} 9.6438 & 0 & 0 \\ 0 & 6.3639 & 0 \\ 0 & 0 & 0.7056 \\ 0 & 0 & 0 \end{array}\right]} \\ {\left[\begin{array}{rrr} -0.7367 & -0.6515 & -0.1811 \\ 0.0852 & 0.1762 & -0.9807 \\ 0.6708 & -0.7379 & -0.0743 \end{array}\right]} \end{gathered}

    고유값 분해와 SVD의 주요 차이점은 SVD에서 도메인과 코도메인이 서로 다른 차원의 벡터 공간일 수 있다는 점이다.

  • SVD에서 좌특이 벡터(left-singular vector) 행렬 U\boldsymbol{U}와 우특이 벡터(right-singular vector) 행렬 V\boldsymbol{V}는 일반적으로 서로 역행렬 관계가 아니다(서로 다른 벡터 공간에서 기저 변환을 수행한다). 고유값 분해에서 기저 변환 행렬 P\boldsymbol{P}P1\boldsymbol{P}^{-1}는 서로 역행렬 관계이다.

  • SVD에서 대각 행렬 Σ\boldsymbol{\Sigma}의 원소는 모두 실수이며 음수가 아닌 반면, 고유값 분해의 대각 행렬에서는 일반적으로 그렇지 않다.

  • SVD와 고유값 분해는 그들의 **투영(projections)**을 통해 밀접하게 관련되어 있다.

    • A\boldsymbol{A}의 좌특이 벡터는 AA\boldsymbol{A} \boldsymbol{A}^{\top}의 고유 벡터이다.
    • A\boldsymbol{A}의 우특이 벡터는 AA\boldsymbol{A}^{\top} \boldsymbol{A}의 고유 벡터이다.
    • A\boldsymbol{A}의 0이 아닌 특이값은 AA\boldsymbol{A} \boldsymbol{A}^{\top}AA\boldsymbol{A}^{\top} \boldsymbol{A} 모두의 0이 아닌 고유값의 제곱근이다.
  • 대칭 행렬 ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}의 경우, 스펙트럼 정리(spectral theorem) 4.15에 따라 고유값 분해와 SVD는 동일하다.

Example 4.14 (Finding Structure in Movie Ratings and Consumers)

사람들과 그들이 선호하는 영화에 대한 데이터를 분석하여 SVD의 실제적인 해석을 추가해 보자. 세 명의 시청자(Ali, Beatrix, Chandra)가 네 가지 다른 영화(Star Wars, Blade Runner, Amelie, Delicatessen)에 대해 평점을 매긴다고 가정해 보자. 그들의 평점은 0(최악)에서 5(최고) 사이의 값이며, 그림 4.10에 표시된 대로 데이터 행렬 AR4×3\boldsymbol{A} \in \mathbb{R}^{4 \times 3}에 인코딩된다. 각 행은 영화를 나타내고 각 열은 사용자를 나타낸다. 따라서 각 시청자에 대한 영화 평점의 열 벡터는 xAli ,xBeatrix ,xChandra \boldsymbol{x}_{\text {Ali }}, \boldsymbol{x}_{\text {Beatrix }}, \boldsymbol{x}_{\text {Chandra }}이다.

Figure 4.10 세 사람이 네 가지 영화에 대해 매긴 평점과 그 SVD 분해.

이 두 "공간"은 데이터 자체가 충분히 다양한 시청자와 영화를 포함하는 경우에만 각각의 시청자 및 영화 데이터에 의해 의미 있게 확장된다. full SVD

SVD를 사용하여 A\boldsymbol{A}를 인수분해하는 것은 사람들이 영화를 평가하는 방식, 특히 어떤 사람이 어떤 영화를 좋아하는지를 연결하는 구조가 있는지에 대한 관계를 파악하는 방법을 제공한다. 데이터 행렬 A\boldsymbol{A}에 SVD를 적용하면 여러 가지 가정이 필요하다:

  1. 모든 시청자는 동일한 선형 매핑을 사용하여 일관되게 영화를 평가한다.
  2. 평점에 오류나 노이즈가 없다.
  3. 좌특이 벡터 ui\boldsymbol{u}_{i}전형적인 영화로, 우특이 벡터 vj\boldsymbol{v}_{j}전형적인 시청자로 해석한다.

그런 다음, 모든 시청자의 특정 영화 선호도가 vj\boldsymbol{v}_{j}의 선형 조합으로 표현될 수 있다고 가정한다. 마찬가지로, 모든 영화의 선호도는 ui\boldsymbol{u}_{i}의 선형 조합으로 표현될 수 있다. 따라서 SVD 도메인의 벡터는 전형적인 시청자의 "공간"에 있는 시청자로 해석될 수 있으며, SVD의 공역에 있는 벡터는 그에 상응하게 전형적인 영화의 "공간"에 있는 영화로 해석될 수 있다. 영화-사용자 행렬의 SVD를 살펴보자. 첫 번째 좌특이 벡터 u1\boldsymbol{u}_{1}은 두 공상 과학 영화에 대해 큰 절댓값을 가지며, 첫 번째 특이값도 크다(그림 4.10의 빨간색 음영). 따라서 이는 특정 영화 세트(공상 과학 테마)를 가진 사용자 유형을 그룹화한다. 마찬가지로, 첫 번째 우특이 벡터 v1\boldsymbol{v}_{1}은 공상 과학 영화에 높은 평점을 주는 Ali와 Beatrix에 대해 큰 절댓값을 보여준다(그림 4.10의 녹색 음영). 이는 v1\boldsymbol{v}_{1}공상 과학 영화 애호가의 개념을 반영한다는 것을 시사한다.

마찬가지로, u2\boldsymbol{u}_{2}는 프랑스 예술 영화 테마를 포착하는 것으로 보이며, v2\boldsymbol{v}_{2}는 Chandra가 그러한 영화의 이상적인 애호가에 가깝다는 것을 나타낸다. 이상적인 공상 과학 영화 애호가는 순수주의자이며 공상 과학 영화만 좋아하므로, 공상 과학 영화 애호가 v1\boldsymbol{v}_{1}은 공상 과학 테마를 제외한 모든 것에 0점을 준다. 이 논리는 특이값 행렬 Σ\boldsymbol{\Sigma}의 대각 부분 구조에 의해 암시된다. 따라서 특정 영화는 전형적인 영화로 (선형적으로) 어떻게 분해되는지에 의해 표현된다. 마찬가지로, 사람은 영화 테마로 (선형 조합을 통해) 어떻게 분해되는지에 의해 표현된다.

문헌에서 사용되는 다양한 버전이 있으므로 SVD 용어 및 관례에 대해 간략하게 논의할 가치가 있다. 이러한 차이점은 혼란스러울 수 있지만, 수학은 이에 불변하다.

  • 표기법 및 추상화의 편의를 위해, SVD가 두 개의 정방형 좌특이 벡터 행렬과 우특이 벡터 행렬을 가지지만, 비정방형 특이값 행렬을 가지는 것으로 설명되는 SVD 표기법을 사용한다. SVD에 대한 우리의 정의 (4.64)는 때때로 full SVD라고 불린다.
  • 일부 저자는 SVD를 약간 다르게 정의하고 정방형 특이 행렬에 초점을 맞춘다. 그러면 ARm×n\boldsymbol{A} \in \mathbb{R}^{m \times n}mnm \geqslant n에 대해,
Am×n=Um×nΣn×nVn×n\underset{m \times n}{\boldsymbol{A}}=\underset{m \times n}{\boldsymbol{U}} \underset{n \times n}{\boldsymbol{\Sigma}} \underset{n \times n}{\boldsymbol{V}^{\top}}

"Mathematics for Machine Learning" 초안 (2021-07-29). 피드백: https: //mml-book.com.

때때로 이 공식은 reduced SVD (예: Datta (2010)) 또는 SVD (예: Press et al. (2007))라고 불린다. 이 대체 형식은 행렬이 구성되는 방식만 변경할 뿐 SVD의 수학적 구조는 변경하지 않는다. 이 대체 공식의 편리함은 Σ\boldsymbol{\Sigma}가 고유값 분해에서처럼 대각 행렬이라는 점이다.

  • 섹션 4.6에서는 SVD를 사용하는 행렬 근사 기법에 대해 배울 것이며, 이는 truncated SVD라고도 불린다.
  • 랭크 rr 행렬 A\boldsymbol{A}의 SVD를 U\boldsymbol{U}m×rm \times r 행렬이고, Σ\boldsymbol{\Sigma}r×rr \times r 대각 행렬이며, V\boldsymbol{V}r×nr \times n 행렬이 되도록 정의할 수 있다. 이 구성은 우리의 정의와 매우 유사하며, 대각 행렬 Σ\boldsymbol{\Sigma}가 대각선에만 0이 아닌 항목을 갖도록 보장한다. 이 대체 표기법의 주요 편리함은 Σ\boldsymbol{\Sigma}가 고유값 분해에서처럼 대각 행렬이라는 점이다.
  • A\boldsymbol{A}에 대한 SVD가 m>nm>nm×nm \times n 행렬에만 적용된다는 제약은 실제적으로 불필요하다. m<nm<n일 때, SVD 분해는 행보다 열이 더 많은 0을 가진 Σ\Sigma를 생성하며, 결과적으로 특이값 σm+1,,σn\sigma_{m+1}, \ldots, \sigma_{n}은 0이 된다.

SVD는 곡선 피팅의 최소 제곱 문제부터 선형 방정식 시스템 해결에 이르기까지 머신러닝의 다양한 응용 분야에서 사용된다. 이러한 응용 분야는 SVD의 다양한 중요한 속성, 행렬의 랭크와의 관계, 그리고 주어진 랭크의 행렬을 더 낮은 랭크의 행렬로 근사하는 능력을 활용한다. 행렬을 SVD로 대체하는 것은 종종 수치 반올림 오류에 대해 계산을 더 견고하게 만드는 이점이 있다. 다음 섹션에서 살펴보겠지만, SVD가 "더 간단한" 행렬로 행렬을 원칙적으로 근사하는 능력은 차원 축소 및 토픽 모델링에서 데이터 압축 및 클러스터링에 이르는 머신러닝 응용 분야를 가능하게 한다.

4.6 Matrix Approximation

우리는 SVD를 A=UΣVRm×n\boldsymbol{A}=\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{\top} \in \mathbb{R}^{m \times n}를 세 행렬의 곱으로 인수분해하는 방법으로 고려했다. 여기서 URm×m\boldsymbol{U} \in \mathbb{R}^{m \times m}VRn×n\boldsymbol{V} \in \mathbb{R}^{n \times n}는 직교 행렬이고 Σ\boldsymbol{\Sigma}는 주 대각선에 특이값을 포함한다. 전체 SVD 인수분해를 수행하는 대신, 이제 SVD가 행렬 A\boldsymbol{A}를 더 간단한 (low-rank) 행렬 Ai\boldsymbol{A}_{i}의 합으로 표현하는 방법을 조사할 것이다. 이는 전체 SVD보다 계산 비용이 저렴한 행렬 근사 기법으로 이어진다.

우리는 rank-1 행렬 AiRm×n\boldsymbol{A}_{i} \in \mathbb{R}^{m \times n}를 다음과 같이 구성한다.

Ai:=uivi,\boldsymbol{A}_{i}:=\boldsymbol{u}_{i} \boldsymbol{v}_{i}^{\top},

이는 U\boldsymbol{U}V\boldsymbol{V}ii번째 직교 열 벡터의 **외적(outer product)**으로 형성된다. 그림 4.11은 스톤헨지 이미지를 보여주는데, 이는 행렬 AR1432×1910\boldsymbol{A} \in \mathbb{R}^{1432 \times 1910}로 표현될 수 있으며, (4.90)에 정의된 일부 외적 Ai\boldsymbol{A}_{i}도 함께 보여준다.

Figure 4.11 SVD를 이용한 이미지 처리. (a) 원본 그레이스케일 이미지는 0(검정)과 1(흰색) 사이의 값을 갖는 1,432×1,9101,432 \times 1,910 행렬이다. (b)-(f) Rank-1 행렬 A1,,A5\boldsymbol{A}_{1}, \ldots, \boldsymbol{A}_{5}와 해당 특이값 σ1,,σ5\sigma_{1}, \ldots, \sigma_{5}. 각 rank-1 행렬의 격자형 구조는 좌특이 벡터와 우특이 벡터의 외적에 의해 형성된다. rank- kk approximation

(a) 원본 이미지 A\boldsymbol{A}.

(b) A1,σ1228,052\boldsymbol{A}_{1}, \sigma_{1} \approx 228,052.

(c) A2,σ240,647\boldsymbol{A}_{2}, \sigma_{2} \approx 40,647.

(d) A3,σ326,125\boldsymbol{A}_{3}, \sigma_{3} \approx 26,125.

(e) A4,σ420,232\boldsymbol{A}_{4}, \sigma_{4} \approx 20,232.

(f) A5,σ515,436\boldsymbol{A}_{5}, \sigma_{5} \approx 15,436.

rank rr인 행렬 ARm×n\boldsymbol{A} \in \mathbb{R}^{m \times n}는 rank-1 행렬 Ai\boldsymbol{A}_{i}의 합으로 다음과 같이 쓸 수 있다.

A=i=1rσiuivi=i=1rσiAi,\boldsymbol{A}=\sum_{i=1}^{r} \sigma_{i} \boldsymbol{u}_{i} \boldsymbol{v}_{i}^{\top}=\sum_{i=1}^{r} \sigma_{i} \boldsymbol{A}_{i},

여기서 외적 행렬 Ai\boldsymbol{A}_{i}ii번째 특이값 σi\sigma_{i}에 의해 가중된다. (4.91)이 성립하는 이유를 알 수 있다: 특이값 행렬 Σ\boldsymbol{\Sigma}의 대각선 구조는 일치하는 좌특이 벡터와 우특이 벡터 uivi\boldsymbol{u}_{i} \boldsymbol{v}_{i}^{\top}만 곱하고 해당 특이값 σi\sigma_{i}로 스케일링한다. Σ\boldsymbol{\Sigma}가 대각 행렬이므로 iji \neq j인 모든 항 Σijuivj\Sigma_{i j} \boldsymbol{u}_{i} \boldsymbol{v}_{j}^{\top}는 사라진다. i>ri>r인 모든 항은 해당 특이값이 0이므로 사라진다.

(4.90)에서 우리는 rank-1 행렬 Ai\boldsymbol{A}_{i}를 도입했다. 우리는 rr개의 개별 rank-1 행렬을 합하여 rank rr 행렬 A\boldsymbol{A}를 얻었다. (4.91)을 참조하라. 만약 합이 모든 행렬 Ai,i=1,,r\boldsymbol{A}_{i}, i=1, \ldots, r에 대해 실행되지 않고 중간 값 k<rk<r까지만 실행된다면, 우리는 rank- kk approximation을 얻는다.

A^(k):=i=1kσiuivi=i=1kσiAi\widehat{\boldsymbol{A}}(k):=\sum_{i=1}^{k} \sigma_{i} \boldsymbol{u}_{i} \boldsymbol{v}_{i}^{\top}=\sum_{i=1}^{k} \sigma_{i} \boldsymbol{A}_{i}

rk(A^(k))=k\operatorname{rk}(\widehat{\boldsymbol{A}}(k))=kA\boldsymbol{A}의 근사이다. 그림 4.12는 스톤헨지 원본 이미지 A\boldsymbol{A}의 low-rank approximation A^(k)\widehat{\boldsymbol{A}}(k)를 보여준다. rank-5 approximation에서는 바위의 형태가 점점 더 뚜렷하게 보이고 명확하게 인식된다. 원본 이미지는 1,4321,910=2,735,1201,432 \cdot 1,910=2,735,120개의 숫자를 필요로 하는 반면, rank-5 approximation은 5개의 특이값과 5개의 좌특이 벡터 및 우특이 벡터(각각 1,432 및 1,910 차원)만 저장하면 되므로 총 5(1,432+1,910+1)=16,7155 \cdot(1,432+1,910+1)=16,715개의 숫자만 필요하다. 이는 원본의 0.6%를 약간 넘는 수준이다.

A\boldsymbol{A}와 그 rank- kk approximation A^(k)\widehat{\boldsymbol{A}}(k) 사이의 차이(오차)를 측정하기 위해 norm의 개념이 필요하다. 섹션 3.1에서 우리는 이미 벡터의 길이를 측정하는 벡터 norm을 사용했다. 유사하게 행렬에 대한 norm도 정의할 수 있다.

정의 4.23 (행렬의 Spectral Norm). xRn\{0}\boldsymbol{x} \in \mathbb{R}^{n} \backslash\{\mathbf{0}\}에 대해 행렬 ARm×n\boldsymbol{A} \in \mathbb{R}^{m \times n}spectral norm은 다음과 같이 정의된다.

A2:=maxxAx2x2.\|\boldsymbol{A}\|_{2}:=\max _{\boldsymbol{x}} \frac{\|\boldsymbol{A} \boldsymbol{x}\|_{2}}{\|\boldsymbol{x}\|_{2}} .

우리는 벡터에 대한 유클리드 norm(오른쪽)과 유사하게 행렬 norm(왼쪽)에 아래첨자를 사용하는 표기법을 도입한다. 유클리드 norm은 아래첨자 2를 갖는다. spectral norm (4.93)은 어떤 벡터 x\boldsymbol{x}A\boldsymbol{A}에 의해 곱해질 때 최대 얼마나 길어질 수 있는지를 결정한다.

정리 4.24. A\boldsymbol{A}의 spectral norm은 가장 큰 특이값 σ1\sigma_{1}이다. 이 정리의 증명은 연습 문제로 남겨둔다. 정리 4.25 (Eckart-Young Theorem (Eckart and Young, 1936)). rank rr인 행렬 ARm×n\boldsymbol{A} \in \mathbb{R}^{m \times n}와 rank kk인 행렬 BRm×n\boldsymbol{B} \in \mathbb{R}^{m \times n}를 고려하자. krk \leqslant r이고 A^(k)=i=1kσiuivi\widehat{\boldsymbol{A}}(k)=\sum_{i=1}^{k} \sigma_{i} \boldsymbol{u}_{i} \boldsymbol{v}_{i}^{\top}일 때 다음이 성립한다.

A^(k)=argminrk(B)=kAB2,AA^(k)2=σk+1.\begin{aligned} \widehat{\boldsymbol{A}}(k) & =\operatorname{argmin}_{\mathrm{rk}(\boldsymbol{B})=k}\|\boldsymbol{A}-\boldsymbol{B}\|_{2}, \\ \|\boldsymbol{A}-\widehat{\boldsymbol{A}}(k)\|_{2} & =\sigma_{k+1} . \end{aligned}

Eckart-Young 정리는 rank- kk approximation을 사용하여 A\boldsymbol{A}를 근사함으로써 얼마나 많은 오차가 발생하는지 명시적으로 나타낸다. SVD로 얻은 rank- kk approximation을 full-rank 행렬 A\boldsymbol{A}를 rank가 최대 kk인 행렬의 더 낮은 차원 공간으로 **투영(projection)**한 것으로 해석할 수 있다. 가능한 모든 투영 중에서 SVD는 A\boldsymbol{A}와 모든 rank- kk approximation 사이의 오차(spectral norm에 대해)를 최소화한다.

(4.95)가 왜 성립해야 하는지 이해하기 위해 몇 단계를 되짚어 볼 수 있다. spectral norm

Eckart-Young theorem

AA^(k)\boldsymbol{A}-\widehat{\boldsymbol{A}}(k)의 차이는 나머지 rank-1 행렬의 합을 포함하는 행렬임을 관찰한다.

AA^(k)=i=k+1rσiuivi\boldsymbol{A}-\widehat{\boldsymbol{A}}(k)=\sum_{i=k+1}^{r} \sigma_{i} \boldsymbol{u}_{i} \boldsymbol{v}_{i}^{\top}

정리 4.24에 의해, 우리는 차이 행렬의 spectral norm으로 σk+1\sigma_{k+1}을 즉시 얻는다. (4.94)를 더 자세히 살펴보자. 만약 rk(B)k\operatorname{rk}(\boldsymbol{B}) \leqslant k인 다른 행렬 B\boldsymbol{B}가 존재하여

AB2<AA^(k)2\|\boldsymbol{A}-\boldsymbol{B}\|_{2}<\|\boldsymbol{A}-\widehat{\boldsymbol{A}}(k)\|_{2}

라면, 적어도 (nk)(n-k) 차원의 null space ZRnZ \subseteq \mathbb{R}^{n}가 존재하여 xZ\boldsymbol{x} \in Z일 때 Bx=0\boldsymbol{B} \boldsymbol{x}=\mathbf{0}이 된다. 그러면 다음이 성립한다.

Ax2=(AB)x2,\|\boldsymbol{A} \boldsymbol{x}\|_{2}=\|(\boldsymbol{A}-\boldsymbol{B}) \boldsymbol{x}\|_{2},

그리고 행렬 norm을 포함하는 Cauchy-Schwartz 부등식 (3.17)의 버전을 사용하면 다음을 얻는다.

Ax2AB2x2<σk+1x2.\|\boldsymbol{A} \boldsymbol{x}\|_{2} \leqslant\|\boldsymbol{A}-\boldsymbol{B}\|_{2}\|\boldsymbol{x}\|_{2}<\sigma_{k+1}\|\boldsymbol{x}\|_{2} .

그러나 A\boldsymbol{A}의 우특이 벡터 vj,jk+1\boldsymbol{v}_{j}, j \leqslant k+1에 의해 span되는 (k+1)(k+1) 차원 부분 공간이 존재하며, 이 공간에서는 Ax2σk+1x2\|\boldsymbol{A} \boldsymbol{x}\|_{2} \geqslant \sigma_{k+1}\|\boldsymbol{x}\|_{2}이다. 이 두 공간의 차원을 합하면 nn보다 큰 숫자가 되므로, 두 공간 모두에 0이 아닌 벡터가 존재해야 한다. 이는 섹션 2.7.3의 rank-nullity 정리 (정리 2.24)와 모순된다.

Eckart-Young 정리는 SVD를 사용하여 rank rr 행렬 A\boldsymbol{A}를 rank kk 행렬 A^\widehat{\boldsymbol{A}}원칙적이고 최적의 (spectral norm 의미에서) 방식으로 축소할 수 있음을 의미한다. rank kk 행렬에 의한 A\boldsymbol{A}의 근사를 **손실 압축(lossy compression)**의 한 형태로 해석할 수 있다. 따라서 행렬의 low-rank approximation은 이미지 처리, 노이즈 필터링, ill-posed 문제의 정규화 등 많은 머신러닝 응용 분야에 나타난다. 또한, 챕터 10에서 보겠지만, 차원 축소 및 주성분 분석에서 핵심적인 역할을 한다.

Example 4.15 (Finding Structure in Movie Ratings and Consumers (continued))

영화 평점 예제로 돌아와서, 이제 low-rank approximation 개념을 적용하여 원본 데이터 행렬을 근사할 수 있다. 첫 번째 singular value가 영화의 공상 과학 테마와 공상 과학 영화를 좋아하는 사람들의 개념을 포착한다는 것을 상기하자. 따라서 영화 평점 행렬의 rank-1 decomposition에서 첫 번째 singular value 항만 사용하면 다음과 같은 예측 평점을 얻을 수 있다.

A1=u1v1=[0.67100.71970.09390.1515][0.73670.65150.1811]\boldsymbol{A}_{1}=\boldsymbol{u}_{1} \boldsymbol{v}_{1}^{\top}=\left[\begin{array}{l} -0.6710 \\ -0.7197 \\ -0.0939 \\ -0.1515 \end{array}\right]\left[\begin{array}{lll} -0.7367 & -0.6515 & -0.1811 \end{array}\right] =[0.49430.43720.12150.53020.46890.13030.06920.06120.01700.11160.09870.0274]=\left[\begin{array}{lll} 0.4943 & 0.4372 & 0.1215 \\ 0.5302 & 0.4689 & 0.1303 \\ 0.0692 & 0.0612 & 0.0170 \\ 0.1116 & 0.0987 & 0.0274 \end{array}\right]

이 첫 번째 rank-1 approximation A1\boldsymbol{A}_{1}은 통찰력이 있다. 즉, Ali와 Beatrix가 Star Wars 및 Bladerunner와 같은 공상 과학 영화를 좋아하지만(항목 값이 >0.4>0.4), Chandra의 다른 영화 평점은 포착하지 못한다는 것을 알려준다. Chandra가 좋아하는 영화 유형이 첫 번째 singular value에 의해 포착되지 않으므로 이는 놀라운 일이 아니다. 두 번째 singular value는 이러한 영화 테마 애호가들에게 더 나은 rank-1 approximation을 제공한다.

A2=u2v2=[0.02360.20540.77050.6030][0.08520.17620.9807]=[0.00200.00420.02310.01750.03620.20140.06560.13580.75560.05140.10630.5914]\begin{aligned} \boldsymbol{A}_{2} & =\boldsymbol{u}_{2} \boldsymbol{v}_{2}^{\top}=\left[\begin{array}{c} 0.0236 \\ 0.2054 \\ -0.7705 \\ -0.6030 \end{array}\right]\left[\begin{array}{lll} 0.0852 & 0.1762 & -0.9807 \end{array}\right] \\ & =\left[\begin{array}{ccc} 0.0020 & 0.0042 & -0.0231 \\ 0.0175 & 0.0362 & -0.2014 \\ -0.0656 & -0.1358 & 0.7556 \\ -0.0514 & -0.1063 & 0.5914 \end{array}\right] \end{aligned}

이 두 번째 rank-1 approximation A2\boldsymbol{A}_{2}에서는 Chandra의 평점과 영화 유형을 잘 포착하지만, 공상 과학 영화는 포착하지 못한다. 이는 첫 번째 두 rank-1 approximation을 결합한 rank-2 approximation A^(2)\widehat{\boldsymbol{A}}(2)를 고려하게 한다.

A^(2)=σ1A1+σ2A2=[4.78014.24191.02445.22524.75220.02500.24930.27434.97240.74950.27564.0278]\widehat{\boldsymbol{A}}(2)=\sigma_{1} \boldsymbol{A}_{1}+\sigma_{2} \boldsymbol{A}_{2}=\left[\begin{array}{ccc} 4.7801 & 4.2419 & 1.0244 \\ 5.2252 & 4.7522 & -0.0250 \\ 0.2493 & -0.2743 & 4.9724 \\ 0.7495 & 0.2756 & 4.0278 \end{array}\right]

A^(2)\widehat{\boldsymbol{A}}(2)는 원본 영화 평점 테이블과 유사하다.

A=[541550005104]\boldsymbol{A}=\left[\begin{array}{lll} 5 & 4 & 1 \\ 5 & 5 & 0 \\ 0 & 0 & 5 \\ 1 & 0 & 4 \end{array}\right]

이는 A3\boldsymbol{A}_{3}의 기여를 무시할 수 있음을 시사한다. 데이터 테이블에 세 번째 영화 테마/영화 애호가 범주에 대한 증거가 없다고 해석할 수 있다. 이는 또한 우리 예시에서 영화 테마/영화 애호가의 전체 공간이 공상 과학 및 프랑스 예술 영화와 애호가에 의해 확장되는 2차원 공간임을 의미한다.

Figure 4.13 머신러닝에서 접하는 행렬의 기능적 계통 발생.

4.7 Matrix Phylogeny

2장과 3장에서는 선형대수와 해석 기하학의 기초를 다루었다. 이 장에서는 행렬과 선형 사상의 근본적인 특성을 살펴보았다. 그림 4.13은 다양한 유형의 행렬 간의 관계(검은색 화살표는 "의 부분집합이다"를 나타냄)와 우리가 수행할 수 있는 연산(파란색)의 계통수를 보여준다. 우리는 모든 실수 행렬 ARn×m\boldsymbol{A} \in \mathbb{R}^{n \times m}을 고려한다. 이 장에서 보았듯이, 비정방 행렬( nmn \neq m인 경우)의 경우 SVD는 항상 존재한다. 정방 행렬 ARn×n\boldsymbol{A} \in \mathbb{R}^{n \times n}에 초점을 맞추면, **행렬식(determinant)**은 정방 행렬이 역행렬을 가지는지, 즉 정칙(regular) 행렬 또는 가역(invertible) 행렬 클래스에 속하는지 알려준다. 만약 n×nn \times n 정방 행렬이 nn개의 선형 독립적인 고유 벡터를 가진다면, 그 행렬은 비결함(non-defective) 행렬이며 **고유값 분해(eigendecomposition)**가 존재한다(정리 4.12). 우리는 반복되는 고유값이 결함(defective) 행렬을 초래할 수 있으며, 이러한 행렬은 대각화될 수 없다는 것을 알고 있다.

비특이(non-singular) 행렬비결함(non-defective) 행렬은 동일하지 않다. 예를 들어, 회전 행렬은 가역적이지만(행렬식이 0이 아님) 실수 범위에서는 대각화될 수 없다(고유값이 실수라는 보장이 없음).

"phylogenetic"이라는 단어는 개인이나 그룹 간의 관계를 포착하는 방식을 설명하며, 그리스어로 "부족"과 "근원"을 의미하는 단어에서 유래했다.

우리는 비결함 n×nn \times n 정방 행렬의 가지를 더 깊이 파고든다. AA=AA\boldsymbol{A}^{\top} \boldsymbol{A}=\boldsymbol{A} \boldsymbol{A}^{\top} 조건이 성립하면 A\boldsymbol{A}정규(normal) 행렬이다. 또한, 더 제한적인 조건인 AA=AA=I\boldsymbol{A}^{\top} \boldsymbol{A}=\boldsymbol{A} \boldsymbol{A}^{\top}=\boldsymbol{I}가 성립하면 A\boldsymbol{A}직교(orthogonal) 행렬이라고 불린다(정의 3.8 참조). 직교 행렬의 집합은 정칙(가역) 행렬의 부분집합이며 A=A1\boldsymbol{A}^{\top}=\boldsymbol{A}^{-1}를 만족한다.

정규 행렬에는 자주 접하는 부분집합인 대칭 행렬(symmetric matrices) SRn×n\boldsymbol{S} \in \mathbb{R}^{n \times n}이 있으며, 이는 S=S\boldsymbol{S}=\boldsymbol{S}^{\top}를 만족한다. 대칭 행렬은 실수 고유값만 가진다. 대칭 행렬의 부분집합 중 하나는 모든 xRn\{0}\boldsymbol{x} \in \mathbb{R}^{n} \backslash\{\mathbf{0}\}에 대해 xPx>0\boldsymbol{x}^{\top} \boldsymbol{P} \boldsymbol{x}>0 조건을 만족하는 양의 정부호 행렬(positive definite matrices) P\boldsymbol{P}이다. 이 경우, 유일한 Cholesky 분해가 존재한다(정리 4.18). 양의 정부호 행렬은 양의 고유값만 가지며 항상 가역적이다(즉, 0이 아닌 행렬식을 가진다).

대칭 행렬의 또 다른 부분집합은 대각 행렬(diagonal matrices) D\boldsymbol{D}이다. 대각 행렬은 곱셈과 덧셈에 대해 닫혀 있지만, 반드시 군(group)을 형성하지는 않는다(모든 대각 성분이 0이 아니어서 행렬이 가역적인 경우에만 해당). 특별한 대각 행렬은 항등 행렬(identity matrix) I\boldsymbol{I}이다.

4.8 Further Reading

이 장의 대부분 내용은 기본 수학을 확립하고 이를 매핑 연구 방법과 연결한다. 이 방법들 중 다수는 소프트웨어 솔루션의 기반 수준에서 머신러닝의 핵심이며, 거의 모든 머신러닝 이론의 빌딩 블록이다. 행렬식(determinant), 고유 스펙트럼(eigenspectra), 고유 공간(eigenspaces)을 사용한 행렬 특성화는 행렬을 분류하고 분석하기 위한 근본적인 특징과 조건을 제공한다. 이는 데이터 및 데이터를 포함하는 매핑의 모든 형태의 표현으로 확장되며, 이러한 행렬에 대한 계산 작업의 **수치적 안정성(numerical stability)**을 판단하는 데도 적용된다 (Press et al., 2007).

행렬식은 행렬을 역행렬하고 고유값을 "수동으로" 계산하는 데 필수적인 도구이다. 그러나 가장 작은 경우를 제외하고는 거의 모든 경우에 가우스 소거법(Gaussian elimination)을 통한 수치 계산이 행렬식보다 우수하다 (Press et al., 2007). 그럼에도 불구하고 행렬식은 강력한 이론적 개념으로 남아 있으며, 예를 들어 행렬식의 부호를 기반으로 기저의 방향에 대한 직관을 얻는 데 사용된다. **고유 벡터(eigenvectors)**는 데이터를 의미 있는 직교 특징 벡터의 좌표로 변환하기 위해 **기저 변경(basis changes)**을 수행하는 데 사용될 수 있다. 유사하게, **Cholesky 분해(Cholesky decomposition)**와 같은 행렬 분해 방법은 무작위 이벤트를 계산하거나 시뮬레이션할 때 자주 다시 나타난다 (Rubinstein and Kroese, 2016). 따라서 Cholesky 분해는 **변분 오토인코더(variational autoencoders)**와 같이 확률 변수에 대해 연속 미분을 수행하려는 경우 **재매개변수화 트릭(reparametrization trick)**을 계산할 수 있게 한다 (Jimenez Rezende et al., 2014; Kingma and Welling, 2014).

**고유 분해(Eigendecomposition)**는 선형 매핑을 특징짓는 의미 있고 해석 가능한 정보를 추출하는 데 필수적이다.

따라서 고유 분해는 **양의 정부호 커널(positive-definite kernel)의 고유 분해를 수행하는 스펙트럼 방법(spectral methods)**이라는 일반적인 머신러닝 알고리즘 클래스의 기반이 된다. 이러한 스펙트럼 분해 방법은 다음과 같은 통계 데이터 분석의 고전적인 접근 방식을 포함한다:

  • 주성분 분석(principal component analysis)

  • Fisher 판별 분석(Fisher discriminant analysis)

  • 다차원 척도법(multidimensional scaling)

  • Isomap

  • Laplacian eigenmaps

  • Hessian eigenmaps

  • 스펙트럼 클러스터링(spectral clustering)

  • Tucker 분해(Tucker decomposition)

  • CP 분해(CP decomposition)

  • 주성분 분석(Principal component analysis, PCA) (Pearson, 1901; 10장 참조): 데이터의 대부분의 변동성을 설명하는 저차원 부분 공간을 찾는 방법.

  • Fisher 판별 분석(Fisher discriminant analysis): 데이터 분류를 위한 분리 초평면을 결정하는 것을 목표로 한다 (Mika et al., 1999).

  • 다차원 척도법(Multidimensional scaling, MDS) (Carroll and Chang, 1970).

이러한 방법들의 계산 효율성은 일반적으로 **대칭 양의 준정부호 행렬(symmetric, positive semidefinite matrix)에 대한 최적의 랭크-kk 근사(rank-kk approximation)**를 찾는 데서 비롯된다. 스펙트럼 방법의 더 현대적인 예시들은 다른 기원을 가지고 있지만, 각각 Isomap (Tenenbaum et al., 2000), Laplacian eigenmaps (Belkin and Niyogi, 2003), Hessian eigenmaps (Donoho and Grimes, 2003), 스펙트럼 클러스터링 (Shi and Malik, 2000)과 같이 양의 정부호 커널의 고유 벡터와 고유값 계산을 필요로 한다. 이들의 핵심 계산은 일반적으로 **저랭크 행렬 근사 기법(low-rank matrix approximation techniques)**에 의해 뒷받침된다 (Belabbas and Wolfe, 2009). 이는 우리가 SVD를 통해 접했던 것과 같다.

**SVD(Singular Value Decomposition)**는 고유 분해와 동일한 종류의 정보를 일부 발견할 수 있게 한다. 그러나 SVD는 비정방 행렬(non-square matrices) 및 데이터 테이블에 더 일반적으로 적용 가능하다. 이러한 행렬 분해(matrix factorization) 방법은 다음과 같은 경우에 관련성이 높아진다:

  • 데이터의 이질성(heterogeneity)을 식별하려는 경우.
  • 근사를 통해 데이터 압축을 수행하려는 경우 (예: n×mn \times m 값을 저장하는 대신 (n+m)k(n+m)k 값만 저장).
  • 데이터 전처리를 수행하려는 경우 (예: 설계 행렬의 예측 변수 간의 상관관계를 제거) (Ormoneit et al., 2001).

SVD는 두 개의 인덱스(행과 열)를 가진 직사각형 배열로 해석할 수 있는 행렬에 대해 작동한다. 행렬과 유사한 구조를 고차원 배열로 확장한 것을 **텐서(tensors)**라고 한다. SVD는 이러한 텐서에 대해 작동하는 더 일반적인 분해 계열의 특수한 경우임이 밝혀졌다 (Kolda and Bader, 2009). 텐서에 대한 SVD와 유사한 연산 및 저랭크 근사에는 예를 들어 Tucker 분해 (Tucker, 1966) 또는 CP 분해 (Carroll and Chang, 1970)가 있다.

SVD 저랭크 근사는 계산 효율성 때문에 머신러닝에서 자주 사용된다. 이는 잠재적으로 매우 큰 데이터 행렬에 대해 수행해야 하는 메모리 양과 0이 아닌 곱셈 연산의 수를 줄여주기 때문이다 (Trefethen and Bau III, 1997). 또한, 저랭크 근사는 결측값(missing values)을 포함할 수 있는 행렬에 대해 작동하는 데 사용되며, 손실 압축(lossy compression) 및 차원 축소(dimensionality reduction) 목적으로도 사용된다 (Moonen and De Moor, 1995; Markovsky, 2011).

Exercises

4.1 다음 행렬에 대해 Laplace expansion(첫 번째 행 사용)과 Sarrus rule을 사용하여 determinant를 계산하시오.

A=[135246024]\boldsymbol{A}=\left[\begin{array}{lll} 1 & 3 & 5 \\ 2 & 4 & 6 \\ 0 & 2 & 4 \end{array}\right]

4.2 다음 determinant를 효율적으로 계산하시오.

[2012021011012122021220011].\left[\begin{array}{ccccc} 2 & 0 & 1 & 2 & 0 \\ 2 & -1 & 0 & 1 & 1 \\ 0 & 1 & 2 & 1 & 2 \\ -2 & 0 & 2 & -1 & 2 \\ 2 & 0 & 0 & 1 & 1 \end{array}\right] .

4.3 다음 행렬의 eigenspace를 계산하시오. a.

A:=[1011]\boldsymbol{A}:=\left[\begin{array}{ll} 1 & 0 \\ 1 & 1 \end{array}\right]

b.

B:=[2221]\boldsymbol{B}:=\left[\begin{array}{cc} -2 & 2 \\ 2 & 1 \end{array}\right]

4.4 다음 행렬의 모든 eigenspace를 계산하시오.

A=[0111112321001110]\boldsymbol{A}=\left[\begin{array}{cccc} 0 & -1 & 1 & 1 \\ -1 & 1 & -2 & 3 \\ 2 & -1 & 0 & 0 \\ 1 & -1 & 1 & 0 \end{array}\right]

4.5 행렬의 diagonalizabilityinvertibility와 관련이 없다. 다음 네 행렬이 diagonalizable한지 그리고/또는 invertible한지 판단하시오.

[1001],[1000],[1101],[0100]\left[\begin{array}{ll} 1 & 0 \\ 0 & 1 \end{array}\right], \quad\left[\begin{array}{ll} 1 & 0 \\ 0 & 0 \end{array}\right], \quad\left[\begin{array}{ll} 1 & 1 \\ 0 & 1 \end{array}\right], \quad\left[\begin{array}{ll} 0 & 1 \\ 0 & 0 \end{array}\right]

4.6 다음 변환 행렬의 eigenspace를 계산하시오. 이 행렬들은 diagonalizable한가? a.

A=[230143001]\boldsymbol{A}=\left[\begin{array}{lll} 2 & 3 & 0 \\ 1 & 4 & 3 \\ 0 & 0 & 1 \end{array}\right]

b.

A=[1100000000000000]\boldsymbol{A}=\left[\begin{array}{llll} 1 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{array}\right]

4.7 다음 행렬들은 diagonalizable한가? 만약 그렇다면, diagonal form과 변환 행렬이 diagonal이 되는 basis를 결정하시오. 만약 그렇지 않다면, diagonalizable하지 않은 이유를 설명하시오. a.

A=[0184]\boldsymbol{A}=\left[\begin{array}{cc} 0 & 1 \\ -8 & 4 \end{array}\right]

b.

A=[111111111]\boldsymbol{A}=\left[\begin{array}{lll} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{array}\right]

c.

A=[5421011111301112]\boldsymbol{A}=\left[\begin{array}{cccc} 5 & 4 & 2 & 1 \\ 0 & 1 & -1 & -1 \\ -1 & -1 & 3 & 0 \\ 1 & 1 & -1 & 2 \end{array}\right]

d.

A=[566142364]\boldsymbol{A}=\left[\begin{array}{ccc} 5 & -6 & -6 \\ -1 & 4 & 2 \\ 3 & -6 & -4 \end{array}\right]

4.8 다음 행렬의 SVD를 구하시오.

A=[322232]\boldsymbol{A}=\left[\begin{array}{ccc} 3 & 2 & 2 \\ 2 & 3 & -2 \end{array}\right]

4.9 다음 행렬의 singular value decomposition을 구하시오.

A=[2211]\boldsymbol{A}=\left[\begin{array}{cc} 2 & 2 \\ -1 & 1 \end{array}\right]

4.10 다음 행렬의 rank-1 approximation을 구하시오.

A=[322232]\boldsymbol{A}=\left[\begin{array}{ccc} 3 & 2 & 2 \\ 2 & 3 & -2 \end{array}\right]

4.11 모든 ARm×n\boldsymbol{A} \in \mathbb{R}^{m \times n}에 대해 행렬 AA\boldsymbol{A}^{\top} \boldsymbol{A}AA\boldsymbol{A} \boldsymbol{A}^{\top}가 동일한 nonzero eigenvalue를 가짐을 보이시오. 4.12 x0\boldsymbol{x} \neq \mathbf{0}에 대해 Theorem 4.24가 성립함을 보이시오. 즉, 다음을 보이시오.

maxxAx2x2=σ1,\max _{\boldsymbol{x}} \frac{\|\boldsymbol{A} \boldsymbol{x}\|_{2}}{\|\boldsymbol{x}\|_{2}}=\sigma_{1},

여기서 σ1\sigma_{1}ARm×n\boldsymbol{A} \in \mathbb{R}^{m \times n}의 가장 큰 singular value이다.

Vector Calculus

머신러닝의 많은 알고리즘은 모델이 데이터를 얼마나 잘 설명하는지를 제어하는 원하는 모델 파라미터 집합에 대해 목적 함수를 최적화한다. 좋은 파라미터를 찾는 것은 최적화 문제로 표현될 수 있다 (섹션 8.2 및 8.3 참조). 예시는 다음과 같다:

(i) 선형 회귀(linear regression) (9장 참조): 곡선 피팅 문제를 다루고 선형 가중치 파라미터를 최적화하여 우도(likelihood)를 최대화한다. (ii) 차원 축소(dimensionality reduction) 및 데이터 압축을 위한 신경망 오토인코더(neural-network auto-encoders): 파라미터는 각 레이어의 가중치와 편향이며, 연쇄 법칙(chain rule)을 반복적으로 적용하여 재구성 오류(reconstruction error)를 최소화한다. (iii) 데이터 분포 모델링을 위한 가우시안 혼합 모델(Gaussian mixture models) (11장 참조): 각 혼합 요소의 위치 및 형태 파라미터를 최적화하여 모델의 우도를 최대화한다.

그림 5.1은 이러한 문제 중 일부를 보여주며, 우리는 일반적으로 **경사 정보(gradient information)**를 활용하는 최적화 알고리즘(섹션 7.1)을 사용하여 이를 해결한다. 그림 5.2는 이 장의 개념들이 어떻게 관련되어 있고 책의 다른 장들과 어떻게 연결되는지에 대한 개요를 제공한다.

이 장의 핵심은 **함수(function)**의 개념이다. 함수 ff는 두 양을 서로 연관시키는 양이다. 이 책에서 이러한 양은 일반적으로 입력 xRD\boldsymbol{x} \in \mathbb{R}^{D}와 목표(함수 값) f(x)f(\boldsymbol{x})이며, 별도로 명시되지 않는 한 실수 값이라고 가정한다. 여기서 RD\mathbb{R}^{D}ff의 **도메인(domain)**이고, 함수 값 f(x)f(\boldsymbol{x})ff의 **이미지/코도메인(image/codomain)**이다.

(a) 회귀 문제: 곡선이 관측치(십자 표시)를 잘 설명하도록 파라미터를 찾는다.

도메인 이미지/코도메인 그림 5.1 **벡터 미적분(Vector calculus)**은 (a) 회귀(곡선 피팅) 및 (b) 밀도 추정, 즉 데이터 분포 모델링에서 중심적인 역할을 한다.

그림 5.2 이 장에서 소개된 개념들의 마인드맵과 책의 다른 부분에서 사용되는 시점.

섹션 2.7.3에서는 선형 함수(linear functions)의 맥락에서 훨씬 더 자세한 논의를 제공한다. 우리는 종종 다음과 같이 쓴다.

f:RDRxf(x)\begin{aligned} f: \mathbb{R}^{D} & \rightarrow \mathbb{R} \\ \boldsymbol{x} & \mapsto f(\boldsymbol{x}) \end{aligned}

함수를 지정하기 위해, (5.1a)는 ffRD\mathbb{R}^{D}에서 R\mathbb{R}로의 매핑임을 지정하고 (5.1b)는 입력 x\boldsymbol{x}를 함수 값 f(x)f(\boldsymbol{x})에 명시적으로 할당하는 것을 지정한다. 함수 ff는 모든 입력 x\boldsymbol{x}에 대해 정확히 하나의 함수 값 f(x)f(\boldsymbol{x})를 할당한다.

Example 5.1

내적(inner product)의 특수한 경우로 **점곱(dot product)**을 상기해 보자 (섹션 3.2). 이전 표기법에서 함수 f(x)=xx,xR2f(\boldsymbol{x})=\boldsymbol{x}^{\top} \boldsymbol{x}, \boldsymbol{x} \in \mathbb{R}^{2}는 다음과 같이 지정될 수 있다:

f:R2Rxx12+x22.\begin{aligned} f: \mathbb{R}^{2} & \rightarrow \mathbb{R} \\ \boldsymbol{x} & \mapsto x_{1}^{2}+x_{2}^{2} . \end{aligned}

이 장에서는 함수의 gradient를 계산하는 방법을 논의할 것이다. gradient는 가장 가파른 상승 방향을 가리키기 때문에 머신러닝 모델에서 학습을 용이하게 하는 데 종종 필수적이다. 따라서

그림 5.3 x0x_0x0+δxx_0 + \delta x 사이의 함수 ff의 평균 기울기는 f(x0)f(x_0)f(x0+δx)f(x_0 + \delta x)를 지나는 할선(파란색)의 기울기이며 δy/δx\delta y / \delta x로 주어진다.

벡터 미적분학은 머신러닝에서 필요한 기본적인 수학적 도구 중 하나이다. 이 책 전체에서 우리는 함수가 **미분 가능(differentiable)**하다고 가정한다. 여기에 다루지 않는 몇 가지 추가적인 기술적 정의를 통해, 제시된 많은 접근 방식은 sub-differential (연속적이지만 특정 지점에서 미분 불가능한 함수)로 확장될 수 있다. 제7장에서는 제약 조건이 있는 함수의 경우로의 확장을 살펴볼 것이다.

5.1 Differentiation of Univariate Functions

다음에서는 고등학교 수학에서 익숙할 수 있는 단변수 함수(univariate function)의 미분에 대해 간략하게 다시 살펴본다. 우리는 단변수 함수 y=f(x),x,yRy=f(x), x, y \in \mathbb{R}미분 계수(difference quotient) 부터 시작하며, 이를 사용하여 도함수를 정의할 것이다.

정의 5.1 (미분 계수). 미분 계수

δyδx:=f(x+δx)f(x)δx\frac{\delta y}{\delta x}:=\frac{f(x+\delta x)-f(x)}{\delta x}

ff 그래프 상의 두 점을 지나는 할선(secant line)의 기울기를 계산한다. 그림 5.3에서 이 점들은 xx-좌표가 x0x_{0}x0+δxx_{0}+\delta x인 점들이다.

미분 계수는 ff를 선형 함수로 가정할 경우 xxx+δxx+\delta x 사이에서 ff평균 기울기로도 간주될 수 있다. δx0\delta x \rightarrow 0으로 극한을 취하면, ff가 미분 가능할 경우 xx에서 ff접선(tangent) 을 얻는다. 이 접선은 xx에서 ff의 도함수가 된다.

정의 5.2 (도함수). 더 형식적으로, h>0h>0에 대해 xx에서의 ff의 도함수는 다음과 같은 극한으로 정의된다.

df dx:=limh0f(x+h)f(x)h,\frac{\mathrm{d} f}{\mathrm{~d} x}:=\lim _{h \rightarrow 0} \frac{f(x+h)-f(x)}{h},

그리고 그림 5.3의 할선은 접선이 된다. ff의 도함수는 ff가장 가파른 상승 방향을 가리킨다.

Example 5.2 (Derivative of a Polynomial)

우리는 f(x)=xn,nNf(x)=x^{n}, n \in \mathbb{N}의 도함수를 계산하고자 한다. 답이 nxn1n x^{n-1}이라는 것을 이미 알고 있을 수 있지만, 미분계수의 정의를 사용하여 이 결과를 도출하고자 한다.

(5.4)의 미분계수 정의를 사용하면 다음과 같다.

df dx=limh0f(x+h)f(x)h=limh0(x+h)nxnh=limh0i=0n(ni)xnihixnh.\begin{aligned} \frac{\mathrm{d} f}{\mathrm{~d} x} & =\lim _{h \rightarrow 0} \frac{f(x+h)-f(x)}{h} \\ & =\lim _{h \rightarrow 0} \frac{(x+h)^{n}-x^{n}}{h} \\ & =\lim _{h \rightarrow 0} \frac{\sum_{i=0}^{n}\binom{n}{i} x^{n-i} h^{i}-x^{n}}{h} . \end{aligned}

xn=(n0)xn0h0x^{n}=\binom{n}{0} x^{n-0} h^{0}임을 알 수 있다. 합을 1부터 시작하면 xnx^{n} 항이 상쇄되어 다음을 얻는다.

df dx=limh0i=1n(ni)xnihih=limh0i=1n(ni)xnihi1=limh0(n1)xn1+i=2n(ni)xnihi10 as h0=n!1!(n1)!xn1=nxn1\begin{aligned} \frac{\mathrm{d} f}{\mathrm{~d} x} & =\lim _{h \rightarrow 0} \frac{\sum_{i=1}^{n}\binom{n}{i} x^{n-i} h^{i}}{h} \\ & =\lim _{h \rightarrow 0} \sum_{i=1}^{n}\binom{n}{i} x^{n-i} h^{i-1} \\ & =\lim _{h \rightarrow 0}\binom{n}{1} x^{n-1}+\underbrace{\sum_{i=2}^{n}\binom{n}{i} x^{n-i} h^{i-1}}_{\rightarrow 0 \text { as } h \rightarrow 0} \\ & =\frac{n!}{1!(n-1)!} x^{n-1}=n x^{n-1} \end{aligned}

5.1.1 Taylor Series

Taylor series는 함수 ff를 무한 항의 합으로 표현한 것이다. 이 항들은 x0x_0에서 평가된 ff의 도함수를 사용하여 결정된다.

Taylor polynomial 우리는 모든 tRt \in \mathbb{R}에 대해 t0:=1t^0 := 1로 정의한다.

Taylor series

정의 5.3 (Taylor Polynomial). x0x_0에서 f:RRf: \mathbb{R} \rightarrow \mathbb{R}nn차 Taylor polynomial은 다음과 같이 정의된다.

Tn(x):=k=0nf(k)(x0)k!(xx0)k,T_{n}(x):=\sum_{k=0}^{n} \frac{f^{(k)}\left(x_{0}\right)}{k!}\left(x-x_{0}\right)^{k},

여기서 f(k)(x0)f^{(k)}\left(x_{0}\right)x0x_0에서 ffkk차 도함수(존재한다고 가정)이며, f(k)(x0)k!\frac{f^{(k)}\left(x_{0}\right)}{k!}polynomial의 계수이다.

정의 5.4 (Taylor Series). smooth 함수 fC,f:RRf \in \mathcal{C}^{\infty}, f: \mathbb{R} \rightarrow \mathbb{R}에 대해, x0x_0에서 ffTaylor series는 다음과 같이 정의된다.

T(x)=k=0f(k)(x0)k!(xx0)k.T_{\infty}(x)=\sum_{k=0}^{\infty} \frac{f^{(k)}\left(x_{0}\right)}{k!}\left(x-x_{0}\right)^{k} .

x0=0x_0=0일 때, 우리는 Taylor series의 특별한 경우로 Maclaurin series를 얻는다. 만약 f(x)=T(x)f(x)=T_{\infty}(x)이면, ffanalytic이라고 불린다.

비고. 일반적으로 nnTaylor polynomial은 함수에 대한 근사치이며, 반드시 polynomial일 필요는 없다. Taylor polynomialx0x_0 주변의 neighborhood에서 ff와 유사하다. 그러나 nnTaylor polynomialknk \leqslant npolynomial ff의 정확한 표현인데, 이는 모든 도함수 f(i),i>kf^{(i)}, i>k가 0이 되기 때문이다.

Example 5.3 (Taylor Polynomial)

우리는 다항식

f(x)=x4f(x)=x^{4}

를 고려하고, x0=1x_{0}=1에서 평가된 Taylor polynomial T6T_{6}를 찾는다. 먼저 k=0,,6k=0, \ldots, 6에 대해 계수 f(k)(1)f^{(k)}(1)를 계산한다:

f(1)=1f(1)=4f(1)=12f(3)(1)=24f(4)(1)=24f(5)(1)=0f(6)(1)=0\begin{aligned} f(1) & =1 \\ f^{\prime}(1) & =4 \\ f^{\prime \prime}(1) & =12 \\ f^{(3)}(1) & =24 \\ f^{(4)}(1) & =24 \\ f^{(5)}(1) & =0 \\ f^{(6)}(1) & =0 \end{aligned}

따라서 원하는 Taylor polynomial은 다음과 같다:

T6(x)=k=06f(k)(x0)k!(xx0)k=1+4(x1)+6(x1)2+4(x1)3+(x1)4+0\begin{aligned} T_{6}(x) & =\sum_{k=0}^{6} \frac{f^{(k)}\left(x_{0}\right)}{k!}\left(x-x_{0}\right)^{k} \\ & =1+4(x-1)+6(x-1)^{2}+4(x-1)^{3}+(x-1)^{4}+0 \end{aligned}

전개하고 재배열하면 다음과 같다:

T6(x)=(14+64+1)+x(412+124)+x2(612+6)+x3(44)+x4=x4=f(x)\begin{aligned} T_{6}(x)= & (1-4+6-4+1)+x(4-12+12-4) \\ & +x^{2}(6-12+6)+x^{3}(4-4)+x^{4} \\ = & x^{4}=f(x) \end{aligned}

즉, 우리는 원래 함수의 정확한 표현을 얻는다. fCf \in \mathcal{C}^{\infty}ff가 무한히 여러 번 연속적으로 미분 가능하다는 것을 의미한다. Maclaurin series analytic

Figure 5.4 Taylor polynomials. x0=0x_{0}=0 주변에서 Taylor polynomial(점선)로 근사된 원래 함수 f(x)=sin(x)+cos(x)f(x)= \sin (x)+\cos (x) (검은색, 실선). 고차 Taylor polynomial은 함수 ff를 더 잘, 그리고 더 전역적으로 근사한다. T10T_{10}[4,4][-4,4]에서 이미 ff와 유사하다.

Example 5.4 (Taylor Series)

그림 5.4에 주어진 함수를 고려해 보자.

f(x)=sin(x)+cos(x)Cf(x)=\sin (x)+\cos (x) \in \mathcal{C}^{\infty}

우리는 x0=0x_{0}=0에서 ffTaylor series expansion, 즉 Maclaurin series expansion을 찾고자 한다. 다음 도함수들을 얻을 수 있다:

f(0)=sin(0)+cos(0)=1f(0)=cos(0)sin(0)=1f(0)=sin(0)cos(0)=1f(3)(0)=cos(0)+sin(0)=1f(4)(0)=sin(0)+cos(0)=f(0)=1\begin{aligned} f(0) & =\sin (0)+\cos (0)=1 \\ f^{\prime}(0) & =\cos (0)-\sin (0)=1 \\ f^{\prime \prime}(0) & =-\sin (0)-\cos (0)=-1 \\ f^{(3)}(0) & =-\cos (0)+\sin (0)=-1 \\ f^{(4)}(0) & =\sin (0)+\cos (0)=f(0)=1 \end{aligned}

여기서 패턴을 발견할 수 있다: Taylor series의 계수는 ±1\pm 1뿐이며(sin(0)=0\sin (0)=0이므로), 각각 두 번씩 나타난 후 다른 값으로 바뀐다. 또한, f(k+4)(0)=f(k)(0)f^{(k+4)}(0)=f^{(k)}(0)이다.

따라서 x0=0x_{0}=0에서 ff의 전체 Taylor series expansion은 다음과 같다:

T(x)=k=0f(k)(x0)k!(xx0)k=1+x12!x213!x3+14!x4+15!x5=112!x2+14!x4+x13!x3+15!x5=k=0(1)k1(2k)!x2k+k=0(1)k1(2k+1)!x2k+1=cos(x)+sin(x)\begin{aligned} T_{\infty}(x) & =\sum_{k=0}^{\infty} \frac{f^{(k)}\left(x_{0}\right)}{k!}\left(x-x_{0}\right)^{k} \\ & =1+x-\frac{1}{2!} x^{2}-\frac{1}{3!} x^{3}+\frac{1}{4!} x^{4}+\frac{1}{5!} x^{5}-\cdots \\ & =1-\frac{1}{2!} x^{2}+\frac{1}{4!} x^{4} \mp \cdots+x-\frac{1}{3!} x^{3}+\frac{1}{5!} x^{5} \mp \cdots \\ & =\sum_{k=0}^{\infty}(-1)^{k} \frac{1}{(2 k)!} x^{2 k}+\sum_{k=0}^{\infty}(-1)^{k} \frac{1}{(2 k+1)!} x^{2 k+1} \\ & =\cos (x)+\sin (x) \end{aligned}

여기서 우리는 다음 power series 표현을 사용했다:

cos(x)=k=0(1)k1(2k)!x2ksin(x)=k=0(1)k1(2k+1)!x2k+1\begin{aligned} \cos (x) & =\sum_{k=0}^{\infty}(-1)^{k} \frac{1}{(2 k)!} x^{2 k} \\ \sin (x) & =\sum_{k=0}^{\infty}(-1)^{k} \frac{1}{(2 k+1)!} x^{2 k+1} \end{aligned}

그림 5.4는 n=n= 0,1,5,10에 해당하는 첫 번째 Taylor polynomials TnT_{n}을 보여준다.

비고. Taylor series는 power series의 특별한 경우이다.

f(x)=k=0ak(xc)kf(x)=\sum_{k=0}^{\infty} a_{k}(x-c)^{k}

여기서 aka_{k}는 계수이고 cc는 상수이며, 정의 5.4에서 특별한 형태를 가진다.

5.1.2 Differentiation Rules

다음에서는 기본적인 미분 규칙을 간략하게 설명하며, ff의 미분은 ff^{\prime}로 표기한다.

곱셈 규칙 (Product rule): (f(x)g(x))=f(x)g(x)+f(x)g(x)\quad(f(x) g(x))^{\prime}=f^{\prime}(x) g(x)+f(x) g^{\prime}(x)

나눗셈 규칙 (Quotient rule): (f(x)g(x))=f(x)g(x)f(x)g(x)(g(x))2\quad\left(\frac{f(x)}{g(x)}\right)^{\prime}=\frac{f^{\prime}(x) g(x)-f(x) g^{\prime}(x)}{(g(x))^{2}}

덧셈 규칙 (Sum rule): (f(x)+g(x))=f(x)+g(x)\quad(f(x)+g(x))^{\prime}=f^{\prime}(x)+g^{\prime}(x)

연쇄 규칙 (Chain rule): (g(f(x)))=(gf)(x)=g(f(x))f(x)\quad(g(f(x)))^{\prime}=(g \circ f)^{\prime}(x)=g^{\prime}(f(x)) f^{\prime}(x)

여기서 gfg \circ f는 함수 합성 xf(x)g(f(x))x \mapsto f(x) \mapsto g(f(x))를 나타낸다.

Example 5.5 (Chain Rule)

이제 연쇄 법칙(chain rule)을 사용하여 함수 h(x)=(2x+1)4h(x)=(2 x+1)^{4}의 도함수를 계산해 보자.

h(x)=(2x+1)4=g(f(x))f(x)=2x+1g(f)=f4\begin{aligned} & h(x)=(2 x+1)^{4}=g(f(x)) \\ & f(x)=2 x+1 \\ & g(f)=f^{4} \end{aligned}

위와 같이 정의하면, ffgg의 도함수는 다음과 같다.

f(x)=2g(f)=4f3\begin{aligned} & f^{\prime}(x)=2 \\ & g^{\prime}(f)=4 f^{3} \end{aligned}

이러한 **멱급수 표현(power series representation)**을 통해 hh의 도함수는 다음과 같이 주어진다.

h(x)=g(f)f(x)=(4f3)2=(5.34)4(2x+1)32=8(2x+1)3h^{\prime}(x)=g^{\prime}(f) f^{\prime}(x)=\left(4 f^{3}\right) \cdot 2 \stackrel{(5.34)}{=} 4(2 x+1)^{3} \cdot 2=8(2 x+1)^{3}

여기서 우리는 연쇄 법칙 (5.32)를 사용하고, g(f)g^{\prime}(f)에 (5.34)의 ff 정의를 대입했다.

5.2 Partial Differentiation and Gradients

섹션 5.1에서 논의된 **미분(differentiation)**은 스칼라 변수 xRx \in \mathbb{R}의 함수 ff에 적용된다. 다음에서는 함수 ff가 하나 이상의 변수 xRn\boldsymbol{x} \in \mathbb{R}^{n}에 의존하는 일반적인 경우, 예를 들어 f(x)=f(x1,x2)f(\boldsymbol{x})=f\left(x_{1}, x_{2}\right)를 고려한다. 여러 변수의 함수에 대한 미분의 일반화는 gradient이다.

함수 ffx\boldsymbol{x}에 대한 gradient는 한 번에 하나의 변수만 변경하고 다른 변수들은 상수로 유지함으로써 찾을 수 있다. Gradient는 이러한 **편미분(partial derivatives)**들의 모음이다.

정의 5.5 (편미분). 함수 f:RnR,xf(x),xRnf: \mathbb{R}^{n} \rightarrow \mathbb{R}, \boldsymbol{x} \mapsto f(\boldsymbol{x}), \boldsymbol{x} \in \mathbb{R}^{n}nn개 변수 x1,,xnx_{1}, \ldots, x_{n}에 대한 편미분은 다음과 같이 정의된다.

fx1=limh0f(x1+h,x2,,xn)f(x)hfxn=limh0f(x1,,xn1,xn+h)f(x)h\begin{aligned} \frac{\partial f}{\partial x_{1}} & =\lim _{h \rightarrow 0} \frac{f\left(x_{1}+h, x_{2}, \ldots, x_{n}\right)-f(\boldsymbol{x})}{h} \\ & \vdots \\ \frac{\partial f}{\partial x_{n}} & =\lim _{h \rightarrow 0} \frac{f\left(x_{1}, \ldots, x_{n-1}, x_{n}+h\right)-f(\boldsymbol{x})}{h} \end{aligned}

그리고 이들을 행 벡터로 모으면 다음과 같다. xf=gradf=df dx=[f(x)x1f(x)x2f(x)xn]R1×n\nabla_{\boldsymbol{x}} f=\operatorname{grad} f=\frac{\mathrm{d} f}{\mathrm{~d} \boldsymbol{x}}=\left[\begin{array}{llll}\frac{\partial f(\boldsymbol{x})}{\partial x_{1}} & \frac{\partial f(\boldsymbol{x})}{\partial x_{2}} & \ldots & \frac{\partial f(\boldsymbol{x})}{\partial x_{n}}\end{array}\right] \in \mathbb{R}^{1 \times n}, 여기서 nn은 변수의 개수이고, 1은 ff의 이미지/범위/공변역의 차원이다. 여기서 우리는 열 벡터 x=[x1,,xn]Rn\boldsymbol{x}=\left[x_{1}, \ldots, x_{n}\right]^{\top} \in \mathbb{R}^{n}를 정의했다.

스칼라 미분에서 얻은 결과를 사용할 수 있다: 각 편미분은 스칼라에 대한 미분이다. (5.40)의 행 벡터는 ffgradient 또는 Jacobian이라고 불리며, 섹션 5.1의 미분을 일반화한 것이다.

비고. Jacobian에 대한 이 정의는 편미분들의 모음으로서 벡터 값 함수에 대한 Jacobian의 일반적인 정의의 특수한 경우이다. 이에 대해서는 섹션 5.3에서 다시 다룰 것이다.

Example 5.6 (Partial Derivatives Using the Chain Rule)

f(x,y)=(x+2y3)2f(x, y)=\left(x+2 y^{3}\right)^{2}에 대해 편도함수를 구하면 다음과 같다.

f(x,y)x=2(x+2y3)x(x+2y3)=2(x+2y3),\frac{\partial f(x, y)}{\partial x}=2\left(x+2 y^{3}\right) \frac{\partial}{\partial x}\left(x+2 y^{3}\right)=2\left(x+2 y^{3}\right), f(x,y)y=2(x+2y3)y(x+2y3)=12(x+2y3)y2.\frac{\partial f(x, y)}{\partial y}=2\left(x+2 y^{3}\right) \frac{\partial}{\partial y}\left(x+2 y^{3}\right)=12\left(x+2 y^{3}\right) y^{2} .

여기서 편도함수를 계산하기 위해 연쇄 법칙(chain rule) (5.32)을 사용했다.

비고 (행 벡터로서의 Gradient). 문헌에서 gradient 벡터를 열 벡터로 정의하는 것이 드물지 않다. 이는 벡터가 일반적으로 열 벡터라는 관례를 따르기 때문이다. 우리가 gradient 벡터를 행 벡터로 정의하는 이유는 두 가지이다. 첫째, gradient를 벡터 값 함수 f:RnRmf: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m}로 일관되게 일반화할 수 있다(이 경우 gradient는 행렬이 된다). 둘째, gradient의 차원에 신경 쓰지 않고 **다변수 연쇄 법칙(multi-variate chain rule)**을 즉시 적용할 수 있다. 이 두 가지 사항은 섹션 5.3에서 논의할 것이다.

Example 5.7 (Gradient)

f(x1,x2)=x12x2+x1x23Rf\left(x_{1}, x_{2}\right)=x_{1}^{2} x_{2}+x_{1} x_{2}^{3} \in \mathbb{R}에 대해, 편미분(partial derivatives)(즉, x1x_1x2x_2에 대한 ff의 미분)은 다음과 같다.

f(x1,x2)x1=2x1x2+x23f(x1,x2)x2=x12+3x1x22\begin{aligned} & \frac{\partial f\left(x_{1}, x_{2}\right)}{\partial x_{1}}=2 x_{1} x_{2}+x_{2}^{3} \\ & \frac{\partial f\left(x_{1}, x_{2}\right)}{\partial x_{2}}=x_{1}^{2}+3 x_{1} x_{2}^{2} \end{aligned}

그리고 **그래디언트(gradient)**는 다음과 같다.

df dx=[f(x1,x2)x1f(x1,x2)x2]=[2x1x2+x23x12+3x1x22]R1×2\frac{\mathrm{d} f}{\mathrm{~d} \boldsymbol{x}}=\left[\begin{array}{ll} \frac{\partial f\left(x_{1}, x_{2}\right)}{\partial x_{1}} & \frac{\partial f\left(x_{1}, x_{2}\right)}{\partial x_{2}} \end{array}\right]=\left[\begin{array}{ll} 2 x_{1} x_{2}+x_{2}^{3} & x_{1}^{2}+3 x_{1} x_{2}^{2} \end{array}\right] \in \mathbb{R}^{1 \times 2}

5.2.1 Basic Rules of Partial Differentiation

xRn\boldsymbol{x} \in \mathbb{R}^{n}인 다변수(multivariate)의 경우, 우리가 학교에서 배운 기본적인 미분 규칙(예: 합 규칙, 곱 규칙, 연쇄 규칙; 5.1.2절 참조)은 여전히 적용된다. 그러나 벡터 xRn\boldsymbol{x} \in \mathbb{R}^{n}에 대해 미분을 계산할 때는 주의해야 한다. 이제 gradient는 벡터와 행렬을 포함하며, 행렬 곱셈은 교환 법칙이 성립하지 않으므로(2.2.1절 참조), 순서가 중요하다.

다음은 일반적인 곱 규칙(product rule), 합 규칙(sum rule), 연쇄 규칙(chain rule)이다:

 Product rule: x(f(x)g(x))=fxg(x)+f(x)gx Sum rule: x(f(x)+g(x))=fx+gx\begin{aligned} & \text { Product rule: } & \frac{\partial}{\partial \boldsymbol{x}}(f(\boldsymbol{x}) g(\boldsymbol{x})) & =\frac{\partial f}{\partial \boldsymbol{x}} g(\boldsymbol{x})+f(\boldsymbol{x}) \frac{\partial g}{\partial \boldsymbol{x}} \\ & \text { Sum rule: } & \frac{\partial}{\partial \boldsymbol{x}}(f(\boldsymbol{x})+g(\boldsymbol{x})) & =\frac{\partial f}{\partial \boldsymbol{x}}+\frac{\partial g}{\partial \boldsymbol{x}} \end{aligned}

곱 규칙: (fg)=fg+fg(f g)^{\prime}=f^{\prime} g+f g^{\prime}, 합 규칙: (f+g)=f+g(f+g)^{\prime}=f^{\prime}+g^{\prime}, 연쇄 규칙: (g(f))=g(f)f(g(f))^{\prime}=g^{\prime}(f) f^{\prime}

이는 단지 직관일 뿐이며, 편미분은 분수가 아니므로 수학적으로 정확하지 않다.

 Chain rule: x(gf)(x)=x(g(f(x)))=gffx\text { Chain rule: } \quad \frac{\partial}{\partial \boldsymbol{x}}(g \circ f)(\boldsymbol{x})=\frac{\partial}{\partial \boldsymbol{x}}(g(f(\boldsymbol{x})))=\frac{\partial g}{\partial f} \frac{\partial f}{\partial \boldsymbol{x}}

연쇄 규칙을 더 자세히 살펴보자. 연쇄 규칙 (5.48)은 행렬 곱셈이 정의되기 위해 인접한 차원이 일치해야 한다고 말했던 행렬 곱셈 규칙과 어느 정도 유사하다(2.2.1절 참조). 왼쪽에서 오른쪽으로 진행할 때, 연쇄 규칙은 유사한 속성을 보인다: f\partial f는 첫 번째 인수의 "분모"와 두 번째 인수의 "분자"에 나타난다. 인수를 함께 곱하면 곱셈이 정의되고, 즉 f\partial f의 차원이 일치하며, f\partial f가 "상쇄"되어 g/x\partial g / \partial \boldsymbol{x}가 남는다.

5.2.2 Chain Rule

두 변수 x1,x2x_1, x_2에 대한 함수 f:R2Rf: \mathbb{R}^{2} \rightarrow \mathbb{R}를 고려해 보자. 또한, x1(t)x_1(t)x2(t)x_2(t)는 그 자체로 tt의 함수이다. tt에 대한 ffgradient를 계산하기 위해, 우리는 다변수 함수에 대한 chain rule (5.48)을 다음과 같이 적용해야 한다.

df dt=[fx1fx2][x1(t)tx2(t)t]=fx1x1t+fx2x2t,\frac{\mathrm{d} f}{\mathrm{~d} t}=\left[\begin{array}{ll} \frac{\partial f}{\partial x_{1}} & \frac{\partial f}{\partial x_{2}} \end{array}\right]\left[\begin{array}{l} \frac{\partial x_{1}(t)}{\partial t} \\ \frac{\partial x_{2}(t)}{\partial t} \end{array}\right]=\frac{\partial f}{\partial x_{1}} \frac{\partial x_{1}}{\partial t}+\frac{\partial f}{\partial x_{2}} \frac{\partial x_{2}}{\partial t},

여기서 d\mathrm{d}gradient를 나타내고 \partialpartial derivatives를 나타낸다.

Example 5.8

f(x1,x2)=x12+2x2f\left(x_{1}, x_{2}\right)=x_{1}^{2}+2 x_{2}이고 x1=sintx_{1}=\sin t, x2=costx_{2}=\cos t라고 할 때,

df dt=fx1x1t+fx2x2t=2sintsintt+2costt=2sintcost2sint=2sint(cost1)\begin{aligned} \frac{\mathrm{d} f}{\mathrm{~d} t} & =\frac{\partial f}{\partial x_{1}} \frac{\partial x_{1}}{\partial t}+\frac{\partial f}{\partial x_{2}} \frac{\partial x_{2}}{\partial t} \\ & =2 \sin t \frac{\partial \sin t}{\partial t}+2 \frac{\partial \cos t}{\partial t} \\ & =2 \sin t \cos t-2 \sin t=2 \sin t(\cos t-1) \end{aligned}

tt에 대한 ff의 해당 **미분(derivative)**이다.

만약 f(x1,x2)f\left(x_{1}, x_{2}\right)x1x_{1}x2x_{2}의 함수이고, x1(s,t)x_{1}(s, t)x2(s,t)x_{2}(s, t)가 두 변수 sstt의 함수라면, **연쇄 법칙(chain rule)**은 다음 **편미분(partial derivatives)**을 산출한다.

fs=fx1x1s+fx2x2sft=fx1x1t+fx2x2t\begin{aligned} & \frac{\partial f}{\partial s}=\frac{\partial f}{\partial x_{1}} \frac{\partial x_{1}}{\partial s}+\frac{\partial f}{\partial x_{2}} \frac{\partial x_{2}}{\partial s} \\ & \frac{\partial f}{\partial t}=\frac{\partial f}{\partial x_{1}} \frac{\partial x_{1}}{\partial t}+\frac{\partial f}{\partial x_{2}} \frac{\partial x_{2}}{\partial t} \end{aligned}

Draft (2021-07-29) of "Mathematics for Machine Learning". Feedback: https://mml-book.com. 그리고 gradient는 다음 행렬 곱셈으로 얻어진다.

df d(s,t)=fxx(s,t)=[fx1fx2]=fx[x1x1tx2sx2t]=x(s,t).\frac{\mathrm{d} f}{\mathrm{~d}(s, t)}=\frac{\partial f}{\partial \boldsymbol{x}} \frac{\partial \boldsymbol{x}}{\partial(s, t)}=\underbrace{\left[\begin{array}{ll} \frac{\partial f}{\partial x_{1}} & \frac{\partial f}{\partial x_{2}} \end{array}\right]}_{=\frac{\partial f}{\partial \boldsymbol{x}}} \underbrace{\left[\begin{array}{ll} \partial x_{1} & \frac{\partial x_{1}}{\partial t} \\ \frac{\partial x_{2}}{\partial s} & \frac{\partial x_{2}}{\partial t} \end{array}\right]}_{=\frac{\partial \boldsymbol{x}}{\partial(s, t)}} .

연쇄 법칙을 행렬 곱셈으로 작성하는 이 간결한 방법은 gradient가 행 벡터(row vector)로 정의될 때만 의미가 있다. 그렇지 않으면 행렬 차원을 맞추기 위해 gradient를 전치(transpose)해야 한다. gradient가 벡터 또는 행렬인 한 이것은 여전히 간단할 수 있지만, gradient가 **텐서(tensor)**가 되면 (이에 대해서는 다음에서 논의할 것이다) 전치는 더 이상 사소한 문제가 아니다.
비고 (Gradient 구현의 정확성 검증). 편미분을 해당 **차분 몫(difference quotient)**의 극한으로 정의하는 것(5.39 참조)은 컴퓨터 프로그램에서 gradient의 정확성을 수치적으로 확인할 때 활용될 수 있다. gradient를 계산하고 구현할 때, **유한 차분(finite differences)**을 사용하여 계산 및 구현을 수치적으로 테스트할 수 있다. 우리는 hh 값을 작게 선택하고(예: h=104h=10^{-4}), (5.39)의 유한 차분 근사치를 gradient의 (해석적) 구현과 비교한다. 오차가 작다면 gradient 구현은 아마도 정확할 것이다. 여기서 "작다"는 i(dhidfi)2i(dhi+dfi)2<106\sqrt{\frac{\sum_{i}\left(d h_{i}-d f_{i}\right)^{2}}{\sum_{i}\left(d h_{i}+d f_{i}\right)^{2}}}<10^{-6}를 의미할 수 있으며, 여기서 dhid h_{i}는 유한 차분 근사치이고 dfid f_{i}ii번째 변수 xix_{i}에 대한 ff의 해석적 gradient이다.

5.3 Gradients of Vector-Valued Functions

지금까지 우리는 실수로 매핑되는 함수 f:RnRf: \mathbb{R}^{n} \rightarrow \mathbb{R}의 편미분과 gradient에 대해 논의했다. 다음에서는 gradient의 개념을 벡터 값 함수(vector fields) f:RnRm\boldsymbol{f}: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m}로 일반화할 것이다 (여기서 n1n \geqslant 1이고 m>1m>1).

함수 f:RnRm\boldsymbol{f}: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m}와 벡터 x=[x1,,xn]Rn\boldsymbol{x}=\left[x_{1}, \ldots, x_{n}\right]^{\top} \in \mathbb{R}^{n}에 대해, 해당 함수 값의 벡터는 다음과 같이 주어진다.

f(x)=[f1(x)fm(x)]Rm\boldsymbol{f}(\boldsymbol{x})=\left[\begin{array}{c} f_{1}(\boldsymbol{x}) \\ \vdots \\ f_{m}(\boldsymbol{x}) \end{array}\right] \in \mathbb{R}^{m}

벡터 값 함수를 이런 방식으로 작성하면, f:RnRm\boldsymbol{f}: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m}R\mathbb{R}로 매핑되는 함수들의 벡터 [f1,,fm]\left[f_{1}, \ldots, f_{m}\right]^{\top}, fi:RnRf_{i}: \mathbb{R}^{n} \rightarrow \mathbb{R}로 볼 수 있다. 각 fif_{i}에 대한 미분 규칙은 섹션 5.2에서 논의한 것과 정확히 동일하다.

chain rule은 행렬 곱셈으로 작성될 수 있다.

Gradient checking

따라서 벡터 값 함수 f:RnRm\boldsymbol{f}: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m}xiR,i=1,nx_{i} \in \mathbb{R}, i=1, \ldots n에 대한 편미분은 다음과 같은 벡터로 주어진다.

fxi=[f1xifmxi]=[limh0f1(x1,,xi1,xi+h,xi+1,xn)f1(x)hlimh0fm(x1,,xi1,xi+h,xi+1,xn)fm(x)h]Rm.\frac{\partial \boldsymbol{f}}{\partial x_{i}}=\left[\begin{array}{c} \frac{\partial f_{1}}{\partial x_{i}} \\ \vdots \\ \frac{\partial f_{m}}{\partial x_{i}} \end{array}\right]=\left[\begin{array}{c} \lim _{h \rightarrow 0} \frac{f_{1}\left(x_{1}, \ldots, x_{i-1}, x_{i}+h, x_{i+1}, \ldots x_{n}\right)-f_{1}(\boldsymbol{x})}{h} \\ \vdots \\ \lim _{h \rightarrow 0} \frac{f_{m}\left(x_{1}, \ldots, x_{i-1}, x_{i}+h, x_{i+1}, \ldots x_{n}\right)-f_{m}(\boldsymbol{x})}{h} \end{array}\right] \in \mathbb{R}^{m} .

(5.40)에서 우리는 벡터에 대한 f\boldsymbol{f}의 gradient가 편미분들의 행 벡터라는 것을 알고 있다. (5.55)에서 모든 편미분 f/xi\partial \boldsymbol{f} / \partial x_{i}는 그 자체로 열 벡터이다. 따라서 이러한 편미분들을 모아서 xRn\boldsymbol{x} \in \mathbb{R}^{n}에 대한 f:RnRm\boldsymbol{f}: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m}의 gradient를 얻는다.

df(x)dx=[f(x)x1f(x)xn]=[f1(x)x1f1(x)xnfm(x)x1fm(x)xn]Rm×n.\begin{aligned} \frac{\mathrm{d} \boldsymbol{f}(\boldsymbol{x})}{\mathrm{d} \boldsymbol{x}} & =\left[\begin{array}{ccc} \frac{\partial \boldsymbol{f}(\boldsymbol{x})}{\partial x_{1}} & \cdots & \frac{\partial \boldsymbol{f}(\boldsymbol{x})}{\partial x_{n}} \\ \hline \end{array}\right] \\ & =\left[\begin{array}{ccc} \frac{\partial f_{1}(\boldsymbol{x})}{\partial x_{1}} & \cdots & \frac{\partial f_{1}(\boldsymbol{x})}{\partial x_{n}} \\ \vdots & & \vdots \\ \frac{\partial f_{m}(\boldsymbol{x})}{\partial x_{1}} & \cdots & \frac{\partial f_{m}(\boldsymbol{x})}{\partial x_{n}} \end{array}\right] \in \mathbb{R}^{m \times n} . \end{aligned}

Jacobian 함수 f:RnRm\boldsymbol{f}: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m}의 gradient는 m×nm \times n 크기의 행렬이다.

정의 5.6 (Jacobian). 벡터 값 함수 f:RnRm\boldsymbol{f}: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m}의 모든 1차 편미분들의 집합을 Jacobian이라고 한다. Jacobian J\boldsymbol{J}m×nm \times n 행렬이며, 다음과 같이 정의하고 배열한다.

J=xf=df(x)dx=[f(x)x1f(x)xn]=[f1(x)x1f1(x)xnfm(x)x1fm(x)xn],x=[x1xn],J(i,j)=fixj.\begin{aligned} \boldsymbol{J} & =\nabla_{\boldsymbol{x}} \boldsymbol{f}=\frac{\mathrm{d} \boldsymbol{f}(\boldsymbol{x})}{\mathrm{d} \boldsymbol{x}}=\left[\begin{array}{ccc} \frac{\partial \boldsymbol{f}(\boldsymbol{x})}{\partial x_{1}} & \cdots & \frac{\partial \boldsymbol{f}(\boldsymbol{x})}{\partial x_{n}} \end{array}\right] \\ & =\left[\begin{array}{ccc} \frac{\partial f_{1}(\boldsymbol{x})}{\partial x_{1}} & \cdots & \frac{\partial f_{1}(\boldsymbol{x})}{\partial x_{n}} \\ \vdots & & \vdots \\ \frac{\partial f_{m}(\boldsymbol{x})}{\partial x_{1}} & \cdots & \frac{\partial f_{m}(\boldsymbol{x})}{\partial x_{n}} \end{array}\right], \\ \boldsymbol{x} & =\left[\begin{array}{c} x_{1} \\ \vdots \\ x_{n} \end{array}\right], \quad J(i, j)=\frac{\partial f_{i}}{\partial x_{j}} . \end{aligned}

(5.58)의 특수한 경우로, 벡터 xRn\boldsymbol{x} \in \mathbb{R}^{n}를 스칼라로 매핑하는 함수 f:RnR1f: \mathbb{R}^{n} \rightarrow \mathbb{R}^{1} (예: f(x)=i=1nxif(\boldsymbol{x})=\sum_{i=1}^{n} x_{i})는 행 벡터(차원 1×n1 \times n의 행렬)인 Jacobian을 가진다; (5.40)을 참조하라. 비고. 이 책에서는 미분의 **분자 레이아웃(numerator layout)**을 사용한다. 즉, xRn\boldsymbol{x} \in \mathbb{R}^{n}에 대한 fRm\boldsymbol{f} \in \mathbb{R}^{m}의 미분 df/dx\mathrm{d} \boldsymbol{f} / \mathrm{d} \boldsymbol{x}m×nm \times n 행렬이며, f\boldsymbol{f}의 요소가 행을 정의하고 x\boldsymbol{x}의 요소가 해당 Jacobian의 열을 정의한다; (5.58)을 참조하라.

그림 5.5 f\boldsymbol{f}의 Jacobian의 determinant는 파란색 영역과 주황색 영역 사이의 확대율을 계산하는 데 사용될 수 있다.

**분모 레이아웃(denominator layout)**도 존재하며, 이는 분자 레이아웃의 전치(transpose)이다. 이 책에서는 분자 레이아웃을 사용할 것이다.

Jacobian이 섹션 6.7의 확률 분포에 대한 변수 변경(change-of-variable) 방법에서 어떻게 사용되는지 살펴볼 것이다. 변환으로 인한 스케일링 양은 determinant에 의해 제공된다.

섹션 4.1에서 우리는 determinant가 평행사변형의 면적을 계산하는 데 사용될 수 있음을 보았다. 단위 정사각형의 변으로 두 벡터 b1=[1,0]\boldsymbol{b}_{1}=[1,0]^{\top}, b2=[0,1]\boldsymbol{b}_{2}=[0,1]^{\top}가 주어지면 (파란색; 그림 5.5 참조), 이 정사각형의 면적은 다음과 같다.

det([1001])=1.\left|\operatorname{det}\left(\left[\begin{array}{ll} 1 & 0 \\ 0 & 1 \end{array}\right]\right)\right|=1 .

변이 c1=[2,1]\boldsymbol{c}_{1}=[-2,1]^{\top}, c2=[1,1]\boldsymbol{c}_{2}=[1,1]^{\top}인 평행사변형을 취하면 (그림 5.5의 주황색), 그 면적은 determinant의 절댓값으로 주어진다 (섹션 4.1 참조).

det([2111])=3=3,\left|\operatorname{det}\left(\left[\begin{array}{cc} -2 & 1 \\ 1 & 1 \end{array}\right]\right)\right|=|-3|=3,

즉, 이 면적은 단위 정사각형 면적의 정확히 세 배이다. 이 스케일링 인자는 단위 정사각형을 다른 정사각형으로 변환하는 매핑을 찾음으로써 얻을 수 있다. 선형 대수학 용어로, 우리는 효과적으로 (b1,b2)(\boldsymbol{b}_{1}, \boldsymbol{b}_{2})에서 (c1,c2)(\boldsymbol{c}_{1}, \boldsymbol{c}_{2})로 변수 변환을 수행한다. 우리의 경우, 매핑은 선형이며 이 매핑의 determinant의 절댓값은 우리가 찾고 있는 스케일링 인자를 정확히 제공한다.

이 매핑을 식별하는 두 가지 접근 방식을 설명할 것이다. 첫째, 매핑이 선형이라는 점을 이용하여 2장의 도구를 사용하여 이 매핑을 식별할 것이다. 둘째, 이 장에서 논의한 도구를 사용하여 편미분을 통해 매핑을 찾을 것이다.

접근 방식 1 선형 대수학 접근 방식을 시작하기 위해, 우리는 {b1,b2}\{\boldsymbol{b}_{1}, \boldsymbol{b}_{2}\}{c1,c2}\{\boldsymbol{c}_{1}, \boldsymbol{c}_{2}\}를 모두 R2\mathbb{R}^{2}의 기저로 식별한다 (요약은 섹션 2.6.1 참조). 우리가 효과적으로 수행하는 것은 (b1,b2)(\boldsymbol{b}_{1}, \boldsymbol{b}_{2})에서 (c1,c2)(\boldsymbol{c}_{1}, \boldsymbol{c}_{2})로의 **기저 변환(change of basis)**이며, 이 기저 변환을 구현하는 변환 행렬을 찾고 있다. 섹션 2.7.2의 결과를 사용하여, 원하는 기저 변환 행렬을 다음과 같이 식별한다.

J=[2111]\boldsymbol{J}=\left[\begin{array}{cc} -2 & 1 \\ 1 & 1 \end{array}\right]

이때 Jb1=c1\boldsymbol{J} \boldsymbol{b}_{1}=\boldsymbol{c}_{1}Jb2=c2\boldsymbol{J} \boldsymbol{b}_{2}=\boldsymbol{c}_{2}이다. J\boldsymbol{J}의 determinant의 절댓값은 우리가 찾고 있는 스케일링 인자를 제공하며, det(J)=3|\operatorname{det}(\boldsymbol{J})|=3이다. 즉, (c1,c2)(\boldsymbol{c}_{1}, \boldsymbol{c}_{2})에 의해 형성된 정사각형의 면적은 (b1,b2)(\boldsymbol{b}_{1}, \boldsymbol{b}_{2})에 의해 형성된 면적보다 세 배 더 크다.

denominator layout

기하학적으로, Jacobian determinant는 영역이나 부피를 변환할 때의 확대/축소 인자를 제공한다. Jacobian determinant

그림 5.6 (편)미분의 차원.

접근 방식 2 선형 대수학 접근 방식은 선형 변환에 유효하다. 비선형 변환(섹션 6.7에서 중요해짐)의 경우, 편미분을 사용하는 더 일반적인 접근 방식을 따른다.

이 접근 방식을 위해, 변수 변환을 수행하는 함수 f:R2R2\boldsymbol{f}: \mathbb{R}^{2} \rightarrow \mathbb{R}^{2}를 고려한다. 우리의 예에서, f\boldsymbol{f}(b1,b2)(\boldsymbol{b}_{1}, \boldsymbol{b}_{2})에 대한 임의의 벡터 xR2\boldsymbol{x} \in \mathbb{R}^{2}의 좌표 표현을 (c1,c2)(\boldsymbol{c}_{1}, \boldsymbol{c}_{2})에 대한 좌표 표현 yR2\boldsymbol{y} \in \mathbb{R}^{2}로 매핑한다. 우리는 매핑을 식별하여 영역(또는 부피)이 f\boldsymbol{f}에 의해 변환될 때 어떻게 변하는지 계산하고자 한다. 이를 위해, x\boldsymbol{x}를 약간 변경할 때 f(x)\boldsymbol{f}(\boldsymbol{x})가 어떻게 변하는지 알아내야 한다. 이 질문은 Jacobian 행렬 dfdxR2×2\frac{\mathrm{d} \boldsymbol{f}}{\mathrm{d} \boldsymbol{x}} \in \mathbb{R}^{2 \times 2}에 의해 정확히 답변된다. 다음과 같이 쓸 수 있으므로,

y1=2x1+x2y2=x1+x2\begin{aligned} & y_{1}=-2 x_{1}+x_{2} \\ & y_{2}=x_{1}+x_{2} \end{aligned}

x\boldsymbol{x}y\boldsymbol{y} 사이의 함수 관계를 얻게 되며, 이를 통해 편미분을 얻을 수 있다.

y1x1=2,y1x2=1,y2x1=1,y2x2=1\frac{\partial y_{1}}{\partial x_{1}}=-2, \quad \frac{\partial y_{1}}{\partial x_{2}}=1, \quad \frac{\partial y_{2}}{\partial x_{1}}=1, \quad \frac{\partial y_{2}}{\partial x_{2}}=1

그리고 Jacobian을 다음과 같이 구성한다.

J=[y1x1y1x2y2x1y2x2]=[2111]\boldsymbol{J}=\left[\begin{array}{ll} \frac{\partial y_{1}}{\partial x_{1}} & \frac{\partial y_{1}}{\partial x_{2}} \\ \frac{\partial y_{2}}{\partial x_{1}} & \frac{\partial y_{2}}{\partial x_{2}} \end{array}\right]=\left[\begin{array}{cc} -2 & 1 \\ 1 & 1 \end{array}\right]

Jacobian은 우리가 찾고 있는 좌표 변환을 나타낸다. 좌표 변환이 선형인 경우 (우리의 경우처럼) 정확하며, (5.66)은 (5.62)의 기저 변환 행렬을 정확히 복구한다. 좌표 변환이 비선형인 경우, Jacobian은 이 비선형 변환을 선형 변환으로 국소적으로 근사한다. Jacobian determinant의 절댓값 det(J)|\operatorname{det}(\boldsymbol{J})|은 좌표가 변환될 때 영역이나 부피가 스케일링되는 인자이다. 우리의 경우 det(J)=3|\operatorname{det}(\boldsymbol{J})|=3이다.

Jacobian determinant와 변수 변환은 섹션 6.7에서 확률 변수와 확률 분포를 변환할 때 중요해질 것이다. 이러한 변환은 reparametrization trick 또는 infinite perturbation analysis라고도 불리는 딥 신경망 훈련과 관련하여 머신러닝에서 매우 중요하다.

이 장에서는 함수의 미분을 다루었다. 그림 5.6은 이러한 미분들의 차원을 요약한다. 만약 f:RRf: \mathbb{R} \rightarrow \mathbb{R}이면 gradient는 단순히 스칼라이다 (왼쪽 상단 항목). f:RDRf: \mathbb{R}^{D} \rightarrow \mathbb{R}의 경우 gradient는 1×D1 \times D 행 벡터이다 (오른쪽 상단 항목). f:RRE\boldsymbol{f}: \mathbb{R} \rightarrow \mathbb{R}^{E}의 경우 gradient는 E×1E \times 1 열 벡터이며, f:RDRE\boldsymbol{f}: \mathbb{R}^{D} \rightarrow \mathbb{R}^{E}의 경우 gradient는 E×DE \times D 행렬이다.

Example 5.9 (Gradient of a Vector-Valued Function)

주어진 식은 다음과 같다:

f(x)=Ax,f(x)RM,ARM×N,xRN\boldsymbol{f}(\boldsymbol{x})=\boldsymbol{A} \boldsymbol{x}, \quad \boldsymbol{f}(\boldsymbol{x}) \in \mathbb{R}^{M}, \quad \boldsymbol{A} \in \mathbb{R}^{M \times N}, \quad \boldsymbol{x} \in \mathbb{R}^{N}

gradient df/dx\mathrm{d} \boldsymbol{f} / \mathrm{d} \boldsymbol{x}를 계산하기 위해 먼저 df/dx\mathrm{d} \boldsymbol{f} / \mathrm{d} \boldsymbol{x}차원을 결정한다. f:RNRM\boldsymbol{f}: \mathbb{R}^{N} \rightarrow \mathbb{R}^{M}이므로, df/dxRM×N\mathrm{d} \boldsymbol{f} / \mathrm{d} \boldsymbol{x} \in \mathbb{R}^{M \times N}이 된다. 다음으로, gradient를 계산하기 위해 ff의 모든 xjx_{j}에 대한 편미분을 결정한다:

fi(x)=j=1NAijxjfixj=Aijf_{i}(\boldsymbol{x})=\sum_{j=1}^{N} A_{i j} x_{j} \Longrightarrow \frac{\partial f_{i}}{\partial x_{j}}=A_{i j}

편미분들을 Jacobian에 모으면 다음 gradient를 얻는다:

df dx=[f1x1f1xNfMx1fMxN]=[A11A1NAM1AMN]=ARM×N\frac{\mathrm{d} \boldsymbol{f}}{\mathrm{~d} \boldsymbol{x}}=\left[\begin{array}{ccc} \frac{\partial f_{1}}{\partial x_{1}} & \cdots & \frac{\partial f_{1}}{\partial x_{N}} \\ \vdots & & \vdots \\ \frac{\partial f_{M}}{\partial x_{1}} & \cdots & \frac{\partial f_{M}}{\partial x_{N}} \end{array}\right]=\left[\begin{array}{ccc} A_{11} & \cdots & A_{1 N} \\ \vdots & & \vdots \\ A_{M 1} & \cdots & A_{M N} \end{array}\right]=\boldsymbol{A} \in \mathbb{R}^{M \times N}

Example 5.10 (Chain Rule)

함수 h:RR,h(t)=(fg)(t)h: \mathbb{R} \rightarrow \mathbb{R}, h(t)=(f \circ g)(t)를 고려하고, 여기서

f:R2Rg:RR2f(x)=exp(x1x22),x=[x1x2]=g(t)=[tcosttsint]\begin{aligned} f & : \mathbb{R}^{2} \rightarrow \mathbb{R} \\ g & : \mathbb{R} \rightarrow \mathbb{R}^{2} \\ f(\boldsymbol{x}) & =\exp \left(x_{1} x_{2}^{2}\right), \\ \boldsymbol{x} & =\left[\begin{array}{l} x_{1} \\ x_{2} \end{array}\right]=g(t)=\left[\begin{array}{l} t \cos t \\ t \sin t \end{array}\right] \end{aligned}

tt에 대한 hhgradient를 계산한다. f:R2Rf: \mathbb{R}^{2} \rightarrow \mathbb{R}이고 g:RR2g: \mathbb{R} \rightarrow \mathbb{R}^{2}이므로 다음을 알 수 있다.

fxR1×2,gtR2×1\frac{\partial f}{\partial \boldsymbol{x}} \in \mathbb{R}^{1 \times 2}, \quad \frac{\partial g}{\partial t} \in \mathbb{R}^{2 \times 1}

원하는 gradientchain rule을 적용하여 계산된다.

dh dt=fxxt=[fx1fx2][x1tx2t]=[exp(x1x22)x222exp(x1x22)x1x2][costtsintsint+tcost]=exp(x1x22)(x22(costtsint)+2x1x2(sint+tcost))\begin{aligned} \frac{\mathrm{d} h}{\mathrm{~d} t} & =\frac{\partial f}{\partial \boldsymbol{x}} \frac{\partial x}{\partial t}=\left[\begin{array}{ll} \frac{\partial f}{\partial x_{1}} & \frac{\partial f}{\partial x_{2}} \end{array}\right]\left[\begin{array}{l} \frac{\partial x_{1}}{\partial t} \\ \frac{\partial x_{2}}{\partial t} \end{array}\right] \\ & =\left[\exp \left(x_{1} x_{2}^{2}\right) x_{2}^{2} \quad 2 \exp \left(x_{1} x_{2}^{2}\right) x_{1} x_{2}\right]\left[\begin{array}{c} \cos t-t \sin t \\ \sin t+t \cos t \end{array}\right] \\ & =\exp \left(x_{1} x_{2}^{2}\right)\left(x_{2}^{2}(\cos t-t \sin t)+2 x_{1} x_{2}(\sin t+t \cos t)\right) \end{aligned}

여기서 x1=tcostx_{1}=t \cos t이고 x2=tsintx_{2}=t \sin t이다. (5.72)를 참조하라.

이 모델은 선형 회귀(linear regression)의 맥락에서 9장에서 훨씬 더 자세히 논의될 것이며, 여기서는 least-squares loss LL의 파라미터 θ\boldsymbol{\theta}에 대한 derivative가 필요하다. least-squares loss dLdtheta = np.einsum( 'n,nd', dLde, dedtheta)

Example 5.11 (Gradient of a Least-Squares Loss in a Linear Model)

선형 모델

y=Φθ\boldsymbol{y}=\boldsymbol{\Phi} \boldsymbol{\theta}

을 고려해 보자. 여기서 θRD\boldsymbol{\theta} \in \mathbb{R}^{D}는 파라미터 벡터이고, ΦRN×D\boldsymbol{\Phi} \in \mathbb{R}^{N \times D}는 입력 feature이며, yRN\boldsymbol{y} \in \mathbb{R}^{N}는 해당 관측값이다. 우리는 다음 함수들을 정의한다.

L(e):=e2,e(θ):=yΦθ.\begin{aligned} & L(\boldsymbol{e}):=\|\boldsymbol{e}\|^{2}, \\ & \boldsymbol{e}(\boldsymbol{\theta}):=\boldsymbol{y}-\boldsymbol{\Phi} \boldsymbol{\theta} . \end{aligned}

우리는 Lθ\frac{\partial L}{\partial \boldsymbol{\theta}}를 구하고자 하며, 이를 위해 **연쇄 법칙(chain rule)**을 사용할 것이다. LL은 **최소 제곱 손실 함수(least-squares loss function)**라고 불린다.

계산을 시작하기 전에, 우리는 gradient의 차원을 다음과 같이 결정한다.

LθR1×D\frac{\partial L}{\partial \boldsymbol{\theta}} \in \mathbb{R}^{1 \times D}

연쇄 법칙을 통해 gradient를 다음과 같이 계산할 수 있다.

Lθ=Leeθ\frac{\partial L}{\partial \boldsymbol{\theta}}=\frac{\partial L}{\partial \boldsymbol{e}} \frac{\partial e}{\partial \theta}

여기서 dd번째 요소는 다음과 같이 주어진다.

Lθ[1,d]=n=1NLe[n]eθ[n,d]\frac{\partial L}{\partial \boldsymbol{\theta}}[1, d]=\sum_{n=1}^{N} \frac{\partial L}{\partial \boldsymbol{e}}[n] \frac{\partial \boldsymbol{e}}{\partial \boldsymbol{\theta}}[n, d]

우리는 e2=ee\|\boldsymbol{e}\|^{2}=\boldsymbol{e}^{\top} \boldsymbol{e}임을 알고 있으며 (섹션 3.2 참조), 다음을 결정한다.

Le=2eR1×N\frac{\partial L}{\partial \boldsymbol{e}}=2 \boldsymbol{e}^{\top} \in \mathbb{R}^{1 \times N}

또한, 우리는 다음을 얻는다.

eθ=ΦRN×D\frac{\partial e}{\partial \theta}=-\Phi \in \mathbb{R}^{N \times D}

따라서 우리가 원하는 미분은 다음과 같다.

Lθ=2eΦ=(5.77)2(yθΦ)1×NΦN×DR1×D\frac{\partial L}{\partial \boldsymbol{\theta}}=-2 \boldsymbol{e}^{\top} \Phi \stackrel{(5.77)}{=}-\underbrace{2\left(\boldsymbol{y}^{\top}-\boldsymbol{\theta}^{\top} \boldsymbol{\Phi}^{\top}\right)}_{1 \times N} \underbrace{\Phi}_{N \times D} \in \mathbb{R}^{1 \times D}

참고. 연쇄 법칙을 사용하지 않고 다음 함수를 즉시 살펴보면 동일한 결과를 얻을 수 있다.

L2(θ):=yΦθ2=(yΦθ)(yΦθ).L_{2}(\boldsymbol{\theta}):=\|\boldsymbol{y}-\boldsymbol{\Phi} \boldsymbol{\theta}\|^{2}=(\boldsymbol{y}-\boldsymbol{\Phi} \boldsymbol{\theta})^{\top}(\boldsymbol{y}-\boldsymbol{\Phi} \boldsymbol{\theta}) .

이 접근 방식은 L2L_{2}와 같은 간단한 함수에는 여전히 실용적이지만, **심층 함수 합성(deep function compositions)**에는 비실용적이 된다.

5.4 행렬의 Gradient

편미분:

그림 5.7 벡터에 대한 행렬의 gradient 계산 시각화. 우리는 xR3\boldsymbol{x} \in \mathbb{R}^{3} 벡터에 대한 AR4×2\boldsymbol{A} \in \mathbb{R}^{4 \times 2} 행렬의 gradient를 계산하는 데 관심이 있다. gradient dAdxR4×2×3\frac{\mathrm{d} \boldsymbol{A}}{\mathrm{d} \boldsymbol{x}} \in \mathbb{R}^{4 \times 2 \times 3}임을 알고 있다. 우리는 두 가지 동등한 접근 방식을 따라 이를 도출한다: (a) 편미분을 Jacobian tensor로 취합; (b) 행렬을 벡터로 평탄화하고, Jacobian matrix를 계산한 다음, Jacobian tensor로 재구성.

(a) 접근 방식 1: 우리는 Ax1,Ax2,Ax3\frac{\partial \boldsymbol{A}}{\partial x_{1}}, \frac{\partial \boldsymbol{A}}{\partial x_{2}}, \frac{\partial \boldsymbol{A}}{\partial x_{3}}의 편미분을 계산하며, 각각은 4×24 \times 2 행렬이고, 이들을 4×2×34 \times 2 \times 3 tensor로 취합한다.

그림 5.7 벡터에 대한 행렬의 gradient 계산 시각화. 우리는 xR3\boldsymbol{x} \in \mathbb{R}^{3} 벡터에 대한 AR4×2\boldsymbol{A} \in \mathbb{R}^{4 \times 2} 행렬의 gradient를 계산하는 데 관심이 있다. gradient dAdxR4×2×3\frac{\mathrm{d} \boldsymbol{A}}{\mathrm{d} \boldsymbol{x}} \in \mathbb{R}^{4 \times 2 \times 3}임을 알고 있다. 우리는 두 가지 동등한 접근 방식을 따라 이를 도출한다: (a) 편미분을 Jacobian tensor로 취합; (b) 행렬을 벡터로 평탄화하고, Jacobian matrix를 계산한 다음, Jacobian tensor로 재구성.

(b) 접근 방식 2: 우리는 AR4×2\boldsymbol{A} \in \mathbb{R}^{4 \times 2}A~R8\tilde{\boldsymbol{A}} \in \mathbb{R}^{8} 벡터로 재구성(평탄화)한다. 그런 다음, dA~dxR8×3\frac{\mathrm{d} \tilde{\boldsymbol{A}}}{\mathrm{d} \boldsymbol{x}} \in \mathbb{R}^{8 \times 3} gradient를 계산한다. 위에서 설명한 대로 이 gradient를 재구성하여 gradient tensor를 얻는다.

5.4 Gradients of Matrices

우리는 벡터(또는 다른 행렬)에 대한 행렬의 gradient를 계산해야 하는 상황에 직면하게 될 것이며, 이는 다차원 tensor를 결과로 가져온다. 우리는 이 tensor를 다음과 같은 다차원 배열로 생각할 수 있다.

tensor는 다차원 배열로 생각할 수 있다.

행렬은 행렬의 열을 쌓아(flattening) 벡터로 변환될 수 있다. partial derivative를 모아놓은 것이다. 예를 들어, m×nm \times n 행렬 A\boldsymbol{A}에 대해 p×qp \times q 행렬 B\boldsymbol{B}gradient를 계산하면, 결과 Jacobian(m×n)×(p×q)(m \times n) \times(p \times q)가 되며, 즉 4차원 tensor J\boldsymbol{J}가 된다. 이 tensor의 원소는 Jijkl=Aij/BklJ_{i j k l}=\partial A_{i j} / \partial B_{k l}로 주어진다.

행렬은 선형 매핑을 나타내므로, m×nm \times n 행렬의 공간 Rm×n\mathbb{R}^{m \times n}mnm n 벡터의 공간 Rmn\mathbb{R}^{m n} 사이에 vector-space isomorphism(선형적이고 가역적인 매핑)이 존재한다는 사실을 활용할 수 있다. 따라서 우리는 행렬을 각각 길이 mnm npqp q의 벡터로 재구성할 수 있다. 이 mnm n 벡터를 사용한 gradient는 크기 mn×pqm n \times p qJacobian을 생성한다. 그림 5.7은 두 가지 접근 방식을 시각화한다. 실제 응용에서는 행렬을 벡터로 재구성하고 이 Jacobian matrix로 계속 작업하는 것이 종종 바람직하다. Chain rule (5.48)은 간단한 행렬 곱셈으로 귀결되는 반면, Jacobian tensor의 경우 어떤 차원을 합산해야 하는지에 더 많은 주의를 기울여야 한다.

Example 5.12 (Gradient of Vectors with Respect to Matrices)

다음 예시를 고려해 보자.

f=Ax,fRM,ARM×N,xRN\boldsymbol{f}=\boldsymbol{A} \boldsymbol{x}, \quad \boldsymbol{f} \in \mathbb{R}^{M}, \quad \boldsymbol{A} \in \mathbb{R}^{M \times N}, \quad \boldsymbol{x} \in \mathbb{R}^{N}

여기서 우리는 gradient df/dA\mathrm{d} \boldsymbol{f} / \mathrm{d} \boldsymbol{A}를 찾고자 한다. 먼저 gradient의 차원을 다음과 같이 결정하는 것부터 다시 시작하자.

df dARM×(M×N)\frac{\mathrm{d} \boldsymbol{f}}{\mathrm{~d} \boldsymbol{A}} \in \mathbb{R}^{M \times(M \times N)}

정의에 따르면, gradient는 편미분들의 모음이다.

df dA=[f1AfMA],fiAR1×(M×N)\frac{\mathrm{d} \boldsymbol{f}}{\mathrm{~d} \boldsymbol{A}}=\left[\begin{array}{c} \frac{\partial f_{1}}{\partial \boldsymbol{A}} \\ \vdots \\ \frac{\partial f_{M}}{\partial \boldsymbol{A}} \end{array}\right], \quad \frac{\partial f_{i}}{\partial \boldsymbol{A}} \in \mathbb{R}^{1 \times(M \times N)}

편미분을 계산하기 위해, 행렬-벡터 곱셈을 명시적으로 작성하는 것이 도움이 될 것이다.

fi=j=1NAijxj,i=1,,Mf_{i}=\sum_{j=1}^{N} A_{i j} x_{j}, \quad i=1, \ldots, M

그리고 편미분은 다음과 같이 주어진다.

fiAiq=xq\frac{\partial f_{i}}{\partial A_{i q}}=x_{q}

이를 통해 A\boldsymbol{A}의 한 행에 대한 fif_{i}의 편미분을 계산할 수 있으며, 이는 다음과 같이 주어진다.

fiAi,:=xR1×1×N\frac{\partial f_{i}}{\partial A_{i,:}}=\boldsymbol{x}^{\top} \in \mathbb{R}^{1 \times 1 \times N} fiAki,:=0R1×1×N\frac{\partial f_{i}}{\partial A_{k \neq i,:}}=\mathbf{0}^{\top} \in \mathbb{R}^{1 \times 1 \times N}

여기서 우리는 올바른 차원에 주의를 기울여야 한다. fif_{i}R\mathbb{R}로 매핑되고 A\boldsymbol{A}의 각 행은 1×N1 \times N 크기이므로, A\boldsymbol{A}의 한 행에 대한 fif_{i}의 편미분으로 1×1×N1 \times 1 \times N 크기의 tensor를 얻는다.

우리는 편미분 (5.91)을 쌓아서 (5.87)에서 원하는 gradient를 다음과 같이 얻는다.

fiA=[00x00]R1×(M×N)\frac{\partial f_{i}}{\partial \boldsymbol{A}}=\left[\begin{array}{c} \mathbf{0}^{\top} \\ \vdots \\ \mathbf{0}^{\top} \\ \boldsymbol{x}^{\top} \\ \mathbf{0}^{\top} \\ \vdots \\ \mathbf{0}^{\top} \end{array}\right] \in \mathbb{R}^{1 \times(M \times N)}

Example 5.13 (Gradient of Matrices with Respect to Matrices)

행렬 RRM×N\boldsymbol{R} \in \mathbb{R}^{M \times N}과 함수 f:RM×NRN×N\boldsymbol{f}: \mathbb{R}^{M \times N} \rightarrow \mathbb{R}^{N \times N}가 다음과 같다고 가정하자.

f(R)=RR=:KRN×N\boldsymbol{f}(\boldsymbol{R})=\boldsymbol{R}^{\top} \boldsymbol{R}=: \boldsymbol{K} \in \mathbb{R}^{N \times N}

여기서 우리는 gradient dK/dR\mathrm{d} \boldsymbol{K} / \mathrm{d} \boldsymbol{R}를 찾고자 한다. 이 어려운 문제를 해결하기 위해, 우리가 이미 알고 있는 것을 먼저 적어보자: gradient는 다음과 같은 차원을 가진다.

dK dRR(N×N)×(M×N),\frac{\mathrm{d} \boldsymbol{K}}{\mathrm{~d} \boldsymbol{R}} \in \mathbb{R}^{(N \times N) \times(M \times N)},

이는 tensor이다. 또한,

dKpq dRR1×M×N\frac{\mathrm{d} K_{p q}}{\mathrm{~d} \boldsymbol{R}} \in \mathbb{R}^{1 \times M \times N}

p,q=1,,Np, q=1, \ldots, N에 대해, KpqK_{p q}K=f(R)\boldsymbol{K}=\boldsymbol{f}(\boldsymbol{R})(p,q)(p, q)번째 원소이다. R\boldsymbol{R}ii번째 열을 ri\boldsymbol{r}_{i}로 표기하면, K\boldsymbol{K}의 모든 원소는 R\boldsymbol{R}의 두 열의 dot product로 주어진다. 즉,

Kpq=rprq=m=1MRmpRmqK_{p q}=\boldsymbol{r}_{p}^{\top} \boldsymbol{r}_{q}=\sum_{m=1}^{M} R_{m p} R_{m q}

이제 partial derivative KpqRij\frac{\partial K_{p q}}{\partial R_{i j}}를 계산하면 다음과 같다.

KpqRij=m=1MRijRmpRmq=pqij,\frac{\partial K_{p q}}{\partial R_{i j}}=\sum_{m=1}^{M} \frac{\partial}{\partial R_{i j}} R_{m p} R_{m q}=\partial_{p q i j}, pqij={Riq if j=p,pqRip if j=q,pq2Riq if j=p,p=q0 otherwise .\partial_{p q i j}=\left\{\begin{array}{ll} R_{i q} & \text { if } j=p, p \neq q \\ R_{i p} & \text { if } j=q, p \neq q \\ 2 R_{i q} & \text { if } j=p, p=q \\ 0 & \text { otherwise } \end{array} .\right.

(5.94)로부터, 우리가 원하는 gradient(N×N)×(M×N)(N \times N) \times(M \times N) 차원을 가지며, 이 tensor의 모든 단일 원소는 (5.98)의 pqij\partial_{p q i j}로 주어진다는 것을 알 수 있다. 여기서 p,q,j=1,,Np, q, j=1, \ldots, N이고 i=1,,Mi=1, \ldots, M이다.

5.5 Useful Identities for Computing Gradients

다음은 머신러닝 맥락에서 자주 필요한 유용한 gradient들을 나열한 것이다 (Petersen and Pedersen, 2012). 여기서 tr()\operatorname{tr}(\cdot)trace(정의 4.4 참조), det()\operatorname{det}(\cdot)determinant(섹션 4.1 참조)를 의미하며, f(X)1\boldsymbol{f}(\boldsymbol{X})^{-1}f(X)\boldsymbol{f}(\boldsymbol{X})inverse가 존재한다고 가정할 때의 inverse를 의미한다.

Xf(X)=(f(X)X)Xtr(f(X))=tr(f(X)X)Xdet(f(X))=det(f(X))tr(f(X)1f(X)X)Xf(X)1=f(X)1f(X)Xf(X)1aX1bX=(X1)ab(X1)xax=aaxx=aaXbX=abxBxx=x(B+B)s(xAs)W(xAs)=2(xAs)WA for symmetric W\begin{aligned} & \frac{\partial}{\partial \boldsymbol{X}} \boldsymbol{f}(\boldsymbol{X})^{\top}=\left(\frac{\partial \boldsymbol{f}(\boldsymbol{X})}{\partial \boldsymbol{X}}\right)^{\top} \\ & \frac{\partial}{\partial \boldsymbol{X}} \operatorname{tr}(\boldsymbol{f}(\boldsymbol{X}))=\operatorname{tr}\left(\frac{\partial \boldsymbol{f}(\boldsymbol{X})}{\partial \boldsymbol{X}}\right) \\ & \frac{\partial}{\partial \boldsymbol{X}} \operatorname{det}(\boldsymbol{f}(\boldsymbol{X}))=\operatorname{det}(\boldsymbol{f}(\boldsymbol{X})) \operatorname{tr}\left(\boldsymbol{f}(\boldsymbol{X})^{-1} \frac{\partial \boldsymbol{f}(\boldsymbol{X})}{\partial \boldsymbol{X}}\right) \\ & \frac{\partial}{\partial \boldsymbol{X}} \boldsymbol{f}(\boldsymbol{X})^{-1}=-\boldsymbol{f}(\boldsymbol{X})^{-1} \frac{\partial \boldsymbol{f}(\boldsymbol{X})}{\partial \boldsymbol{X}} \boldsymbol{f}(\boldsymbol{X})^{-1} \\ & \frac{\partial \boldsymbol{a}^{\top} \boldsymbol{X}^{-1} \boldsymbol{b}}{\partial \boldsymbol{X}}=-\left(\boldsymbol{X}^{-1}\right)^{\top} \boldsymbol{a} \boldsymbol{b}^{\top}\left(\boldsymbol{X}^{-1}\right)^{\top} \\ & \frac{\partial \boldsymbol{x}^{\top} \boldsymbol{a}}{\partial \boldsymbol{x}}=\boldsymbol{a}^{\top} \\ & \frac{\partial \boldsymbol{a}^{\top} \boldsymbol{x}}{\partial \boldsymbol{x}}=\boldsymbol{a}^{\top} \\ & \frac{\partial \boldsymbol{a}^{\top} \boldsymbol{X} \boldsymbol{b}}{\partial \boldsymbol{X}}=\boldsymbol{a} \boldsymbol{b}^{\top} \\ & \frac{\partial \boldsymbol{x}^{\top} \boldsymbol{B} \boldsymbol{x}}{\partial \boldsymbol{x}}=\boldsymbol{x}^{\top}\left(\boldsymbol{B}+\boldsymbol{B}^{\top}\right) \\ & \frac{\partial}{\partial \boldsymbol{s}}(\boldsymbol{x}-\boldsymbol{A} \boldsymbol{s})^{\top} \boldsymbol{W}(\boldsymbol{x}-\boldsymbol{A s})=-2(\boldsymbol{x}-\boldsymbol{As})^{\top} \boldsymbol{W} \boldsymbol{A} \\ & \text { for symmetric } \boldsymbol{W} \end{aligned}

비고. 이 책에서는 행렬의 tracetranspose만 다룬다. 그러나 derivative는 더 높은 차원의 tensor가 될 수 있으며, 이 경우 일반적인 tracetranspose는 정의되지 않는다. 이러한 경우, D×D×E×FD \times D \times E \times F tensortraceE×FE \times F 차원의 행렬이 된다. 이는 tensor contraction의 특별한 경우이다. 마찬가지로, tensor를 "transpose"한다는 것은 처음 두 차원을 바꾸는 것을 의미한다. 특히, (5.99)부터 (5.102)까지는 multivariate function f()\boldsymbol{f}(\cdot)을 다루고 행렬에 대한 derivative를 계산할 때 (그리고 섹션 5.4에서 논의된 바와 같이 vectorize하지 않기로 선택할 때) tensor 관련 계산이 필요하다.

5.6 Backpropagation and Automatic Differentiation

많은 머신러닝 애플리케이션에서 우리는 경사 하강법(gradient descent)(섹션 7.1)을 수행하여 좋은 모델 파라미터를 찾는다. 이는 모델 파라미터에 대한 학습 목표(learning objective)의 gradient를 계산할 수 있다는 사실에 기반한다. 주어진 목적 함수(objective function)에 대해 우리는 미적분을 사용하고 **연쇄 법칙(chain rule)**을 적용하여 모델 파라미터에 대한 gradient를 얻을 수 있다. 자세한 내용은 섹션 5.2.2를 참조하라. 우리는 선형 회귀 모델의 파라미터에 대한 제곱 손실(squared loss)의 gradient를 살펴보았던 섹션 5.3에서 이미 이를 경험했다.

다음 함수를 고려해 보자.

f(x)=x2+exp(x2)+cos(x2+exp(x2)).f(x)=\sqrt{x^{2}+\exp \left(x^{2}\right)}+\cos \left(x^{2}+\exp \left(x^{2}\right)\right) .

연쇄 법칙을 적용하고 미분이 선형적이라는 점을 고려하여 gradient를 계산하면 다음과 같다.

df dx=2x+2xexp(x2)2x2+exp(x2)sin(x2+exp(x2))(2x+2xexp(x2))=2x(12x2+exp(x2)sin(x2+exp(x2)))(1+exp(x2))\begin{aligned} \frac{\mathrm{d} f}{\mathrm{~d} x} & =\frac{2 x+2 x \exp \left(x^{2}\right)}{2 \sqrt{x^{2}+\exp \left(x^{2}\right)}}-\sin \left(x^{2}+\exp \left(x^{2}\right)\right)\left(2 x+2 x \exp \left(x^{2}\right)\right) \\ & =2 x\left(\frac{1}{2 \sqrt{x^{2}+\exp \left(x^{2}\right)}}-\sin \left(x^{2}+\exp \left(x^{2}\right)\right)\right)\left(1+\exp \left(x^{2}\right)\right) \end{aligned}

이처럼 gradient를 명시적으로 작성하는 것은 종종 비실용적이다. 왜냐하면 미분식이 매우 길어지는 경우가 많기 때문이다. 실제로는 우리가 주의하지 않으면 gradient의 구현이 함수를 계산하는 것보다 훨씬 더 많은 비용이 들 수 있으며, 이는 불필요한 오버헤드를 발생시킨다. 딥 뉴럴 네트워크 모델을 훈련하기 위해

backpropagation과 연쇄 법칙에 대한 좋은 설명은 Tim Vieira의 블로그(https://tinyurl.com/ycfm2yrw)에서 확인할 수 있다. backpropagation 알고리즘(Kelley, 1960; Bryson, 1961; Dreyfus, 1962; Rumelhart et al., 1986)은 모델 파라미터에 대한 오차 함수(error function)의 gradient를 효율적으로 계산하는 방법이다.

5.6.1 Gradients in a Deep Network

chain rule가 극단적으로 사용되는 분야는 딥러닝으로, 여기서 함수 값 y\boldsymbol{y}는 여러 단계의 함수 합성으로 계산된다.

y=(fKfK1f1)(x)=fK(fK1((f1(x)))),\boldsymbol{y}=\left(f_{K} \circ f_{K-1} \circ \cdots \circ f_{1}\right)(\boldsymbol{x})=f_{K}\left(f_{K-1}\left(\cdots\left(f_{1}(\boldsymbol{x})\right) \cdots\right)\right),

여기서 x\boldsymbol{x}는 입력(예: 이미지), y\boldsymbol{y}는 관측치(예: 클래스 레이블)이며, 각 함수 fi,i=1,,Kf_{i}, i=1, \ldots, K는 고유한 매개변수를 가진다.

표기법을 간소화하기 위해 각 layer에서 activation function이 동일한 경우를 논의한다.

신경망의 gradient에 대한 더 심층적인 논의는 Justin Domke의 강의 노트 https://tinyurl.com/yalcxgtv에서 찾을 수 있다.

Figure 5.8 입력 x\boldsymbol{x}와 매개변수 Ai,bi\boldsymbol{A}_{i}, \boldsymbol{b}_{i}의 함수로 손실 LL을 계산하기 위한 다층 신경망의 forward pass.

여러 layer를 가진 신경망에서 ii번째 layer의 함수는 fi(xi1)=σ(Ai1xi1+bi1)f_{i}\left(\boldsymbol{x}_{i-1}\right)= \sigma\left(\boldsymbol{A}_{i-1} \boldsymbol{x}_{i-1}+\boldsymbol{b}_{i-1}\right)이다. 여기서 xi1\boldsymbol{x}_{i-1}i1i-1번째 layer의 출력이고 σ\sigmalogistic sigmoid 11+ex\frac{1}{1+e^{-x}}, tanh 또는 **rectified linear unit (ReLU)**와 같은 activation function이다. 이러한 모델을 훈련시키기 위해서는 j=1,,Kj=1, \ldots, K에 대한 모든 모델 매개변수 Aj,bj\boldsymbol{A}_{j}, \boldsymbol{b}_{j}에 대한 loss function LLgradient가 필요하다. 이는 또한 각 layer의 입력에 대한 LLgradient를 계산해야 함을 의미한다. 예를 들어, 입력 x\boldsymbol{x}와 관측치 y\boldsymbol{y}가 있고 다음과 같이 정의된 네트워크 구조가 있다고 가정하자.

f0:=xfi:=σi(Ai1fi1+bi1),i=1,,K,\begin{aligned} \boldsymbol{f}_{0} & :=\boldsymbol{x} \\ \boldsymbol{f}_{i} & :=\sigma_{i}\left(\boldsymbol{A}_{i-1} \boldsymbol{f}_{i-1}+\boldsymbol{b}_{i-1}\right), \quad i=1, \ldots, K, \end{aligned}

시각화를 위해 Figure 5.8을 참조하면, squared loss

L(θ)=yfK(θ,x)2L(\boldsymbol{\theta})=\left\|\boldsymbol{y}-\boldsymbol{f}_{K}(\boldsymbol{\theta}, \boldsymbol{x})\right\|^{2}

를 최소화하는 j=0,,K1j=0, \ldots, K-1에 대한 Aj,bj\boldsymbol{A}_{j}, \boldsymbol{b}_{j}를 찾는 데 관심이 있을 수 있으며, 여기서 θ={A0,b0,,AK1,bK1}\boldsymbol{\theta}=\left\{\boldsymbol{A}_{0}, \boldsymbol{b}_{0}, \ldots, \boldsymbol{A}_{K-1}, \boldsymbol{b}_{K-1}\right\}이다. 매개변수 집합 θ\boldsymbol{\theta}에 대한 gradient를 얻기 위해서는 각 layer j=0,,K1j=0, \ldots, K-1의 매개변수 θj={Aj,bj}\boldsymbol{\theta}_{j}=\left\{\boldsymbol{A}_{j}, \boldsymbol{b}_{j}\right\}에 대한 LL의 편미분이 필요하다. chain rule을 사용하면 편미분을 다음과 같이 결정할 수 있다.

LθK1=LfKfKθK1L/θK2=LfKfKfK1fK1θK2L/θK3=LfKfKfK1fK1fK2fK2θK3Lθi=LfKfKfK1fi+2fi+1fi+1θi\begin{aligned} \frac{\partial L}{\partial \boldsymbol{\theta}_{K-1}} & =\frac{\partial L}{\partial \boldsymbol{f}_{K}} \frac{\partial \boldsymbol{f}_{K}}{\partial \boldsymbol{\theta}_{K-1}} \\ \partial L / \partial \boldsymbol{\theta}_{K-2} & =\frac{\partial L}{\partial \boldsymbol{f}_{K}} \frac{\partial \boldsymbol{f}_{K}}{\partial \boldsymbol{f}_{K-1}} \frac{\partial \boldsymbol{f}_{K-1}}{\partial \boldsymbol{\theta}_{K-2}} \\ \partial L / \partial \boldsymbol{\theta}_{K-3} & =\frac{\partial L}{\partial \boldsymbol{f}_{K}} \frac{\partial \boldsymbol{f}_{K}}{\partial \boldsymbol{f}_{K-1}} \frac{\partial \boldsymbol{f}_{K-1}}{\partial \boldsymbol{f}_{K-2}} \frac{\partial \boldsymbol{f}_{K-2}}{\partial \boldsymbol{\theta}_{K-3}} \\ \frac{\partial L}{\partial \boldsymbol{\theta}_{i}} & =\frac{\partial L}{\partial \boldsymbol{f}_{K}} \frac{\partial \boldsymbol{f}_{K}}{\partial \boldsymbol{f}_{K-1}} \cdots \frac{\partial \boldsymbol{f}_{i+2}}{\partial \boldsymbol{f}_{i+1}} \frac{\partial \boldsymbol{f}_{i+1}}{\partial \boldsymbol{\theta}_{i}} \end{aligned}

주황색 항은 layer 출력의 입력에 대한 편미분이고, 파란색 항은 layer 출력의 매개변수에 대한 편미분이다. L/θi+1\partial L / \partial \boldsymbol{\theta}_{i+1} 편미분을 이미 계산했다고 가정하면, 대부분의 계산은 L/θi\partial L / \partial \boldsymbol{\theta}_{i}를 계산하는 데 재사용될 수 있다. 우리가

계산해야 할 추가 항들은 상자로 표시되어 있다. Figure 5.9는 gradient가 네트워크를 통해 역방향으로 전달되는 것을 시각화한다.

5.6.2 Automatic Differentiation

backpropagationautomatic differentiation이라는 수치 해석의 일반적인 기술의 특별한 경우로 밝혀졌다. 우리는 automatic differentiation을 중간 변수를 사용하여 chain rule을 적용함으로써 함수의 정확한(기계 정밀도까지) gradient를 수치적으로(기호적으로가 아닌) 평가하는 기술 집합으로 생각할 수 있다. automatic differentiation은 덧셈과 곱셈과 같은 일련의 기본 산술 연산과 sin, cos, exp, log와 같은 기본 함수를 적용한다. 이러한 연산에 chain rule을 적용함으로써 상당히 복잡한 함수의 gradient를 자동으로 계산할 수 있다. automatic differentiation은 일반적인 컴퓨터 프로그램에 적용되며 forward modereverse mode를 갖는다. Baydin et al. (2018)은 머신러닝에서 automatic differentiation에 대한 훌륭한 개요를 제공한다.

그림 5.10은 입력 xx에서 중간 변수 a,ba, b를 통해 출력 yy로의 데이터 흐름을 나타내는 간단한 그래프를 보여준다. 만약 우리가 미분 dy/dx\mathrm{d} y / \mathrm{d} x를 계산한다면, chain rule을 적용하여 다음을 얻을 것이다.

dy dx=dy db db da da dx.\frac{\mathrm{d} y}{\mathrm{~d} x}=\frac{\mathrm{d} y}{\mathrm{~d} b} \frac{\mathrm{~d} b}{\mathrm{~d} a} \frac{\mathrm{~d} a}{\mathrm{~d} x} .

직관적으로, forward modereverse mode는 곱셈 순서에서 차이가 있다. 행렬 곱셈의 결합성 때문에 우리는 다음 중 하나를 선택할 수 있다.

dy dx=(dy dbdb da)da dxdy dx=dy db(db dada dx)\begin{aligned} & \frac{\mathrm{d} y}{\mathrm{~d} x}=\left(\frac{\mathrm{d} y}{\mathrm{~d} b} \frac{\mathrm{d} b}{\mathrm{~d} a}\right) \frac{\mathrm{d } a}{\mathrm{~d} x} \\ & \frac{\mathrm{d} y}{\mathrm{~d} x}=\frac{\mathrm{d} y}{\mathrm{~d} b}\left(\frac{\mathrm{d} b}{\mathrm{~d} a} \frac{\mathrm{d} a}{\mathrm{~d} x}\right) \end{aligned}

식 (5.120)은 gradient가 그래프를 통해 뒤로 전파되므로, 즉 데이터 흐름과 반대 방향으로 전파되므로 reverse mode가 될 것이다. 식 (5.121)은 gradient가 그래프를 통해 왼쪽에서 오른쪽으로 데이터와 함께 흐르는 forward mode가 될 것이다.

Figure 5.9 다층 신경망에서 손실 함수의 gradient를 계산하기 위한 backward pass.

Figure 5.10 중간 변수 a,ba, b를 통해 xx에서 yy로의 데이터 흐름을 보여주는 간단한 그래프. automatic differentiation

automatic differentiationsymbolic differentiationfinite differences를 사용하는 것과 같은 gradient의 수치적 근사와는 다르다.

일반적인 경우, 우리는 벡터, 행렬 또는 텐서가 될 수 있는 Jacobian을 사용한다. reverse mode forward mode

다음에서는 backpropagationreverse mode automatic differentiation에 초점을 맞출 것이다. 입력 차원이 레이블의 차원보다 훨씬 높은 신경망의 맥락에서 reverse modeforward mode보다 계산적으로 훨씬 저렴하다. 교훈적인 예시부터 시작해보자.

Example 5.14

다음 함수를 고려해 보자.

f(x)=x2+exp(x2)+cos(x2+exp(x2))f(x)=\sqrt{x^{2}+\exp \left(x^{2}\right)}+\cos \left(x^{2}+\exp \left(x^{2}\right)\right)

중간 변수

Figure 5.11 입력 xx, 함수 값 ff, 그리고 중간 변수 a,b,c,d,ea, b, c, d, e를 포함하는 계산 그래프. (5.109)에서 가져온 것이다. 만약 우리가 컴퓨터에서 함수 ff를 구현한다면, 중간 변수를 사용하여 일부 계산을 절약할 수 있을 것이다.

a=x2b=exp(a)c=a+bd=ce=cos(c)f=d+e\begin{aligned} & a=x^{2} \\ & b=\exp (a) \\ & c=a+b \\ & d=\sqrt{c} \\ & e=\cos (c) \\ & f=d+e \end{aligned}

이는 **연쇄 법칙(chain rule)**을 적용할 때 발생하는 사고 과정과 동일하다. 앞선 일련의 방정식은 (5.109)에 정의된 함수 f(x)f(x)를 직접 구현하는 것보다 더 적은 연산을 필요로 한다는 점에 주목하라. Figure 5.11의 해당 **계산 그래프(computation graph)**는 함수 값 ff를 얻기 위해 필요한 데이터 흐름과 계산을 보여준다.

중간 변수를 포함하는 일련의 방정식은 계산 그래프로 생각할 수 있으며, 이는 신경망 소프트웨어 라이브러리 구현에서 널리 사용되는 표현이다. 우리는 **기본 함수(elementary functions)**의 미분 정의를 상기함으로써 중간 변수의 해당 입력에 대한 미분을 직접 계산할 수 있다. 다음을 얻는다.

ax=2xba=exp(a)\begin{aligned} & \frac{\partial a}{\partial x}=2 x \\ & \frac{\partial b}{\partial a}=\exp (a) \end{aligned} ca=1=cbdc=12cec=sin(c)fd=1=fe\begin{aligned} & \frac{\partial c}{\partial a}=1=\frac{\partial c}{\partial b} \\ & \frac{\partial d}{\partial c}=\frac{1}{2 \sqrt{c}} \\ & \frac{\partial e}{\partial c}=-\sin (c) \\ & \frac{\partial f}{\partial d}=1=\frac{\partial f}{\partial e} \end{aligned}

Figure 5.11의 계산 그래프를 보면, 출력에서부터 거꾸로 작업하여 f/x\partial f / \partial x를 계산할 수 있으며 다음을 얻는다.

fc=fddc+feecfb=fccbfa=fbba+fccafx=faax\begin{aligned} & \frac{\partial f}{\partial c}=\frac{\partial f}{\partial d} \frac{\partial d}{\partial c}+\frac{\partial f}{\partial e} \frac{\partial e}{\partial c} \\ & \frac{\partial f}{\partial b}=\frac{\partial f}{\partial c} \frac{\partial c}{\partial b} \\ & \frac{\partial f}{\partial a}=\frac{\partial f}{\partial b} \frac{\partial b}{\partial a}+\frac{\partial f}{\partial c} \frac{\partial c}{\partial a} \\ & \frac{\partial f}{\partial x}=\frac{\partial f}{\partial a} \frac{\partial a}{\partial x} \end{aligned}

f/x\partial f / \partial x를 얻기 위해 연쇄 법칙을 암묵적으로 적용했음에 주목하라. 기본 함수의 미분 결과를 대입하면 다음을 얻는다.

fc=112c+1(sin(c))fb=fc1fa=fbexp(a)+fc1fx=fa2x\begin{aligned} & \frac{\partial f}{\partial c}=1 \cdot \frac{1}{2 \sqrt{c}}+1 \cdot(-\sin (c)) \\ & \frac{\partial f}{\partial b}=\frac{\partial f}{\partial c} \cdot 1 \\ & \frac{\partial f}{\partial a}=\frac{\partial f}{\partial b} \exp (a)+\frac{\partial f}{\partial c} \cdot 1 \\ & \frac{\partial f}{\partial x}=\frac{\partial f}{\partial a} \cdot 2 x \end{aligned}

위의 각 미분을 변수로 생각하면, 미분 계산에 필요한 연산의 복잡성이 함수 자체의 계산 복잡성과 유사하다는 것을 알 수 있다. 이는 미분 fx\frac{\partial f}{\partial x} (5.110)의 수학적 표현이 함수 f(x)f(x) (5.109)의 수학적 표현보다 훨씬 더 복잡하다는 점을 고려할 때 상당히 직관적이지 않다.

**자동 미분(Automatic differentiation)**은 예제 5.14의 형식화이다. x1,,xdx_{1}, \ldots, x_{d}를 함수의 입력 변수, xd+1,,xD1x_{d+1}, \ldots, x_{D-1}를 중간 변수, 그리고 xDx_{D}를 출력 변수라고 하자. 그러면 계산 그래프는 다음과 같이 표현될 수 있다.

 For i=d+1,,D:xi=gi(xPa(xi))\text { For } i=d+1, \ldots, D: \quad x_{i}=g_{i}\left(x_{\operatorname{Pa}\left(x_{i}\right)}\right)

여기서 gi()g_{i}(\cdot)기본 함수이고 xPa(xi)x_{\mathrm{Pa}\left(x_{i}\right)}는 그래프에서 변수 xix_{i}의 **부모 노드(parent nodes)**이다. 이런 방식으로 정의된 함수가 주어지면, 연쇄 법칙을 사용하여 함수의 미분을 단계별로 계산할 수 있다. 정의에 따라 f=xDf=x_{D}이므로 다음을 상기하라.

fxD=1.\frac{\partial f}{\partial x_{D}}=1 .

다른 변수 xix_{i}에 대해서는 연쇄 법칙을 적용한다.

fxi=xj:xiPa(xj)fxjxjxi=xj:xiPa(xj)fxjgjxi,\frac{\partial f}{\partial x_{i}}=\sum_{x_{j}: x_{i} \in \operatorname{Pa}\left(x_{j}\right)} \frac{\partial f}{\partial x_{j}} \frac{\partial x_{j}}{\partial x_{i}}=\sum_{x_{j}: x_{i} \in \operatorname{Pa}\left(x_{j}\right)} \frac{\partial f}{\partial x_{j}} \frac{\partial g_{j}}{\partial x_{i}},

역방향 자동 미분은 구문 분석 트리를 필요로 한다. 여기서 Pa(xj)\mathrm{Pa}\left(x_{j}\right)는 계산 그래프에서 xjx_{j}의 부모 노드 집합이다. 방정식 (5.143)은 함수의 **순전파(forward propagation)**인 반면, (5.145)는 계산 그래프를 통한 **역전파(backpropagation)**이다. 신경망 훈련에서는 레이블에 대한 예측의 오차를 역전파한다.

위의 자동 미분 접근 방식은 기본 함수가 미분 가능한 계산 그래프로 표현될 수 있는 함수에 대해 작동한다. 사실, 함수는 수학적 함수가 아니라 컴퓨터 프로그램일 수도 있다. 그러나 모든 컴퓨터 프로그램이 자동으로 미분될 수 있는 것은 아니다. 예를 들어, 미분 가능한 기본 함수를 찾을 수 없는 경우이다. for 루프 및 if 문과 같은 프로그래밍 구조도 더 많은 주의를 필요로 한다.

5.7 Higher-Order Derivatives

지금까지 우리는 gradient, 즉 1차 도함수에 대해 논의했다. 때로는 최적화를 위해 Newton's Method를 사용할 때와 같이 2차 도함수가 필요한 경우처럼 더 높은 차수의 도함수에 관심을 갖기도 한다 (Nocedal and Wright, 2006). 섹션 5.1.1에서 우리는 다항식을 사용하여 함수를 근사하는 Taylor series에 대해 논의했다. 다변수(multivariate)의 경우에도 정확히 동일하게 적용할 수 있다. 다음에서는 바로 이 작업을 수행할 것이다. 하지만 먼저 몇 가지 표기법부터 살펴보자.

두 변수 x,yx, y에 대한 함수 f:R2Rf: \mathbb{R}^{2} \rightarrow \mathbb{R}를 고려하자. 우리는 고차 편도함수(및 gradient)에 대해 다음 표기법을 사용한다:

  • 2fx2\frac{\partial^{2} f}{\partial x^{2}}xx에 대한 ff의 2차 편도함수이다.
  • nfxn\frac{\partial^{n} f}{\partial x^{n}}xx에 대한 ffnn차 편도함수이다.
  • 2fyx=y(fx)\frac{\partial^{2} f}{\partial y \partial x}=\frac{\partial}{\partial y}\left(\frac{\partial f}{\partial x}\right)xx에 대해 먼저 편미분한 다음 yy에 대해 편미분하여 얻은 편도함수이다.
  • 2fxy\frac{\partial^{2} f}{\partial x \partial y}yy에 대해 먼저 편미분한 다음 xx에 대해 편미분하여 얻은 편도함수이다.

Hessian은 모든 2차 편도함수의 모음이다.

그림 5.12 함수의 선형 근사. 원본 함수 ff는 1차 Taylor series 전개를 사용하여 x0=2x_{0}=-2에서 선형화된다.

만약 f(x,y)f(x, y)가 두 번 (연속적으로) 미분 가능한 함수라면,

2fxy=2fyx,\frac{\partial^{2} f}{\partial x \partial y}=\frac{\partial^{2} f}{\partial y \partial x},

즉, 미분 순서는 중요하지 않으며, 해당 Hessian 행렬

H=[2fx22fxy2fxy2fy2]\boldsymbol{H}=\left[\begin{array}{cc} \frac{\partial^{2} f}{\partial x^{2}} & \frac{\partial^{2} f}{\partial x \partial y} \\ \frac{\partial^{2} f}{\partial x \partial y} & \frac{\partial^{2} f}{\partial y^{2}} \end{array}\right]

은 대칭이다. Hessian은 x,y2f(x,y)\nabla_{x, y}^{2} f(x, y)로 표기된다. 일반적으로 xRn\boldsymbol{x} \in \mathbb{R}^{n}이고 f:RnRf: \mathbb{R}^{n} \rightarrow \mathbb{R}인 경우, Hessian은 n×nn \times n 행렬이다. Hessian은 (x,y)(x, y) 주변에서 함수의 곡률을 국소적으로 측정한다. 비고 (Vector Field의 Hessian). 만약 f:RnRmf: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m}가 vector field라면, Hessian은 (m×n×nm \times n \times n)-tensor이다. \square

5.8 Linearization and Multivariate Taylor Series

함수 ffgradient f\nabla f는 종종 x0\boldsymbol{x}_{0} 주변에서 fflocally linear approximation에 사용된다:

f(x)f(x0)+(xf)(x0)(xx0).f(\boldsymbol{x}) \approx f\left(\boldsymbol{x}_{0}\right)+\left(\nabla_{\boldsymbol{x}} f\right)\left(\boldsymbol{x}_{0}\right)\left(\boldsymbol{x}-\boldsymbol{x}_{0}\right) .

여기서 (xf)(x0)\left(\nabla_{\boldsymbol{x}} f\right)\left(\boldsymbol{x}_{0}\right)x\boldsymbol{x}에 대한 ffgradient이며, x0\boldsymbol{x}_{0}에서 평가된다. Figure 5.12는 입력 x0x_{0}에서 함수 fflinear approximation을 보여준다. 원래 함수는 직선으로 근사된다. 이 근사는 locally accurate하지만, x0x_{0}에서 멀어질수록 근사의 정확도는 떨어진다. 식 (5.148)은 x0\boldsymbol{x}_{0}에서 ffmultivariate Taylor series expansion의 특수한 경우로, 처음 두 항만 고려한다. 다음에서는 더 나은 근사를 가능하게 하는 더 일반적인 경우를 논의한다. multivariate Taylor series

Taylor polynomial

vector는 1차원 배열로, matrix는 2차원 배열로 구현될 수 있다.

Figure 5.13 outer product 시각화. vectorouter product는 항당 배열의 차원을 1씩 증가시킨다. (a) 두 vectorouter productmatrix를 생성한다; (b) 세 vectorouter product는 3차 tensor를 생성한다.

(a) vector δR4\boldsymbol{\delta} \in \mathbb{R}^{4}가 주어졌을 때, outer product δ2:=δδ=δδR4×4\boldsymbol{\delta}^{2}:=\boldsymbol{\delta} \otimes \boldsymbol{\delta}=\boldsymbol{\delta} \boldsymbol{\delta}^{\top} \in \mathbb{R}^{4 \times 4}matrix로 얻는다. (b) outer product δ3:=δδδR4×4×4\boldsymbol{\delta}^{3}:=\boldsymbol{\delta} \otimes \boldsymbol{\delta} \otimes \boldsymbol{\delta} \in \mathbb{R}^{4 \times 4 \times 4}는 3차 tensor("3차원 matrix"), 즉 세 개의 인덱스를 가진 배열을 생성한다.

정의 5.7 (Multivariate Taylor Series). 우리는 함수를 고려한다.

f:RDRxf(x),xRD\begin{aligned} f: \mathbb{R}^{D} & \rightarrow \mathbb{R} \\ \boldsymbol{x} & \mapsto f(\boldsymbol{x}), \quad \boldsymbol{x} \in \mathbb{R}^{D} \end{aligned}

이는 x0\boldsymbol{x}_{0}에서 smooth하다. 차이 vector δ:=xx0\boldsymbol{\delta}:=\boldsymbol{x}-\boldsymbol{x}_{0}를 정의할 때, x0\boldsymbol{x}_{0}에서의 ffmultivariate Taylor series는 다음과 같이 정의된다.

f(x)=k=0Dxkf(x0)k!δk,f(\boldsymbol{x})=\sum_{k=0}^{\infty} \frac{D_{\boldsymbol{x}}^{k} f\left(\boldsymbol{x}_{0}\right)}{k!} \boldsymbol{\delta}^{k},

여기서 Dxkf(x0)D_{\boldsymbol{x}}^{k} f\left(\boldsymbol{x}_{0}\right)x\boldsymbol{x}에 대한 ffkk차 (총) derivative이며, x0\boldsymbol{x}_{0}에서 평가된다.

정의 5.8 (Taylor Polynomial). x0\boldsymbol{x}_{0}에서 ffnnTaylor polynomial은 (5.151)의 series에서 처음 n+1n+1개의 구성 요소를 포함하며 다음과 같이 정의된다.

Tn(x)=k=0nDxkf(x0)k!δk.T_{n}(\boldsymbol{x})=\sum_{k=0}^{n} \frac{D_{\boldsymbol{x}}^{k} f\left(\boldsymbol{x}_{0}\right)}{k!} \boldsymbol{\delta}^{k} .

(5.151)과 (5.152)에서 우리는 δk\boldsymbol{\delta}^{k}라는 다소 느슨한 표기법을 사용했는데, 이는 vector xRD,D>1\boldsymbol{x} \in \mathbb{R}^{D}, D>1, 및 k>1k>1에 대해 정의되지 않는다. DxkfD_{\boldsymbol{x}}^{k} fδk\boldsymbol{\delta}^{k}는 모두 kktensor, 즉 kk차원 배열이다. kktensor δkRD×D××D\boldsymbol{\delta}^{k} \in \mathbb{R}^{\overbrace{D \times D \times \ldots \times D}}vector δRD\boldsymbol{\delta} \in \mathbb{R}^{D}kkouter product(\otimes로 표시)으로 얻어진다. 예를 들어,

δ2:=δδ=δδ,δ2[i,j]=δ[i]δ[j]\boldsymbol{\delta}^{2}:=\boldsymbol{\delta} \otimes \boldsymbol{\delta}=\boldsymbol{\delta} \boldsymbol{\delta}^{\top}, \quad \boldsymbol{\delta}^{2}[i, j]=\delta[i] \delta[j] δ3:=δδδ,δ3[i,j,k]=δ[i]δ[j]δ[k].\boldsymbol{\delta}^{3}:=\boldsymbol{\delta} \otimes \boldsymbol{\delta} \otimes \boldsymbol{\delta}, \quad \boldsymbol{\delta}^{3}[i, j, k]=\delta[i] \delta[j] \delta[k] .

Figure 5.13은 이러한 두 가지 outer product를 시각화한다. 일반적으로 우리는 다음 항들을 얻는다.

Dxkf(x0)δk=i1=1Dik=1DDxkf(x0)[i1,,ik]δ[i1]δ[ik]D_{\boldsymbol{x}}^{k} f\left(\boldsymbol{x}_{0}\right) \boldsymbol{\delta}^{k}=\sum_{i_{1}=1}^{D} \cdots \sum_{i_{k}=1}^{D} D_{\boldsymbol{x}}^{k} f\left(\boldsymbol{x}_{0}\right)\left[i_{1}, \ldots, i_{k}\right] \delta\left[i_{1}\right] \cdots \delta\left[i_{k}\right]

Taylor series에서 Dxkf(x0)δkD_{\boldsymbol{x}}^{k} f\left(\boldsymbol{x}_{0}\right) \boldsymbol{\delta}^{k}kkpolynomial을 포함한다. 이제 vector field에 대한 Taylor series를 정의했으므로, k=0,,3k=0, \ldots, 3δ:=xx0\boldsymbol{\delta}:=\boldsymbol{x}-\boldsymbol{x}_{0}에 대한 Taylor series expansion의 첫 번째 항 Dxkf(x0)δkD_{\boldsymbol{x}}^{k} f\left(\boldsymbol{x}_{0}\right) \boldsymbol{\delta}^{k}를 명시적으로 작성해 보자.

k=0:Dx0f(x0)δ0=f(x0)Rk=1:Dx1f(x0)δ1=xf(x0)1×DδD×1=i=1Dxf(x0)[i]δ[i]Rk=2:Dx2f(x0)δ2=tr(H(x0)D×DδD×1δ1×D)=δH(x0)δ=i=1Dj=1DH[i,j]δ[i]δ[j]Rk=3:Dx3f(x0)δ3=i=1Dj=1Dk=1DDx3f(x0)[i,j,k]δ[i]δ[j]δ[k]R\begin{aligned} k & =0: D_{\boldsymbol{x}}^{0} f\left(\boldsymbol{x}_{0}\right) \boldsymbol{\delta}^{0}=f\left(\boldsymbol{x}_{0}\right) \in \mathbb{R} \\ k & =1: D_{\boldsymbol{x}}^{1} f\left(\boldsymbol{x}_{0}\right) \boldsymbol{\delta}^{1}=\underbrace{\nabla_{\boldsymbol{x}} f\left(\boldsymbol{x}_{0}\right)}_{1 \times D} \underbrace{\boldsymbol{\delta}}_{D \times 1}=\sum_{i=1}^{D} \nabla_{\boldsymbol{x}} f\left(\boldsymbol{x}_{0}\right)[i] \delta[i] \in \mathbb{R} \\ k & =2: D_{\boldsymbol{x}}^{2} f\left(\boldsymbol{x}_{0}\right) \boldsymbol{\delta}^{2}=\operatorname{tr}(\underbrace{\boldsymbol{H}\left(\boldsymbol{x}_{0}\right)}_{D \times D} \underbrace{\boldsymbol{\delta}}_{D \times 1} \underbrace{\boldsymbol{\delta}^{\top}}_{1 \times D})=\boldsymbol{\delta}^{\top} \boldsymbol{H}\left(\boldsymbol{x}_{0}\right) \boldsymbol{\delta} \\ & =\sum_{i=1}^{D} \sum_{j=1}^{D} H[i, j] \delta[i] \delta[j] \in \mathbb{R} \\ k & =3: D_{\boldsymbol{x}}^{3} f\left(\boldsymbol{x}_{0}\right) \boldsymbol{\delta}^{3}=\sum_{i=1}^{D} \sum_{j=1}^{D} \sum_{k=1}^{D} D_{x}^{3} f\left(\boldsymbol{x}_{0}\right)[i, j, k] \delta[i] \delta[j] \delta[k] \in \mathbb{R} \end{aligned}

여기서 H(x0)\boldsymbol{H}\left(\boldsymbol{x}_{0}\right)x0\boldsymbol{x}_{0}에서 평가된 ffHessian이다.

Example 5.15 (Taylor Series Expansion of a Function with Two Variables)

다음 함수를 고려해 보자.

f(x,y)=x2+2xy+y3f(x, y)=x^{2}+2 x y+y^{3}

우리는 (x0,y0)=(1,2)\left(x_{0}, y_{0}\right)=(1,2)에서 ffTaylor series expansion을 계산하고자 한다. 시작하기 전에 무엇을 기대할 수 있는지 논의해 보자. (5.161)의 함수는 3차 다항식이다. 우리는 그 자체가 다항식의 선형 조합인 Taylor series expansion을 찾고 있다. 따라서 Taylor series expansion이 3차 다항식을 표현하기 위해 4차 이상의 항을 포함할 것이라고는 예상하지 않는다. 이는 (5.161)의 정확한 대체 표현을 위해 (5.151)의 처음 네 항을 결정하는 것으로 충분하다는 것을 의미한다.

Taylor series expansion을 결정하기 위해 상수항과 1차 도함수부터 시작하며, 이는 다음과 같다.

f(1,2)=13f(1,2)=13

np.einsum( 'i,i',Df1,d) np.einsum( 'ij,i,j', Df2,d,d) np.einsum( 'ijk,i,j,k', Df3, d, d, d)

fx=2x+2yfx(1,2)=6fy=2x+3y2fy(1,2)=14.\begin{aligned} & \frac{\partial f}{\partial x}=2 x+2 y \Longrightarrow \frac{\partial f}{\partial x}(1,2)=6 \\ & \frac{\partial f}{\partial y}=2 x+3 y^{2} \Longrightarrow \frac{\partial f}{\partial y}(1,2)=14 . \end{aligned}

따라서 우리는 다음을 얻는다.

Dx,y1f(1,2)=x,yf(1,2)=[fx(1,2)fy(1,2)]=[614]R1×2D_{x, y}^{1} f(1,2)=\nabla_{x, y} f(1,2)=\left[\frac{\partial f}{\partial x}(1,2) \quad \frac{\partial f}{\partial y}(1,2)\right]=\left[\begin{array}{ll} 6 & 14 \end{array}\right] \in \mathbb{R}^{1 \times 2}

이때,

Dx,y1f(1,2)1!δ=[614][x1y2]=6(x1)+14(y2)\frac{D_{x, y}^{1} f(1,2)}{1!} \boldsymbol{\delta}=\left[\begin{array}{ll} 6 & 14 \end{array}\right]\left[\begin{array}{l} x-1 \\ y-2 \end{array}\right]=6(x-1)+14(y-2)

Dx,y1f(1,2)δD_{x, y}^{1} f(1,2) \boldsymbol{\delta}는 선형 항, 즉 1차 다항식만 포함한다는 점에 유의하라.

2차 편도함수는 다음과 같다.

2fx2=22fx2(1,2)=22fy2=6y2fy2(1,2)=122fyx=22fyx(1,2)=22fxy=22fxy(1,2)=2\begin{aligned} & \frac{\partial^{2} f}{\partial x^{2}}=2 \Longrightarrow \frac{\partial^{2} f}{\partial x^{2}}(1,2)=2 \\ & \frac{\partial^{2} f}{\partial y^{2}}=6 y \Longrightarrow \frac{\partial^{2} f}{\partial y^{2}}(1,2)=12 \\ & \frac{\partial^{2} f}{\partial y \partial x}=2 \Longrightarrow \frac{\partial^{2} f}{\partial y \partial x}(1,2)=2 \\ & \frac{\partial^{2} f}{\partial x \partial y}=2 \Longrightarrow \frac{\partial^{2} f}{\partial x \partial y}(1,2)=2 \end{aligned}

2차 편도함수들을 모으면 Hessian을 얻는다.

H=[2fx22fxy2fyx2fy2]=[2226y]\boldsymbol{H}=\left[\begin{array}{cc} \frac{\partial^{2} f}{\partial x^{2}} & \frac{\partial^{2} f}{\partial x \partial y} \\ \frac{\partial^{2} f}{\partial y \partial x} & \frac{\partial^{2} f}{\partial y^{2}} \end{array}\right]=\left[\begin{array}{cc} 2 & 2 \\ 2 & 6 y \end{array}\right]

이때,

H(1,2)=[22212]R2×2\boldsymbol{H}(1,2)=\left[\begin{array}{cc} 2 & 2 \\ 2 & 12 \end{array}\right] \in \mathbb{R}^{2 \times 2}

따라서 Taylor series expansion의 다음 항은 다음과 같다.

Dx,y2f(1,2)2!δ2=12δH(1,2)δ=12[x1y2][22212][x1y2]=(x1)2+2(x1)(y2)+6(y2)2\begin{aligned} \frac{D_{x, y}^{2} f(1,2)}{2!} \boldsymbol{\delta}^{2} & =\frac{1}{2} \boldsymbol{\delta}^{\top} \boldsymbol{H}(1,2) \boldsymbol{\delta} \\ & =\frac{1}{2}\left[\begin{array}{ll} x-1 & y-2 \end{array}\right]\left[\begin{array}{cc} 2 & 2 \\ 2 & 12 \end{array}\right]\left[\begin{array}{l} x-1 \\ y-2 \end{array}\right] \\ & =(x-1)^{2}+2(x-1)(y-2)+6(y-2)^{2} \end{aligned}

여기서 Dx,y2f(1,2)δ2D_{x, y}^{2} f(1,2) \boldsymbol{\delta}^{2}는 2차 항, 즉 2차 다항식만 포함한다.

3차 도함수는 다음과 같이 얻어진다.

Dx,y3f=[HxHy]R2×2×2Dx,y3f[:,:,1]=Hx=[3fx33fx2y3fxyx3fxy2]Dx,y3f[:,:,2]=Hy=[3fyx23fyxyy2x3fy3]\begin{gathered} D_{x, y}^{3} f=\left[\begin{array}{ll} \frac{\partial \boldsymbol{H}}{\partial x} & \frac{\partial \boldsymbol{H}}{\partial y} \end{array}\right] \in \mathbb{R}^{2 \times 2 \times 2} \\ D_{x, y}^{3} f[:,:, 1]=\frac{\partial \boldsymbol{H}}{\partial x}=\left[\begin{array}{cc} \frac{\partial^{3} f}{\partial x^{3}} & \frac{\partial^{3} f}{\partial x^{2} \partial y} \\ \frac{\partial^{3} f}{\partial x \partial y \partial x} & \frac{\partial^{3} f}{\partial x \partial y^{2}} \end{array}\right] \\ D_{x, y}^{3} f[:,:, 2]=\frac{\partial \boldsymbol{H}}{\partial y}=\left[\begin{array}{cc} \frac{\partial^{3} f}{\partial y \partial x^{2}} & \frac{\partial^{3} f}{\partial y \partial x \partial y} \\ \partial y^{2} \partial x & \frac{\partial^{3} f}{\partial y^{3}} \end{array}\right] \end{gathered}

(5.171)의 Hessian에 있는 대부분의 2차 편도함수가 상수이므로, 유일한 0이 아닌 3차 편도함수는 다음과 같다.

3fy3=63fy3(1,2)=6\frac{\partial^{3} f}{\partial y^{3}}=6 \Longrightarrow \frac{\partial^{3} f}{\partial y^{3}}(1,2)=6

고차 도함수와 3차 혼합 도함수(예: f3x2y)\left.\frac{\partial f^{3}}{\partial x^{2} \partial y}\right)는 소멸하므로,

Dx,y3f[:,:,1]=[0000],Dx,y3f[:,:,2]=[0006]D_{x, y}^{3} f[:,:, 1]=\left[\begin{array}{ll} 0 & 0 \\ 0 & 0 \end{array}\right], \quad D_{x, y}^{3} f[:,:, 2]=\left[\begin{array}{ll} 0 & 0 \\ 0 & 6 \end{array}\right]

그리고

Dx,y3f(1,2)3!δ3=(y2)3\frac{D_{x, y}^{3} f(1,2)}{3!} \delta^{3}=(y-2)^{3}

이는 Taylor series의 모든 3차 항을 모은 것이다. 전체적으로, (x0,y0)=(1,2)\left(x_{0}, y_{0}\right)=(1,2)에서의 ff의 (정확한) Taylor series expansion은 다음과 같다.

f(x)=f(1,2)+Dx,y1f(1,2)δ+Dx,y2f(1,2)2!δ2+Dx,y3f(1,2)3!δ3=f(1,2)+f(1,2)x(x1)+f(1,2)y(y2)+12!(2f(1,2)x2(x1)2+2f(1,2)y2(y2)2+22f(1,2)xy(x1)(y2))+163f(1,2)y3(y2)3=13+6(x1)+14(y2)+(x1)2+6(y2)2+2(x1)(y2)+(y2)3\begin{aligned} f(x)= & f(1,2)+D_{x, y}^{1} f(1,2) \boldsymbol{\delta}+\frac{D_{x, y}^{2} f(1,2)}{2!} \boldsymbol{\delta}^{2}+\frac{D_{x, y}^{3} f(1,2)}{3!} \delta^{3} \\ = & f(1,2)+\frac{\partial f(1,2)}{\partial x}(x-1)+\frac{\partial f(1,2)}{\partial y}(y-2) \\ & +\frac{1}{2!}\left(\frac{\partial^{2} f(1,2)}{\partial x^{2}}(x-1)^{2}+\frac{\partial^{2} f(1,2)}{\partial y^{2}}(y-2)^{2}\right. \\ & \left.+2 \frac{\partial^{2} f(1,2)}{\partial x \partial y}(x-1)(y-2)\right)+\frac{1}{6} \frac{\partial^{3} f(1,2)}{\partial y^{3}}(y-2)^{3} \\ = & 13+6(x-1)+14(y-2) \\ & +(x-1)^{2}+6(y-2)^{2}+2(x-1)(y-2)+(y-2)^{3} \end{aligned}

이 경우, 우리는 (5.161)의 다항식에 대한 정확한 Taylor series expansion을 얻었다. 즉, (5.180c)의 다항식은 (5.161)의 원래 다항식과 동일하다. 이 특정 예시에서 이 결과는 놀라운 것이 아니다. 원래 함수가 3차 다항식이었고, 이를 (5.180c)에서 상수항, 1차, 2차, 3차 다항식의 선형 조합으로 표현했기 때문이다.

5.9 Further Reading

행렬 미분에 대한 자세한 내용과 필요한 선형 대수에 대한 간략한 검토는 Magnus and Neudecker (2007)에서 찾을 수 있다. **자동 미분(automatic differentiation)**은 오랜 역사를 가지고 있으며, Griewank and Walther (2003), Griewank and Walther (2008), Elliott (2009) 및 그 참고 문헌을 참조한다.

머신러닝(및 다른 분야)에서 우리는 종종 기댓값(expectation)을 계산해야 한다. 즉, 다음과 같은 형태의 적분을 풀어야 한다.

Ex[f(x)]=f(x)p(x)dx\mathbb{E}_{\boldsymbol{x}}[f(\boldsymbol{x})]=\int f(\boldsymbol{x}) p(\boldsymbol{x}) d \boldsymbol{x}

extended Kalman filter unscented transform Laplace approximation

p(x)p(\boldsymbol{x})가 편리한 형태(예: Gaussian)이더라도, 이 적분은 일반적으로 해석적으로 풀 수 없다. ffTaylor series expansion은 근사 해를 찾는 한 가지 방법이다. p(x)=N(μ,Σ)p(\boldsymbol{x})=\mathcal{N}(\boldsymbol{\mu}, \boldsymbol{\Sigma})가 Gaussian이라고 가정하면, μ\boldsymbol{\mu} 주변의 1차 Taylor series expansion은 비선형 함수 ff를 국소적으로 선형화한다. 선형 함수에 대해서는 p(x)p(\boldsymbol{x})가 Gaussian 분포를 따를 경우 평균(및 공분산)을 정확하게 계산할 수 있다(섹션 6.5 참조). 이 속성은 비선형 동적 시스템(일명 "state-space models")에서 온라인 상태 추정을 위해 extended Kalman filter (Maybeck, 1979)에 의해 많이 활용된다. (5.181)의 적분을 근사하는 다른 결정론적 방법으로는 어떠한 gradient도 필요하지 않은 unscented transform (Julier and Uhlmann, 1997) 또는 p(x)p(\boldsymbol{x})의 mode 주변에서 국소적인 Gaussian 근사를 위해 2차 Taylor series expansion(Hessian 필요)을 사용하는 Laplace approximation (MacKay, 2003; Bishop, 2006; Murphy, 2012)이 있다.

Exercises

5.1 다음 함수 f(x)=log(x4)sin(x3)f(x)=\log \left(x^{4}\right) \sin \left(x^{3}\right)에 대해 미분 f(x)f^{\prime}(x)를 계산하시오.

5.2 로지스틱 시그모이드 함수 f(x)=11+exp(x)f(x)=\frac{1}{1+\exp (-x)}의 미분 f(x)f^{\prime}(x)를 계산하시오.

5.3 함수 f(x)=exp(12σ2(xμ)2)f(x)=\exp \left(-\frac{1}{2 \sigma^{2}}(x-\mu)^{2}\right)의 미분 f(x)f^{\prime}(x)를 계산하시오. 여기서 μ,σR\mu, \sigma \in \mathbb{R}는 상수이다.

5.4 f(x)=sin(x)+cos(x)f(x)=\sin (x)+\cos (x)x0=0x_{0}=0에서의 테일러 다항식 Tn,n=0,,5T_{n}, n=0, \ldots, 5를 계산하시오.

5.5 다음 함수들을 고려하시오:

f1(x)=sin(x1)cos(x2),xR2f2(x,y)=xy,x,yRnf3(x)=xx,xRn\begin{aligned} & f_{1}(\boldsymbol{x})=\sin \left(x_{1}\right) \cos \left(x_{2}\right), \quad \boldsymbol{x} \in \mathbb{R}^{2} \\ & f_{2}(\boldsymbol{x}, \boldsymbol{y})=\boldsymbol{x}^{\top} \boldsymbol{y}, \quad \boldsymbol{x}, \boldsymbol{y} \in \mathbb{R}^{n} \\ & f_{3}(\boldsymbol{x})=\boldsymbol{x} \boldsymbol{x}^{\top}, \quad \boldsymbol{x} \in \mathbb{R}^{n} \end{aligned}

a. fix\frac{\partial f_{i}}{\partial \boldsymbol{x}}의 차원은 무엇인가? b. Jacobian을 계산하시오.

5.6 fft\boldsymbol{t}에 대해 미분하고 ggX\boldsymbol{X}에 대해 미분하시오. 여기서

f(t)=sin(log(tt)),tRDg(X)=tr(AXB),ARD×E,XRE×F,BRF×D,\begin{aligned} & f(\boldsymbol{t})=\sin \left(\log \left(\boldsymbol{t}^{\top} \boldsymbol{t}\right)\right), \quad t \in \mathbb{R}^{D} \\ & g(\boldsymbol{X})=\operatorname{tr}(\boldsymbol{A} \boldsymbol{X} \boldsymbol{B}), \quad \boldsymbol{A} \in \mathbb{R}^{D \times E}, \boldsymbol{X} \in \mathbb{R}^{E \times F}, \boldsymbol{B} \in \mathbb{R}^{F \times D}, \end{aligned}

tr()\operatorname{tr}(\cdot)trace를 나타낸다.

5.7 **연쇄 법칙(chain rule)**을 사용하여 다음 함수들의 미분 df/dx\mathrm{d} f / \mathrm{d} \boldsymbol{x}를 계산하시오. 모든 편미분의 차원을 제공하고, 단계를 자세히 설명하시오. a.

f(z)=log(1+z),z=xx,xRDf(z)=\log (1+z), \quad z=\boldsymbol{x}^{\top} \boldsymbol{x}, \quad \boldsymbol{x} \in \mathbb{R}^{D}

b.

f(z)=sin(z),z=Ax+b,ARE×D,xRD,bREf(\boldsymbol{z})=\sin (\boldsymbol{z}), \quad \boldsymbol{z}=\boldsymbol{A} \boldsymbol{x}+\boldsymbol{b}, \quad \boldsymbol{A} \in \mathbb{R}^{E \times D}, \boldsymbol{x} \in \mathbb{R}^{D}, \boldsymbol{b} \in \mathbb{R}^{E}

여기서 sin()\sin (\cdot)z\boldsymbol{z}의 모든 요소에 적용된다.

5.8 다음 함수들의 미분 df/dx\mathrm{d} f / \mathrm{d} \boldsymbol{x}를 계산하시오. 단계를 자세히 설명하시오. a. **연쇄 법칙(chain rule)**을 사용하시오. 모든 편미분의 차원을 제공하시오.

f(z)=exp(12z)z=g(y)=yS1yy=h(x)=xμ\begin{aligned} f(z) & =\exp \left(-\frac{1}{2} z\right) \\ z & =g(\boldsymbol{y})=\boldsymbol{y}^{\top} \boldsymbol{S}^{-1} \boldsymbol{y} \\ \boldsymbol{y} & =h(\boldsymbol{x})=\boldsymbol{x}-\boldsymbol{\mu} \end{aligned}

여기서 x,μRD,sRD×D\boldsymbol{x}, \boldsymbol{\mu} \in \mathbb{R}^{D}, \boldsymbol{s} \in \mathbb{R}^{D \times D}. b.

f(x)=tr(xx+σ2I),xRDf(\boldsymbol{x})=\operatorname{tr}\left(\boldsymbol{x} \boldsymbol{x}^{\top}+\sigma^{2} \boldsymbol{I}\right), \quad \boldsymbol{x} \in \mathbb{R}^{D}

여기서 tr(A)\operatorname{tr}(\boldsymbol{A})A\boldsymbol{A}trace, 즉 대각 요소 AiiA_{i i}의 합이다. 힌트: **외적(outer product)**을 명시적으로 작성하시오. c. **연쇄 법칙(chain rule)**을 사용하시오. 모든 편미분의 차원을 제공하시오. 편미분들의 곱을 명시적으로 계산할 필요는 없다.

f=tanh(z)RMz=Ax+b,xRN,ARM×N,bRM.\begin{aligned} & \boldsymbol{f}=\tanh (\boldsymbol{z}) \in \mathbb{R}^{M} \\ & \boldsymbol{z}=\boldsymbol{A} \boldsymbol{x}+\boldsymbol{b}, \quad \boldsymbol{x} \in \mathbb{R}^{N}, \boldsymbol{A} \in \mathbb{R}^{M \times N}, \boldsymbol{b} \in \mathbb{R}^{M} . \end{aligned}

여기서 tanh\tanhz\boldsymbol{z}의 모든 구성 요소에 적용된다.

5.9 다음을 정의한다:

g(z,ν):=logp(x,z)logq(z,ν)z:=t(ϵ,ν)\begin{aligned} g(\boldsymbol{z}, \boldsymbol{\nu}) & :=\log p(\boldsymbol{x}, \boldsymbol{z})-\log q(\boldsymbol{z}, \boldsymbol{\nu}) \\ \boldsymbol{z} & :=t(\boldsymbol{\epsilon}, \boldsymbol{\nu}) \end{aligned}

미분 가능한 함수 p,q,tp, q, t에 대해 xRD,zRE,νRF,ϵRG\boldsymbol{x} \in \mathbb{R}^{D}, \boldsymbol{z} \in \mathbb{R}^{E}, \boldsymbol{\nu} \in \mathbb{R}^{F}, \boldsymbol{\epsilon} \in \mathbb{R}^{G}이다. **연쇄 법칙(chain rule)**을 사용하여 다음 gradient를 계산하시오.

d dνg(z,ν).\frac{\mathrm{d}}{\mathrm{~d} \boldsymbol{\nu}} g(\boldsymbol{z}, \boldsymbol{\nu}) .