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을 소수 7⋅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)**은 선형대수학에서 중요한 개념이다. 행렬식은 선형 방정식 시스템의 분석 및 해법에 사용되는 수학적 객체이다. 행렬식은 정방행렬A∈Rn×n, 즉 행과 열의 수가 같은 행렬에 대해서만 정의된다. 이 책에서는 행렬식을 det(A) 또는 때로는 ∣A∣로 표기하며, 다음과 같이 나타낸다.
정방행렬 A∈Rn×n의 행렬식은 A를 실수로 매핑하는 함수이다. 일반적인 n×n 행렬에 대한 행렬식의 정의를 제시하기 전에, 몇 가지 동기 부여 예시를 살펴보고 특정 행렬에 대한 행렬식을 정의해 보자.
Example 4.1 (Testing for Matrix Invertibility)
정방 행렬 A가 **가역 행렬(invertible matrix)**인지 살펴보는 것부터 시작하자(2.2.2절 참조). 가장 작은 경우에 대해서는 행렬이 언제 가역적인지 이미 알고 있다. 만약 A가 1×1 행렬, 즉 스칼라 숫자라면, A=a⟹A−1=a1이다. 따라서 aa1=1은 a=0일 때만 성립한다.
2×2 행렬의 경우, 역행렬의 정의(정의 2.3)에 따라 AA−1=I임을 알고 있다. 그러면 (2.24)에 의해 A의 역행렬은 다음과 같다.
A−1=a11a22−a12a211[a22−a21−a12a11].
따라서 A는 다음 조건이 충족될 때만 가역적이다.
a11a22−a12a21=0
이 값은 A∈R2×2의 **행렬식(determinant)**이다. 즉,
det(A)=a11a21a12a22=a11a22−a12a21.
예제 4.1은 이미 행렬식과 역행렬의 존재 사이의 관계를 보여준다. 다음 정리는 n×n 행렬에 대해서도 동일한 결과를 나타낸다.
정리 4.1. 임의의 정방 행렬 A∈Rn×n에 대해 A는 det(A)=0일 때만 가역적이다.
우리는 행렬의 원소들을 사용하여 작은 행렬의 행렬식에 대한 명시적인 (닫힌 형태의) 표현을 가지고 있다. n=1일 때,
det(A)=det(a11)=a11
n=2일 때,
det(A)=a11a21a12a22=a11a22−a12a21,
이는 앞선 예시에서 관찰한 바 있다.
n=3일 때 (**사러스의 규칙(Sarrus' rule)**으로 알려져 있다),
정방 행렬 T가 i>j일 때 Tij=0이면, 즉 대각선 아래의 원소가 모두 0이면 **상삼각 행렬(upper-triangular matrix)**이라고 부른다. 유사하게, 대각선 위의 원소가 모두 0인 행렬을 **하삼각 행렬(lower-triangular matrix)**이라고 정의한다. 삼각 행렬 T∈Rn×n의 행렬식은 대각선 원소들의 곱이다. 즉,
det(T)=i=1∏nTii
Example 4.2 (Determinants as Measures of Volume)
**행렬식(determinant)**의 개념은 Rn 공간에서 객체를 형성하는 n개의 벡터 집합으로부터의 매핑으로 간주할 때 자연스럽다. 행렬식 det(A)는 행렬 A의 열 벡터들이 형성하는 n차원 **평행육면체(parallelepiped)**의 부호 있는 부피(signed volume)임이 밝혀졌다.
n=2일 때, 행렬의 열 벡터들은 평행사변형을 형성한다. 그림 4.2를 참조하라. 벡터 사이의 각도가 작아질수록 평행사변형의 넓이도 줄어든다. 행렬 A=[b,g]의 열을 형성하는 두 벡터 b,g를 고려해보자. 그러면 A의 행렬식의 절댓값은 꼭짓점이 0,b,g,b+g인 평행사변형의 넓이가 된다. 특히, b,g가 선형 종속이어서 어떤 λ∈R에 대해 b=λg라면, 이들은 더 이상 2차원 평행사변형을 형성하지 않는다. 따라서 해당 넓이는 0이다. 반대로, b,g가 선형 독립이고 표준 기저 벡터(canonical basis vectors)e1,e2의 배수라면, 이들은 b=[b0]와 g=[0g]로 쓸 수 있으며, 행렬식은 b00g=bg−0=bg가 된다.
행렬식의 부호는 표준 기저(e1,e2)에 대한 생성 벡터(spanning vectors)b,g의 **방향(orientation)**을 나타낸다. 그림에서 순서를 g,b로 바꾸면 A의 열이 바뀌고 음영 처리된 영역의 방향이 반전된다. 이는 익숙한 공식인 '넓이 = 높이 × 길이'가 된다. 이러한 직관은 더 높은 차원으로 확장된다. R3에서 우리는 평행육면체의 모서리를 형성하는 세 벡터 r,b,g∈R3를 고려한다. 즉, 면이 평행한 평행사변형으로 이루어진 입체이다(그림 4.3 참조). 3×3 행렬 [r,b,g]의 행렬식의 절댓값은 이 입체의 부피이다. 따라서 행렬식은 행렬로 구성된 열 벡터들이 형성하는 부호 있는 부피를 측정하는 함수 역할을 한다.
행렬식은 행렬의 열 벡터들이 형성하는 평행육면체의 부호 있는 부피이다.
Figure 4.2 벡터 b와 g에 의해 형성되는 평행사변형(음영 영역)의 넓이는 ∣det([b,g])∣이다.
Figure 4.3 벡터 r,b,g에 의해 형성되는 평행육면체(음영 부피)의 부피는 ∣det([r,b,g])∣이다.
행렬식의 부호는 생성 벡터의 방향을 나타낸다.
라플라스 전개(Laplace expansion)det(Ak,j)는 **소행렬식(minor)**이라고 불리며, (−1)k+jdet(Ak,j)는 **여인수(cofactor)**라고 불린다.
이 벡터들을 행렬의 열로 작성하면
A=[r,g,b]=20−861014−1
원하는 부피를 다음과 같이 계산할 수 있다.
V=∣det(A)∣=186
n×n 행렬의 행렬식을 계산하려면 n>3인 경우를 해결하기 위한 일반적인 알고리즘이 필요하며, 이에 대해 다음에서 살펴볼 것이다. 아래의 정리 4.2는 n×n 행렬의 행렬식 계산 문제를 (n−1)×(n−1) 행렬의 행렬식 계산 문제로 축소시킨다. 라플라스 전개(Laplace expansion)(정리 4.2)를 재귀적으로 적용함으로써, 궁극적으로 2×2 행렬의 행렬식을 계산하여 n×n 행렬의 행렬식을 계산할 수 있다.
정리 4.2 (라플라스 전개). 행렬 A∈Rn×n를 고려하자. 그러면 모든 j=1,…,n에 대해 다음이 성립한다:
j번째 열에 대한 전개
det(A)=k=1∑n(−1)k+jakjdet(Ak,j)
j번째 행에 대한 전개
det(A)=k=1∑n(−1)k+jajkdet(Aj,k)
여기서 Ak,j∈R(n−1)×(n−1)는 행 k와 열 j를 삭제하여 얻는 A의 **부분행렬(submatrix)**이다.
Example 4.3 (Laplace Expansion)
다음 행렬의 determinant를 계산해 보자.
A=130210321
첫 번째 행을 따라 Laplace expansion을 사용한다. (4.13)을 적용하면 다음과 같다.
Similar matrices (정의 2.22)는 동일한 determinant를 갖는다. 따라서 선형 사상 Φ:V→V에 대해 Φ의 모든 transformation matricesAΦ는 동일한 determinant를 갖는다. 즉, determinant는 선형 사상의 basis 선택에 불변이다.
한 열/행의 배수를 다른 열/행에 더해도 det(A)는 변하지 않는다.
열/행에 λ∈R를 곱하면 det(A)는 λ만큼 스케일링된다. 특히, det(λA)=λndet(A)이다.
두 행/열을 바꾸면 det(A)의 부호가 바뀐다.
마지막 세 가지 속성 때문에 Gaussian elimination (섹션 2.1 참조)을 사용하여 A를 row-echelon form으로 만들어 det(A)를 계산할 수 있다. Gaussian elimination은 A가 triangular form이 되어 diagonal 아래의 모든 요소가 0이 될 때 멈출 수 있다. (4.8)에서 triangular matrix의 determinant는 diagonal 요소들의 곱이라는 것을 상기하자.
정리 4.3. Square matrixA∈Rn×n는 det(A)=0인 경우에만 rk(A)=n이다. 다시 말해, A는 full rank인 경우에만 invertible이다.
수학이 주로 수작업으로 이루어지던 시절에는 determinant 계산이 행렬의 invertibility를 분석하는 필수적인 방법으로 여겨졌다. 그러나 현대 머신러닝 접근 방식에서는 determinant의 명시적인 계산을 대체하는 직접적인 수치적 방법을 사용한다. 예를 들어, 2장에서 inverse matrices는 Gaussian elimination으로 계산할 수 있다는 것을 배웠다. 따라서 Gaussian elimination은 행렬의 determinant를 계산하는 데 사용될 수 있다.
Determinant는 다음 섹션들, 특히 characteristic polynomial을 통해 eigenvalues와 eigenvectors (섹션 4.2)를 배울 때 중요한 이론적 역할을 할 것이다.
정의 4.4. Square matrixA∈Rn×n의 trace는 다음과 같이 정의된다.
Trace는 cyclic permutations에 대해 불변이다.
characteristic polynomial
tr(A):=i=1∑naii
즉, trace는 A의 diagonal 요소들의 합이다.
Trace는 다음 속성들을 만족한다.
tr(A+B)=tr(A)+tr(B) (단, A,B∈Rn×n)
tr(αA)=αtr(A) (단, α∈R, A∈Rn×n)
tr(In)=n
tr(AB)=tr(BA) (단, A∈Rn×k,B∈Rk×n)
이 네 가지 속성을 모두 만족하는 함수는 trace뿐이라는 것을 보일 수 있다 (Gohberg et al., 2012).
행렬 곱의 trace 속성은 더 일반적이다. 특히, trace는 cyclic permutations에 대해 불변이다. 즉,
tr(AKL)=tr(KLA)
(단, A∈Ra×k,K∈Rk×l,L∈Rl×a)이다. 이 속성은 임의의 수의 행렬 곱으로 일반화된다. (4.19)의 특수한 경우로, 두 벡터 x,y∈Rn에 대해 다음이 성립한다.
tr(xy⊤)=tr(y⊤x)=y⊤x∈R
벡터 공간 V에 대한 선형 사상 Φ:V→V가 주어졌을 때, 이 사상의 trace는 Φ의 행렬 표현의 trace를 사용하여 정의한다. V의 주어진 basis에 대해 Φ는 transformation matrixA로 설명될 수 있다. 그러면 Φ의 trace는 A의 trace이다. V의 다른 basis에 대해, Φ의 해당 transformation matrixB는 적절한 S에 대해 S−1AS 형태의 basis change를 통해 얻을 수 있다 (섹션 2.7.2 참조). Φ의 해당 trace에 대해 다음이 의미한다.
tr(B)=tr(S−1AS)=(4.19)tr(ASS−1)=tr(A)
따라서 선형 사상의 행렬 표현은 basis에 의존하지만, 선형 사상 Φ의 trace는 basis에 독립적이다.
이 섹션에서는 square matrix를 특징짓는 함수로서 determinant와 trace를 다루었다. Determinant와 trace에 대한 이해를 종합하여, 이제 행렬 A를 polynomial로 설명하는 중요한 방정식을 정의할 수 있으며, 이는 다음 섹션들에서 광범위하게 사용될 것이다.
정의 4.5 (Characteristic Polynomial). λ∈R와 square matrixA∈Rn×n에 대해
Characteristic polynomial (4.22a)을 통해 다음 섹션에서 다룰 eigenvalues와 eigenvectors를 계산할 수 있다.
4.2 Eigenvalues and Eigenvectors
이제 행렬과 그에 관련된 선형 매핑을 특징화하는 새로운 방법을 알아볼 것이다. 2.7.1절에서 모든 선형 매핑은 정렬된 기저(ordered basis)가 주어지면 고유한 **변환 행렬(transformation matrix)**을 가진다는 것을 상기하자. 우리는 "eigen" 분석을 수행하여 선형 매핑과 그에 관련된 변환 행렬을 해석할 수 있다. 곧 알게 되겠지만, 선형 매핑의 **고유값(eigenvalue)**은 특별한 벡터 집합인 **고유 벡터(eigenvector)**가 선형 매핑에 의해 어떻게 변환되는지를 알려줄 것이다.
정의 4.6. A∈Rn×n가 정방 행렬이라고 하자. 이때 λ∈R는 A의 고유값이고 x∈Rn\{0}는 A의 해당 고유 벡터이다. 만약 다음 식이 성립한다면:
Ax=λx.
우리는 (4.25)를 **고유값 방정식(eigenvalue equation)**이라고 부른다.
비고. 선형 대수 문헌 및 소프트웨어에서는 고유값을 내림차순으로 정렬하는 것이 일반적인 관례이다. 따라서 가장 큰 고유값과 그에 관련된 고유 벡터를 첫 번째 고유값 및 그에 관련된 고유 벡터라고 부르고, 두 번째로 큰 고유값을 두 번째 고유값 및 그에 관련된 고유 벡터라고 부르는 식이다. 그러나 교과서나 출판물에서는 순서에 대한 개념이 다르거나 없을 수도 있다. 이 책에서는 명시적으로 언급되지 않는 한 순서를 가정하지 않을 것이다.
다음 진술들은 동등하다:
λ는 A∈Rn×n의 고유값이다.
Ax=λx를 만족하는 x∈Rn\{0}가 존재한다. 또는 동등하게, (A−λIn)x=0가 자명하지 않은 해, 즉 x=0를 가질 수 있다.
rk(A−λIn)<n.
det(A−λIn)=0.
정의 4.7 (Collinearity와 Codirection). 같은 방향을 가리키는 두 벡터를 codirected라고 한다. 두 벡터가 같은 방향 또는 반대 방향을 가리키면 collinear라고 한다.
비고 (고유 벡터의 비고유성). 만약 x가 고유값 λ에 해당하는 A의 고유 벡터라면, c∈R\{0}인 모든 c에 대해 cx도 같은 고유값 λ를 갖는 A의 고유 벡터이다. 왜냐하면
A(cx)=cAx=cλx=λ(cx).
Eigen은 독일어로 "characteristic", "self", 또는 "own"을 의미한다.
따라서 x와 collinear한 모든 벡터 또한 A의 고유 벡터이다.
정리 4.8. λ∈R가 A∈Rn×n의 고유값인 것은 λ가 A의 특성 다항식(characteristic polynomial)pA(λ)의 근인 것과 필요충분조건이다.
정의 4.9. 정방 행렬 A가 고유값 λi를 가진다고 하자. λi의 **대수적 중복도(algebraic multiplicity)**는 특성 다항식에서 해당 근이 나타나는 횟수이다.
정의 4.10 (Eigenspace와 Eigenspectrum). A∈Rn×n에 대해, 고유값 λ에 해당하는 A의 모든 고유 벡터 집합은 Rn의 부분 공간을 형성하며, 이를 λ에 대한 A의 **고유 공간(eigenspace)**이라고 하고 Eλ로 표기한다. A의 모든 고유값 집합을 고유 스펙트럼(eigenspectrum) 또는 단순히 **스펙트럼(spectrum)**이라고 한다.
만약 λ가 A∈Rn×n의 고유값이라면, 해당 고유 공간 Eλ는 동차 선형 방정식 시스템 (A−λI)x=0의 해 공간이다. 기하학적으로, 0이 아닌 고유값에 해당하는 고유 벡터는 선형 매핑에 의해 늘어나는 방향을 가리킨다. 고유값은 늘어나는 비율을 나타내는 요소이다. 만약 고유값이 음수이면, 늘어나는 방향이 뒤집힌다.
Example 4.4 (The Case of the Identity Matrix)
항등 행렬 I∈Rn×n의 특성 다항식은 pI(λ)=det(I−λI)=(1−λ)n=0이며, 이는 λ=1이라는 하나의 고유값만 n번 발생한다. 또한, 모든 벡터 x∈Rn\{0}에 대해 Ix=λx=1x가 성립한다. 이 때문에 항등 행렬의 유일한 고유 공간(eigenspace)E1은 n차원을 가지며, Rn의 모든 n개의 표준 기저 벡터는 I의 고유 벡터이다.
고유값과 고유 벡터에 관한 유용한 속성은 다음과 같다:
행렬 A와 그 전치 행렬 A⊤는 동일한 고유값을 가지지만, 반드시 동일한 고유 벡터를 가지는 것은 아니다.
고유 공간 Eλ는 A−λI의 **영 공간(null space)**이다. 그 이유는 다음과 같다:
Ax=λx⟺Ax−λx=0⟺(A−λI)x=0⟺x∈ker(A−λI).
닮은 행렬(similar matrices)(정의 2.22 참조)은 동일한 고유값을 가진다. 따라서 선형 사상 Φ의 고유값은 변환 행렬의 기저 선택과 무관하다. 이로 인해 고유값은 행렬식(determinant) 및 **대각합(trace)**과 함께 선형 사상의 주요 특성 매개변수가 되는데, 이는 모두 기저 변경에 대해 불변하기 때문이다.
대칭, 양의 정부호 행렬은 항상 양의 실수 고유값을 가진다.
Example 4.5 (Computing Eigenvalues, Eigenvectors, and Eigenspaces)
2×2 행렬 A의 고유값(eigenvalue)과 고유벡터(eigenvector)를 찾아보자.
A=[4123]
1단계: 특성 다항식(Characteristic Polynomial).A의 고유벡터 x=0와 고유값 λ의 정의에 따르면, Ax=λx, 즉 (A−λI)x=0을 만족하는 벡터가 존재한다. x=0이므로, 이는 A−λI의 커널(null space)이 0 외에 다른 원소를 포함해야 함을 의미한다. 이는 A−λI가 역행렬을 갖지 않으며, 따라서 det(A−λI)=0임을 뜻한다. 그러므로 고유값을 찾기 위해 특성 다항식 (4.22a)의 근을 계산해야 한다.
3단계: 고유벡터(Eigenvectors) 및 고유공간(Eigenspaces). 이 고유값에 해당하는 고유벡터를 찾기 위해 다음을 만족하는 벡터 x를 살펴본다.
[4−λ123−λ]x=0
λ=5인 경우 다음을 얻는다.
[4−5123−5][x1x2]=[−112−2][x1x2]=0
이 동차 시스템을 풀면 해 공간은 다음과 같다.
E5=span[[21]
이 고유공간은 단일 기저 벡터를 가지므로 1차원이다.
마찬가지로, λ=2에 대한 고유벡터는 다음 동차 연립방정식을 풀어 찾는다.
[4−2123−2]x=[2121]x=0
기하적 중복도(geometric multiplicity)
기하학에서, 축에 평행한 이러한 유형의 전단(shearing)의 면적 보존 특성은 평행사변형에 대한 카발리에리의 등면적 원리(Cavalieri's principle of equal areas)로도 알려져 있다 (Katz, 2004).
이는 x2=−x1인 모든 벡터 x=[x1x2], 예를 들어 [1−1]이 고유값 2에 해당하는 고유벡터임을 의미한다. 해당 고유공간은 다음과 같이 주어진다.
E2=span[[1−1]
예제 4.5의 두 고유공간 E5와 E2는 각각 단일 벡터에 의해 생성되므로 1차원이다. 그러나 다른 경우에는 여러 개의 동일한 고유값을 가질 수 있으며(정의 4.9 참조), 고유공간은 1차원보다 클 수 있다. 정의 4.11.λi가 정방 행렬 A의 고유값이라고 하자. 그러면 λi의 **기하적 중복도(geometric multiplicity)**는 λi와 관련된 선형 독립 고유벡터의 개수이다. 다시 말해, λi와 관련된 고유벡터에 의해 생성되는 고유공간의 차원이다.
비고. 특정 고유값의 기하적 중복도는 최소한 1이어야 하는데, 모든 고유값은 적어도 하나의 관련 고유벡터를 가지기 때문이다. 고유값의 기하적 중복도는 대수적 중복도를 초과할 수 없지만, 더 낮을 수도 있다.
Example 4.6
행렬 A=[2012]는 두 개의 중복된 고유값 λ1=λ2=2를 가지며, 대수적 중복도는 2이다. 그러나 이 고유값은 단 하나의 고유 단위 고유벡터 x1=[10]만을 가지므로, 기하적 중복도는 1이다.
Graphical Intuition in Two Dimensions
서로 다른 선형 매핑을 사용하여 행렬식(determinant), 고유 벡터(eigenvector), **고유값(eigenvalue)**에 대한 직관을 얻어보자. 그림 4.4는 원점을 중심으로 하는 정사각형 격자 점들에 대한 다섯 가지 변환 행렬 A1,…,A5와 그 영향을 보여준다.
A1=[21002]. 두 고유 벡터의 방향은 R2의 표준 기저 벡터, 즉 두 주축에 해당한다. 수직축은 2배 확장되고(고유값λ1=2), 수평축은 21배 압축된다(고유값λ2=21). 이 매핑은 면적을 보존한다(det(A1)=1=2⋅21).
A2=[10211]는 **전단 매핑(shearing mapping)**에 해당한다. 즉, 수직축의 양의 절반에 있는 점들은 오른쪽으로, 음의 절반에 있는 점들은 왼쪽으로 수평축을 따라 전단한다. 이 매핑은 면적을 보존한다(det(A2)=1). 고유값λ1=1=λ2는 중복되며, 고유 벡터는 동일 선상에 있다(여기서는 강조를 위해 두 개의 반대 방향으로 그려져 있다). 이는 매핑이 한 방향(수평축)으로만 작용함을 나타낸다.
λ1=(0.87−0.5j)λ2=(0.87+0.5j)det(A)=1.0
A3=[cos(6π)sin(6π)−sin(6π)cos(6π)]=21[31−13]. 행렬 A3는 점들을 반시계 방향으로 6πrad=30∘ 회전시키며, 복소 고유값만 가진다. 이는 매핑이 회전임을 반영한다(따라서 고유 벡터는 그려져 있지 않다). 회전은 부피를 보존해야 하므로 행렬식은 1이다. 회전에 대한 자세한 내용은 섹션 3.9를 참조한다.
A4=[1−1−11]는 2차원 도메인을 1차원으로 축소하는 표준 기저에서의 매핑을 나타낸다. 하나의 고유값이 0이므로, 이 매핑은 2차원 공간을 1차원 공간으로 축소한다.
Figure 4.4
행렬식(Determinant)과 고유공간(Eigenspaces)
다섯 가지 선형 매핑과 그에 상응하는 변환 행렬 Ai∈R2×2에 대한 개요.
400개의 색상으로 구분된 점 x∈R2 (왼쪽 열)을 목표 점 Aix (오른쪽 열)으로 투영한다. 가운데 열은 첫 번째 **고유벡터(eigenvector)**가 해당 고유값(eigenvalue)λ1에 의해 늘어난 모습과 두 번째 고유벡터가 고유값 λ2에 의해 늘어난 모습을 보여준다. 각 행은 표준 기저(standard basis)에 대한 다섯 가지 변환 행렬 Ai 중 하나의 효과를 나타낸다.
값이 0일 때, λ1=0에 해당하는 (파란색) 고유벡터 방향의 공간은 붕괴되는 반면, 직교하는 (빨간색) 고유벡터는 공간을 λ2=2만큼 늘린다. 따라서 이미지의 넓이는 0이 된다.
A5=[121211]는 shear-and-stretch 매핑으로, ∣det(A5)∣=43이므로 공간을 75%만큼 스케일링한다. 이 매핑은 λ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의 완전한 신경망에 대한 연결성/인접 행렬 A∈R277×277을 구축한다. 각 행/열은 이 선충 뇌의 277개 뉴런 중 하나를 나타낸다. 연결성 행렬 A는 뉴런 i가 시냅스를 통해 뉴런 j와 통신하면 aij=1이고, 그렇지 않으면 aij=0의 값을 갖는다. 연결성 행렬은 대칭이 아니므로, 고유값(eigenvalues)이 실수 값을 갖지 않을 수 있다. 따라서 우리는 연결성 행렬의 대칭화된 버전인 Asym :=A+A⊤를 계산한다. 이 새로운 행렬 Asym 은 Figure 4.5(a)에 나와 있으며, 연결 방향에 관계없이 두 뉴런이 연결된 경우에만 0이 아닌 값 aij를 갖는다(흰색 픽셀). Figure 4.5(b)에서는 Asym 의 해당 eigenspectrum을 보여준다. 가로축은 내림차순으로 정렬된 고유값의 인덱스를 나타낸다. 세로축은 해당 고유값을 나타낸다. 이 eigenspectrum의 S자형 모양은 많은 생물학적 신경망에서 전형적이다. 이에 대한 근본적인 메커니즘은 활발한 신경과학 연구 분야이다.
정리 4.12. n개의 서로 다른 고유값 λ1,…,λn을 갖는 행렬 A∈Rn×n의 고유 벡터 x1,…,xn은 선형 독립이다.
이 정리는 n개의 서로 다른 고유값을 갖는 행렬의 고유 벡터가 Rn의 기저를 형성한다는 것을 나타낸다.
정의 4.13. 정방 행렬 A∈Rn×n은 n개 미만의 선형 독립 고유 벡터를 가질 경우 **결함(defective)**이 있다고 한다.
결함이 없는 행렬 A∈Rn×n은 반드시 n개의 서로 다른 고유값을 요구하지는 않지만, 고유 벡터가 Rn의 기저를 형성해야 한다. 결함이 있는 행렬의 고유 공간을 살펴보면, 고유 공간의 차원 합이 n보다 작다는 것을 알 수 있다. 특히, 결함이 있는 행렬은 대수적 중복도(algebraic multiplicity) m>1을 가지면서 기하적 중복도(geometric multiplicity)가 m보다 작은 고유값 λi를 적어도 하나 갖는다.
비고. 결함이 있는 행렬은 n개의 서로 다른 고유값을 가질 수 없다. 왜냐하면 서로 다른 고유값은 선형 독립 고유 벡터를 갖기 때문이다 (정리 4.12).
정리 4.14. 행렬 A∈Rm×n이 주어졌을 때, 다음을 정의함으로써 항상 대칭, 양의 준정부호 행렬 S∈Rn×n을 얻을 수 있다.
S:=A⊤A
비고. 만약 rk(A)=n이면, S:=A⊤A는 대칭, 양의 정부호이다.
정리 4.14가 왜 성립하는지 이해하는 것은 대칭화된 행렬을 어떻게 사용할 수 있는지에 대한 통찰력을 제공한다: 대칭성은 S=S⊤를 요구하며, (4.36)을 대입하면 S=A⊤A=A⊤(A⊤)⊤=(A⊤A)⊤=S⊤를 얻는다. 또한, 양의 준정부호성(섹션 3.2.3)은 x⊤Sx⩾0를 요구하며, (4.36)을 대입하면 x⊤Sx=x⊤A⊤Ax=(x⊤A⊤)(Ax)=(Ax)⊤(Ax)⩾0를 얻는다. 이는 내적(dot product)이 제곱의 합(그 자체로 음수가 아님)을 계산하기 때문이다.
정리 4.15 (Spectral Theorem). A∈Rn×n이 대칭이면, 해당 벡터 공간 V의 정규 직교 기저(orthonormal basis)가 A의 고유 벡터로 구성되며, 각 고유값은 실수이다.
Spectral Theorem의 직접적인 함의는 대칭 행렬 A의 eigendecomposition이 존재하며(실수 고유값을 가짐), A=PDP⊤와 같이 고유 벡터의 ONB를 찾을 수 있다는 것이다. 여기서 D는 대각 행렬이고 P의 열은 고유 벡터를 포함한다.
Example 4.8
다음 행렬을 고려해 보자.
A=322232223
A의 특성 다항식은 다음과 같다.
pA(λ)=−(λ−1)2(λ−7),
따라서 고유값 λ1=1과 λ2=7을 얻으며, 여기서 λ1은 중복된 고유값이다. 고유 벡터를 계산하는 표준 절차에 따라 다음 고유 공간을 얻는다.
x3는 x1과 x2 모두에 직교함을 알 수 있다. 그러나 x1⊤x2=1=0이므로 이들은 직교하지 않는다. 스펙트럼 정리(Spectral Theorem) (정리 4.15)는 직교 기저가 존재한다고 명시하지만, 우리가 가진 기저는 직교하지 않는다. 하지만 우리는 직교 기저를 구성할 수 있다.
이러한 기저를 구성하기 위해, x1,x2가 동일한 고유값 λ에 연관된 고유 벡터라는 사실을 활용한다. 따라서 임의의 α,β∈R에 대해 다음이 성립한다.
A(αx1+βx2)=Ax1α+Ax2β=λ(αx1+βx2),
즉, x1과 x2의 모든 선형 결합 또한 λ에 연관된 A의 고유 벡터이다. 그램-슈미트 알고리즘(Gram-Schmidt algorithm) (섹션 3.8.3)은 이러한 선형 결합을 사용하여 기저 벡터 집합으로부터 직교/정규 직교 기저를 반복적으로 구성하는 방법이다. 따라서 x1과 x2가 직교하지 않더라도, 그램-슈미트 알고리즘을 적용하여 서로 (그리고 x3에) 직교하는 λ1=1에 연관된 고유 벡터를 찾을 수 있다. 이 예시에서는 다음을 얻게 될 것이다.
x1′=−110,x2′=21−1−12,
이들은 서로 직교하고, x3에 직교하며, λ1=1에 연관된 A의 고유 벡터이다.
고유값과 고유 벡터에 대한 논의를 마치기 전에, 이러한 행렬 특성들을 **행렬식(determinant)**과 **대각합(trace)**의 개념과 연결하는 것이 유용하다.
정리 4.16. 행렬 A∈Rn×n의 행렬식은 그 고유값들의 곱이다. 즉,
det(A)=i=1∏nλi,
여기서 λi∈C는 A의 (중복될 수 있는) 고유값이다.
정리 4.17. 행렬 A∈Rn×n의 대각합은 그 고유값들의 합이다. 즉,
tr(A)=i=1∑nλi,
여기서 λi∈C는 A의 (중복될 수 있는) 고유값이다.
이 두 정리에 대한 기하학적 직관을 제공해 보자. 두 개의 선형 독립적인 고유 벡터 x1,x2를 갖는 행렬 A∈R2×2를 고려해 보자. 이 예시에서는 (x1,x2)가 R2의 ONB(정규 직교 기저)라고 가정하여, 이들이 직교하고 이들이 이루는 정사각형의 넓이가 1이라고 가정한다. 그림 4.6을 참조하라. 섹션 4.1에서 우리는 행렬식이 변환 A에 따른 단위 정사각형의 넓이 변화를 계산한다는 것을 알고 있다. 이 예시에서는 넓이 변화를 명시적으로 계산할 수 있다: 고유 벡터를 A를 사용하여 매핑하면 벡터 v1=Ax1=λ1x1과 v2=Ax2=λ2x2를 얻는다. 즉, 새로운 벡터 vi는 고유 벡터 xi의 스케일된 버전이며, 스케일링 인자는 해당 고유값 λi이다. v1,v2는 여전히 직교하며, 이들이 이루는 직사각형의 넓이는 ∣λ1λ2∣이다.
(이 예시에서) x1,x2가 정규 직교한다고 가정하면, 단위 정사각형의 둘레를 2(1+1)로 직접 계산할 수 있다. A를 사용하여 고유 벡터를 매핑하면 둘레가 2(∣λ1∣+∣λ2∣)인 직사각형이 생성된다. 따라서 고유값의 절댓값의 합은 변환 행렬 A에 따라 단위 정사각형의 둘레가 어떻게 변하는지를 알려준다.
Example 4.9 (Google's PageRank - Webpages as Eigenvectors)
Google은 검색을 위한 페이지 순위를 결정하기 위해 행렬 A의 **최대 고유값(maximal eigenvalue)**에 해당하는 **고유 벡터(eigenvector)**를 사용한다. 1996년 래리 페이지(Larry Page)와 세르게이 브린(Sergey Brin)이 스탠퍼드 대학교에서 개발한 PageRank 알고리즘의 아이디어는 어떤 웹 페이지의 중요성은 해당 페이지로 연결되는 페이지들의 중요성으로 근사할 수 있다는 것이었다. 이를 위해 그들은 모든 웹사이트를 어떤 페이지가 어떤 페이지로 연결되는지를 보여주는 거대한 **방향성 그래프(directed graph)**로 작성한다. PageRank는 웹사이트 ai의 가중치(중요도) xi⩾0를 ai를 가리키는 페이지 수를 세어 계산한다. 또한 PageRank는 ai로 연결되는 웹사이트의 중요도를 고려한다. 사용자의 탐색 행동은 이 그래프의 전이 행렬(transition matrix)A로 모델링되며, 이는 누군가가 어떤 (클릭) 확률로 특정 페이지에 도달할지를 알려준다.
Figure 4.6
고유값의 기하학적 해석. A의 고유 벡터는 해당 고유값에 의해 늘어난다. 단위 정사각형의 면적은 ∣λ1λ2∣만큼 변하고, 둘레는 21(∣λ1∣+∣λ2∣)배만큼 변한다.
PageRank
다른 웹사이트로 이동한다. 행렬 A는 웹사이트의 초기 랭크/중요도 벡터 x에 대해 시퀀스 x,Ax,A2x,…가 벡터 x∗로 수렴하는 속성을 갖는다. 이 벡터를 PageRank라고 하며, Ax∗=x∗를 만족한다. 즉, A의 (해당 고유값 1을 갖는) 고유벡터이다. x∗를 ∥x∗∥=1이 되도록 정규화하면, 그 엔트리들을 확률로 해석할 수 있다. PageRank에 대한 더 자세한 내용과 다양한 관점은 원본 기술 보고서(Page et al., 1999)에서 찾아볼 수 있다.
4.3 Cholesky Decomposition
머신러닝에서 자주 접하는 특수한 유형의 행렬을 **분해(factorize)**하는 방법은 여러 가지가 있다. 양의 실수에서는 숫자를 동일한 구성 요소로 분해하는 제곱근 연산이 있다 (예: 9=3⋅3). 행렬의 경우, 양의 값에 대해 제곱근과 유사한 연산을 계산할 때 주의해야 한다. 대칭 양의 정부호 행렬(symmetric, positive definite matrices, 섹션 3.2.3 참조)의 경우, 여러 제곱근 등가 연산 중에서 선택할 수 있다. **Cholesky 분해(Cholesky decomposition)/Cholesky 인수분해(Cholesky factorization)**는 대칭 양의 정부호 행렬에 대해 실용적으로 유용한 제곱근 등가 연산을 제공한다.
정리 4.18 (Cholesky 분해). 대칭 양의 정부호 행렬 A는 A=LL⊤의 곱으로 인수분해될 수 있으며, 여기서 L은 양의 대각선 요소를 갖는 하삼각 행렬(lower-triangular matrix)이다:
이처럼 우리는 모든 대칭 양의 정부호 3×3 행렬에 대한 Cholesky decomposition을 구성했다. 핵심적인 깨달음은 A의 값 aij와 이전에 계산된 lij 값을 사용하여 L의 구성 요소 lij가 무엇이어야 하는지 역으로 계산할 수 있다는 것이다.
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 decompositionA=LL⊤가 주어지면, 우리는 det(A)=det(L)det(L⊤)=det(L)2임을 안다. L은 triangular matrix이므로, determinant는 단순히 대각선 항목의 곱이므로 det(A)=∏ilii2이다. 따라서 많은 수치 소프트웨어 패키지는 계산 효율성을 높이기 위해 Cholesky decomposition을 사용한다.
4.4 Eigendecomposition and Diagonalization
**대각 행렬(diagonal matrix)**은 모든 비대각 요소(off-diagonal elements)가 0인 행렬을 의미하며, 다음과 같은 형태를 가진다.
D=c1⋮0⋯⋱⋯0⋮cn
대각 행렬은 행렬식(determinant), 거듭제곱(powers), **역행렬(inverses)**의 빠른 계산을 가능하게 한다. 행렬식은 대각 요소들의 곱이며, 행렬의 거듭제곱 Dk는 각 대각 요소를 k 제곱한 값으로 주어진다. 역행렬 D−1은 모든 대각 요소가 0이 아닐 경우, 각 대각 요소의 역수로 구성된다.
이 섹션에서는 행렬을 대각 형태로 변환하는 방법을 다룰 것이다. 이는 섹션 2.7.2에서 논의한 **기저 변환(basis change)**과 섹션 4.2의 **고유값(eigenvalues)**의 중요한 응용이다.
두 행렬 A,D가 유사하다(similar)(정의 2.22)는 것은 가역 행렬(invertible matrix) P가 존재하여 D=P−1AP를 만족하는 경우임을 상기하자. 더 구체적으로, 우리는 A의 고유값을 대각선에 포함하는 대각 행렬 D와 유사한 행렬 A를 살펴볼 것이다.
정의 4.19 (대각화 가능(Diagonalizable)). 행렬 A∈Rn×n는 대각 행렬과 유사할 경우 대각화 가능하다. 즉, 가역 행렬 P∈Rn×n가 존재하여 D=P−1AP를 만족하는 경우이다.
다음에서 우리는 행렬 A∈Rn×n를 대각화하는 것이 동일한 선형 사상(linear mapping)을 다른 기저(섹션 2.6.1 참조)로 표현하는 방법임을 알게 될 것이다. 이 기저는 A의 **고유 벡터(eigenvectors)**로 구성된 기저가 될 것이다.
A∈Rn×n라고 하고, λ1,…,λn을 스칼라 집합, p1,…,pn을 Rn의 벡터 집합이라고 하자. P:=[p1,…,pn]로 정의하고, D∈Rn×n를 대각 요소가 λ1,…,λn인 대각 행렬이라고 하자. 그러면 다음이 성립함을 보일 수 있다.
AP=PD
이는 λ1,…,λn이 A의 고유값이고 p1,…,pn이 A의 해당 고유 벡터인 경우에만 성립한다.
그러므로 P의 열(columns)은 A의 고유 벡터여야 한다.
대각화의 정의는 P∈Rn×n가 가역 행렬이어야 함을 요구한다. 즉, P는 **완전 랭크(full rank)**를 가져야 한다(정리 4.3). 이는 n개의 선형 독립(linearly independent)인 고유 벡터 p1,…,pn가 필요하다는 것을 의미하며, 즉 pi들이 Rn의 기저를 형성해야 한다.
정리 4.20 (고유값 분해(Eigendecomposition)). 정방 행렬(square matrix) A∈Rn×n는 다음과 같이 인수분해될 수 있다.
A=PDP−1,
여기서 P∈Rn×n이고 D는 대각 요소가 A의 고유값인 대각 행렬이다. 이는 A의 고유 벡터들이 Rn의 기저를 형성하는 경우에만 성립한다.
정리 4.20은 결함이 없는(non-defective) 행렬만이 대각화될 수 있으며, P의 열들이 A의 n개 고유 벡터임을 의미한다. 대칭 행렬(symmetric matrices)의 경우, 고유값 분해에 대해 훨씬 더 강력한 결과를 얻을 수 있다.
정리 4.21. 대칭 행렬 S∈Rn×n는 항상 대각화될 수 있다.
정리 4.21은 스펙트럼 정리(spectral theorem) 4.15에서 직접적으로 도출된다. 또한, 스펙트럼 정리는 Rn의 고유 벡터들로 이루어진 **정규 직교 기저(ONB)**를 찾을 수 있음을 명시한다. 이는 P를 직교 행렬(orthogonal matrix)로 만들어서 D=P⊤AP가 되게 한다.
비고. 행렬의 **조르당 표준형(Jordan normal form)**은 결함이 있는 행렬(defective matrices)에도 적용되는 분해를 제공하지만(Lang, 1987), 이 책의 범위를 벗어난다.
Geometric Intuition for the Eigendecomposition
행렬의 고유값 분해(eigendecomposition)는 다음과 같이 해석할 수 있다 (그림 4.7 참조): A를 표준 기저 ei (파란색 화살표)에 대한 선형 매핑의 변환 행렬이라고 하자. P−1는 표준 기저에서 고유 기저로의 기저 변환을 수행한다. 그런 다음, 대각 행렬 D는 고유값 λi에 따라 이 축을 따라 벡터의 스케일을 조정한다. 마지막으로, P는 이 스케일링된 벡터들을 다시 표준/정규 좌표로 변환하여 λipi를 생성한다.
Example 4.11 (Eigendecomposition)
A=21[5−2−25]의 **고유값 분해(eigendecomposition)**를 계산해 보자.
1단계: 고유값과 고유 벡터를 계산한다. A의 특성 다항식은 다음과 같다.
Figure 4.7 고유값 분해를 순차적인 변환으로 이해하는 직관. 왼쪽 위에서 왼쪽 아래로: P−1는 표준 기저에서 고유 기저로의 기저 변환(여기서는 R2에서 회전과 유사한 연산으로 표현됨)을 수행한다. 왼쪽 아래에서 오른쪽 아래로: D는 재매핑된 직교 고유 벡터를 따라 스케일링을 수행하며, 여기서는 원이 타원으로 늘어나는 것으로 묘사된다. 오른쪽 아래에서 오른쪽 위로: P는 기저 변환을 되돌리고(역회전으로 묘사됨) 원래 좌표계를 복원한다.
Figure 4.7은 A=[5−2−25]의 고유값 분해를 일련의 선형 변환으로 시각화한다.
대각 행렬(diagonal matrices)D는 효율적으로 거듭제곱할 수 있다. 따라서 A∈Rn×n 행렬의 거듭제곱은 고유값 분해(존재하는 경우)를 통해 다음과 같이 찾을 수 있다.
Ak=(PDP−1)k=PDkP−1.
Dk를 계산하는 것은 이 연산을 각 대각 요소에 개별적으로 적용하기 때문에 효율적이다.
고유값 분해 A=PDP−1가 존재한다고 가정하자. 그러면,
det(A)=det(PDP−1)=det(P)det(D)det(P−1)
Draft (2021-07-29) of "Mathematics for Machine Learning". Feedback: https://mml-book.com.
=det(D)=i∏dii
는 A의 **행렬식(determinant)**을 효율적으로 계산할 수 있게 한다.
고유값 분해는 **정방 행렬(square matrices)**을 필요로 한다. 일반적인 행렬에 대해서도 분해를 수행할 수 있다면 유용할 것이다. 다음 섹션에서는 더 일반적인 행렬 분해 기법인 **특이값 분해(singular value decomposition)**를 소개한다.
4.5 Singular Value Decomposition
행렬의 **특이값 분해(SVD, singular value decomposition)**는 선형대수학에서 핵심적인 행렬 분해 방법이다. 이는 모든 행렬에 적용될 수 있고 항상 존재하기 때문에 "선형대수학의 근본 정리(fundamental theorem of linear algebra)"(Strang, 1993)라고 불려왔다. 더욱이, 다음에서 살펴보겠지만, 선형 매핑 Φ:V→W를 나타내는 행렬 A의 SVD는 이 두 벡터 공간의 기저 기하학 사이의 변화를 정량화한다. SVD의 수학에 대한 더 깊은 개요를 위해 Kalman (1996)과 Roy and Banerjee (2014)의 작업을 추천한다.
SVD 정리
SVD
singular value decomposition
정리 4.22 (SVD 정리). A∈Rm×n가 랭크 r∈[0,min(m,n)]인 직사각형 행렬이라고 하자. A의 SVD는 다음과 같은 형태의 분해이다.
여기서 U∈Rm×m는 열 벡터 ui,i=1,…,m를 갖는 직교 행렬이고, V∈Rn×n는 열 벡터 vj,j=1,…,n를 갖는 직교 행렬이다. 또한, Σ는 Σii=σi⩾0이고 Σij=0,i=j인 m×n 행렬이다.
Σ의 대각선 원소 σi,i=1,…,r는 **특이값(singular values)**이라고 불리며, ui는 좌특이벡터(left-singular vectors), vj는 **우특이벡터(right-singular vectors)**라고 불린다. 관례적으로 특이값은 σ1⩾σ2⩾σr⩾0와 같이 정렬된다.
특이값 행렬(singular value matrix)Σ는 유일하지만, 몇 가지 주의가 필요하다. Σ∈Rm×n가 직사각형임을 관찰하라. 특히, Σ는 A와 같은 크기이다. 이는 Σ가 특이값을 포함하는 대각 부분 행렬을 가지며 추가적인 0 채우기(zero padding)가 필요하다는 것을 의미한다. 구체적으로, 만약 m>n이라면, 행렬 Σ는 n번째 행까지 대각선 구조를 가지며 그 아래로는 다음과 같이 구성된다.
그림 4.8 행렬 A∈R3×2의 SVD에 대한 직관을 순차적인 변환으로 나타낸다. 왼쪽 위에서 왼쪽 아래로: V⊤는 R2에서 기저 변환을 수행한다. 왼쪽 아래에서 오른쪽 아래로: Σ는 R2에서 R3으로 스케일링하고 매핑한다. 오른쪽 아래의 타원은 R3에 존재한다. 세 번째 차원은 타원형 디스크의 표면에 직교한다. 오른쪽 아래에서 오른쪽 위로: U는 R3 내에서 기저 변환을 수행한다.
n+1부터 m까지의 0⊤ 행 벡터로 구성된다.
Σ=σ1000⋮00⋱0……00σn0⋮0
만약 m<n이라면, 행렬 Σ는 m번째 열까지 대각선 구조를 가지며 m+1부터 n까지는 0으로 구성된 열을 갖는다.
Σ=σ1000⋱000σm0⋮0……0⋮0.
비고. SVD는 모든 행렬 A∈Rm×n에 대해 존재한다.
4.5.1 Geometric Intuitions for the SVD
SVD는 변환 행렬 A를 설명하는 기하학적 직관을 제공한다. 다음에서는 SVD를 기저(basis)에 대해 수행되는 순차적인 선형 변환으로 논의할 것이다. 이어서 예제 4.12에서는 SVD의 변환 행렬을 R2의 벡터 집합에 적용하여 각 변환의 효과를 더 명확하게 시각화할 것이다.
행렬의 SVD는 해당 선형 매핑(2.7.1절 참조) Φ:Rn→Rm을 세 가지 연산으로 분해한 것으로 해석될 수 있다(그림 4.8 참조). SVD의 직관은 표면적으로 고유값 분해(eigendecomposition)의 직관과 유사한 구조를 따른다(그림 4.7 참조): 넓게 보면, SVD는 V⊤를 통한 기저 변경을 수행한 다음, 특이값(singular value) 행렬 Σ를 통해 **차원 스케일링 및 증강(또는 축소)**을 수행한다. 마지막으로, U를 통해 두 번째 기저 변경을 수행한다. SVD는 여러 중요한 세부 사항과 주의 사항을 포함하므로, 우리는 직관을 더 자세히 검토할 것이다.
선형 매핑 Φ:Rn→Rm의 변환 행렬이 각각 Rn과 Rm의 표준 기저 B와 C에 대해 주어졌다고 가정하자. 또한, Rn의 두 번째 기저 B~와 Rm의 C~를 가정하자. 그러면
행렬 V는 정의역 Rn에서 B~ (그림 4.8의 왼쪽 상단에 있는 빨간색 및 주황색 벡터 v1과 v2로 표현됨)에서 표준 기저 B로의 기저 변경을 수행한다. V⊤=V−1는 B에서 B~로의 기저 변경을 수행한다. 빨간색 및 주황색 벡터는 이제 그림 4.8의 왼쪽 하단에 있는 정규 기저(canonical basis)와 정렬된다.
좌표계를 B~로 변경한 후, Σ는 새로운 좌표를 특이값 σi로 스케일링한다(그리고 차원을 추가하거나 삭제한다). 즉, Σ는 B~와 C~에 대한 Φ의 변환 행렬이며, 이는 늘어나서 e1−e2 평면에 놓여 있는 빨간색 및 주황색 벡터로 표현된다. 이 평면은 이제 그림 4.8의 오른쪽 하단에서 세 번째 차원에 내장된다.
U는 공역 Rm에서 C~에서 Rm의 정규 기저로의 기저 변경을 수행하며, 이는 e1−e2 평면 밖으로 회전하는 빨간색 및 주황색 벡터로 표현된다. 이는 그림 4.8의 오른쪽 상단에 나타나 있다.
SVD는 정의역과 공역 모두에서 기저 변경을 표현한다. 이는 동일한 벡터 공간 내에서 작동하며 동일한 기저 변경이 적용되고 다시 되돌려지는 고유값 분해와 대조된다. SVD를 특별하게 만드는 것은 이 두 개의 다른 기저가 특이값 행렬 Σ에 의해 동시에 연결된다는 점이다.
Example 4.12 (Vectors and the SVD)
원점을 중심으로 하는 2×2 크기의 상자에 맞는 벡터들의 정사각형 그리드 X∈R2의 매핑을 고려해 보자. 표준 기저를 사용하여 다음을 통해 이 벡터들을 매핑한다.
우리는 그리드에 배열된 벡터 집합 X (색깔 있는 점들; 그림 4.9의 왼쪽 상단 패널 참조)로 시작한다. 그런 다음 X를 회전시키는 V⊤∈R2×2를 적용한다. 회전된 벡터들은 그림 4.9의 왼쪽 하단 패널에 표시되어 있다. 이제 특이값 행렬 Σ를 사용하여 이 벡터들을 공역 R3으로 매핑한다 (그림 4.9의 오른쪽 하단 패널 참조). 모든 벡터가 x1−x2 평면에 놓여 있음을 주목하라.
기저 변화(섹션 2.7.2), 직교 행렬(정의 3.8) 및 정규 직교 기저(섹션 3.5)를 검토하는 것이 유용하다.
세 번째 좌표는 항상 0이다. x1−x2 평면의 벡터들은 특이값에 의해 늘어났다.
벡터 X를 A에 의해 공역 R3으로 직접 매핑하는 것은 UΣV⊤에 의한 X의 변환과 동일하다. 여기서 U는 공역 R3 내에서 회전을 수행하여 매핑된 벡터들이 더 이상 x1−x2 평면에 국한되지 않도록 한다. 이 벡터들은 그림 4.9의 오른쪽 상단 패널에 표시된 것처럼 여전히 한 평면 위에 있다.
그림 4.9 SVD 및 벡터 매핑 (원반으로 표현). 패널들은 그림 4.8과 동일한 반시계 방향 구조를 따른다.
4.5.2 Construction of the SVD
다음으로 SVD가 존재하는 이유를 논의하고, 이를 자세히 계산하는 방법을 보여줄 것이다. 일반 행렬의 SVD는 정방 행렬의 **고유값 분해(eigendecomposition)**와 몇 가지 유사점을 공유한다.
참고. SPD 행렬의 고유값 분해와 비교:
S=S⊤=PDP⊤
"Mathematics for Machine Learning" 초안 (2021-07-29). 피드백: https: //mml-book.com.
해당 SVD와 비교:
S=UΣV⊤
만약 우리가 다음과 같이 설정한다면:
U=P=V,D=Σ
SPD 행렬의 SVD가 그들의 고유값 분해임을 알 수 있다.
다음에서는 정리 4.22가 왜 성립하는지, 그리고 SVD가 어떻게 구성되는지 살펴볼 것이다. A∈Rm×n의 SVD를 계산하는 것은 공역(codomain)Rm과 정의역(domain)Rn의 두 정규 직교 기저 집합 U=(u1,…,um)와 V=(v1,…,vn)를 찾는 것과 동일하다. 이 순서화된 기저들로부터 행렬 U와 V를 구성할 것이다.
우리의 계획은 먼저 오른쪽 특이 벡터(right-singular vectors)v1,…,vn∈Rn의 정규 직교 집합을 구성하는 것부터 시작한다. 그런 다음 왼쪽 특이 벡터(left-singular vectors)u1,…,um∈Rm의 정규 직교 집합을 구성한다. 그 후, 이 둘을 연결하고 vi의 직교성이 A의 변환 하에서도 보존되도록 요구할 것이다. 이는 이미지 Avi가 직교 벡터 집합을 형성한다는 것을 알고 있기 때문에 중요하다. 그런 다음 이 이미지들을 스칼라 인자로 정규화할 것이며, 이 스칼라 인자들이 **특이값(singular values)**이 될 것이다.
오른쪽 특이 벡터를 구성하는 것부터 시작하자. **스펙트럼 정리(Spectral Theorem, 정리 4.15)**는 대칭 행렬의 고유 벡터가 ONB를 형성하며, 이는 또한 대각화될 수 있음을 알려준다. 더욱이, 정리 4.14에 따르면 우리는 어떤 직사각형 행렬 A∈Rm×n로부터 항상 대칭, 양의 준정부호 행렬 A⊤A∈Rn×n를 구성할 수 있다. 따라서 우리는 항상 A⊤A를 대각화하고 다음을 얻을 수 있다:
A⊤A=PDP⊤=Pλ1⋮0⋯⋱⋯0⋮λnP⊤
여기서 P는 정규 직교 고유 기저로 구성된 직교 행렬이다. λi⩾0는 A⊤A의 고유값이다. A의 SVD가 존재한다고 가정하고 (4.64)를 (4.71)에 대입하자. 그러면 다음이 된다:
A⊤A=(UΣV⊤)⊤(UΣV⊤)=VΣ⊤U⊤UΣV⊤,
여기서 U,V는 직교 행렬이다. 따라서 U⊤U=I이므로 다음을 얻는다:
A⊤A=VΣ⊤ΣV⊤=Vσ12000⋱000σn2V⊤
이제 (4.71)과 (4.73)을 비교하면 다음을 알 수 있다:
V⊤σi2=P⊤=λi
따라서 P를 구성하는 A⊤A의 고유 벡터는 A의 오른쪽 특이 벡터 V이다 ((4.74) 참조). A⊤A의 고유값은 Σ의 제곱된 특이값이다 ((4.75) 참조).
왼쪽 특이 벡터 U를 얻기 위해 유사한 절차를 따른다. (이전의 A⊤A∈Rn×n 대신) 대칭 행렬 AA⊤∈Rm×m의 SVD를 계산하는 것부터 시작한다. A의 SVD는 다음을 산출한다:
스펙트럼 정리는 AA⊤=SDS⊤가 대각화될 수 있으며, AA⊤의 고유 벡터로 구성된 ONB를 찾을 수 있음을 알려준다. 이 ONB는 S에 모아져 있다. AA⊤의 정규 직교 고유 벡터는 왼쪽 특이 벡터 U이며, SVD의 공역에서 정규 직교 기저를 형성한다.
이제 행렬 Σ의 구조에 대한 질문이 남는다. AA⊤와 A⊤A는 동일한 0이 아닌 고유값을 가지므로 (106페이지 참조), 두 경우의 SVD에서 Σ 행렬의 0이 아닌 항목은 동일해야 한다.
마지막 단계는 지금까지 다룬 모든 부분을 연결하는 것이다. 우리는 V에 정규 직교 오른쪽 특이 벡터 집합을 가지고 있다. SVD 구성을 완료하기 위해 이들을 정규 직교 벡터 U와 연결한다. 이 목표를 달성하기 위해 A에 의한 vi의 이미지 또한 직교해야 한다는 사실을 사용한다. 이는 섹션 3.4의 결과를 사용하여 보여줄 수 있다. 우리는 Avi와 Avj 사이의 내적이 i=j일 때 0이어야 한다고 요구한다. 두 직교 고유 벡터 vi,vj,i=j에 대해 다음이 성립한다:
SVD 구성을 완료하기 위해 정규 직교 왼쪽 특이 벡터가 필요하다: 오른쪽 특이 벡터 Avi의 이미지를 정규화하여 다음을 얻는다:
ui:=∥Avi∥Avi=λi1Avi=σi1Avi,
여기서 마지막 등식은 (4.75)와 (4.76b)에서 얻어졌으며, AA⊤의 고유값이 σi2=λi임을 보여준다.
따라서 우리가 오른쪽 특이 벡터 vi임을 아는 A⊤A의 고유 벡터와, A에 의한 그들의 정규화된 이미지인 왼쪽 특이 벡터 ui는 특이값 행렬 Σ를 통해 연결된 두 개의 자기 일관적인 ONB를 형성한다.
특이값 방정식
(4.78)을 재배열하여 특이값 방정식을 얻자:
Avi=σiui,i=1,…,r
이 방정식은 고유값 방정식 (4.25)와 매우 유사하지만, 좌변과 우변의 벡터는 동일하지 않다.
n<m인 경우, (4.79)는 i⩽n에 대해서만 성립하지만, (4.79)는 i>n인 ui에 대해서는 아무것도 말해주지 않는다. 그러나 우리는 구성상 그들이 정규 직교임을 알고 있다. 반대로, m<n인 경우, (4.79)는 i⩽m에 대해서만 성립한다. i>m인 경우, Avi=0이며, 우리는 여전히 vi가 정규 직교 집합을 형성한다는 것을 알고 있다. 이는 SVD가 A의 핵(kernel, null space), 즉 Ax=0인 벡터 x의 집합에 대한 정규 직교 기저도 제공한다는 것을 의미한다 (섹션 2.7.3 참조).
vi를 V의 열로, ui를 U의 열로 연결하면 다음이 된다:
AV=UΣ
여기서 Σ는 A와 동일한 차원을 가지며, 1,…,r 행에 대해 대각 구조를 가진다. 따라서 V⊤를 오른쪽으로 곱하면 A=UΣV⊤가 되며, 이는 A의 SVD이다.
Example 4.13 (Computing the SVD)
다음 행렬의 **특이값 분해(singular value decomposition)**를 찾아보자.
A=[1−20110]
SVD는 우측 특이 벡터(right-singular vectors)vj, 특이값(singular values)σk, 그리고 좌측 특이 벡터(left-singular vectors)ui를 계산해야 한다.
1단계: A⊤A의 고유 기저(eigenbasis)로서의 우측 특이 벡터.
먼저 다음을 계산한다.
A⊤A=101−210[1−20110]=5−21−210101
A⊤A의 고유값 분해(eigenvalue decomposition)를 통해 특이값과 우측 특이 벡터 vj를 계산한다. 고유값 분해는 다음과 같다.
컴퓨터에서는 여기에 설명된 접근 방식이 수치적으로 좋지 않은 동작을 보이며, A의 SVD는 일반적으로 A⊤A의 고유값 분해를 사용하지 않고 계산된다는 점에 유의해야 한다.
4.5.3 Eigenvalue Decomposition vs. Singular Value Decomposition
고유값 분해(eigendecomposition) A=PDP−1와 특이값 분해(SVD) A=UΣV⊤를 고려하고 이전 섹션의 핵심 요소를 검토해 보자.
SVD는 모든 행렬 Rm×n에 대해 항상 존재한다. 고유값 분해는 정방 행렬 Rn×n에 대해서만 정의되며, Rn의 고유 벡터 기저를 찾을 수 있는 경우에만 존재한다.
고유값 분해 행렬 P의 벡터는 반드시 직교하지는 않는다. 즉, 기저 변환은 단순한 회전 및 스케일링이 아니다. 반면에 SVD의 행렬 U와 V의 벡터는 정규 직교(orthonormal)이므로 회전을 나타낸다.
고유값 분해와 SVD는 모두 세 가지 선형 매핑의 합성이다.
도메인(domain)에서의 기저 변환
각 새 기저 벡터의 독립적인 스케일링 및 도메인에서 코도메인(codomain)으로의 매핑
코도메인에서의 기저 변환
→বk Star Wars Blade Runner Amelie Delicatessen 550145001054=−0.6710−0.7197−0.0939−0.15150.02360.2054−0.7705−0.60300.4647−0.4759−0.52680.5293−0.57740.4619−0.3464−0.57749.643800006.363900000.70560−0.73670.08520.6708−0.65150.1762−0.7379−0.1811−0.9807−0.0743
고유값 분해와 SVD의 주요 차이점은 SVD에서 도메인과 코도메인이 서로 다른 차원의 벡터 공간일 수 있다는 점이다.
SVD에서 좌특이 벡터(left-singular vector) 행렬 U와 우특이 벡터(right-singular vector) 행렬 V는 일반적으로 서로 역행렬 관계가 아니다(서로 다른 벡터 공간에서 기저 변환을 수행한다). 고유값 분해에서 기저 변환 행렬 P와 P−1는 서로 역행렬 관계이다.
SVD에서 대각 행렬 Σ의 원소는 모두 실수이며 음수가 아닌 반면, 고유값 분해의 대각 행렬에서는 일반적으로 그렇지 않다.
SVD와 고유값 분해는 그들의 **투영(projections)**을 통해 밀접하게 관련되어 있다.
A의 좌특이 벡터는 AA⊤의 고유 벡터이다.
A의 우특이 벡터는 A⊤A의 고유 벡터이다.
A의 0이 아닌 특이값은 AA⊤와 A⊤A 모두의 0이 아닌 고유값의 제곱근이다.
대칭 행렬 A∈Rn×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에 표시된 대로 데이터 행렬 A∈R4×3에 인코딩된다. 각 행은 영화를 나타내고 각 열은 사용자를 나타낸다. 따라서 각 시청자에 대한 영화 평점의 열 벡터는 xAli ,xBeatrix ,xChandra 이다.
Figure 4.10 세 사람이 네 가지 영화에 대해 매긴 평점과 그 SVD 분해.
이 두 "공간"은 데이터 자체가 충분히 다양한 시청자와 영화를 포함하는 경우에만 각각의 시청자 및 영화 데이터에 의해 의미 있게 확장된다.
full SVD
SVD를 사용하여 A를 인수분해하는 것은 사람들이 영화를 평가하는 방식, 특히 어떤 사람이 어떤 영화를 좋아하는지를 연결하는 구조가 있는지에 대한 관계를 파악하는 방법을 제공한다. 데이터 행렬 A에 SVD를 적용하면 여러 가지 가정이 필요하다:
모든 시청자는 동일한 선형 매핑을 사용하여 일관되게 영화를 평가한다.
평점에 오류나 노이즈가 없다.
좌특이 벡터ui를 전형적인 영화로, 우특이 벡터vj를 전형적인 시청자로 해석한다.
그런 다음, 모든 시청자의 특정 영화 선호도가 vj의 선형 조합으로 표현될 수 있다고 가정한다. 마찬가지로, 모든 영화의 선호도는 ui의 선형 조합으로 표현될 수 있다. 따라서 SVD 도메인의 벡터는 전형적인 시청자의 "공간"에 있는 시청자로 해석될 수 있으며, SVD의 공역에 있는 벡터는 그에 상응하게 전형적인 영화의 "공간"에 있는 영화로 해석될 수 있다. 영화-사용자 행렬의 SVD를 살펴보자. 첫 번째 좌특이 벡터 u1은 두 공상 과학 영화에 대해 큰 절댓값을 가지며, 첫 번째 특이값도 크다(그림 4.10의 빨간색 음영). 따라서 이는 특정 영화 세트(공상 과학 테마)를 가진 사용자 유형을 그룹화한다. 마찬가지로, 첫 번째 우특이 벡터 v1은 공상 과학 영화에 높은 평점을 주는 Ali와 Beatrix에 대해 큰 절댓값을 보여준다(그림 4.10의 녹색 음영). 이는 v1이 공상 과학 영화 애호가의 개념을 반영한다는 것을 시사한다.
마찬가지로, u2는 프랑스 예술 영화 테마를 포착하는 것으로 보이며, v2는 Chandra가 그러한 영화의 이상적인 애호가에 가깝다는 것을 나타낸다. 이상적인 공상 과학 영화 애호가는 순수주의자이며 공상 과학 영화만 좋아하므로, 공상 과학 영화 애호가 v1은 공상 과학 테마를 제외한 모든 것에 0점을 준다. 이 논리는 특이값 행렬 Σ의 대각 부분 구조에 의해 암시된다. 따라서 특정 영화는 전형적인 영화로 (선형적으로) 어떻게 분해되는지에 의해 표현된다. 마찬가지로, 사람은 영화 테마로 (선형 조합을 통해) 어떻게 분해되는지에 의해 표현된다.
문헌에서 사용되는 다양한 버전이 있으므로 SVD 용어 및 관례에 대해 간략하게 논의할 가치가 있다. 이러한 차이점은 혼란스러울 수 있지만, 수학은 이에 불변하다.
표기법 및 추상화의 편의를 위해, SVD가 두 개의 정방형 좌특이 벡터 행렬과 우특이 벡터 행렬을 가지지만, 비정방형 특이값 행렬을 가지는 것으로 설명되는 SVD 표기법을 사용한다. SVD에 대한 우리의 정의 (4.64)는 때때로 full SVD라고 불린다.
일부 저자는 SVD를 약간 다르게 정의하고 정방형 특이 행렬에 초점을 맞춘다. 그러면 A∈Rm×n 및 m⩾n에 대해,
m×nA=m×nUn×nΣn×nV⊤
"Mathematics for Machine Learning" 초안 (2021-07-29). 피드백: https: //mml-book.com.
때때로 이 공식은 reduced SVD (예: Datta (2010)) 또는 SVD (예: Press et al. (2007))라고 불린다. 이 대체 형식은 행렬이 구성되는 방식만 변경할 뿐 SVD의 수학적 구조는 변경하지 않는다. 이 대체 공식의 편리함은 Σ가 고유값 분해에서처럼 대각 행렬이라는 점이다.
섹션 4.6에서는 SVD를 사용하는 행렬 근사 기법에 대해 배울 것이며, 이는 truncated SVD라고도 불린다.
랭크 r 행렬 A의 SVD를 U가 m×r 행렬이고, Σ가 r×r 대각 행렬이며, V가 r×n 행렬이 되도록 정의할 수 있다. 이 구성은 우리의 정의와 매우 유사하며, 대각 행렬 Σ가 대각선에만 0이 아닌 항목을 갖도록 보장한다. 이 대체 표기법의 주요 편리함은 Σ가 고유값 분해에서처럼 대각 행렬이라는 점이다.
A에 대한 SVD가 m>n인 m×n 행렬에만 적용된다는 제약은 실제적으로 불필요하다. m<n일 때, SVD 분해는 행보다 열이 더 많은 0을 가진 Σ를 생성하며, 결과적으로 특이값 σm+1,…,σn은 0이 된다.
SVD는 곡선 피팅의 최소 제곱 문제부터 선형 방정식 시스템 해결에 이르기까지 머신러닝의 다양한 응용 분야에서 사용된다. 이러한 응용 분야는 SVD의 다양한 중요한 속성, 행렬의 랭크와의 관계, 그리고 주어진 랭크의 행렬을 더 낮은 랭크의 행렬로 근사하는 능력을 활용한다. 행렬을 SVD로 대체하는 것은 종종 수치 반올림 오류에 대해 계산을 더 견고하게 만드는 이점이 있다. 다음 섹션에서 살펴보겠지만, SVD가 "더 간단한" 행렬로 행렬을 원칙적으로 근사하는 능력은 차원 축소 및 토픽 모델링에서 데이터 압축 및 클러스터링에 이르는 머신러닝 응용 분야를 가능하게 한다.
4.6 Matrix Approximation
우리는 SVD를 A=UΣV⊤∈Rm×n를 세 행렬의 곱으로 인수분해하는 방법으로 고려했다. 여기서 U∈Rm×m와 V∈Rn×n는 직교 행렬이고 Σ는 주 대각선에 특이값을 포함한다. 전체 SVD 인수분해를 수행하는 대신, 이제 SVD가 행렬 A를 더 간단한 (low-rank) 행렬 Ai의 합으로 표현하는 방법을 조사할 것이다. 이는 전체 SVD보다 계산 비용이 저렴한 행렬 근사 기법으로 이어진다.
우리는 rank-1 행렬 Ai∈Rm×n를 다음과 같이 구성한다.
Ai:=uivi⊤,
이는 U와 V의 i번째 직교 열 벡터의 **외적(outer product)**으로 형성된다. 그림 4.11은 스톤헨지 이미지를 보여주는데, 이는 행렬 A∈R1432×1910로 표현될 수 있으며, (4.90)에 정의된 일부 외적 Ai도 함께 보여준다.
Figure 4.11 SVD를 이용한 이미지 처리. (a) 원본 그레이스케일 이미지는 0(검정)과 1(흰색) 사이의 값을 갖는 1,432×1,910 행렬이다. (b)-(f) Rank-1 행렬 A1,…,A5와 해당 특이값 σ1,…,σ5. 각 rank-1 행렬의 격자형 구조는 좌특이 벡터와 우특이 벡터의 외적에 의해 형성된다.
rank- k approximation
(a) 원본 이미지 A.
(b) A1,σ1≈228,052.
(c) A2,σ2≈40,647.
(d) A3,σ3≈26,125.
(e) A4,σ4≈20,232.
(f) A5,σ5≈15,436.
rank r인 행렬 A∈Rm×n는 rank-1 행렬 Ai의 합으로 다음과 같이 쓸 수 있다.
A=i=1∑rσiuivi⊤=i=1∑rσiAi,
여기서 외적 행렬 Ai는 i번째 특이값 σi에 의해 가중된다. (4.91)이 성립하는 이유를 알 수 있다: 특이값 행렬 Σ의 대각선 구조는 일치하는 좌특이 벡터와 우특이 벡터 uivi⊤만 곱하고 해당 특이값 σi로 스케일링한다. Σ가 대각 행렬이므로 i=j인 모든 항 Σijuivj⊤는 사라진다. i>r인 모든 항은 해당 특이값이 0이므로 사라진다.
(4.90)에서 우리는 rank-1 행렬 Ai를 도입했다. 우리는 r개의 개별 rank-1 행렬을 합하여 rank r 행렬 A를 얻었다. (4.91)을 참조하라. 만약 합이 모든 행렬 Ai,i=1,…,r에 대해 실행되지 않고 중간 값 k<r까지만 실행된다면, 우리는 rank- k approximation을 얻는다.
A(k):=i=1∑kσiuivi⊤=i=1∑kσiAi
rk(A(k))=k인 A의 근사이다. 그림 4.12는 스톤헨지 원본 이미지 A의 low-rank approximation A(k)를 보여준다. rank-5 approximation에서는 바위의 형태가 점점 더 뚜렷하게 보이고 명확하게 인식된다. 원본 이미지는 1,432⋅1,910=2,735,120개의 숫자를 필요로 하는 반면, rank-5 approximation은 5개의 특이값과 5개의 좌특이 벡터 및 우특이 벡터(각각 1,432 및 1,910 차원)만 저장하면 되므로 총 5⋅(1,432+1,910+1)=16,715개의 숫자만 필요하다. 이는 원본의 0.6%를 약간 넘는 수준이다.
A와 그 rank- k approximation A(k) 사이의 차이(오차)를 측정하기 위해 norm의 개념이 필요하다. 섹션 3.1에서 우리는 이미 벡터의 길이를 측정하는 벡터 norm을 사용했다. 유사하게 행렬에 대한 norm도 정의할 수 있다.
정의 4.23 (행렬의 Spectral Norm). x∈Rn\{0}에 대해 행렬 A∈Rm×n의 spectral norm은 다음과 같이 정의된다.
∥A∥2:=xmax∥x∥2∥Ax∥2.
우리는 벡터에 대한 유클리드 norm(오른쪽)과 유사하게 행렬 norm(왼쪽)에 아래첨자를 사용하는 표기법을 도입한다. 유클리드 norm은 아래첨자 2를 갖는다. spectral norm (4.93)은 어떤 벡터 x가 A에 의해 곱해질 때 최대 얼마나 길어질 수 있는지를 결정한다.
정리 4.24. A의 spectral norm은 가장 큰 특이값 σ1이다.
이 정리의 증명은 연습 문제로 남겨둔다.
정리 4.25 (Eckart-Young Theorem (Eckart and Young, 1936)). rank r인 행렬 A∈Rm×n와 rank k인 행렬 B∈Rm×n를 고려하자. k⩽r이고 A(k)=∑i=1kσiuivi⊤일 때 다음이 성립한다.
A(k)∥A−A(k)∥2=argminrk(B)=k∥A−B∥2,=σk+1.
Eckart-Young 정리는 rank- k approximation을 사용하여 A를 근사함으로써 얼마나 많은 오차가 발생하는지 명시적으로 나타낸다. SVD로 얻은 rank- k approximation을 full-rank 행렬 A를 rank가 최대 k인 행렬의 더 낮은 차원 공간으로 **투영(projection)**한 것으로 해석할 수 있다. 가능한 모든 투영 중에서 SVD는 A와 모든 rank- k approximation 사이의 오차(spectral norm에 대해)를 최소화한다.
(4.95)가 왜 성립해야 하는지 이해하기 위해 몇 단계를 되짚어 볼 수 있다.
spectral norm
Eckart-Young theorem
A−A(k)의 차이는 나머지 rank-1 행렬의 합을 포함하는 행렬임을 관찰한다.
A−A(k)=i=k+1∑rσiuivi⊤
정리 4.24에 의해, 우리는 차이 행렬의 spectral norm으로 σk+1을 즉시 얻는다. (4.94)를 더 자세히 살펴보자. 만약 rk(B)⩽k인 다른 행렬 B가 존재하여
∥A−B∥2<∥A−A(k)∥2
라면, 적어도 (n−k) 차원의 null space Z⊆Rn가 존재하여 x∈Z일 때 Bx=0이 된다. 그러면 다음이 성립한다.
∥Ax∥2=∥(A−B)x∥2,
그리고 행렬 norm을 포함하는 Cauchy-Schwartz 부등식 (3.17)의 버전을 사용하면 다음을 얻는다.
∥Ax∥2⩽∥A−B∥2∥x∥2<σk+1∥x∥2.
그러나 A의 우특이 벡터 vj,j⩽k+1에 의해 span되는 (k+1) 차원 부분 공간이 존재하며, 이 공간에서는 ∥Ax∥2⩾σk+1∥x∥2이다. 이 두 공간의 차원을 합하면 n보다 큰 숫자가 되므로, 두 공간 모두에 0이 아닌 벡터가 존재해야 한다. 이는 섹션 2.7.3의 rank-nullity 정리 (정리 2.24)와 모순된다.
Eckart-Young 정리는 SVD를 사용하여 rank r 행렬 A를 rank k 행렬 A로 원칙적이고 최적의 (spectral norm 의미에서) 방식으로 축소할 수 있음을 의미한다. rank k 행렬에 의한 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 항만 사용하면 다음과 같은 예측 평점을 얻을 수 있다.
이 첫 번째 rank-1 approximation A1은 통찰력이 있다. 즉, Ali와 Beatrix가 Star Wars 및 Bladerunner와 같은 공상 과학 영화를 좋아하지만(항목 값이 >0.4), Chandra의 다른 영화 평점은 포착하지 못한다는 것을 알려준다. Chandra가 좋아하는 영화 유형이 첫 번째 singular value에 의해 포착되지 않으므로 이는 놀라운 일이 아니다. 두 번째 singular value는 이러한 영화 테마 애호가들에게 더 나은 rank-1 approximation을 제공한다.
이 두 번째 rank-1 approximation A2에서는 Chandra의 평점과 영화 유형을 잘 포착하지만, 공상 과학 영화는 포착하지 못한다. 이는 첫 번째 두 rank-1 approximation을 결합한 rank-2 approximation A(2)를 고려하게 한다.
이는 A3의 기여를 무시할 수 있음을 시사한다. 데이터 테이블에 세 번째 영화 테마/영화 애호가 범주에 대한 증거가 없다고 해석할 수 있다. 이는 또한 우리 예시에서 영화 테마/영화 애호가의 전체 공간이 공상 과학 및 프랑스 예술 영화와 애호가에 의해 확장되는 2차원 공간임을 의미한다.
Figure 4.13 머신러닝에서 접하는 행렬의 기능적 계통 발생.
4.7 Matrix Phylogeny
2장과 3장에서는 선형대수와 해석 기하학의 기초를 다루었다. 이 장에서는 행렬과 선형 사상의 근본적인 특성을 살펴보았다. 그림 4.13은 다양한 유형의 행렬 간의 관계(검은색 화살표는 "의 부분집합이다"를 나타냄)와 우리가 수행할 수 있는 연산(파란색)의 계통수를 보여준다. 우리는 모든 실수 행렬 A∈Rn×m을 고려한다. 이 장에서 보았듯이, 비정방 행렬( n=m인 경우)의 경우 SVD는 항상 존재한다. 정방 행렬 A∈Rn×n에 초점을 맞추면, **행렬식(determinant)**은 정방 행렬이 역행렬을 가지는지, 즉 정칙(regular) 행렬 또는 가역(invertible) 행렬 클래스에 속하는지 알려준다. 만약 n×n 정방 행렬이 n개의 선형 독립적인 고유 벡터를 가진다면, 그 행렬은 비결함(non-defective) 행렬이며 **고유값 분해(eigendecomposition)**가 존재한다(정리 4.12). 우리는 반복되는 고유값이 결함(defective) 행렬을 초래할 수 있으며, 이러한 행렬은 대각화될 수 없다는 것을 알고 있다.
비특이(non-singular) 행렬과 비결함(non-defective) 행렬은 동일하지 않다. 예를 들어, 회전 행렬은 가역적이지만(행렬식이 0이 아님) 실수 범위에서는 대각화될 수 없다(고유값이 실수라는 보장이 없음).
"phylogenetic"이라는 단어는 개인이나 그룹 간의 관계를 포착하는 방식을 설명하며, 그리스어로 "부족"과 "근원"을 의미하는 단어에서 유래했다.
우리는 비결함 n×n 정방 행렬의 가지를 더 깊이 파고든다. A⊤A=AA⊤ 조건이 성립하면 A는 정규(normal) 행렬이다. 또한, 더 제한적인 조건인 A⊤A=AA⊤=I가 성립하면 A는 직교(orthogonal) 행렬이라고 불린다(정의 3.8 참조). 직교 행렬의 집합은 정칙(가역) 행렬의 부분집합이며 A⊤=A−1를 만족한다.
정규 행렬에는 자주 접하는 부분집합인 대칭 행렬(symmetric matrices)S∈Rn×n이 있으며, 이는 S=S⊤를 만족한다. 대칭 행렬은 실수 고유값만 가진다. 대칭 행렬의 부분집합 중 하나는 모든 x∈Rn\{0}에 대해 x⊤Px>0 조건을 만족하는 양의 정부호 행렬(positive definite matrices)P이다. 이 경우, 유일한 Cholesky 분해가 존재한다(정리 4.18). 양의 정부호 행렬은 양의 고유값만 가지며 항상 가역적이다(즉, 0이 아닌 행렬식을 가진다).
대칭 행렬의 또 다른 부분집합은 대각 행렬(diagonal matrices)D이다. 대각 행렬은 곱셈과 덧셈에 대해 닫혀 있지만, 반드시 군(group)을 형성하지는 않는다(모든 대각 성분이 0이 아니어서 행렬이 가역적인 경우에만 해당). 특별한 대각 행렬은 항등 행렬(identity matrix)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)에 대한 최적의 랭크-k 근사(rank-k 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×m 값을 저장하는 대신 (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=120342564
4.2 다음 determinant를 효율적으로 계산하시오.
220−220−110010220211−1101221.
4.3 다음 행렬의 eigenspace를 계산하시오.
a.
A:=[1101]
b.
B:=[−2221]
4.4 다음 행렬의 모든 eigenspace를 계산하시오.
A=0−121−11−1−11−2011300
4.5 행렬의 diagonalizability는 invertibility와 관련이 없다. 다음 네 행렬이 diagonalizable한지 그리고/또는 invertible한지 판단하시오.
[1001],[1000],[1011],[0010]
4.6 다음 변환 행렬의 eigenspace를 계산하시오. 이 행렬들은 diagonalizable한가?
a.
A=210340031
b.
A=1000100000000000
4.7 다음 행렬들은 diagonalizable한가? 만약 그렇다면, diagonal form과 변환 행렬이 diagonal이 되는 basis를 결정하시오. 만약 그렇지 않다면, diagonalizable하지 않은 이유를 설명하시오.
a.
A=[0−814]
b.
A=111111111
c.
A=50−1141−112−13−11−102
d.
A=5−13−64−6−62−4
4.8 다음 행렬의 SVD를 구하시오.
A=[32232−2]
4.9 다음 행렬의 singular value decomposition을 구하시오.
A=[2−121]
4.10 다음 행렬의 rank-1 approximation을 구하시오.
A=[32232−2]
4.11 모든 A∈Rm×n에 대해 행렬 A⊤A와 AA⊤가 동일한 nonzero eigenvalue를 가짐을 보이시오.
4.12 x=0에 대해 Theorem 4.24가 성립함을 보이시오. 즉, 다음을 보이시오.
xmax∥x∥2∥Ax∥2=σ1,
여기서 σ1은 A∈Rm×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)**의 개념이다. 함수 f는 두 양을 서로 연관시키는 양이다. 이 책에서 이러한 양은 일반적으로 입력 x∈RD와 목표(함수 값) f(x)이며, 별도로 명시되지 않는 한 실수 값이라고 가정한다. 여기서 RD는 f의 **도메인(domain)**이고, 함수 값 f(x)는 f의 **이미지/코도메인(image/codomain)**이다.
(a) 회귀 문제: 곡선이 관측치(십자 표시)를 잘 설명하도록 파라미터를 찾는다.
도메인 이미지/코도메인 그림 5.1 **벡터 미적분(Vector calculus)**은 (a) 회귀(곡선 피팅) 및 (b) 밀도 추정, 즉 데이터 분포 모델링에서 중심적인 역할을 한다.
그림 5.2 이 장에서 소개된 개념들의 마인드맵과 책의 다른 부분에서 사용되는 시점.
섹션 2.7.3에서는 선형 함수(linear functions)의 맥락에서 훨씬 더 자세한 논의를 제공한다. 우리는 종종 다음과 같이 쓴다.
f:RDx→R↦f(x)
함수를 지정하기 위해, (5.1a)는 f가 RD에서 R로의 매핑임을 지정하고 (5.1b)는 입력 x를 함수 값 f(x)에 명시적으로 할당하는 것을 지정한다. 함수 f는 모든 입력 x에 대해 정확히 하나의 함수 값 f(x)를 할당한다.
Example 5.1
내적(inner product)의 특수한 경우로 **점곱(dot product)**을 상기해 보자 (섹션 3.2). 이전 표기법에서 함수 f(x)=x⊤x,x∈R2는 다음과 같이 지정될 수 있다:
f:R2x→R↦x12+x22.
이 장에서는 함수의 gradient를 계산하는 방법을 논의할 것이다. gradient는 가장 가파른 상승 방향을 가리키기 때문에 머신러닝 모델에서 학습을 용이하게 하는 데 종종 필수적이다. 따라서
그림 5.3 x0와 x0+δx 사이의 함수 f의 평균 기울기는 f(x0)와 f(x0+δx)를 지나는 할선(파란색)의 기울기이며 δy/δx로 주어진다.
벡터 미적분학은 머신러닝에서 필요한 기본적인 수학적 도구 중 하나이다. 이 책 전체에서 우리는 함수가 **미분 가능(differentiable)**하다고 가정한다. 여기에 다루지 않는 몇 가지 추가적인 기술적 정의를 통해, 제시된 많은 접근 방식은 sub-differential (연속적이지만 특정 지점에서 미분 불가능한 함수)로 확장될 수 있다. 제7장에서는 제약 조건이 있는 함수의 경우로의 확장을 살펴볼 것이다.
5.1 Differentiation of Univariate Functions
다음에서는 고등학교 수학에서 익숙할 수 있는 단변수 함수(univariate function)의 미분에 대해 간략하게 다시 살펴본다. 우리는 단변수 함수 y=f(x),x,y∈R의 미분 계수(difference quotient) 부터 시작하며, 이를 사용하여 도함수를 정의할 것이다.
정의 5.1 (미분 계수). 미분 계수
δxδy:=δxf(x+δx)−f(x)
는 f 그래프 상의 두 점을 지나는 할선(secant line)의 기울기를 계산한다. 그림 5.3에서 이 점들은 x-좌표가 x0와 x0+δx인 점들이다.
미분 계수는 f를 선형 함수로 가정할 경우 x와 x+δx 사이에서 f의 평균 기울기로도 간주될 수 있다. δx→0으로 극한을 취하면, f가 미분 가능할 경우 x에서 f의 접선(tangent) 을 얻는다. 이 접선은 x에서 f의 도함수가 된다.
정의 5.2 (도함수). 더 형식적으로, h>0에 대해 x에서의 f의 도함수는 다음과 같은 극한으로 정의된다.
dxdf:=h→0limhf(x+h)−f(x),
그리고 그림 5.3의 할선은 접선이 된다.
f의 도함수는 f의 가장 가파른 상승 방향을 가리킨다.
Example 5.2 (Derivative of a Polynomial)
우리는 f(x)=xn,n∈N의 도함수를 계산하고자 한다. 답이 nxn−1이라는 것을 이미 알고 있을 수 있지만, 미분계수의 정의를 사용하여 이 결과를 도출하고자 한다.
xn=(0n)xn−0h0임을 알 수 있다. 합을 1부터 시작하면 xn 항이 상쇄되어 다음을 얻는다.
dxdf=h→0limh∑i=1n(in)xn−ihi=h→0limi=1∑n(in)xn−ihi−1=h→0lim(1n)xn−1+→0 as h→0i=2∑n(in)xn−ihi−1=1!(n−1)!n!xn−1=nxn−1
5.1.1 Taylor Series
Taylor series는 함수 f를 무한 항의 합으로 표현한 것이다. 이 항들은 x0에서 평가된 f의 도함수를 사용하여 결정된다.
Taylor polynomial 우리는 모든 t∈R에 대해 t0:=1로 정의한다.
Taylor series
정의 5.3 (Taylor Polynomial).x0에서 f:R→R의 n차 Taylor polynomial은 다음과 같이 정의된다.
Tn(x):=k=0∑nk!f(k)(x0)(x−x0)k,
여기서 f(k)(x0)는 x0에서 f의 k차 도함수(존재한다고 가정)이며, k!f(k)(x0)는 polynomial의 계수이다.
정의 5.4 (Taylor Series). smooth 함수 f∈C∞,f:R→R에 대해, x0에서 f의 Taylor series는 다음과 같이 정의된다.
T∞(x)=k=0∑∞k!f(k)(x0)(x−x0)k.
x0=0일 때, 우리는 Taylor series의 특별한 경우로 Maclaurin series를 얻는다. 만약 f(x)=T∞(x)이면, f는 analytic이라고 불린다.
비고. 일반적으로 n차 Taylor polynomial은 함수에 대한 근사치이며, 반드시 polynomial일 필요는 없다. Taylor polynomial은 x0 주변의 neighborhood에서 f와 유사하다. 그러나 n차 Taylor polynomial은 k⩽n차 polynomialf의 정확한 표현인데, 이는 모든 도함수 f(i),i>k가 0이 되기 때문이다.
Example 5.3 (Taylor Polynomial)
우리는 다항식
f(x)=x4
를 고려하고, x0=1에서 평가된 Taylor polynomialT6를 찾는다. 먼저 k=0,…,6에 대해 계수 f(k)(1)를 계산한다:
즉, 우리는 원래 함수의 정확한 표현을 얻는다.
f∈C∞는 f가 무한히 여러 번 연속적으로 미분 가능하다는 것을 의미한다.
Maclaurin series analytic
Figure 5.4 Taylor polynomials. x0=0 주변에서 Taylor polynomial(점선)로 근사된 원래 함수 f(x)=sin(x)+cos(x) (검은색, 실선).
고차 Taylor polynomial은 함수 f를 더 잘, 그리고 더 전역적으로 근사한다. T10은 [−4,4]에서 이미 f와 유사하다.
Example 5.4 (Taylor Series)
그림 5.4에 주어진 함수를 고려해 보자.
f(x)=sin(x)+cos(x)∈C∞
우리는 x0=0에서 f의 Taylor series expansion, 즉 Maclaurin series expansion을 찾고자 한다. 다음 도함수들을 얻을 수 있다:
여기서 우리는 연쇄 법칙 (5.32)를 사용하고, g′(f)에 (5.34)의 f 정의를 대입했다.
5.2 Partial Differentiation and Gradients
섹션 5.1에서 논의된 **미분(differentiation)**은 스칼라 변수 x∈R의 함수 f에 적용된다. 다음에서는 함수 f가 하나 이상의 변수 x∈Rn에 의존하는 일반적인 경우, 예를 들어 f(x)=f(x1,x2)를 고려한다. 여러 변수의 함수에 대한 미분의 일반화는 gradient이다.
함수 f의 x에 대한 gradient는 한 번에 하나의 변수만 변경하고 다른 변수들은 상수로 유지함으로써 찾을 수 있다. Gradient는 이러한 **편미분(partial derivatives)**들의 모음이다.
정의 5.5 (편미분). 함수 f:Rn→R,x↦f(x),x∈Rn의 n개 변수 x1,…,xn에 대한 편미분은 다음과 같이 정의된다.
그리고 이들을 행 벡터로 모으면 다음과 같다.
∇xf=gradf=dxdf=[∂x1∂f(x)∂x2∂f(x)…∂xn∂f(x)]∈R1×n,
여기서 n은 변수의 개수이고, 1은 f의 이미지/범위/공변역의 차원이다. 여기서 우리는 열 벡터 x=[x1,…,xn]⊤∈Rn를 정의했다.
스칼라 미분에서 얻은 결과를 사용할 수 있다: 각 편미분은 스칼라에 대한 미분이다. (5.40)의 행 벡터는 f의 gradient 또는 Jacobian이라고 불리며, 섹션 5.1의 미분을 일반화한 것이다.
비고. Jacobian에 대한 이 정의는 편미분들의 모음으로서 벡터 값 함수에 대한 Jacobian의 일반적인 정의의 특수한 경우이다. 이에 대해서는 섹션 5.3에서 다시 다룰 것이다.
Example 5.6 (Partial Derivatives Using the Chain Rule)
비고 (행 벡터로서의 Gradient). 문헌에서 gradient 벡터를 열 벡터로 정의하는 것이 드물지 않다. 이는 벡터가 일반적으로 열 벡터라는 관례를 따르기 때문이다. 우리가 gradient 벡터를 행 벡터로 정의하는 이유는 두 가지이다. 첫째, gradient를 벡터 값 함수 f:Rn→Rm로 일관되게 일반화할 수 있다(이 경우 gradient는 행렬이 된다). 둘째, gradient의 차원에 신경 쓰지 않고 **다변수 연쇄 법칙(multi-variate chain rule)**을 즉시 적용할 수 있다. 이 두 가지 사항은 섹션 5.3에서 논의할 것이다.
Example 5.7 (Gradient)
f(x1,x2)=x12x2+x1x23∈R에 대해, 편미분(partial derivatives)(즉, x1과 x2에 대한 f의 미분)은 다음과 같다.
x∈Rn인 다변수(multivariate)의 경우, 우리가 학교에서 배운 기본적인 미분 규칙(예: 합 규칙, 곱 규칙, 연쇄 규칙; 5.1.2절 참조)은 여전히 적용된다. 그러나 벡터 x∈Rn에 대해 미분을 계산할 때는 주의해야 한다. 이제 gradient는 벡터와 행렬을 포함하며, 행렬 곱셈은 교환 법칙이 성립하지 않으므로(2.2.1절 참조), 순서가 중요하다.
다음은 일반적인 곱 규칙(product rule), 합 규칙(sum rule), 연쇄 규칙(chain rule)이다:
Product rule: Sum rule: ∂x∂(f(x)g(x))∂x∂(f(x)+g(x))=∂x∂fg(x)+f(x)∂x∂g=∂x∂f+∂x∂g
곱 규칙: (fg)′=f′g+fg′, 합 규칙: (f+g)′=f′+g′, 연쇄 규칙: (g(f))′=g′(f)f′
이는 단지 직관일 뿐이며, 편미분은 분수가 아니므로 수학적으로 정확하지 않다.
Chain rule: ∂x∂(g∘f)(x)=∂x∂(g(f(x)))=∂f∂g∂x∂f
연쇄 규칙을 더 자세히 살펴보자. 연쇄 규칙 (5.48)은 행렬 곱셈이 정의되기 위해 인접한 차원이 일치해야 한다고 말했던 행렬 곱셈 규칙과 어느 정도 유사하다(2.2.1절 참조). 왼쪽에서 오른쪽으로 진행할 때, 연쇄 규칙은 유사한 속성을 보인다: ∂f는 첫 번째 인수의 "분모"와 두 번째 인수의 "분자"에 나타난다. 인수를 함께 곱하면 곱셈이 정의되고, 즉 ∂f의 차원이 일치하며, ∂f가 "상쇄"되어 ∂g/∂x가 남는다.
5.2.2 Chain Rule
두 변수 x1,x2에 대한 함수 f:R2→R를 고려해 보자. 또한, x1(t)와 x2(t)는 그 자체로 t의 함수이다. t에 대한 f의 gradient를 계산하기 위해, 우리는 다변수 함수에 대한 chain rule (5.48)을 다음과 같이 적용해야 한다.
연쇄 법칙을 행렬 곱셈으로 작성하는 이 간결한 방법은 gradient가 행 벡터(row vector)로 정의될 때만 의미가 있다. 그렇지 않으면 행렬 차원을 맞추기 위해 gradient를 전치(transpose)해야 한다. gradient가 벡터 또는 행렬인 한 이것은 여전히 간단할 수 있지만, gradient가 **텐서(tensor)**가 되면 (이에 대해서는 다음에서 논의할 것이다) 전치는 더 이상 사소한 문제가 아니다. 비고 (Gradient 구현의 정확성 검증). 편미분을 해당 **차분 몫(difference quotient)**의 극한으로 정의하는 것(5.39 참조)은 컴퓨터 프로그램에서 gradient의 정확성을 수치적으로 확인할 때 활용될 수 있다. gradient를 계산하고 구현할 때, **유한 차분(finite differences)**을 사용하여 계산 및 구현을 수치적으로 테스트할 수 있다. 우리는 h 값을 작게 선택하고(예: h=10−4), (5.39)의 유한 차분 근사치를 gradient의 (해석적) 구현과 비교한다. 오차가 작다면 gradient 구현은 아마도 정확할 것이다. 여기서 "작다"는 ∑i(dhi+dfi)2∑i(dhi−dfi)2<10−6를 의미할 수 있으며, 여기서 dhi는 유한 차분 근사치이고 dfi는 i번째 변수 xi에 대한 f의 해석적 gradient이다.
5.3 Gradients of Vector-Valued Functions
지금까지 우리는 실수로 매핑되는 함수 f:Rn→R의 편미분과 gradient에 대해 논의했다. 다음에서는 gradient의 개념을 벡터 값 함수(vector fields) f:Rn→Rm로 일반화할 것이다 (여기서 n⩾1이고 m>1).
함수 f:Rn→Rm와 벡터 x=[x1,…,xn]⊤∈Rn에 대해, 해당 함수 값의 벡터는 다음과 같이 주어진다.
f(x)=f1(x)⋮fm(x)∈Rm
벡터 값 함수를 이런 방식으로 작성하면, f:Rn→Rm를 R로 매핑되는 함수들의 벡터 [f1,…,fm]⊤, fi:Rn→R로 볼 수 있다. 각 fi에 대한 미분 규칙은 섹션 5.2에서 논의한 것과 정확히 동일하다.
chain rule은 행렬 곱셈으로 작성될 수 있다.
Gradient checking
따라서 벡터 값 함수 f:Rn→Rm의 xi∈R,i=1,…n에 대한 편미분은 다음과 같은 벡터로 주어진다.
(5.58)의 특수한 경우로, 벡터 x∈Rn를 스칼라로 매핑하는 함수 f:Rn→R1 (예: f(x)=∑i=1nxi)는 행 벡터(차원 1×n의 행렬)인 Jacobian을 가진다; (5.40)을 참조하라.
비고. 이 책에서는 미분의 **분자 레이아웃(numerator layout)**을 사용한다. 즉, x∈Rn에 대한 f∈Rm의 미분 df/dx는 m×n 행렬이며, f의 요소가 행을 정의하고 x의 요소가 해당 Jacobian의 열을 정의한다; (5.58)을 참조하라.
그림 5.5 f의 Jacobian의 determinant는 파란색 영역과 주황색 영역 사이의 확대율을 계산하는 데 사용될 수 있다.
**분모 레이아웃(denominator layout)**도 존재하며, 이는 분자 레이아웃의 전치(transpose)이다. 이 책에서는 분자 레이아웃을 사용할 것이다.
Jacobian이 섹션 6.7의 확률 분포에 대한 변수 변경(change-of-variable) 방법에서 어떻게 사용되는지 살펴볼 것이다. 변환으로 인한 스케일링 양은 determinant에 의해 제공된다.
섹션 4.1에서 우리는 determinant가 평행사변형의 면적을 계산하는 데 사용될 수 있음을 보았다. 단위 정사각형의 변으로 두 벡터 b1=[1,0]⊤, b2=[0,1]⊤가 주어지면 (파란색; 그림 5.5 참조), 이 정사각형의 면적은 다음과 같다.
det([1001])=1.
변이 c1=[−2,1]⊤, c2=[1,1]⊤인 평행사변형을 취하면 (그림 5.5의 주황색), 그 면적은 determinant의 절댓값으로 주어진다 (섹션 4.1 참조).
det([−2111])=∣−3∣=3,
즉, 이 면적은 단위 정사각형 면적의 정확히 세 배이다. 이 스케일링 인자는 단위 정사각형을 다른 정사각형으로 변환하는 매핑을 찾음으로써 얻을 수 있다. 선형 대수학 용어로, 우리는 효과적으로 (b1,b2)에서 (c1,c2)로 변수 변환을 수행한다. 우리의 경우, 매핑은 선형이며 이 매핑의 determinant의 절댓값은 우리가 찾고 있는 스케일링 인자를 정확히 제공한다.
이 매핑을 식별하는 두 가지 접근 방식을 설명할 것이다. 첫째, 매핑이 선형이라는 점을 이용하여 2장의 도구를 사용하여 이 매핑을 식별할 것이다. 둘째, 이 장에서 논의한 도구를 사용하여 편미분을 통해 매핑을 찾을 것이다.
접근 방식 1 선형 대수학 접근 방식을 시작하기 위해, 우리는 {b1,b2}와 {c1,c2}를 모두 R2의 기저로 식별한다 (요약은 섹션 2.6.1 참조). 우리가 효과적으로 수행하는 것은 (b1,b2)에서 (c1,c2)로의 **기저 변환(change of basis)**이며, 이 기저 변환을 구현하는 변환 행렬을 찾고 있다. 섹션 2.7.2의 결과를 사용하여, 원하는 기저 변환 행렬을 다음과 같이 식별한다.
J=[−2111]
이때 Jb1=c1 및 Jb2=c2이다. J의 determinant의 절댓값은 우리가 찾고 있는 스케일링 인자를 제공하며, ∣det(J)∣=3이다. 즉, (c1,c2)에 의해 형성된 정사각형의 면적은 (b1,b2)에 의해 형성된 면적보다 세 배 더 크다.
denominator layout
기하학적으로, Jacobian determinant는 영역이나 부피를 변환할 때의 확대/축소 인자를 제공한다.
Jacobian
determinant
그림 5.6
(편)미분의 차원.
접근 방식 2 선형 대수학 접근 방식은 선형 변환에 유효하다. 비선형 변환(섹션 6.7에서 중요해짐)의 경우, 편미분을 사용하는 더 일반적인 접근 방식을 따른다.
이 접근 방식을 위해, 변수 변환을 수행하는 함수 f:R2→R2를 고려한다. 우리의 예에서, f는 (b1,b2)에 대한 임의의 벡터 x∈R2의 좌표 표현을 (c1,c2)에 대한 좌표 표현 y∈R2로 매핑한다. 우리는 매핑을 식별하여 영역(또는 부피)이 f에 의해 변환될 때 어떻게 변하는지 계산하고자 한다. 이를 위해, x를 약간 변경할 때 f(x)가 어떻게 변하는지 알아내야 한다. 이 질문은 Jacobian 행렬 dxdf∈R2×2에 의해 정확히 답변된다. 다음과 같이 쓸 수 있으므로,
Jacobian은 우리가 찾고 있는 좌표 변환을 나타낸다. 좌표 변환이 선형인 경우 (우리의 경우처럼) 정확하며, (5.66)은 (5.62)의 기저 변환 행렬을 정확히 복구한다. 좌표 변환이 비선형인 경우, Jacobian은 이 비선형 변환을 선형 변환으로 국소적으로 근사한다. Jacobian determinant의 절댓값 ∣det(J)∣은 좌표가 변환될 때 영역이나 부피가 스케일링되는 인자이다. 우리의 경우 ∣det(J)∣=3이다.
Jacobian determinant와 변수 변환은 섹션 6.7에서 확률 변수와 확률 분포를 변환할 때 중요해질 것이다. 이러한 변환은 reparametrization trick 또는 infinite perturbation analysis라고도 불리는 딥 신경망 훈련과 관련하여 머신러닝에서 매우 중요하다.
이 장에서는 함수의 미분을 다루었다. 그림 5.6은 이러한 미분들의 차원을 요약한다. 만약 f:R→R이면 gradient는 단순히 스칼라이다 (왼쪽 상단 항목). f:RD→R의 경우 gradient는 1×D 행 벡터이다 (오른쪽 상단 항목). f:R→RE의 경우 gradient는 E×1 열 벡터이며, f:RD→RE의 경우 gradient는 E×D 행렬이다.
Example 5.9 (Gradient of a Vector-Valued Function)
주어진 식은 다음과 같다:
f(x)=Ax,f(x)∈RM,A∈RM×N,x∈RN
gradientdf/dx를 계산하기 위해 먼저 df/dx의 차원을 결정한다. f:RN→RM이므로, df/dx∈RM×N이 된다. 다음으로, gradient를 계산하기 위해 f의 모든 xj에 대한 편미분을 결정한다:
이 모델은 선형 회귀(linear regression)의 맥락에서 9장에서 훨씬 더 자세히 논의될 것이며, 여기서는 least-squares lossL의 파라미터 θ에 대한 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=Φθ
을 고려해 보자. 여기서 θ∈RD는 파라미터 벡터이고, Φ∈RN×D는 입력 feature이며, y∈RN는 해당 관측값이다. 우리는 다음 함수들을 정의한다.
L(e):=∥e∥2,e(θ):=y−Φθ.
우리는 ∂θ∂L를 구하고자 하며, 이를 위해 **연쇄 법칙(chain rule)**을 사용할 것이다. L은 **최소 제곱 손실 함수(least-squares loss function)**라고 불린다.
계산을 시작하기 전에, 우리는 gradient의 차원을 다음과 같이 결정한다.
∂θ∂L∈R1×D
연쇄 법칙을 통해 gradient를 다음과 같이 계산할 수 있다.
∂θ∂L=∂e∂L∂θ∂e
여기서 d번째 요소는 다음과 같이 주어진다.
∂θ∂L[1,d]=n=1∑N∂e∂L[n]∂θ∂e[n,d]
우리는 ∥e∥2=e⊤e임을 알고 있으며 (섹션 3.2 참조), 다음을 결정한다.
∂e∂L=2e⊤∈R1×N
또한, 우리는 다음을 얻는다.
∂θ∂e=−Φ∈RN×D
따라서 우리가 원하는 미분은 다음과 같다.
∂θ∂L=−2e⊤Φ=(5.77)−1×N2(y⊤−θ⊤Φ⊤)N×DΦ∈R1×D
참고. 연쇄 법칙을 사용하지 않고 다음 함수를 즉시 살펴보면 동일한 결과를 얻을 수 있다.
L2(θ):=∥y−Φθ∥2=(y−Φθ)⊤(y−Φθ).
이 접근 방식은 L2와 같은 간단한 함수에는 여전히 실용적이지만, **심층 함수 합성(deep function compositions)**에는 비실용적이 된다.
5.4 행렬의 Gradient
편미분:
그림 5.7
벡터에 대한 행렬의 gradient 계산 시각화. 우리는 x∈R3 벡터에 대한 A∈R4×2 행렬의 gradient를 계산하는 데 관심이 있다. gradient dxdA∈R4×2×3임을 알고 있다. 우리는 두 가지 동등한 접근 방식을 따라 이를 도출한다: (a) 편미분을 Jacobian tensor로 취합;
(b) 행렬을 벡터로 평탄화하고, Jacobian matrix를 계산한 다음, Jacobian tensor로 재구성.
(a) 접근 방식 1: 우리는 ∂x1∂A,∂x2∂A,∂x3∂A의 편미분을 계산하며, 각각은 4×2 행렬이고, 이들을 4×2×3 tensor로 취합한다.
그림 5.7
벡터에 대한 행렬의 gradient 계산 시각화. 우리는 x∈R3 벡터에 대한 A∈R4×2 행렬의 gradient를 계산하는 데 관심이 있다. gradient dxdA∈R4×2×3임을 알고 있다. 우리는 두 가지 동등한 접근 방식을 따라 이를 도출한다: (a) 편미분을 Jacobian tensor로 취합;
(b) 행렬을 벡터로 평탄화하고, Jacobian matrix를 계산한 다음, Jacobian tensor로 재구성.
(b) 접근 방식 2: 우리는 A∈R4×2를 A~∈R8 벡터로 재구성(평탄화)한다. 그런 다음, dxdA~∈R8×3 gradient를 계산한다. 위에서 설명한 대로 이 gradient를 재구성하여 gradient tensor를 얻는다.
5.4 Gradients of Matrices
우리는 벡터(또는 다른 행렬)에 대한 행렬의 gradient를 계산해야 하는 상황에 직면하게 될 것이며, 이는 다차원 tensor를 결과로 가져온다. 우리는 이 tensor를 다음과 같은 다차원 배열로 생각할 수 있다.
tensor는 다차원 배열로 생각할 수 있다.
행렬은 행렬의 열을 쌓아(flattening) 벡터로 변환될 수 있다.
partial derivative를 모아놓은 것이다. 예를 들어, m×n 행렬 A에 대해 p×q 행렬 B로 gradient를 계산하면, 결과 Jacobian은 (m×n)×(p×q)가 되며, 즉 4차원 tensorJ가 된다. 이 tensor의 원소는 Jijkl=∂Aij/∂Bkl로 주어진다.
행렬은 선형 매핑을 나타내므로, m×n 행렬의 공간 Rm×n과 mn 벡터의 공간 Rmn 사이에 vector-space isomorphism(선형적이고 가역적인 매핑)이 존재한다는 사실을 활용할 수 있다. 따라서 우리는 행렬을 각각 길이 mn과 pq의 벡터로 재구성할 수 있다. 이 mn 벡터를 사용한 gradient는 크기 mn×pq의 Jacobian을 생성한다. 그림 5.7은 두 가지 접근 방식을 시각화한다. 실제 응용에서는 행렬을 벡터로 재구성하고 이 Jacobian matrix로 계속 작업하는 것이 종종 바람직하다. Chain rule (5.48)은 간단한 행렬 곱셈으로 귀결되는 반면, Jacobian tensor의 경우 어떤 차원을 합산해야 하는지에 더 많은 주의를 기울여야 한다.
Example 5.12 (Gradient of Vectors with Respect to Matrices)
다음 예시를 고려해 보자.
f=Ax,f∈RM,A∈RM×N,x∈RN
여기서 우리는 gradient df/dA를 찾고자 한다. 먼저 gradient의 차원을 다음과 같이 결정하는 것부터 다시 시작하자.
dAdf∈RM×(M×N)
정의에 따르면, gradient는 편미분들의 모음이다.
dAdf=∂A∂f1⋮∂A∂fM,∂A∂fi∈R1×(M×N)
편미분을 계산하기 위해, 행렬-벡터 곱셈을 명시적으로 작성하는 것이 도움이 될 것이다.
fi=j=1∑NAijxj,i=1,…,M
그리고 편미분은 다음과 같이 주어진다.
∂Aiq∂fi=xq
이를 통해 A의 한 행에 대한 fi의 편미분을 계산할 수 있으며, 이는 다음과 같이 주어진다.
∂Ai,:∂fi=x⊤∈R1×1×N∂Ak=i,:∂fi=0⊤∈R1×1×N
여기서 우리는 올바른 차원에 주의를 기울여야 한다. fi는 R로 매핑되고 A의 각 행은 1×N 크기이므로, A의 한 행에 대한 fi의 편미분으로 1×1×N 크기의 tensor를 얻는다.
우리는 편미분 (5.91)을 쌓아서 (5.87)에서 원하는 gradient를 다음과 같이 얻는다.
∂A∂fi=0⊤⋮0⊤x⊤0⊤⋮0⊤∈R1×(M×N)
Example 5.13 (Gradient of Matrices with Respect to Matrices)
행렬 R∈RM×N과 함수 f:RM×N→RN×N가 다음과 같다고 가정하자.
f(R)=R⊤R=:K∈RN×N
여기서 우리는 gradientdK/dR를 찾고자 한다.
이 어려운 문제를 해결하기 위해, 우리가 이미 알고 있는 것을 먼저 적어보자: gradient는 다음과 같은 차원을 가진다.
dRdK∈R(N×N)×(M×N),
이는 tensor이다. 또한,
dRdKpq∈R1×M×N
p,q=1,…,N에 대해, Kpq는 K=f(R)의 (p,q)번째 원소이다. R의 i번째 열을 ri로 표기하면, K의 모든 원소는 R의 두 열의 dot product로 주어진다. 즉,
Kpq=rp⊤rq=m=1∑MRmpRmq
이제 partial derivative∂Rij∂Kpq를 계산하면 다음과 같다.
∂Rij∂Kpq=m=1∑M∂Rij∂RmpRmq=∂pqij,∂pqij=⎩⎨⎧RiqRip2Riq0 if j=p,p=q if j=q,p=q if j=p,p=q otherwise .
(5.94)로부터, 우리가 원하는 gradient는 (N×N)×(M×N) 차원을 가지며, 이 tensor의 모든 단일 원소는 (5.98)의 ∂pqij로 주어진다는 것을 알 수 있다. 여기서 p,q,j=1,…,N이고 i=1,…,M이다.
5.5 Useful Identities for Computing Gradients
다음은 머신러닝 맥락에서 자주 필요한 유용한 gradient들을 나열한 것이다 (Petersen and Pedersen, 2012). 여기서 tr(⋅)은 trace(정의 4.4 참조), det(⋅)은 determinant(섹션 4.1 참조)를 의미하며, f(X)−1은 f(X)의 inverse가 존재한다고 가정할 때의 inverse를 의미한다.
∂X∂f(X)⊤=(∂X∂f(X))⊤∂X∂tr(f(X))=tr(∂X∂f(X))∂X∂det(f(X))=det(f(X))tr(f(X)−1∂X∂f(X))∂X∂f(X)−1=−f(X)−1∂X∂f(X)f(X)−1∂X∂a⊤X−1b=−(X−1)⊤ab⊤(X−1)⊤∂x∂x⊤a=a⊤∂x∂a⊤x=a⊤∂X∂a⊤Xb=ab⊤∂x∂x⊤Bx=x⊤(B+B⊤)∂s∂(x−As)⊤W(x−As)=−2(x−As)⊤WA for symmetric W
비고. 이 책에서는 행렬의 trace와 transpose만 다룬다. 그러나 derivative는 더 높은 차원의 tensor가 될 수 있으며, 이 경우 일반적인 trace와 transpose는 정의되지 않는다. 이러한 경우, D×D×E×Ftensor의 trace는 E×F 차원의 행렬이 된다. 이는 tensor contraction의 특별한 경우이다. 마찬가지로, tensor를 "transpose"한다는 것은 처음 두 차원을 바꾸는 것을 의미한다. 특히, (5.99)부터 (5.102)까지는 multivariate functionf(⋅)을 다루고 행렬에 대한 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)).
연쇄 법칙을 적용하고 미분이 선형적이라는 점을 고려하여 gradient를 계산하면 다음과 같다.
이처럼 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는 여러 단계의 함수 합성으로 계산된다.
y=(fK∘fK−1∘⋯∘f1)(x)=fK(fK−1(⋯(f1(x))⋯)),
여기서 x는 입력(예: 이미지), y는 관측치(예: 클래스 레이블)이며, 각 함수 fi,i=1,…,K는 고유한 매개변수를 가진다.
표기법을 간소화하기 위해 각 layer에서 activation function이 동일한 경우를 논의한다.
Figure 5.8 입력 x와 매개변수 Ai,bi의 함수로 손실 L을 계산하기 위한 다층 신경망의 forward pass.
여러 layer를 가진 신경망에서 i번째 layer의 함수는 fi(xi−1)=σ(Ai−1xi−1+bi−1)이다. 여기서 xi−1은 i−1번째 layer의 출력이고 σ는 logistic sigmoid1+e−x1, tanh 또는 **rectified linear unit (ReLU)**와 같은 activation function이다. 이러한 모델을 훈련시키기 위해서는 j=1,…,K에 대한 모든 모델 매개변수 Aj,bj에 대한 loss functionL의 gradient가 필요하다. 이는 또한 각 layer의 입력에 대한 L의 gradient를 계산해야 함을 의미한다. 예를 들어, 입력 x와 관측치 y가 있고 다음과 같이 정의된 네트워크 구조가 있다고 가정하자.
f0fi:=x:=σi(Ai−1fi−1+bi−1),i=1,…,K,
시각화를 위해 Figure 5.8을 참조하면, squared loss
L(θ)=∥y−fK(θ,x)∥2
를 최소화하는 j=0,…,K−1에 대한 Aj,bj를 찾는 데 관심이 있을 수 있으며, 여기서 θ={A0,b0,…,AK−1,bK−1}이다.
매개변수 집합 θ에 대한 gradient를 얻기 위해서는 각 layer j=0,…,K−1의 매개변수 θj={Aj,bj}에 대한 L의 편미분이 필요하다. chain rule을 사용하면 편미분을 다음과 같이 결정할 수 있다.
주황색 항은 layer 출력의 입력에 대한 편미분이고, 파란색 항은 layer 출력의 매개변수에 대한 편미분이다. ∂L/∂θi+1 편미분을 이미 계산했다고 가정하면, 대부분의 계산은 ∂L/∂θi를 계산하는 데 재사용될 수 있다. 우리가
계산해야 할 추가 항들은 상자로 표시되어 있다. Figure 5.9는 gradient가 네트워크를 통해 역방향으로 전달되는 것을 시각화한다.
5.6.2 Automatic Differentiation
backpropagation은 automatic differentiation이라는 수치 해석의 일반적인 기술의 특별한 경우로 밝혀졌다. 우리는 automatic differentiation을 중간 변수를 사용하여 chain rule을 적용함으로써 함수의 정확한(기계 정밀도까지) gradient를 수치적으로(기호적으로가 아닌) 평가하는 기술 집합으로 생각할 수 있다. automatic differentiation은 덧셈과 곱셈과 같은 일련의 기본 산술 연산과 sin, cos, exp, log와 같은 기본 함수를 적용한다. 이러한 연산에 chain rule을 적용함으로써 상당히 복잡한 함수의 gradient를 자동으로 계산할 수 있다. automatic differentiation은 일반적인 컴퓨터 프로그램에 적용되며 forward mode와 reverse mode를 갖는다. Baydin et al. (2018)은 머신러닝에서 automatic differentiation에 대한 훌륭한 개요를 제공한다.
그림 5.10은 입력 x에서 중간 변수 a,b를 통해 출력 y로의 데이터 흐름을 나타내는 간단한 그래프를 보여준다. 만약 우리가 미분 dy/dx를 계산한다면, chain rule을 적용하여 다음을 얻을 것이다.
dxdy=dbdydadbdxda.
직관적으로, forward mode와 reverse mode는 곱셈 순서에서 차이가 있다. 행렬 곱셈의 결합성 때문에 우리는 다음 중 하나를 선택할 수 있다.
dxdy=(dbdydadb)dxdadxdy=dbdy(dadbdxda)
식 (5.120)은 gradient가 그래프를 통해 뒤로 전파되므로, 즉 데이터 흐름과 반대 방향으로 전파되므로 reverse mode가 될 것이다. 식 (5.121)은 gradient가 그래프를 통해 왼쪽에서 오른쪽으로 데이터와 함께 흐르는 forward mode가 될 것이다.
Figure 5.9 다층 신경망에서 손실 함수의 gradient를 계산하기 위한 backward pass.
Figure 5.10 중간 변수 a,b를 통해 x에서 y로의 데이터 흐름을 보여주는 간단한 그래프.
automatic differentiation
automatic differentiation은 symbolic differentiation 및 finite differences를 사용하는 것과 같은 gradient의 수치적 근사와는 다르다.
일반적인 경우, 우리는 벡터, 행렬 또는 텐서가 될 수 있는 Jacobian을 사용한다.
reverse modeforward mode
다음에서는 backpropagation인 reverse mode automatic differentiation에 초점을 맞출 것이다. 입력 차원이 레이블의 차원보다 훨씬 높은 신경망의 맥락에서 reverse mode는 forward mode보다 계산적으로 훨씬 저렴하다. 교훈적인 예시부터 시작해보자.
Example 5.14
다음 함수를 고려해 보자.
f(x)=x2+exp(x2)+cos(x2+exp(x2))
중간 변수
Figure 5.11
입력 x, 함수 값 f, 그리고 중간 변수 a,b,c,d,e를 포함하는 계산 그래프.
(5.109)에서 가져온 것이다. 만약 우리가 컴퓨터에서 함수 f를 구현한다면, 중간 변수를 사용하여 일부 계산을 절약할 수 있을 것이다.
a=x2b=exp(a)c=a+bd=ce=cos(c)f=d+e
이는 **연쇄 법칙(chain rule)**을 적용할 때 발생하는 사고 과정과 동일하다. 앞선 일련의 방정식은 (5.109)에 정의된 함수 f(x)를 직접 구현하는 것보다 더 적은 연산을 필요로 한다는 점에 주목하라. Figure 5.11의 해당 **계산 그래프(computation graph)**는 함수 값 f를 얻기 위해 필요한 데이터 흐름과 계산을 보여준다.
중간 변수를 포함하는 일련의 방정식은 계산 그래프로 생각할 수 있으며, 이는 신경망 소프트웨어 라이브러리 구현에서 널리 사용되는 표현이다. 우리는 **기본 함수(elementary functions)**의 미분 정의를 상기함으로써 중간 변수의 해당 입력에 대한 미분을 직접 계산할 수 있다. 다음을 얻는다.
위의 각 미분을 변수로 생각하면, 미분 계산에 필요한 연산의 복잡성이 함수 자체의 계산 복잡성과 유사하다는 것을 알 수 있다. 이는 미분 ∂x∂f (5.110)의 수학적 표현이 함수 f(x) (5.109)의 수학적 표현보다 훨씬 더 복잡하다는 점을 고려할 때 상당히 직관적이지 않다.
**자동 미분(Automatic differentiation)**은 예제 5.14의 형식화이다. x1,…,xd를 함수의 입력 변수, xd+1,…,xD−1를 중간 변수, 그리고 xD를 출력 변수라고 하자. 그러면 계산 그래프는 다음과 같이 표현될 수 있다.
For i=d+1,…,D:xi=gi(xPa(xi))
여기서 gi(⋅)는 기본 함수이고 xPa(xi)는 그래프에서 변수 xi의 **부모 노드(parent nodes)**이다. 이런 방식으로 정의된 함수가 주어지면, 연쇄 법칙을 사용하여 함수의 미분을 단계별로 계산할 수 있다. 정의에 따라 f=xD이므로 다음을 상기하라.
역방향 자동 미분은 구문 분석 트리를 필요로 한다.
여기서 Pa(xj)는 계산 그래프에서 xj의 부모 노드 집합이다. 방정식 (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,y에 대한 함수 f:R2→R를 고려하자. 우리는 고차 편도함수(및 gradient)에 대해 다음 표기법을 사용한다:
∂x2∂2f는 x에 대한 f의 2차 편도함수이다.
∂xn∂nf는 x에 대한 f의 n차 편도함수이다.
∂y∂x∂2f=∂y∂(∂x∂f)는 x에 대해 먼저 편미분한 다음 y에 대해 편미분하여 얻은 편도함수이다.
∂x∂y∂2f는 y에 대해 먼저 편미분한 다음 x에 대해 편미분하여 얻은 편도함수이다.
Hessian은 모든 2차 편도함수의 모음이다.
그림 5.12 함수의 선형 근사. 원본 함수 f는 1차 Taylor series 전개를 사용하여 x0=−2에서 선형화된다.
만약 f(x,y)가 두 번 (연속적으로) 미분 가능한 함수라면,
∂x∂y∂2f=∂y∂x∂2f,
즉, 미분 순서는 중요하지 않으며, 해당 Hessian 행렬
H=[∂x2∂2f∂x∂y∂2f∂x∂y∂2f∂y2∂2f]
은 대칭이다. Hessian은 ∇x,y2f(x,y)로 표기된다. 일반적으로 x∈Rn이고 f:Rn→R인 경우, Hessian은 n×n 행렬이다. Hessian은 (x,y) 주변에서 함수의 곡률을 국소적으로 측정한다.
비고 (Vector Field의 Hessian). 만약 f:Rn→Rm가 vector field라면, Hessian은 (m×n×n)-tensor이다. □
5.8 Linearization and Multivariate Taylor Series
함수 f의 gradient∇f는 종종 x0 주변에서 f의 locally linear approximation에 사용된다:
f(x)≈f(x0)+(∇xf)(x0)(x−x0).
여기서 (∇xf)(x0)는 x에 대한 f의 gradient이며, x0에서 평가된다. Figure 5.12는 입력 x0에서 함수 f의 linear approximation을 보여준다. 원래 함수는 직선으로 근사된다. 이 근사는 locally accurate하지만, x0에서 멀어질수록 근사의 정확도는 떨어진다. 식 (5.148)은 x0에서 f의 multivariate Taylor series expansion의 특수한 경우로, 처음 두 항만 고려한다. 다음에서는 더 나은 근사를 가능하게 하는 더 일반적인 경우를 논의한다.
multivariate Taylor series
Taylor polynomial
vector는 1차원 배열로, matrix는 2차원 배열로 구현될 수 있다.
Figure 5.13 outer product 시각화. vector의 outer product는 항당 배열의 차원을 1씩 증가시킨다. (a) 두 vector의 outer product는 matrix를 생성한다; (b) 세 vector의 outer product는 3차 tensor를 생성한다.
(a) vectorδ∈R4가 주어졌을 때, outer productδ2:=δ⊗δ=δδ⊤∈R4×4를 matrix로 얻는다.
(b) outer productδ3:=δ⊗δ⊗δ∈R4×4×4는 3차 tensor("3차원 matrix"), 즉 세 개의 인덱스를 가진 배열을 생성한다.
정의 5.7 (Multivariate Taylor Series). 우리는 함수를 고려한다.
f:RDx→R↦f(x),x∈RD
이는 x0에서 smooth하다. 차이 vectorδ:=x−x0를 정의할 때, x0에서의 f의 multivariate Taylor series는 다음과 같이 정의된다.
f(x)=k=0∑∞k!Dxkf(x0)δk,
여기서 Dxkf(x0)는 x에 대한 f의 k차 (총) derivative이며, x0에서 평가된다.
정의 5.8 (Taylor Polynomial). x0에서 f의 n차 Taylor polynomial은 (5.151)의 series에서 처음 n+1개의 구성 요소를 포함하며 다음과 같이 정의된다.
Tn(x)=k=0∑nk!Dxkf(x0)δk.
(5.151)과 (5.152)에서 우리는 δk라는 다소 느슨한 표기법을 사용했는데, 이는 vectorx∈RD,D>1, 및 k>1에 대해 정의되지 않는다. Dxkf와 δk는 모두 k차 tensor, 즉 k차원 배열이다. k차 tensorδk∈RD×D×…×D는 vectorδ∈RD의 k겹 outer product(⊗로 표시)으로 얻어진다. 예를 들어,
Taylor series에서 Dxkf(x0)δk는 k차 polynomial을 포함한다.
이제 vector field에 대한 Taylor series를 정의했으므로, k=0,…,3 및 δ:=x−x0에 대한 Taylor series expansion의 첫 번째 항 Dxkf(x0)δk를 명시적으로 작성해 보자.
Example 5.15 (Taylor Series Expansion of a Function with Two Variables)
다음 함수를 고려해 보자.
f(x,y)=x2+2xy+y3
우리는 (x0,y0)=(1,2)에서 f의 Taylor series expansion을 계산하고자 한다. 시작하기 전에 무엇을 기대할 수 있는지 논의해 보자. (5.161)의 함수는 3차 다항식이다. 우리는 그 자체가 다항식의 선형 조합인 Taylor series expansion을 찾고 있다. 따라서 Taylor series expansion이 3차 다항식을 표현하기 위해 4차 이상의 항을 포함할 것이라고는 예상하지 않는다. 이는 (5.161)의 정확한 대체 표현을 위해 (5.151)의 처음 네 항을 결정하는 것으로 충분하다는 것을 의미한다.
Taylor series expansion을 결정하기 위해 상수항과 1차 도함수부터 시작하며, 이는 다음과 같다.
이 경우, 우리는 (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)을 계산해야 한다. 즉, 다음과 같은 형태의 적분을 풀어야 한다.
p(x)가 편리한 형태(예: Gaussian)이더라도, 이 적분은 일반적으로 해석적으로 풀 수 없다. f의 Taylor series expansion은 근사 해를 찾는 한 가지 방법이다. p(x)=N(μ,Σ)가 Gaussian이라고 가정하면, μ 주변의 1차 Taylor series expansion은 비선형 함수 f를 국소적으로 선형화한다. 선형 함수에 대해서는 p(x)가 Gaussian 분포를 따를 경우 평균(및 공분산)을 정확하게 계산할 수 있다(섹션 6.5 참조). 이 속성은 비선형 동적 시스템(일명 "state-space models")에서 온라인 상태 추정을 위해 extended Kalman filter (Maybeck, 1979)에 의해 많이 활용된다. (5.181)의 적분을 근사하는 다른 결정론적 방법으로는 어떠한 gradient도 필요하지 않은 unscented transform (Julier and Uhlmann, 1997) 또는 p(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)를 계산하시오.
5.2 로지스틱 시그모이드 함수 f(x)=1+exp(−x)1의 미분 f′(x)를 계산하시오.
5.3 함수 f(x)=exp(−2σ21(x−μ)2)의 미분 f′(x)를 계산하시오.
여기서 μ,σ∈R는 상수이다.
5.7 **연쇄 법칙(chain rule)**을 사용하여 다음 함수들의 미분 df/dx를 계산하시오. 모든 편미분의 차원을 제공하고, 단계를 자세히 설명하시오.
a.
f(z)=log(1+z),z=x⊤x,x∈RD
b.
f(z)=sin(z),z=Ax+b,A∈RE×D,x∈RD,b∈RE
여기서 sin(⋅)은 z의 모든 요소에 적용된다.
5.8 다음 함수들의 미분 df/dx를 계산하시오. 단계를 자세히 설명하시오.
a. **연쇄 법칙(chain rule)**을 사용하시오. 모든 편미분의 차원을 제공하시오.
f(z)zy=exp(−21z)=g(y)=y⊤S−1y=h(x)=x−μ
여기서 x,μ∈RD,s∈RD×D.
b.
f(x)=tr(xx⊤+σ2I),x∈RD
여기서 tr(A)는 A의 trace, 즉 대각 요소 Aii의 합이다. 힌트: **외적(outer product)**을 명시적으로 작성하시오.
c. **연쇄 법칙(chain rule)**을 사용하시오. 모든 편미분의 차원을 제공하시오. 편미분들의 곱을 명시적으로 계산할 필요는 없다.
f=tanh(z)∈RMz=Ax+b,x∈RN,A∈RM×N,b∈RM.
여기서 tanh는 z의 모든 구성 요소에 적용된다.
5.9 다음을 정의한다:
g(z,ν)z:=logp(x,z)−logq(z,ν):=t(ϵ,ν)
미분 가능한 함수 p,q,t에 대해 x∈RD,z∈RE,ν∈RF,ϵ∈RG이다. **연쇄 법칙(chain rule)**을 사용하여 다음 gradient를 계산하시오.