출처: 네이버 부스트코스 인공지능(AI) 기초 다지기 3. 기초 수학 첫걸음
<목차>
1. 벡터
2. 벡터의 노름(norm)
- L1, L2
3. 두 벡터 사이의 각도 구하기
- 제 2 코사인 법칙 활용
- 내적 : 정사영된 벡터의 길이
벡터란
- 숫자를 원소로 가지는 list 또는 array
- 공간에서의 한 점 (1차원 공간인 수직선에서의 한 점, 2차원 공간인 좌표 평면에서의 한 점, 3차원 공간의 한 점, n차원 공간의 한 점)
- 원점으로부터 상대적 위치(화살표)
x = [1,7,2]
x = np.array([1,7,2])
x= [x1, x2, ..., xd]에서 d는 벡터의 차원임
- 벡터의 숫자를 곱해주면 길이만 변함 (스칼라 곱이라고 부름)
- 벡터끼리 같은 모양을 가지면 덧셈, 뺄셈을 할 수 있고, 성분곱(Hadamard product)을 계산할 수 있음
벡터의 노름(norm) : 원점에서부터의 거리
- L1 : 각 성분의 변화량의 절대값을 모두 더한 값 (ex. Robust 학습, Lasso 회귀)
- L2 : 피타고라스 정리를 이용한 유클리드 거리 (ex. Laplace 근사, Ridge 회귀)
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
- 노름이 다른 이유는 '노름의 종류에 따라 기하학적 성질이 달라짐. 머신러닝에서 각 성질이 필요할 때가 있어서 둘 다 사용함'
두 벡터 사이의 각도 구하기 : 제 2 코사인 법칙 활용
분자를 쉽게 계산하기 위해 내적 사용
내적: 두 벡터들의 연산들의 성분곱을 더함
def angle(x,y):
v = np.inner(x,y) / (l2_norm(x) * l2_norm(y)) #np.inner을 사용해 내적계산
theta = np.arccos(v)
return theta
각도를 계산하는 것은 l2 norm에서만 가능하다
내적을 어떻게 해석할까?
내적은 정사영(orthogonal projection)된 벡터의 길이와 관련있다
proj(x) 는 코사인 법칙에 의해 ||x|| cosΘ 이다
내적은 정사영의 길이를 벡터 y의 길이 ||y||만큼 조정한 값이다