AI/Math

[부스트캠프] AI Math_벡터

밍츠 2022. 9. 9. 16:57

벡터

- 벡터는 숫자를 원소로 가지는 리스트 또는 배열이다.

- 원소의 개수가 벡터의 차원이다.

- 벡터는 공간에서 한 점을 나타낸다. (n차원)

- 벡터는 원점으로부터 상대적 위치를 표현한다.

- 벡터에 숫자를 곱해주면(=스칼라곱) 길이만 변한다. 1보다 크면 길이가 늘어나고, 1보다 작으면 길이가 줄어든다. 0보다 작으면 반대 방향이 된다.

 

벡터의 연산

- 벡터끼리 같은 모양을 가지면 덧셈, 뺄셈, 성분곱을 계산할 수 있다. (다른 모양이면 불가능)

- 덧셈, 뺄셈, 성분곱 모두 원소끼리 각각 연산하면 된다.

 

벡터의 덧셈, 뺄셈

- 두 벡터의 덧셈과 뺄셈은 다른 벡터로부터 상대적 위치이동을 표현한다.

 

벡터의 노름(norm)

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

- 벡터의 노름 기호 :

- 임의의 차원 d에 대해 성립한다.

 

L1-노름

- 각 성분의 변화량의 절대값을 모두 더한다.

L2-노름

- 피타고라스 정리를 이용해 유클리드 거리를 계산한다.

-> 노름의 종류에 따라 기하학적 성질이 달라져 목적에 따라 다르게 사용할 수 있게 둘 다 사용한다.

 

두 벡터 사이의 거리

- 두 벡터 사이의 거리를 계산할 때는 벡터의 뻴셈과, L1, L2- 노름을 이용해 구할 수 있다.

- 뺄셈을 거꾸로 해도 거리는 같다.

- || y - x || = || x- y ||

 

두 벡터 사이의 각도

- L2-노름을 이용해서 각도를 구할 수 있다. (L2 노름만 가능)

- 제2 코싸인 법칙에 의해 두 벡터 사이의 각도를 계산할 수 있다. (임의의 D차원에서도 가능)

제2 코싸인 법칙

- || x - y ||2 = || y - x ||2

- 제2 코싸인 법칙 연산 과정에서 분자를 쉽게 계산할 수 있는 방법은 내적이다.

내적: <x,y>=i=1∑d​ xi​yi​ (각 원소의 곱의 합)

제2 코사인법칙으로 내적 증명

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)    xcosθ.

- 내적은 정사영의 길이를 벡터 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노름) 값으로 코싸인 값을 알아내어 두 사이의 각도를 구할 수 있다.