[2024-2] 박경태 - deeplearning: Linear Algebra
https://www.deeplearningbook.org/contents/linear_algebra.html
https://www.deeplearningbook.org/contents/linear_algebra.html
Chapter 2 Linear Algebra Linear algebra is a branch of mathematics that is widely used throughout science and engineering. Yet because linear algebra is a form of continuous rather than discrete mathematics, many computer scientists have little experience
www.deeplearningbook.org
1. 선형대수의 기초
선형대수의 핵심 개념은 다양한 수학적 객체의 정의와 이를 다루는 연산으로 구성됩니다. 이 절에서는 스칼라, 벡터, 행렬, 텐서와 같은 주요 개념을 설명하고 이들 간의 관계를 정리합니다.
1.1 스칼라 (Scalar)
- 스칼라는 하나의 숫자를 나타내며, 선형대수의 가장 기본적인 단위입니다.
- 일반적으로 이탤릭체 소문자로 표기하며, 실수 집합 \[
s \in \mathbb{R}
\]
에 속하는 값을 사용합니다.
예: \( s \in \mathbb{R} \) (스칼라 \( s \)는 실수이다).
1.2 벡터 (Vector)
- 벡터는 순서가 있는 숫자의 배열로, 1차원 구조를 가집니다.
1.3 행렬 (Matrix)
- 행렬은 2차원 배열로, \(m \times n\) 크기의 숫자 배열로 정의됩니다.
대문자 (\(\mathbf{A}\))로 표기하며, 요소는 \(a_{i,j}\)로 나타냅니다 (\(i\)는 행, \(j\)는 열).
예: \(\mathbf{A} \in \mathbb{R}^{m \times n}\)
(행렬 \(\mathbf{A}\)는 \(m \times n\) 크기의 실수 행렬이다).
1.4 텐서 (Tensor)
- 텐서는 다차원 배열로, 행렬을 2차원 텐서로 볼 수 있으며, 이를 일반화한 구조입니다.
텐서는 일반적으로 기호 \(\mathcal{T}\)로 나타내며, 특정 차원에서의 좌표 \((i, j, k, \ldots)\)에 대해 값을 가집니다.
1.5 주요 연산: 전치 (Transpose)
- 행렬의 전치란 주대각선을 기준으로 행과 열을 뒤바꾸는 연산입니다.
\(\mathbf{A}^\top\)는 행렬 \(\mathbf{A}\)의 전치 행렬로 정의됩니다.
\[
(\mathbf{A}^\top)_{i,j} = \mathbf{A}_{j,i}
\]
벡터의 전치 연산은 열 벡터를 행 벡터로 바꾸거나 그 반대로 수행합니다.
2. 행렬 연산 및 선형방정식
이 절에서는 행렬 연산의 정의와 성질을 정리하고, 이를 선형방정식의 해결에 어떻게 활용하는지 설명합니다.
2.1 행렬 곱셈
- 행렬 곱셈은 두 행렬 \(\mathbf{A}\)와 \(\mathbf{B}\)의 곱 \(\mathbf{C}\)를 계산하는 연산입니다.
\(\mathbf{A}\)가 \(m \times n\) 행렬이고, \(\mathbf{B}\)가 \(n \times p\) 행렬일 때, 곱셈의 결과인 \(\mathbf{C}\)는 \(m \times p\) 크기를 갖습니다.
각 요소 \(c_{i,j}\)는 다음과 같이 계산됩니다:
\[
c_{i,j} = \sum_{k=1}^n a_{i,k} b_{k,j}
\]
행렬 곱셈은 교환법칙이 성립하지 않으며 (\(\mathbf{A}\mathbf{B} \neq \mathbf{B}\mathbf{A}\)), 결합법칙과 분배법칙은 성립합니다.
2.2 행렬 벡터 곱셈
- 행렬 \(\mathbf{A}\)와 벡터 \(\mathbf{x}\)의 곱은 벡터 \(\mathbf{b}\)로 나타내며, 다음과 같이 계산됩니다:
\[
\mathbf{b} = \mathbf{A} \mathbf{x}, \quad b_i = \sum_{j=1}^n a_{i,j} x_j
\]
이는 선형방정식 \(\mathbf{A}\mathbf{x} = \mathbf{b}\)를 표현하는 간결한 방식으로 사용됩니다.
2.3 선형방정식의 해법
- 선형방정식 \(\mathbf{A}\mathbf{x} = \mathbf{b}\)의 해를 찾는 문제는 다음과 같이 나타낼 수 있습니다:
\[
\mathbf{A} \in \mathbb{R}^{m \times n}: \text{ 계수 행렬}
\]
\[
\mathbf{x} \in \mathbb{R}^n: \text{ 미지수 벡터}
\]
\[
\mathbf{b} \in \mathbb{R}^m: \text{ 결과 벡터}
\]
방정식의 해는 \(\mathbf{x} = \mathbf{A}^{-1} \mathbf{b}\)로 표현되며, 여기서 \(\mathbf{A}^{-1}\)은 \(\mathbf{A}\)의 역행렬입니다.
2.4 역행렬의 존재 조건
- 역행렬 \(\mathbf{A}^{-1}\)이 존재하려면 다음 조건을 만족해야 합니다:
1. \(\mathbf{A}\)는 정사각행렬이어야 함 (\(m = n\)).
2. \(\mathbf{A}\)의 열 벡터가 선형 독립이어야 함.
3. \(\mathbf{A}\)의 행렬식이 0이 아니어야 함 (\(\det(\mathbf{A}) \neq 0\)).
2.5 행렬 연산의 응용
- 행렬 곱셈과 전치를 이용해 여러 수학적 문제를 간결하게 표현할 수 있습니다.
예를 들어, 선형회귀에서는 다음과 같이 \(\mathbf{w}\)를 계산합니다:
\[
\mathbf{w} = (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top \mathbf{y}
\]
여기서 \(\mathbf{X}\)는 입력 데이터 행렬, \(\mathbf{y}\)는 결과 벡터입니다.
3. 행렬 분해 기법
행렬 분해는 대규모 계산을 단순화하고 행렬의 속성을 분석하는 데 유용합니다. 이 절에서는 고유값 분해와 특이값 분해를 중심으로 살펴봅니다.
3.1 고유값 분해 (Eigendecomposition)
고유값 분해는 정사각행렬 \(\mathbf{A}\)를 고유벡터와 고유값으로 분해하는 방법입니다.
\(\mathbf{A}\)의 고유값 \(\lambda\)와 고유벡터 \(\mathbf{v}\)는 다음 관계를 만족합니다:
\[
\mathbf{A}\mathbf{v} = \lambda \mathbf{v}
\]
고유값과 고유벡터를 사용해 \(\mathbf{A}\)를 다음과 같이 표현할 수 있습니다:
\[
\mathbf{A} = \mathbf{V} \Lambda \mathbf{V}^{-1}
\]
여기서,
\(\mathbf{V}\): 고유벡터로 구성된 행렬
\(\Lambda\): 고유값을 대각선에 가진 대각행렬
고유값 분해의 특징
- 실대칭 행렬은 항상 실수 고유값과 직교하는 고유벡터를 가집니다.
- 고유값 분해를 통해 행렬의 성질(예: 양의 정부호성)을 분석할 수 있습니다.
3.2 특이값 분해 (Singular Value Decomposition, SVD)
- 특이값 분해는 임의의 \(m \times n\) 행렬 \(\mathbf{A}\)를 세 행렬로 분해하는 방법입니다:
\[
\mathbf{A} = \mathbf{U} \mathbf{D} \mathbf{V}^\top
\]
여기서,
\(\mathbf{U}\): \(\mathbf{A}\mathbf{A}^\top\)의 고유벡터로 이루어진 \(m \times m\) 직교행렬
\(\mathbf{V}\): \(\mathbf{A}^\top\mathbf{A}\)의 고유벡터로 이루어진 \(n \times n\) 직교행렬
\(\mathbf{D}\): 특이값(고유값의 제곱근)을 대각선으로 가진 \(m \times n\) 대각행렬
특이값 분해의 활용
- 차원 축소: SVD를 통해 중요한 정보만 남기고 데이터의 차원을 줄일 수 있습니다.
- 유사역행렬 (Moore-Penrose Pseudoinverse):
- SVD를 이용해 비정사각행렬의 유사역행렬을 계산할 수 있습니다: \[ \mathbf{A}^+ = \mathbf{V} \mathbf{D}^+ \mathbf{U}^\top \] 여기서 \(\mathbf{D}^+\)는 \(\mathbf{D}\)의 대각선 원소의 역수를 취한 대각행렬입니다.
- 선형 방정식 근사: 방정식 \(\mathbf{A}\mathbf{x} = \mathbf{b}\)가 해를 가지지 않을 때, SVD를 이용해 최소 제곱해를 구할 수 있습니다: \[ \mathbf{x} = \mathbf{A}^+ \mathbf{b} \]
3.3 고유값 분해와 SVD의 차이점
- 고유값 분해는 정사각행렬에서만 가능하지만, SVD는 모든 행렬에 대해 적용 가능합니다.
- SVD는 고유값 분해보다 더 일반적인 분해 방법으로, 대규모 데이터 분석에 널리 활용됩니다.
4. 벡터 및 행렬의 크기와 특성
벡터와 행렬의 크기를 측정하고, 이들의 특성을 이해하는 것은 선형대수에서 매우 중요합니다. 이 절에서는 노름(Norm), 대각합(Trace), 그리고 행렬식(Determinant)의 정의와 활용을 살펴봅니다.
4.1 벡터 노름 (Norm)
-
- 노름은 벡터의 크기(또는 길이)를 측정하는 함수입니다.
일반적인 \(L_p\) 노름은 다음과 같이 정의됩니다:
\[
\|\mathbf{x}\|_p = \left( \sum_{i} |x_i|^p \right)^{1/p}, \quad p \geq 1
\]
주요 노름:
- \(L_1\) 노름: 벡터 요소의 절댓값 합
\[
\|\mathbf{x}\|_1 = \sum_i |x_i|
\]
- \(L_2\) 노름: 유클리드 거리로, 가장 흔히 사용됨
\[
\|\mathbf{x}\|_2 = \sqrt{\sum_i x_i^2}
\]
- \(L_\infty\) 노름: 벡터 요소 중 절댓값이 가장 큰 값
\[
\|\mathbf{x}\|_\infty = \max_i |x_i|
\]
- 노름은 벡터의 크기(또는 길이)를 측정하는 함수입니다.
4.2 행렬 노름
- 행렬의 크기를 측정할 때 자주 사용하는 방법은 프로베니우스 노름입니다:
\[
\|\mathbf{A}\|_F = \sqrt{\sum_{i,j} a_{i,j}^2}
\]
이는 벡터 \(L_2\) 노름을 행렬로 확장한 형태로 볼 수 있습니다.
4.3 대각합 (Trace)
-
- 대각합은 행렬의 대각선 원소들의 합으로 정의됩니다:
\[
\text{Tr}(\mathbf{A}) = \sum_i a_{i,i}
\]
주요 성질:
1. \(\text{Tr}(\mathbf{A} + \mathbf{B}) = \text{Tr}(\mathbf{A}) + \text{Tr}(\mathbf{B})\)
2. \(\text{Tr}(\mathbf{A}\mathbf{B}) = \text{Tr}(\mathbf{B}\mathbf{A})\)
- 대각합은 행렬의 대각선 원소들의 합으로 정의됩니다:
4.4 행렬식 (Determinant)
- 행렬식은 정사각행렬에서 공간의 확장 또는 축소 비율을 나타내는 스칼라 값입니다.
\(\det(\mathbf{A})\)는 다음과 같은 특징을 가집니다:
- \(\det(\mathbf{A}) = 0\): 행렬 \(\mathbf{A}\)가 가역성이 없음을 의미.
- \(|\det(\mathbf{A})|\): 행렬 변환이 공간을 얼마나 압축하거나 확장하는지를 나타냄.
행렬식 계산 예시 (\(2 \times 2\) 행렬):
\[
\mathbf{A} = \begin{bmatrix} a & b \\ c & d \end{bmatrix}, \quad \det(\mathbf{A}) = ad - bc
\]
5. 응용 예시: 주성분 분석 (PCA)
주성분 분석(PCA)은 차원 축소 및 데이터 압축을 위한 기법으로, 선형대수의 개념을 활용하여 데이터의 주요 특징을 추출합니다. 이 절에서는 PCA의 정의와 작동 방식을 설명합니다.
5.1 PCA의 목적
- PCA는 고차원 데이터를 저차원으로 변환하면서 중요한 정보를 최대한 보존하는 기법입니다.
- 주로 데이터의 분산을 최대화하는 방향(주성분)을 찾는 데 사용됩니다.
5.2 기본 아이디어
-
- 데이터 중심화:
데이터 집합 \(\{ \mathbf{x}^{(1)}, \mathbf{x}^{(2)}, \ldots, \mathbf{x}^{(m)} \}\)에서 평균을 제거합니다:
\[
\mathbf{\tilde{x}}^{(i)} = \mathbf{x}^{(i)} - \mu, \quad \mu = \frac{1}{m} \sum_{i=1}^m \mathbf{x}^{(i)}
\]
공분산 행렬 계산:
중심화된 데이터를 사용해 공분산 행렬 \(\mathbf{C}\)를 계산합니다:
\[
\mathbf{C} = \frac{1}{m} \sum_{i=1}^m \mathbf{\tilde{x}}^{(i)} \mathbf{\tilde{x}}^{(i)\top}
\]
고유값 분해:
공분산 행렬 \(\mathbf{C}\)의 고유값과 고유벡터를 계산합니다:
\[
\mathbf{C} = \mathbf{V} \Lambda \mathbf{V}^\top
\]
여기서 \(\Lambda\)는 고유값의 대각행렬, \(\mathbf{V}\)는 고유벡터 행렬입니다.
주성분 선택:
가장 큰 고유값에 대응하는 고유벡터를 선택하여 데이터의 주요 축을 정의합니다.
\(k\)-차원으로 축소하려면, 상위 \(k\)개의 고유벡터를 선택해 행렬 \(\mathbf{W}\)를 만듭니다.
데이터 변환:
원본 데이터를 저차원 공간으로 투영합니다:
\[
\mathbf{z} = \mathbf{W}^\top \mathbf{\tilde{x}}
\]
- 데이터 중심화:
5.3 PCA의 특징
- 분산 최대화: 선택된 주성분은 데이터의 분산을 가장 잘 설명하는 축입니다.
- 차원 축소: PCA는 차원을 줄이면서도 데이터의 주요 구조를 유지합니다.
- 선형 변환: PCA는 선형대수적 변환을 기반으로 동작하며, 비선형적 데이터 구조를 모델링하지 못할 수 있습니다.
5.4 PCA의 응용
- 데이터 시각화:
- 고차원 데이터를 2차원 또는 3차원으로 축소해 시각화에 활용합니다.
- 특징 추출:
- 머신러닝에서 중요한 특징을 선택하는 데 사용됩니다.
- 노이즈 제거:
- 주요 성분만 남겨 데이터에서 노이즈를 제거하는 데 유용합니다.
5.5 사례: 2D 데이터의 PCA
- m=5m = 5개의 데이터 포인트가 주어졌다고 가정합니다.
- 데이터를 중심화하고 공분산 행렬을 계산합니다.
- 공분산 행렬의 고유값과 고유벡터를 구합니다.
- 가장 큰 고유값에 대응하는 고유벡터를 사용해 데이터를 새로운 축으로 투영합니다.