본문 바로가기

딥러닝 & 머신러닝/머신러닝 지식

선형대수학 짧막 지식 for 면접

# 머신러닝(또는 딥러닝)에서 선형대수학의 의미

 

행렬과 벡터를 이용해 수많은 데이터를 한번에 묶어 계산을 쉽게 도와준다. 묶인 데이터의 고유 특징들을 알려줌으로써 겉으로 보기 힘든 다양한 특성을 알려줌. 벡터라는 것은 크기와 방향을 가진 물리량. 머신러닝에서는 데이터 샘플들을 각각의 특징 벡터로 나타낸다.

 

# 머신러닝(또는 딥러닝)에서 행렬이 어떻게 쓰이는가?

 

특징 벡터로 나타내어진 데이터 샘플들을 담아서, 데이터를 간결하게 표현하는데 쓰인다. (ex. 4개의 특징을 가진 붓꽃 샘플 150개 → (150, 4) 행렬) 또는 신경망의 가중치나, 데이터의 상관관계를 나타내는 공분산 표현에도 쓰인다.

 

# 기저벡터(basis)의 의미

 

어떤 벡터 공간을 구성하는 벡터들의 기본재료, 기준. n차원에 존재하는 다른 모든 벡터들을 n개의 기저벡터에 적절한 스칼라 값을 곱함으로써 얻을 수 있음. (ex. xy 좌표계, 즉 2차원의 모든 벡터들은 해당 좌표계의 기저벡터 (1,0), (0,1)로 표현할 수 있음)

 

# 선형 결합(linear combination)의 의미

 

위에서 말한, n차원에 존재하는 n개의 기저벡터들을 스케일링하고 더하는 것. 스케일링(scaling)이란 단순히 벡터를 얼마나 잡고 늘릴지 혹은 줄일지 정하는 것. 벡터 공간은 기저벡터들의 선형결합으로 이루어진 벡터들이 존재하는 공간.

 

# span의 의미

 

주어진 벡터들의 조합으로 나타낼 수 있는 결과 벡터들의 집합을 span이라고 한다. 벡터들의 선형 결합으로 벡터 공간의 벡터를 만드는 행위를 벡터들로 벡터 공간을 span한다고 한다.

 

# 선형 종속(linear dependent)의 의미

 

n개의 벡터 중 어느 한 벡터라도 다른 벡터들의 선형 결합으로 표현이 된다면 이를 선형 종속이라고 한다. 이를 다른 말로 한다면, n개의 벡터 선형 결합에 쓰인 스케일링 팩터(factor)가 모두 0이 아닌데도 불구하고 선형 결합의 결과가 0으로 나타난다면, 이를 선형 종속이라고 할 수 있다.

 

# 선형 독립(linear independent)의 의미

 

n개의 벡터 선형 결합에 쓰인 스케일링 팩터(factor)가 모두 0일때만 선형 결합의 결과가 0으로 나오는 경우를 선형 독립이라고 한다. 즉, n개의 벡터 중 어느 한 벡터라도 다른 벡터들로 표현할 수 없을 때를 선형 독립이라고 한다.

 

# 기저벡터의 의미 다시 생각하기

 

전체 벡터 공간을 span하는 "선형 독립"적인 벡터들의 집합이 해당 벡터 공간의 기저다. 벡터 공간을 구성하는 벡터들이 서로 선형 독립인 경우에 그 벡터들을 기저라고 한다. 이때, 벡터 공간을 span하는 벡터들이 서로 선형 독립적이지 않을 수도 있는데, 그때 그 벡터들의 집합을 generating set이라고 한다. 그리고 기저는 그 generating set의 최소 단위라고 할 수 있다.

 

# 선형 변환(linear transformation)의 의미

 

변환은 단지 함수를 다르게 부르는 말이라고 생각하자. 선형대수학 관점에서, 변환이란 특정 벡터를 다른 벡터로 바꾸는 그 무엇이다. 어떤 변환이 입력 벡터를 출력 벡터로 바꾼다면, 그것은 입력 벡터를 이동시켜서 출력 벡터를 만드는 것으로 생각할 수 있다. 변환은 다양한 형태로 일어날 수 있지만, 선형대수학에선 "선형적으로만" 변환이 일어난다. 즉, 선형 변환이란, 선형 결합을 유지하면서 어떤 벡터를 다른 벡터로 바꾸는 함수다.

 

# 행렬을 통해 선형 변환을 수치적으로 설명하는 방법

 

두 기저 벡터가 어떻게 변하는지만 알면 된다. 나머지 벡터들은 기저벡터들로 구성 가능하기 때문이다. 

 

 

즉, 선형 변환을 해주는 행렬의 첫번째 열은 첫번째 기저벡터의 종착점, 두번째 열은 두번째 기저벡터의 종착점이 된다. 즉, 행렬은 어떤 벡터를 선형 변환하는 과정을 보여주는 방법이며, 선형 변환의 결과에 따른 벡터는 해당 공식을 계산하면 된다.

 

 

즉, 행렬을 볼 때마다 공간의 어떤 변환이라는 생각을 갖자. 기저벡터가 선형 변환에 의해 어떻게 옮겨졌는지를 알면 그 선형 변환이 무엇인지 파악할 수 있다. 다시 말하면, 정사각 행렬은 기저벡터의 집합이라고 생각할 수 있다. 따라서 벡터에 행렬을 곱하는 건 수식적으로 그 벡터를 선형 변환하는 것과 같다.

 

# 행렬곱의 의미

 

두 행렬 A, B의 곱은 기하학적으로 한 변환을 적용하고 나서 다른 변환을 적용한 것과 같다. 즉, 행렬곱은 공간의 연속된 변환이다. 행렬곱이 한 변환을 적용한 후 다른 변환을 적용하는 것이라고 생각하면, 행렬의 결합법칙 증명도 쉽다.

(AB)C = A(BC) : 그냥 동일한 세 변환을 순서대로 적용하는 것과 같다.

 

# 행렬식(determinant)의 의미

 

어떤 벡터 공간 안에 있는 물체가, 공간 변환에 의해서 얼마나 확장되고 축소되는지 계산해보자. 즉, 특정 지역의 크기를 증가/감소시키는 factor 값을 측정해보자. 

 

 

즉, 하나의 단위 정사각형의 면적이 어떻게 변하는지만 알면 공간 상 어떤 지역이 어떻게 변할 지 알 수 있게 된다. 이 scaling factor는 선형변환에 의한 영역의 변화를 나타내는 factor로써, 행렬식(determinant)로 부른다.

 

ex) det(A) = 3 : 행렬 A에 의해 특정 영역 크기가 3배만큼 증가, det(B) = 0.5 : 행렬 B에 의해 특정 영역 크기가 1/2로 줄음

      det(C) = 0 : 행렬 C에 의해 모든 공간이 찌부러져 한 직선 또는 0이 됨. 어느 영역이든 크기가 0이 됨. 역행렬에서 중요.

 

# Ax = v를 푸는 것의 의미

 

행렬 A는 어떤 선형 변환을 나타낸다. 따라서 Ax = v를 푸는 것은 행렬 A에 의한 변환 이후 벡터 v가 되는 벡터 x가 있는지를 찾는 것. 이때 Ax = v를 푸는 시작점은 A가 공간을 축소시키는지 아닌지를 보는 것이다. 즉, det(A)가 0인지 아닌지를 확인한다.

 

i) det(A) != 0인 경우

: 이때 특정 벡터 v로 변할 수 있는 벡터 x는 항상 하나만 있음.

x에 공간 변환 A를 적용했더니 v가 되었다 = 공간 변환 A를 v에 반대로 적용하면 x를 찾을 수 있다.

→ 역행렬 A-1의 등장. 벡터 v에 역변환을 적용한다 = 방정식을 푼다.

따라서 det(A) != 0 ↔ 역행렬 有, Ax = v → x = A-1v

 

ii) det(A) = 0의 경우

: A-1이 없다. 즉 뭉개진 차원을 다시 원래대로 돌릴 수 없다. 이는 다음에서 설명할, 한 행렬의 rank 갯수와도 연관이 있다.

 

# rank란?

 

행렬로 인해 변환된 공간의 차원 수를 의미한다. 즉, 행렬 A에 의해 공간이 변환된다면, 그 행렬 A의 기저벡터 수를 의미한다. nxn 행렬의 경우 최대 rank는 n인데, 즉, 기저 벡터들의 선형 결합으로 온전한 n차원 공간을 만든다는 의미이다. 이를 full rank라고 하고, full rank일 경우 역행렬이 존재하며, 그러므로 행렬에 의해 변환된 공간을 다시 원래 차원의 공간으로 되돌릴 수 있게 된다.

 

만약 full rank가 아니라면, 즉 기저 벡터가 n개가 아니라면, 행렬 A에 의해 공간 변환이 수행되었을 때 n보다 작은 차원으로 공간이 수축한다는 뜻. 그러면 다시 원래 차원의 공간으로 되돌릴 수 없다는 것이므로 역행렬이 없다는 것. 그리고 이것은 결국 공간 변화 factor인 det(A)의 값도 0이라는 뜻이다.

 

# Column space(열공간)란?

 

행렬 A에 의한 공간 변환의 결괏값, 즉 Av의 가능한 결괏값들의 집합을 그 행렬의 column space라고 한다. 행렬에 의한 공간 변환 후 기저 벡터들의 선형 조합은 가능한 모든 결과 공간을 알려준다. 즉 column space란, 행렬의 열들의 확장 공간이다. 

 

한편, rank의 정의는 어떤 행렬에 의해서 변환된 공간의 차원 수를 의미하므로, "rank = column space의 차원 = 행렬 A의 기저 벡터 수 = 행렬 A를 이루는 선형 독립적인 열벡터의 갯수"이다. column space의 구체적인 기저 벡터 각각은 가우스 소거법을 통해 축약된 행렬 A의 pivot column들이다. pivot column이란 어떤 행렬의 원소값이 처음으로 0이 아닌 것이 등장하는 열을 뜻한다.

 

column space는 Col(A), Im(A)로 쓸 수 있다. column space는 그것들의 기저 벡터를 x, y, z라고 하면, Col(A) = Im(A) = span{[x, y, z]}로 쓸 수 있다.

 

# Null space(영공간) 또는 Kernel(커널)이란?

 

full rank를 갖는 변환에서 원점으로 변하는 벡터는 영벡터 뿐이다. 행렬 A를 이루는 각각의 열벡터가 서로 선형 독립인 기저 벡터이기 때문이다. 그러나 full rank가 아니라면, 즉 변환 결과 원래보다 더 작은 차원으로 축소된다면 영벡터를 만들 수 있는 수많은 벡터 조합이 형성된다. 즉, 행렬 A를 이루는 각각의 열벡터가 서로 선형 종속이 되어버린다.

 

만약 3차원 공간이 "2차원 공간"으로 축소된다면, 즉 3x3 행렬의 rank가 2라면, 원점으로 이동하는 "1차원 공간(선)"의 수많은 벡터들이 존재한다. 만약 3차원 공간이 "1차원 공간"으로 축소된다면, 즉 3x3 행렬의 rank가 1이라면, 원점으로 이동하는 "2차원 공간(평면)"의 수많은 벡터들이 존재한다.

 

즉, 원점으로 이동하는 벡터들의 집합을 그 행렬의 null space 또는 kernel이라고 한다. 다시 말해, null이 되는 모든 벡터의 공간이다. null space 안에 있는 모든 벡터를 원점으로 뭉겐다는 뜻. 수식적으로는 Ax = 0을 만족하는 벡터 x들로 span된 벡터 공간을 뜻한다.

 

null space는 Nul(A), ker(A)로 쓸 수 있다. null space는 그것들의 기저 벡터를 x, y, z라고 하면, Nul(A) = Ker(A) = span{[x, y, z]}로 쓸 수 있다. 만약 null space의 차원이 0이라면, null space안의 벡터는 영벡터 뿐이므로 Nul(A) = {0}이다. ø이 아니다.

 

# rank-nullity theorm이란?

 

nxn 행렬 A가 있을 때, dim(Col(A)) + dim(Nul(A)) = n이 되는 것을 의미한다. full rank인 경우 dim(Nul(A)) = 0이 되며, rank 즉, dim(Col(A))의 최솟값은 1이다. null space를 설명할 때 큰따옴표로 표시한 차원들을 봐도 rank-nullity theorm을 이해할 수 있다.

 

ex. 만약 3차원 공간이 "2차원 공간"(coulmn space)으로 축소된다면, 즉 3x3 행렬의 rank가 2라면, 원점으로 이동하는 "1차원 공간(선)"(null space)의 수많은 벡터들이 존재한다.

 

# 고유값(eigenvalue)과 고유벡터(eigenvector)

 

행렬에 의해 공간의 선형 변환이 일어나면 해당 벡터 공간 상의 벡터들은 대부분 크기와 방향이 모두 바뀌는데, 어떤 벡터들은 크기만 바뀐다. 그런 벡터들을 고유벡터라 하고, 크기가 바뀌는 정도를 고유값이라고 한다. 이때 고유벡터들은 서로 선형 독립이다. 따라서 nxn 행렬 A의 각각의 고유벡터들은 n차원 공간의 기저가 될 수 있다.

 

수식적으로는 Ax = λx를 만족하는 벡터 x가 고유벡터이며, λ는 고유값이다. Ax = λx → (A-λI)x = 0과 같으므로, 고유벡터 x가 존재한다는 뜻은 곧 행렬 A-λI의 null space의 차원이 0이 아니며, 따라서 해당 행렬의 rank도 full rank가 아니다. 그렇기에 행렬 A-λI를 이루는 열벡터들은 서로 선형 종속이다. 또한 해당 행렬의 det(A-λI) 값이 0이며, 역행렬이 존재하지 않는다.

 

(A-λI)x = 0의 해가 곧 고유벡터이므로, dim(Nul(A-λI))의 값이 곧 고유벡터 갯수다. 그리고 고유값이 λ인 고유벡터들로 span한 subspace를 고유 공간(eigenspace)라고 한다. 또한 고유값 λ들의 집합을 eigenspectrum이라고 한다. 

 

행렬 A의 det(A)는 고유값들의 곱, tr(A), 즉 A의 대각 성분들의 합은 고유값들의 합으로 나타낼 수 있다.

 

# 고유값 분해 (Eigendecomposition)

 

행렬 A의 고유벡터를 열에 배치한 행렬 V와 행렬 A의 고유값 λ로 이루어진 대각 행렬 λ 사이에는 다음 관계가 성립한다.

이때 대각 행렬이란 행렬의 대각 성분을 제외한 나머지 성분들은 모두 0인 행렬을 말한다.

 

 

따라서 고유값 분해를 활용하면 이렇게 행렬의 n제곱 계산을 완화시킬 수 있다.

 

그리고 D = P-1AP와 같이 되는 것을 대각화(diagonalization)이라고 하는데, nxn 행렬 A의 고유벡터는 n개가 나오고 고유값은 n개보다 작거나 같게 나올 때 행렬을 대각화할 수 있다.

 

이처럼 고유값은 n개보다 작아도 고유벡터는 n개가 될 수 있는데, 이를 non-defective 하다 하고 대각화 가능하다.

그러나 고유값이 n개보다 작은데 고유벡터도 n개보다 작으면 이를 defective 하다 하고 대각화는 불가능하다. 대각화가 불가능해지므로 결국 고유값 분해도 불가능해진다.

 

# 특이값 분해 (Singular Value Decomposition, SVD)

 

만약 행렬 A가 정사각 행렬이 아닌 mxn 행렬이면 특이값 분해를 한다. mxn 행렬 A = UΣV^T 에서

 

U = AA^T의 고유벡터를 열에 배치한 mxm 행렬

Σ = AA^T의 고유값의 제곱근, 즉 특이값을 대각 성분에 배치한 mxn 행렬

V = A^TA의 고유벡터를 열에 배치한 nxn 행렬

 

이다. 이렇듯 임의의 행렬을 특이값 분해할 수 있기에, 고유값 분해의 일반화 버전이라고 할 수 있다. 특이값 분해를 통해 행렬을 분해한다면, 그 결괏값을 활용해 PCA 등의 차원 축소 또는 이미지 복원 등을 할 수 있다. 추천 시스템 등에도 이용된다.

 

 

mxn 행렬 A의 특이값 분해를 시각화하면 위와 같다. 그리고 우리는 Σ에 있는 행렬 A의 특이값 중 일부인 P개만 사용해서 A를 부분 복원할 수 있고, 이는 특이값 분해의 큰 장점 중 하나다.

 

 

# 행렬의 고유값 분해와 특이값 분해의 장점

 

특이값 분해는 고유값 분해의 일반화 버전이므로 그냥 고유값 분해를 생각하자.

 

행렬의 고유값과 고유벡터를 분석하면 행렬의 핵심 특징을 더욱 쉽게 알 수 있다. 만약 어떤 이미지를 나타내는 행렬의 고유값(or 특이값)과 고유벡터를 알고 있다면, 그 정보만을 활용해 이미지도 복원할 수 있다.

 

예를 들어, 만약 3x3 행렬을 고유값 분해해서 3개의 고유값이 나왔다고 하면, 가장 중요한 고유값 2개만 골라서 원 행렬의 차원을 축소시킬 수도 있고, 가장 중요한 고유값 2개로 데이터의 복원을 할 수도 있다.

 

고유값 분해나 특이값 분해 같은 행렬 분해는 주성분 분석(PCA)과 같은 차원 축소 기술에 쓰이고, 고유값 분해를 통해 n 제곱 계산을 완화함으로써, 행렬 계산이 많은 머신러닝과 딥러닝에서의 계산량을 대폭 줄여주고, 그에 따라 계산 시간 및 자원 사용량이 많이 줄어든다.

 

# symmetric matrix (대칭 행렬)

 

정사각 nxn 행렬 A가 그것의 transpose 형태인 A^T와 같으면, 즉, A = A^T가 성립하면 A는 symmetric 행렬이다.

 

# positive definite matrix (양의 정부호 행렬)

 

정사각 행렬 A가 symmetric일 때, 0이 아닌 모든 벡터 x에 대해 x^TAx > 0이면 A를 positive definite 행렬이다. x^TAx ≥ 0이면 A는 positive semidefinite 행렬이다. 이때 symmetric이란 말은 붙이거나 붙이지 않는다. 만약 x^TAx < 0이면 A는 negative definite 행렬이다.

 

# orthogonal matrix (직교 행렬)

 

A^TA = AA^T = I의 결과가 나오는 행렬을 orthogonal matrix라고 한다.

 

# Gram-Schmidt Orthogonalization (그람-슈미드 과정)

 

어떤 벡터 공간 V의 기저 b_1, ... , b_n에서 orthogonal basis(직교 기저) u_1, ... , u_n을 찾는 과정이다. orthogonal한 기저를 강제로 찾는 과정이라고도 볼 수 있다. 당연히 원래 basis vector 수와 orthogonal basis vector의 갯수는 같다. orthonormal basis(ONB)를 찾기 위해선 구해놓은 orthogonal basis들을 각각의 크기로 나누어주면 된다.