pytorch 부스트캠프 AITech AIBasic PyTorch

Tensor Operations

Kwangjin Park

Aug 07, 2024 · 2 min read

Follow

1. Tensor의 노름

1.1 1-D Tensor 복습

이전에 기록해둔 포스트 참조(아래 링크)

3강

4강>

Tensor 간 크기 비교는 요소의 갯수 비교가 아닌 “Tensor 간 노름 비교”를 통해

1.2 Ln 노름

  1. L1 노름
    1. 정의 : Tensor 요소들의 절댓값의 합
    2. 기하학적 표현 image1.png SALMONN

      $L_1$ 노름 → 맨해튼의 격자형 도로와 유사 image2.png

      → $L_1$ 노름을 맨해튼 노름이라고도 함

    3. 코드 표현 a = torch.tensor([4.0, 3.0])L1 = torch.norm(a, p=1)
  2. $L_2$ 노름
    1. 정의 : Tensor 요소들의 제곱합의 제곱근(=거리)
    2. 기하학적 표현 image3.png image4.png → $L_2$ 노름을 유클리드 노름이라 부름

    3. 코드 표현 a = torch.tensor([4.0, 3.0])L2 = torch.norm(a, p=2)
  3. $L_∞$ 노름
    1. 정의 : Tensor 요소들의 절댓값 중 최댓값
    2. 기하학적 표현 image5.png $L_∞ = max(|x1|, |x2|)$

    3. 코드 표현 a = torch.tensor([4.0, 3.0])L∞ = torch.norm(a, p = float(’inf’)) (= torch.max(a.abs())
  • 노름에 따른 기하학적 의미 image6.png

    ⇒ 성능 평가에 활용

2. 유사도

2.1 유사도

: ‘1-D Vector가 얼마나 유사한지’ ⇒ 군집화 알고리즘에서 데이터 유사도를 판단하는 중요한 기준

  1. 맨해튼 유사도
    두 1-D Tensor 사이의 맨해튼 거리를 역수로 변환한 값
    • 맨해튼 거리 - 맨해튼 유사도 : 반비례
    • 유사도가 1에 가까울 수록 두 Tensor는 유사하다고 판단 image7.png
    • 코드 표현 manhatten_distance = torch.norm(b-c, p=1) manhatten_similarity = 1 / (1 + manhatten_distance)
  2. 유클리드 유사도
    두 1-D Tensor 사이의 유클리드 거리를 역수로 변환한 값
    • 유클리드 거리 - 유클리드 유사도 : 반비례
    • 유사도가 1에 가까울 수록 두 Tensor는 유사하다고 판단 image8.png
  • 코드 표현 euclidean_distance = torch.norm(b-c, p=2) euclidean_similarity = 1 / (1 + euclidean_distance)
  1. 코사인 유사도

    : 두 1-D Tensor 사이의 각도를 측정하여 계산한 값

    • 유사도가 1에 가까울 수록 두 Tensor는 유사하다고 판단
    • 두 벡터(=1-D Vector) 간 내적을 이용한 코사인 유사도 값 추출
      • 내적 : 두 1-D Tensor 간 관계를 하나의 0-D Tensor로 변환
      • 두 가지 방법
        1. 각 Tensor의 요소를 곱함 : torch.dot(b, c)
        2. 각 Tensor의 길이를 곱함(제이 코사인 법칙, 정사영)

          : torch.dot(b, c) / (torch.norm(b, p=2) * torch.norm(c, p=2))

          image9.png

          image10.png

          $θ$는 1-D Tensor $x, y$에 대한 함수로 표현 가능 → $(x, y)$로 작성

3. 2-D Tensor의 곱셈 연산

3.1 2-D Tensor의 행렬 곱셈 연산

  • 신경망 구현의 핵심 연산
  • 고등학교 때 배운 행렬 연산과 동일(옛날 얘기인가,,,)
  • 코드 표현

    D = torch.tensor([[1, 1, 3], [4, 5, 6], [7, 8, 9]])

    E = torch.tensor([[1, 0], [1, -1], [2, 1]])

    가 주어졌을 때, (= D, E는 서로 곱셈 가능)

    1. D.matmul(E)
    2. D.mm(E)
    3. D@E

3.2 2-D Tensor의 행렬 곱셈 연산 활용

  1. 흑백 이미지의 좌우 대칭 이동
    • 행렬의 곱셈연산을 활용해 대칭 이동 수행 가능(좌우대칭: $y$축 기준) → 이미지를 나타내는 대상 행렬 우측에 A = torch.tensor([[0, 0, 1], [0, 1, 0], [1, 0, 0]]) 를 곱해서
  2. 흑백 이미지의 상하 대칭 이동
    • 행렬의 곱셈연산을 활용해 대칭 이동 수행 가능(상하대칭: $x$축 기준) → 이미지를 나타내는 대상 행렬 우측에 B = torch.tensor([[0, 0, 1], [0, 1, 0], [1, 0, 0]]) 를 곱해서
chat_bubble 0

chat_bubble 댓글남기기

댓글남기기