[PyTorch] Tensor의 벡터 노름과 유사도

beaver.zip·2024년 8월 11일
0
post-thumbnail

노름(Norm)

  • 노름판 그런 거 아님
  • 벡터(=1-D Tensor)의 크기 또는 길이를 측정하는 방법이라 할 수 있음
  • 벡터 공간을 어떤 양의 실수 값으로 mapping하는 함수와 유사
  • LpL_p 노름의 수식 표현, p1p\geq1

L1 노름


  • 1-D Tensor에 포함된 요소의 절대값의 합
  • 뉴욕 맨해튼의 격자형 도로망과 유사하다고 해서 맨해튼 노름이라고도 부름
  • torch.norm(tensor, p=1)

L2 노름


  • 1-D Tensor에 포함된 요소의 제곱합의 제곱근
  • 유클리드 공간에서 두 점의 최단 거리 측정법과 유사해 유클리드 노름이라고도 부름
  • torch.norm(tensor, p=2)

L∞ 노름

  • 1-D Tensor에 포함된 요소의 절댓값 중 최댓값
  • torch.norm(tensor, p=float('inf'))



유사도(Similarity)

  • 두 벡터(=1-D Tensor)가 얼마나 유사한지에 대한 측정값
  • 군집화(Clustering) 알고리즘에서 데이터들이 얼마나 유사한지 판단하는 기준으로 사용

맨해튼 유사도

# 두 1-D Tensor a, b 사이의 맨해튼 거리와 유사도 
manhattan_distance = torch.norm(a-b, p=1)
manhattan_similarity = 1/(1+manhattan_distance)
  • 두 1-D Tensor 사이의 맨해튼 거리를 역수로 변환하여 계산 (-> 맨해튼 거리 값과 반비례)
  • 1에 가까울수록 두 Tensor가 유사

유클리드 유사도

# 두 1-D Tensor a, b 사이의 유클리드 거리와 유사도
euclidean_distance = torch.norm(a-b, p=2)
euclidean_similarity = 1/(1+euclidean_distance)
  • 두 1-D Tensor 사이의 유클리드 거리를 역수로 변환하여 계산 (-> 유클리드 거리 값과 반비례)
  • 1에 가까울수록 두 Tensor가 유사

코사인 유사도

# 두 1-D Tensor a, b 사이의 코사인 유사도
cos_similarity = torch.dot(a, b) / (torch.norm(a, p=2) * torch.norm(b, p=2)) 
  • 두 1-D Tensor 사이의 각도를 측정해 계산
  • 내적(torch.dot())을 활용해 각도 측정
  • 1에 가까울수록 두 Tensor가 유사


Outro

3줄 요약

1. 유사도 = 두 1-D Tensor(=벡터)가 얼마나 유사한지에 대한 측정값
2. 맨하튼/유클리드 유사도 = 두 벡터의 맨해튼/유클리드 거리를 역수로 변환해 계산; 1에 가까울수록 유사
3. 코사인 유사도 = 두 벡터 사이의 각도를 내적을 활용해 측정하여 계산; 1에 가까울수록 유사

더 읽어볼 것

  • L1(맨해튼 노름), L2(유클리드 노름) 노름의 비교

  • 노름의 기하학적 의미

참고 자료

profile
NLP 일짱이 되겠다.

0개의 댓글