[부스트캠프] AI Math_벡터
벡터
- 벡터는 숫자를 원소로 가지는 리스트 또는 배열이다.
- 원소의 개수가 벡터의 차원이다.
- 벡터는 공간에서 한 점을 나타낸다. (n차원)
- 벡터는 원점으로부터 상대적 위치를 표현한다.
- 벡터에 숫자를 곱해주면(=스칼라곱) 길이만 변한다. 1보다 크면 길이가 늘어나고, 1보다 작으면 길이가 줄어든다. 0보다 작으면 반대 방향이 된다.
벡터의 연산
- 벡터끼리 같은 모양을 가지면 덧셈, 뺄셈, 성분곱을 계산할 수 있다. (다른 모양이면 불가능)
- 덧셈, 뺄셈, 성분곱 모두 원소끼리 각각 연산하면 된다.
벡터의 덧셈, 뺄셈
- 두 벡터의 덧셈과 뺄셈은 다른 벡터로부터 상대적 위치이동을 표현한다.
벡터의 노름(norm)
- 벡터의 노름은 원점에서부터의 거리를 말한다.
- 벡터의 노름 기호 : ∥∥
- 임의의 차원 d에 대해 성립한다.
L1-노름
- 각 성분의 변화량의 절대값을 모두 더한다.
L2-노름
- 피타고라스 정리를 이용해 유클리드 거리를 계산한다.
-> 노름의 종류에 따라 기하학적 성질이 달라져 목적에 따라 다르게 사용할 수 있게 둘 다 사용한다.
두 벡터 사이의 거리
- 두 벡터 사이의 거리를 계산할 때는 벡터의 뻴셈과, L1, L2- 노름을 이용해 구할 수 있다.
- 뺄셈을 거꾸로 해도 거리는 같다.
- || y - x || = || x- y ||
두 벡터 사이의 각도
- L2-노름을 이용해서 각도를 구할 수 있다. (L2 노름만 가능)
- 제2 코싸인 법칙에 의해 두 벡터 사이의 각도를 계산할 수 있다. (임의의 D차원에서도 가능)
- || x - y ||2 = || y - x ||2
- 제2 코싸인 법칙 연산 과정에서 분자를 쉽게 계산할 수 있는 방법은 내적이다.
내적: <x,y>=i=1∑d xiyi (각 원소의 곱의 합)
2<x,y> = 2||x||||y||cosθ = ||x||2 + ||y||2 - ||x-y||2
cosθ = <x,y> / (||x||||y||)
벡터의 내적
- 내적은 정사영된 벡터의 길이와 관련이 있다.
- Proj(x)는 벡터 y로 정사영된 벡터 x의 그림자를 의미한다.
- Proj(x)의 길이는 코사인법칙에 의해 ∣∣x∣∣cosθ가된다.
- 내적은 정사영의 길이를 벡터 y의 길이 ||y||만큼 조정한 값이다.
-> <x,y> = ||x||||y||cosθ (L2노름)
+ 내적은 두 벡터의 유사도를 측정하는 데 사용 가능하다.
L1 노름, L2 노름, L2 노름을 활용한 두 벡터 사이의 각도 구하는 코드
import numpy as np
def l1_norm(x):
x_norm = np.abs(x)
x_norm = np.sum(x_norm)
return x_norm
def l2_norm(x):
x_norm = x*x
x_norm = np.sum(x_norm)
x_norm = np.sqrt(x_norm)
return x_norm
def angle(x, y):
v = np.inner(x, y) / (l2_norm(x) * l2_norm(y))
theta = np.arccos(v) #요소별 아크 코사인
return theta
회고
벡터의 개념과 원점에서부터의 거리를 측정하는 방식인 노름을 배웠다.
노름의 종류는 기하학적 성질에 따라 달라지는데, 이 부분 머신러닝에서 다룰 때 더 깊이 공부해야겠다!
제2 코사인 법칙으로 두 벡터 사이의 각도를 구할 수 있는데 여기서 내적을 활용할 수 있다.
퀴즈 후기
두 벡터 x, y가 주어지면 <x, y> / ||x|| * ||y|| (l2노름) 값으로 코싸인 값을 알아내어 두 사이의 각도를 구할 수 있다.