Math & Linear Algebra/Concepts

Scalar & Vector

metamong 2024. 6. 3.

1. Scalar

"단순히 변수로 저장되어 있는 숫자"

 

vector 혹은 matrices에 곱해지는 경우 해당 값에 곱한 값으로 결정

단일숫자

변수에 저장 시 소문자를 이용하여 표기

실수 & 정수 모두 가능

벡터의 크기를 맘대로 늘이는 걸 scaling한다고 해서 이 때 측정되는 크기를 scalar 라고 한다

2. Vector

intro

① 파이썬에서 주로 list로 사용된다. 숫자를 원소로 가지는 list 또는 array

 

② 아래 그림에서 벡터 x는 행벡터, xT는 열벡터

 

③ 파이썬에서는 코드로 아래와 같이 벡터를 표현할 수 있다. list 또는 np array로 여러 원소가 순서를 갖는 모음으로 표현 가능하다.

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

 

④ 벡터에 있는 원소의 개수를 벡터의 차원이라 표현

 

⑤ 벡터는 공간에서 한 점으로 나타낸다. 1차원에서는 한 점, 2차원에서는 (x,y)로 한 점으로 표현. 3차원에서는 (x,y,z)로 표현. 실제 인공지능에서는 n차원 공간에서의 한 점으로 나타낸다. / 또한 벡터는 원점으로부터 상대적 위치를 표현한다고 할 수 있다.

 

⑥ 벡터에 숫자(스칼라)를 곱해주면 길이만 변한다. 이를 스칼라곱이라 부른다. 스칼라곱 결과 벡터의 각 원소가 곱한 결과로 나온다. 곱하는 스칼라가 1보다 크면 길이가 늘어나고, 1보다 작으면 길이가 줄어든다. 만약 0보다 작으면 벡터가 반대방향이 된다.

 

⑦ 벡터끼리 같은 모양을 가지면 덧셈, 뺄셈 계산 가능. 또한 벡터끼리 같은 모양을 가지면 성분곱(Harmard product; element-wise product)을 계산할 수 있다. 아래 그림과 같이 표현 가능하다. 파이썬 코드에서는 np library에서 + - *로 편리하게 계산 가능

import numpy as np
x = np.array([1, 7, 2])
y = np.array([5, 2, 1])

print(x+y) #array([6, 9, 3])
print(x-y) #array([-4, 5, 1])
print(x*y) #array([5, 14, 2])

 

⑧ 두 벡터의 덧셈은 다른 벡터로부터 상대적 위치이동을 표현. 예를 들어서 y벡터와 x벡터의 합은 y+x인 점으로 향하는 벡터라고 할 수 있다. 두 벡터의 뺄셈은 덧셈과 동일 의미. 예를 들어 y벡터 - x 벡터는 점 y에서 반대방향으로 x만큼 이동한 점을 향하는 벡터라고 할 수 있다. 아래 그림 참조

vector norm

① 벡터의 노름이란 원점에서부터의 거리를 뜻한다. L1 노름과 L2 노름으로 나눌 수 있으며 모두 n차원에서 성립. 원점으로부터의 거리는 벡터의 크기를 뜻하며 벡터 이름 앞 뒤에 ||기호를 붙인다.

 

② L1 노름은 각 성분의 변화량의 절댓값을 모두 더한다. 즉, 좌표계의 좌표평면에서 각 좌표축을 따라 움직이는 거리의 합. 예를 들어 (3,5) 벡터가 있다면 x축을 따라서 움직인 거리 3과 y축을 따라서 움직인 거리 5의 합인 8이 L1 norm이 된다.

 

③ L2 노름은 피타고라스 정리를 이용해 유클리드 거리를 계산한다. 즉, 원점에서 해당 벡터까지의 직선 거리를 뜻한다.

import numpy as np

def l1_norm(x):
    return np.sum(np.abs(x))

def l2_norm(x):
    return np.sqrt(np.sum(x*x)) # = np.linalg.norm

 

④ 노름의 종류에 따라 기하학적 성질이 달라진다.

 

: 따라서 ML에선 각 성질들이 필요할 때가 각각 다르므로 둘 다 사용한다. 예를 들어서 L1-norm은 Robust 학습, Lasso 회귀에 사용되고, L2-norm은 Laplace 근사, Ridge 회귀에 사용된다. (자세한 건 추후 포스팅 참조)

 

⑤ 이 때 L1-norm과 L2-norm을 이용해 두 벡터 사이의 거리를 계산할 수 있다. 두 벡터 사이의 거리는 벡터의 뺄셈 사용.

 

⑥ 두 벡터 사이의 각도도 계산 가능하다. 제 2코사인 법칙에 의해 두 벡터 사이의 각도를 계산할수 있다.

 

: 두 벡터 사이의 거리는 x 벡터 또는 y 벡터를 평행이동해서 꼭짓점을 맞추어 덧셈 계산한, 즉 (x,y)의 L2 norm을 구하면 된다. 두 벡터 사이의 각도는 제2코사인법칙에 의해 L2 norm으로 위 공식대로 구하면 된다. L2 norm을 정의한 이유가 2차원이 아닌 일반적인 n차원에서도 구할 수 있게끔 만들어 놓은 식이라 생각하면 편하다.

 

아래 그림부터

 

 

 

 

  

 

 

 

 

 

→ 벡터의 element = 해당 vector의 고유한 특성

※ 벡터가 공간 상에서 갖는 위치는 해당 벡터의 고유한 특성 반영

→ 위치 정보를 이용해서 벡터 간의 유사도 계산 (위치가 비슷할수록 고유한 특성 유사 → 유사도가 크다)

→ 위치가 비슷한 정도: 거리로 계산

→  v1과 v2 서로 더 유사 (v1과 v3, 그리고 v2와 v3보다) (유사도 유클리디안 거리 L2 norm 계산 기준)

 

※ 벡터 간 유사도 별도 포스팅 참조! ※

 

 

※ L2 Norm을 이용해서는 두 vector 사이의 각도 계산 가능 (제2코사인법칙 활용)

 

※ np.linalg.norm() 사용 (코드 예시: 1개 종벡터의 L2 Norm)

2> 벡터의 내적

= "각 vector의 component를 곱한 뒤 합한 값" - 정사영(orthogonal projection)된 vector의 길이와 관련 있음

 

ex) v = [1,2,3,4] & x = [5,6,7,8]이라면 v⋅x = 1*5 + 2*6 + 3*7 + 4*8 = 70

 

→ 특징 1) 교환법칙이 적용됨 (a⋅b = b⋅a)

→ 특징 2) 분배법칙이 적용됨 (a⋅(b+c) = a⋅b+ a⋅c)

→ 특징 3) ** 벡터의 내적을 위해서는 두 벡터의 길이가 반드시 동일해야 함

 

※ 두 벡터의 덧셈은 다른 벡터로의 이동, 뺄셈은 반대 방향의 벡터를 더한 결과와 똑같음

 

※ x와 y의 내적이면 정사영된 벡터 x의 길이와 벡터 y의 길이와의 곱

 

※ 내적은 주로 두 벡터(데이터)의 유사도를 측정하는 데 보통 많이 사용함 ※

 

 

※ np.dot(a,b) 사용

a = np.array([1,2])
b = np.array([3,4])

print(np.dot(a,b)) #11

 


* 출처1) 대학원 사전교육

* 출처2) vector - https://www.youtube.com/watch?v=ArgTeYVuJUo 

'Math & Linear Algebra > Concepts' 카테고리의 다른 글

Probability fundamentals  (0) 2023.02.27
SVD(Singular Value Decomposition)  (0) 2023.02.20
eigendecomposition  (0) 2023.02.19
vector similarity  (0) 2023.02.09
Linear Equation & Linear System / Rank & det(A)  (0) 2023.02.01

댓글