열심히 살아서 개같이 벌자

real-rock의 데이터 엔지니어 도전기

Data Science/Deep Learning

딥러닝 기초 수학: 선형대수

real-rock 2022. 9. 30. 07:50

기계 학습에서는 수학을 많이 사용한다. 특히, 대용량의 벡터 연산을 사용하고 데이터의 불확실성을 다루며 오류를 최소화하는 매개변수를 찾는 일을 모두 수학으로 처리한다. 따라서, 딥러닝을 공부함에 있어서 수학은 필수적으로 공부해야하는 분야이며 딥러닝 기초 수학 포스트에서는 다음 아래의 3가지 내용을 다룬다. 

  1. 선형대수
  2. 확률 및 통계
  3. 최적화

이번 포스트에서는 선형대수에 대한 내용을 전반적으로 다룬다. 기계 학습에서는 다양한 연산이 사용된다. 인간이 할 수 없는 엄청난 양의 연산을 이용하는데 이때 필요한 것이 선형대수(Linear Algebra)이다. 어떻게 데이터를 처리하고 연산하는지에 대한 내용을 선형대수를 통해 공부한다.

벡터(Vector)와 행렬(Matrix) 그리고 텐서(Tensor)

기계 학습에서는 입력된 샘플을 특징 벡터로 표현한다. Iris 붗꽃 샘플은 꽃받침의 길이, 꽃받침의 너비, 꽃잎의 길이, 꽃잎의 너비라는 4가지 특징이 있었다. 한 예로, 어떤 한 붗꽃 샘플이 이 특성들에 대해 5.1, 3.5, 1.4, 0,2의 값을 가진다면 다음 아래와 같이 표현할 수 있을 것이다.

$$ \begin{equation*} x = \begin{pmatrix} x_1 \\ x_2 \\ x_3 \\ x_4 \end{pmatrix} = \begin{pmatrix} 5.1 \\ 3.5 \\ 1.4 \\ 0.2 \end{pmatrix} \end{equation*} $$

이와 같이 벡터를 구성하는 요소가 4개면 이 벡터를 4차원의 벡터라고 한다. 수학적으로는 $ \begin{equation*} x \in \mathbb{R} \end{equation*} $ 로 표현한다. 

행렬은 여러개의 벡터로 구성되어 있다. 위의 Iris 데이터를 예로 들면 전체 샘플의 개수는 150개로 이를 행렬로 표현하면 150개의 행과 4개의 열로 표현할 수 있다. 즉, $ \begin{equation*} x \in \mathbb{R}^{150\times 4}\end{equation*} $ 인 것이다.

기계 학습에서는 훈련집합을 담은 행렬을 설계행렬(design matrix)라고 한다. 

텐서는 3차원 이상의 숫자 배열을 의미한다.

 

놈(Norm)과 유사도(Similarity)

기계 학습이 사용하는 연산 중 하나는 두 샘플의 유사도 측정이다. 가장 유사한 샘플을 찾아 그 샘플이 속한 부류로 분류할 수 있다.

벡터의 크기는 어떻게 정의할 수 있을까? 이때 필요한 것이 놈이라는 개념이다.

벡터 $x=\begin{pmatrix}x_1 & x_2 & x_3  & \cdots & x_n \end{pmatrix}^T$에 대해 p차 놈($L_p$ 놈)을 거리로 정의한다.

$$\begin{equation}L_p := ||x||_p = (\sum_{i=1}^n |x_i|^p)^{\frac{1}{p}} \end{equation}$$

또한 최대 놈은 $\begin{equation} ||x||_{\infty} = max(|x_1|, |x_2|, \cdots, |x_n|) \end{equation}$ 으로 정의한다.

길이가 1인 벡터를 단위 벡터(unit vector)라고 하는데 다음 아래와 같이 표현할 수 있다.

$$\begin{equation} unit\, vector = \frac{x}{||x||_2} \end{equation}$$

행렬의 놈은 더 다양한 형태가 있지만 기계학습은 주로 프로베니우스 놈(Frobenius norm)을 사용한다.

$A_{n,m}$ 행렬에 대해 다음 아래와 같이 정의한다.

$$\begin{equation} ||A||_F = (\sum_{i=1}^n\sum_{j=1}^m a_{ij}^2)^{\frac{1}{2}} \end{equation}$$

유사도와 거리

유사도를 측정하는 방법은 여기에 자세히 설명되어있다. 간단하게 유클리디안(Euclidean) 거리와 코사인(Cosine) 유사도만 보면 아래 두식으로 나타낸다.

$$ \begin{equation} d_{Euclidean}(x, y) := ||x - y||_2\ \end{equation}$$

$$\begin{equation} s_{Cosine}(x, y) := \frac{x\cdot y}{||x||_2\times ||y||_2} \end{equation}$$

 

코사인 유사도는 정보 검색 분야에서 주로 두 문서의 유사도를 계산하는데 잘 사용되지만 어떤 분야에서는 적절하지 않을 수도 있다. 즉, 다양한 유사도 측정 기법을 상황에 맞춰 사용해야할 필요가 있다.

퍼셉트론의 해석

퍼셉트론(Perceptron)은 입력 샘플을 2개의 부류 중 하나로 분류하는 분류기이다. 즉, 어떤 입력 $x$에 대해 -1 아니면 1의 값을 반환하는 함수이다. 퍼셉트론을 수식적으로 다음 아래와 같이 표현한다.

$$ \begin{equation} o=\tau (w\cdot x),\; where\, \tau (a) = \begin{cases} 1 & a>= T \\ -1 & a < T\end{cases} \end{equation}$$

$w$는 가중치 벡터로 이를 최적화 하는 것이 기계 학습에서의 `학습` 부분이다.

이를 벡터에서 행렬로 확장하면 다음 아래와 같이 쓸 수 있다.

$$ \begin{equation} o = \tau {\begin{pmatrix} w_1\cdot x \\ w_2\cdot x \\ \vdots \\ w_c \cdot x \end{pmatrix}}\end{equation}$$

$$ \begin{equation} o = \tau (Wx),\, where\, W={\begin{pmatrix} w_1^T \\ w_2^T \\ \vdots \\ w_c^T \end{pmatrix}}\end{equation}$$

퍼셉트론의 구조와 동작

기계 학습 과정에서는 분류/예측과 학습이라는 과정이 진행된다. 위의 식에서 결정된 $W$와 $x$를 통해 $o$를 계산해내는 것을 분류 혹은 예측 과정에 해당하고 주어진 $o$와 $x$를 통해 $W$를 점점 개선하는 과정은 학습에 해당한다.

퍼셉트론의 예(3차원)

선형결합과 벡터공간

서로 독립인 $n$개의 벡터 $x_i,\, i \in {1,2,\cdots n}$에 대해 각 벡터들의 상수배의 덧셈을 선형 결합이라고 하고 아래와 같은 수식으로 표현할 수 있다. $c=\sum_{i=1}^n {\alpha_i x_i}$

이때 만들어지는 공간을 벡터공간(vector space)라고 하고 $n$개의 벡터를 기저 벡터(basis vector)라고 한다. 기계 학습에서 행렬의 가장 중요한 역할은 공간 변환이다. 행렬의 공간 변환 능력으로 벡터를 부류 정보로 변환해 분류하기도 하고 원래 특징 벡터를 처리하기 유리한 쪽으로 변경하기도 한다. 

 

역행렬

우리는 행렬 $A$에 대해 어떤 행렬을 곱하여 자기 자신이 나오는 행렬을 단위행렬이라고 하고 다음 아래와 같이 표현한다.

$$\begin{equation} AI=A \end{equation}$$

반대로 어떤 행렬을 곱하여 단위행렬이 나오는 행렬을 역행렬이라고 하고 $A^{-1}$로 표기한다.

$$\begin{equation} AA^{-1} = A^{-1}A=I \end{equation}$$

모든 행렬이 역행렬을 갖는 것은 아니다. 역행렬이 존재하지 않는 행렬을 특이행렬(singular matrix)라고 한다. 아래의 성질은 서로 필요충분 조건으로 외우지는 않더라도 알고 있으면 편하다.

  • $A$는 역행렬을 갖는다. 즉, 특이행렬이 아니다.
  • $A$는 최대계수를 갖는다.
  • $A$의 모든 행은 선형 독립이다.
  • $A$의 모든 열은 선형 독립이다.
  • $A$의 행렬식(determinant)은 0이 아니다.
  • $A^TA$는 양의 정부호(positive definite) 대칭 행렬이다.
  • $A$의 고유값은 모두 0이 아니다.

흔히, 2*2 행렬 $\begin{equation}A= \begin{pmatrix} a & b \\ c & d \end{pmatrix}\end{equation}$의 행렬식은 $ad-bc$로 구할 수 있다. 차원이 높아지면 가우스-요르단 소거법(Gauss-Jordan elimination)과 같은 알고리즘을 통해 구할 수 있다.

 

행렬 분해

정수 3717에서는 특성을 파악하기 어렵지만 이를 소인수 분해하여 3*3*7*59로 나타낸다면 여러 특성들을 발견할 수 있다. 동일하게 행렬도 분해(decomposition)을 하여 정보를 분석할 수 있는데 이를 이용하여 정보를 압축하는 등 다양한 분야에서 사용되고 있다.

 

$$\begin{equation} Av=\lambda v \end{equation}$$

 

위의 식에서 $0$이 아닌 벡터 $v$를 행렬 $A$의 고유 벡터(eigen vector)라고 하며, 이 벡터에 대응하는 실수 $\lambda$를 고윳값(eigen value)라고 한다.

예를 들어, $\begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix} \begin{pmatrix} 1 \\ 1 \end{pmatrix} =3 \begin{pmatrix} 1 \\ 1 \end{pmatrix}$ 이고, $\begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix} \begin{pmatrix} 1 \\ -1 \end{pmatrix} =1 \begin{pmatrix} 1 \\ -1 \end{pmatrix}$ 이므로 $\lambda_1 = 3,\, \lambda_2 = 1,\; v_1=\begin{pmatrix} 1 \\ 1 \end{pmatrix},\,v_2=\begin{pmatrix} 1 \\ -1 \end{pmatrix}$ 이다. 

 

고윳값 분해(eigen value decomposition)

$$ A=Q\Lambda Q-1 $$

고윳값 분해는 행렬 $A$를 위의 식과같이 분해하는데 $Q$는 $A$의 고유 벡터를 열에 배치한 행렬이고, $\Lambda$는 고윳값을 대각선에 배치한 행렬이다. 고윳값 분해는 정사각행렬에만 적용가능하다. 따라서 정사각 행렬이 아닌 경우도 많은 기계 학습에서는 특잇값 분해가 사용된다. 

 

특잇값 분해(singular value decomposition, SVD)

특잇값 분해는 실수 뿐 아니라 복소수에도 적용이 가능하다. 또한, 정사각행렬이 아닌 행렬에도 적용가능하여 기계학습 분야에서 더 많이 사용된다. $n\times m$행렬$A$에서 svd를 알아보자.

$$A=U\Sigma V^T$$

위의 식에서 $U$는 왼쪽 특이행렬이라고 하고 $AA^T$의 고유 벡터를 열에 배치한 $n*n$ 행렬이다. $V$는 오른쪽 특이행렬이라고 하고, $A^TA$의 고유 벡터를 열에 배치한 $m*m$행렬이다. $\Sigma$는 $AA^T$의 고윳값의 제곱근을 대각선에 배치한 대각행렬로 크기는 $n*m$이다.

 

이번 포스트에서는 선형대수에 대한 전반적인 내용을 다루었다. 다음 포스트에서는 확률과 통계가 어떻게 기계 학습 분야에 적용되는지 알아보겠다.

 

이 포스트는 "기계 학습(오일석 지음)"을 바탕으로 작성되었습니다.