네이버 부스트캠프 학습 정리/1주차

[AI math] 벡터와 행렬

AI쟁이J 2023. 3. 11. 16:08

벡터

숫자를 원소로 가지는 리스트 또는 배열로 $$x = \begin{bmatrix}1\\7\\2 \end{bmatrix}$$ 라는 벡터가 있을 때 이를 열벡터라고 하며

파이썬에서 이를 표현할 경우

x = [1, 7, 2]
x = np.array([1, 7, 2])

로 표현한다. 보통 넘파이 라이브러리를 통해 다루는 일이 많기 때문에 후자의 방식으로 표기한다.

 

벡터는 공간에서의 한 점을 나타내며 원점으로부터의 상대적 위치를 표현함

벡터에 스칼라(상수)를 곱하는 경우 길이가 변하며

두 벡터의 덧셈은 다른 벡터로부터의 상대적 위치이동을 표현, 뺼셈 역시도 같음

Norm

벡터의 노름은 원점에서부터의 거리를 말함.

\(L_1\) norm 과 \(L_2\)  norm이 있으며

 

$$L_1 = ||x||_1 = \sum_i^d|x_i|$$ 

으로 \(L_1\) norm은 각 성분의 변화량의 절대값을 모두 더한다.

 

$$L_2 = ||x_2|| = \sqrt{\sum_i^d|x_i|^2} $$

으로 \(L_2\) norm은 피타고라스 정리를 통한 유클리드 거리를 계산한다.

 

\(d = \sqrt{(a_1 - b_1)^2 + (a_2 - b_2)^2}\)

의 d를 유클리드 거리라고 하며 이를 통해 \(L_2\) norm을 계산한다.

 

두 벡터 사이의 거리 구하기

\(L_1\) norm, \(L_2\) norm 을 통해 계산 가능하며 벡터의 뺄셈으로 구한다.

 

두 벡터 사이의 각 구하기

 \(L_2\) norm 을 통해서만 구할 수 있으며, 제 2 코사인 법칙에 의해 계산한다.

위의 a, b 벡터 사의의 각을 구하기 위해선

\(cos\theta = \frac{||a||_2^2 + ||b||_2^2 - ||a - b||_2^2}{2||a||_2||b||_2}\) 의 제 2 코사인 법칙을 통해 구할 수 있다.

여기서 이 식은

\(cos\theta = \frac{<a,b>}{||a||_2||b||_2}\) 로 변경될 수 있으며 <a,b>를 a,b 벡터의 내적이라고 한다.

\(<a,b> = \sum_{i=1}^da_ib_i\)

 

벡터의 내적

내적은 정사영된 벡터의 길이와 관련 있으며

위 그림에서의 \(|a|cos\theta\)를 \(Proj(a)\)라고 하며 정사영 된 벡터의 길이라고 한다.

이 \(Proj(a)\)를 벡터 b의 길이 \(||b||\)만큼 조정한 값을 a,b의 내적이라고 한다.

 

행렬

- 벡터를 원소로 가지는 2차원 배열

- 행(row)과 열(column)이라는 인덱스를 가지며 행렬의 특정 행(열)을 고정하면 행(열)벡터라 부름

- 벡터가 공간에서 한 점을 의미한다면 행렬은 여러 점들을 나타낸다.

 

행렬의 곱셈

위 그림의 방식으로 곱셈이 이루어짐.

 

즉 행렬 곱셈은 i번째 행벡터와 j번째 열벡터 사이의 내적을 성분으로 가지는 행렬을 계산함.

 

행렬식

어떤 행렬 A의 연산을 거꾸로 되돌리는 행렬을 역행렬이라고 부르며 \(A^-1\)라 표기한다. 역행렬은 행과 열 숫자가 같으며 행렬식이 0이 아닌 경우에만 계산할 수 있다.

일반 행렬과 역행렬의 곱은 \(AA^{-1} = A^{-1}A = I\)의 식을 만족하며

만약 역행렬을 계산할 수 없는 상황에선 유사역행렬 또는 무어-펜로즈 역행렬 \(A^+\)를 사용한다.

\(n\geq m, A^+ = (A^TA)^{-1}A^T\)

\(n\leq m, A^+ = A^T(A^TA)^{-1}\)이며

 

n > m 일 경우 \(A^+A = I\)가 성립하며

n < m 일 경우 \(AA^+ = I\)만 성립한다.

 

파이썬을 통한 행렬의 계산

np.inner

를 통해 내적을 구할 수 있으며

행렬의 내적을 구할 경우에는 수학에서의 내적과 달리 i번째 행벡터와 j번째 행벡터 사이의 내적을 성분으로 가지는 행렬을 구함.

역행렬을 구할 수 있는 경우

np.linalg.inv

를 통한 역행렬 \(A^{-1}\)을 구하며

 

역행렬을 구할 수 없는 경우

np.linalg.pinv

를 통해 역행렬 \(A^+\)를 구한다.

 

'네이버 부스트캠프 학습 정리 > 1주차' 카테고리의 다른 글

1주차 회고  (1) 2023.03.12
[Python] arg/configparser  (0) 2023.03.11
[Python] OOP  (0) 2023.03.10
[Python] Pythonic Code  (0) 2023.03.10
[Python] Function  (0) 2023.03.10