[부스트캠프 AI Tech 5기] Pre-Course : (8) 벡터가 뭐예요

araseo·2022년 12월 14일
0
post-thumbnail

📖 벡터가 뭔가요?

  • 벡터는 숫자를 원소로 가지는 리스트(list) 또는 배열(array)을 의미

x = [1, 7, 2]
x = np.array([1, 7, 2])
  • 벡터는 공간에서 한 점을 나타냄

  • 벡터는 원점으로부터 상대적 위치를 표현함

  • 벡터에 숫자를 곱해주면 길이만 변함
  • 벡터끼리 같은 모양을 가지면 덧셈, 뺄셈을 계산할 수 있음
  • 벡터끼리 같은 모양을 가지면 성분곱(Hadamard product) 계산할 수 있음
import numpy as np

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

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

📖 벡터의 덧셈을 알아보자

  • 두 벡터의 덧셈은 다른 벡터로부터 상대적 위치이동을 표현

📖 벡터의 뺄셈은?

  • 뺄셈은 벡터의 방향을 뒤집은 후 수행한 덧셈이라 이해할 수 있음

📖 벡터의 노름 구해보기

  • 벡터의 노름(norm)은 원점에서부터의 거리를 의미
  • 임의의 차원 d에 대하여 성립
  • L1-노름은 각 성분의 변화량의 절대값을 모두 더한 값
  • L2-노름은 피타고라스 정리를 이용해 유클리드 거리를 계산한 값
    • L2-노름은 np.linalg.norm을 이용해도 구현이 가능

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

📖 왜 다른 노름을 소개하나요?

  • 노름의 종류에 따라 기하학적 성질이 달라짐
  • 머신러닝에선 각 성질들이 필요할 때가 있으므로 둘 다 사용함

📖 두 벡터 사이의 거리를 구해보자!

  • L1, L2-노름을 이용해 두 벡터 사이의 거리를 계산할 수 있음
  • 두 벡터 사이의 거리를 계산할 때는 벡터의 뺄셈을 이용함
  • 뺄셈을 거꾸로 해도 거리는 같음

📖 두 벡터 사이의 각도 구해보기

  • 제2 코사인 법칙에 의해 두 벡터 사이의 각도를 계산할 수 있음
  • 내적을 이용하여 분자를 쉽게 계산할 수 있음

def angle(x, y):
	# 내적은 np.inner을 이용하여 계산
	v = np.inner(x,y) / (l2_norm(x) * l2_norm(y))
    theta = np.arccos(v)
    return theta

📖 내적은 어떻게 해석할까?

  • 내적은 정사영(orthoganal projection)된 벡터의 길이와 관련이 있음
    • Proj(x)는 벡터 y로 정사영된 벡터 x의 그림자를 의미
  • Proj(x)의 길이는 코사인 법칙에 의해 ||x||cosθ가 됨
  • 내적은 정사영의 길이를 벡터 y의 길이 ||y||만큼 조정한 값임
  • 내적은 두 벡터의 유사도(similarity)를 측정하는데 사용 가능함

<이 게시물은 임성빈 교수님의 '벡터가 뭐예요?' 강의 자료를 참고하여 작성되었습니다.>

본 포스트의 학습 내용은 [부스트캠프 AI Tech 5기] Pre-Course 강의 내용을 바탕으로 작성되었습니다.
부스트캠프 AI Tech 5기 Pre-Course는 일정 기간 동안에만 운영되는 강의이며,
AI 관련 강의를 학습하고자 하시는 분들은 부스트코스 AI 강좌에서 기간 제한 없이 학습하실 수 있습니다.
(https://www.boostcourse.org/)

profile
AI를 공부하고 있는 학생입니다:)

0개의 댓글