[네부캠] Week1 - Ln 노름과 유사도

오홍석·2024년 8월 9일
0

네부캠

목록 보기
2/28

학습내용


노름이란?

  • 1-D Tensor의 노름은 Vector가 원점에서 얼마나 떨어져 있는지를 의미한다.
  • Vector의 길이를 측정하는 방법으로도 사용된다.


L1L_1 노름

  • L1L_1 노름은 요소의 절대값의 합으로 정의 가능하다.
  • L1L_1 노름을 맨해튼 노름이라고도 한다. (뉴욕시 맨해튼의 격자형 도로망과 유사하기 때문에.. 처음 알았다 ㅋㅋ)

    torch.norm(a, p = 1) 로 구할 수 있다.


L2L_2 노름

  • L2L_2 노름은 요소의 제곱의 합에 제곱근을 취한 것이다.
  • L2L_2 노름을 유클리드 노름이라고도 한다. (유클리드 공간에서 두 점 사이의 최단 거리를 측정하는 방법과 동일하기 때문에)

    torch.norm(a, p = 2) 로 구할 수 있다.
    p의 값에 따라서 Ln노름이 결정된다.


LL_\infty 노름

  • LL_\infty 노름은 요소의 절대값 중 최대값으로 정의 가능하다.

    torch.norm(a, p = float('inf')) 로 구할 수 있다.


유사도란?

  • 유사도란 두 Vector가 얼마나 유사한지에 대한 측정값을 의미한다.
  • 이러한 유사도는 클러스터링 알고리즘에서 데이터들이 얼마나 유사한지를 측정하는 중요한 기준이 된다.
  • 맨해튼 유사도, 유클리드 유사도, 코사인 유사도 etc..

맨해튼 유사도

  • 맨해튼 거리를 역수로 변환하여 계산한 값
  • 유사도 값이 1에 가까울 수록 두 Vector가 유사하다고 판단한다.
    ManhattanDistance=i=1nxiyiManhattanSimilarity=11+ManhattanDistanceManhattan \, Distance \, = \, \sum_{i=1}^n|x_i \, - \, y_i| \\ Manhattan \, Similarity \, = \, \frac{1}{1 \, + \,Manhattan\,Distance}
manhattan_distance = torch.norm(b - c, p = 1) # 맨해튼 거리
manhattan_similarity = 1 / (1 + manhattan_distance) # 맨해튼 유사도

유클리드 유사도

  • 유클리드 거리를 역수로 변환하여 계산한 값
  • 유사도 값이 1에 가까울 수록 두 Vector가 유사하다고 판단한다.
    EuclideanDistance=i=1nxiyi2EuclideanSimilarity=11+EuclideanDistanceEuclidean \, Distance \, = \, \sqrt{\sum_{i=1}^n|x_i \, - \, y_i|^2} \\ Euclidean \, Similarity \, = \, \frac{1}{1 \, + \,Euclidean\,Distance}
euclidean_distance = torch.norm(b - c, p = 2) # 유클리드 거리
euclidean_similarity = 1 / (1 + euclidean_distance) # 유클리드 유사도

코사인 유사도

  • 코사인 유사도는 두 Vector 사이의 각도를 측정하여 계산한 값
  • 유사도 값이 1에 가까울 수록 두 Vector가 유사하다고 판단한다.
  • Vector의 내적을 활용하여 구할 수 있다.
    cos(x,y)=<x,y>x2y2cos(x,\,y)\,=\,\frac{<x,y>}{||x||_2||y||_2}
cosine_similarity = torch.dot(b,c) / (torch.norm(b, p = 2) * torch.norm(c, p = 2))

회고

norm의 수식적 표현과 구하는 방법을 알 수 있었고, norm이 활용되는 유사도에 대해서도 배울 수 있었다. 기존의 아는 내용도 있었지만 좀 애매하게 알고있던 것이 많았다. 해당 부분의 부족한 지식을 채울 수 있어 배움이 있었던 시간이였다.
팀원들과 함께 지식을 공유하고 토론하면서 설명을 제대로 못하는 부분이 많은 것을 느꼈다. 이러한 부분을 채우기 위해서 팀원들에게 배우고 멘토분께 질문도 드리면서 함께하는 공부의 묘미를 느낄 수 있었다. 앞으로도 더 많이 배우고 공유하면서 팀원들과 함께 발전하고 싶다!!!!!

profile
기동코딩

0개의 댓글