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

[AI math] 벡터와 행렬

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

벡터

숫자를 원소로 가지는 리스트 또는 배열로 x=[172] 라는 벡터가 있을 때 이를 열벡터라고 하며

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

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

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

 

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

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

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

Norm

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

L1 norm 과 L2  norm이 있으며

 

L1=||x||1=id|xi| 

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

 

L2=||x2||=id|xi|2

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

 

d=(a1b1)2+(a2b2)2

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

 

두 벡터 사이의 거리 구하기

L1 norm, L2 norm 을 통해 계산 가능하며 벡터의 뺄셈으로 구한다.

 

두 벡터 사이의 각 구하기

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

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

cosθ=||a||22+||b||22||ab||222||a||2||b||2 의 제 2 코사인 법칙을 통해 구할 수 있다.

여기서 이 식은

cosθ=<a,b>||a||2||b||2 로 변경될 수 있으며 <a,b>를 a,b 벡터의 내적이라고 한다.

<a,b>=i=1daibi

 

벡터의 내적

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

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

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

 

행렬

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

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

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

 

행렬의 곱셈

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

 

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

 

행렬식

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

일반 행렬과 역행렬의 곱은 AA1=A1A=I의 식을 만족하며

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

nm,A+=(ATA)1AT

nm,A+=AT(ATA)1이며

 

n > m 일 경우 A+A=I가 성립하며

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

 

파이썬을 통한 행렬의 계산

np.inner

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

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

역행렬을 구할 수 있는 경우

np.linalg.inv

를 통한 역행렬 A1을 구하며

 

역행렬을 구할 수 없는 경우

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