[빠르게 정리하는 선형대수] 행렬(Matrix)과 역행렬, 그리고 Positive Definite
- -
행렬은 선형대수에서 수를 다룰 때 자주 사용하는 형태이며, 기본적으로 AI 모델의 코드는 tensor 기반의 PyTorch로 작성하는 경우가 많아서 행렬에 관한 명확한 이해를 바탕으로 이를 자유자재로 다룰 줄 아는 능력이 중요하다. 행렬에 관한 기본적인 내용과 함께 정방행렬일 때의 역행렬과 정방행렬이 아닐 때 사용하는 pseudo 역행렬에 관해 알아보자.
행렬 (Matrix)
행렬의 정의
행렬의 정의는 다음과 같이 정의할 수 있다.
- 벡터(vector)를 원소로 가지는 2차원 배열
- 같은 차원의 벡터를 모아 나열한 것
즉, 행렬은 Vector를 원소로 가지는 2차원 list나 array이다.
numpy
에서는 행 Vector를 기본단위로 생각한다.
행렬은
행렬의 표현
- 행렬은
로 표현된다 - 행렬의 element인 Vector는
과 같이 표현한다. - 행렬의
번째 Vector이면서, 번째 element는 으로 표현한다.
행렬의 이해
- 행렬은 행과 열이라는 두 개의 인덱스를 지니고 있다고 볼 수 있다.
- 또한
차원 공간에서의 개의 점으로 이루어진 데이터의 집합으로 이해할 수도 있다. - 즉,
번째 데이터의 번째 변수의 값을 구하는 데 사용할 수 있다. - 특정 행 또는 열을 고정하면 행벡터 또는 열벡터로 이해할 수 있다.
이러한 이해 방식은 Broadcasting이나 Element-wise Operation 등으로 데이터를 조작하는데 유용하게 사용될 수 있다.
전치행렬(Transpose Matrix)
행렬
행렬의 연산
행렬의 덧셈과 뺄셈
[출처] https://commons.wikimedia.org/wiki/File:Matrix_addition_qtl2.svg, Quartl
같은 차원을 지닌 행렬은 서로 대응되는 원소끼리 덧셈과 뺄셈이 가능하다.
행렬의 곱셈
그래서 행렬의 곱셈 연산이 성립하려면
[출처] https://commons.wikimedia.org/wiki/File:Matrix_vector_multiplication.svg, Quartl
행렬의 행의 수 행렬의 열의 수
행렬의 곱셈은 결합 법칙과 분배 법칙이 성립 가능하다.
하지만 교환 법칙은 성립하지 않아서 곱셈 순서에 따라 계산 결과가 달라지므로
numpy에서 행렬의 곱셈은 @
기호를 사용한다.
np.inner
는 두 행 벡터를 대상으로 수행되며, 수학적으로는 뒤에 오는 벡터를 전치하여 내적한 값을 반환한다.
즉, np.inner(X, Y)는
일반적으로 행렬 곱셈이 i번째 행과 j번째 열벡터의 내적이라면, numpy의 내적은 i번째 행벡터와 j번째 행벡터의 내적이다.
X = np.array([[1, -2, 3],
[7, 5, 0],
[-2, -1, 2]])
Y = np.array([[0, 1, -1],
[1, -1, 0]])
Z = np.inner(X, Y)
print(Z)
'''
출력 결과
array([[ -5, 3],
[ 5, 2],
[ -3, -1]])
'''
행렬의 스칼라배는 행렬의 모든 성분에 같은 수를 곱하는 것이며, 벡터의 스칼라배와 유사하다.
행렬의 종류
행렬명 | 정의 |
영행렬(Zero Matrix) | 행렬의 성분 전체가 0인 행렬 |
정방행렬(Square Matrix) | 행과 열의 크기가 같은 행렬 |
대각행렬(Diagonal Matrix) | 정방행렬에서 대각 성분이 모두 0이 아니고, 나머지 성분이 0인 행렬 |
단위행렬(= 항등행렬, Identity Matrix) | 대각행렬 중 대각 성분이 1로만 구성된 행렬 |
상삼각행렬(Upper Triangular Matrix) | 대각선을 기준으로 위쪽에만 원소 값이 존재하는 행렬 |
하삼각행렬(lower Triangular Matrix) | 대각선을 기준으로 아래쪽에만 원소 값이 존재하는 행렬 |
대칭행렬(Symmetric Matrix) | 대각 원소에 대하여 대칭인 원소가 서로 같은 행렬 |
벡터 공간과 행렬
행렬은 Vector 공간에서 사용되는 연산자로서 이해할 수 있다.
행렬곱셈을 통해
즉, 차원을 이동시켜주는 함수이자 수식의 역할을 할 수 있고, 이를 통해 패턴추출이나 데이터 압축 등의 기능을 수행할 수 있다.
수학의 모든 선형 변환은 행렬곱으로 계산할 수 있다.
역행렬(Inverse Matrix)
행렬식
2차원 행렬
역행렬의 의미
어떤 행렬
역행렬이 존재하려면 다음과 같은 조건을 만족해야 한다.
- 행과 열의 개수가 같아야 한다. (즉, 정방행렬이어야 한다.)
가 0이 아니다.
수학적으로 역행렬은 가우스 소거법, 여인자 전개 등의 방법을 사용하여 구할 수 있다. numpy
에서는 np.inv
를 통해 역행렬을 구할 수 있다.
유사역행렬(pseudo-inverse)
연립방적식과 유사역행렬
정방행렬이 아니어서 역행렬을 구할 수 없으면 유사역행렬 또는 무어 펜로즈(Moore-Penrose) 역행렬
행이 열보다 수가 많은지 적은지에 따라 유사역행렬의 계산 방법이 달라진다.
유사역행렬을 통해
numpy
에서는 np.linalg.pinv()
로 유사역행렬을 구할 수 있다.
선형회귀분석과 무어 펜로즈 역행렬
여기서
즉, 예측값에 최대한 근접하도록 지나가는 선형회귀식의 계수를 잘 찾는 것이 관건이다.
그러나 이를 완벽히 만족하는 해를 찾을 수는 없으므로
이때, Moore-Penrose 역행렬을 이용하면 다음과 같이 정리할 수 있다.
정리하면,
Positive Definite
먼저 Inner product에 관한 내용은 아래 글에서 자세히 다룬 바 있다.
벡터(Vector)의 정의와 Inner Product(내적) 정리
AI에서 주로 사용하는 기본적인 자료구조인 vector에 관해 알아보고, vector를 이해하는 데 필요한 norm, inner product, orthogonal 등 여러 개념을 살펴보고자 한다. 벡터(Vector)의 정의 벡터는 다음과 같이
glanceyes.com
Symmetric, Positive Definite
Symmteric 하면서 positive definite한 matrix는 ML(Machine Learning)에서 매우 중요한 역할을 하는데, 이들도 inner product로 정의될 수 있다.
이는 basis의 정의에 의해 vector space의 basis는 그 원소들의 선형결합으로 vector space 내의 존재하는 모든 vector를 나타낼 수 있어서다.
그러면 이
여기서 행렬
중요한 점은 inner product
즉, 자기 자신의 벡터에 관한 inner product는 영벡터가 아닌 이상 무조건 0보다 클 수 밖에 없는데, 위의 식을 만족할 때의
이것을 직관적으로 이해해 보자면, vector
만약 위의 정의에서
Positive Definite과 Inner Product
만약 행렬
즉, inner product는 이
Positive Definite의 성질
만약
(1)
(2)
이를 통해 자연스럽게 positive definite matrix의 eigenvalue는 모두 0보다 크다는 사실을 얻을 수 있는데, 이러한 성질을 사용한 예시는 아래 글에서 Fourier features를 다루면서 알아본 적이 있다.
Neural Tangent Kernel과 Fourier Features를 사용한 Positional Encoding (3) - Fourier Features
이 글 시리즈는 'Fourier Features Let Networks Learn High Frequency Functions in Low Dimensional Domains' 논문과 이를 이해하는 데 필요한 선수 내용을 소개한 'Neural Tangent Kernel: Convergence and Generalization in Neural Networks'
glanceyes.com
출처
1. 네이버 부스트캠프 AI Tech Stage 1 기초 수학 강의
2. Mathematics for Machine Learning, Cambridge University Press, Marc Peter Deisenroth
소중한 공감 감사합니다.