john8538 님의 블로그

텐서 연산 마스터하기: 기본부터 고급까지(2) (# 3일차-2) 본문

AI/Naver_Boostcamp AI Tech

텐서 연산 마스터하기: 기본부터 고급까지(2) (# 3일차-2)

john8538 2024. 8. 7. 23:52

01) 텐서의 노름(Norm)

벡터 공간에서 정의되는 함수로, 벡터의 성질을 어떤 실수(Real Number)로 변환하는 함수를 의미합니다.
즉 노름은 벡터 공간에서 벡터의 "크기" 또는 "길이"를 측정하는 함수입니다. PyTorch에서는 주로 L1, L2, L∞ 노름을 사용합니다.

01_ L1 노름 (맨해튼 노름)

L1 노름은 벡터 요소의 절댓값의 합으로 정의됩니다.

 

절댓값을 쓰는 이유는 다음과 같습니다.

방향이 만약 -로 가게 된다면 음수가 나올 수 있으므로 절대값을 더해 ‘거리’를 구할 수 있게 됩니다

이 노름이 맨해튼 노름으로 불리는 이유는 맨해튼 거리가 정확히 직교하기 때문에 맨해튼 내 어느 지점에서 지점까지 이동할때 최소거리를 블럭단위로 구하는 방식과 동일하기 때문입니다.

 

ex) Robust 학습, Lasso 회귀

 

코드를 통한 예시는 다음과 같습니다.

import torch
x = torch.tensor([1., -2., 3.])
l1_norm = torch.norm(x, p=1)
print(f"L1 Norm: {l1_norm}")

02_ L2 노름 (유클리드 노름)

L2 노름은 벡터 요소의 제곱합의 제곱근으로 정의됩니다.

ex) Laplace 근사, Ridge 회귀

 

 

우리가 평소 생각하는 직선거리 입니다. 유클리드 공간에서의 두 점사이의 최단거리를 측정하는 방법과 동일하기에 유클리드 노름이라 불립니다.

코드를 통한 예시는 다음과 같습니다.

l2_norm = torch.norm(x, p=2)
print(f"L2 Norm: {l2_norm}")

03_ L∞ 노름 (최대값 노름)

L∞ 노름은 벡터 요소의 절댓값 중 최댓값으로 정의됩니다.

 

 

ex) 최대오차 최소화

 

 

 

1-D Tensor에 포함된 요소의 절댓값 중 최댓값을 의미합니다.

02) 유사도 측정

01_ 유사도란?

유사도는 두 벡터 혹은 데이터가 얼마나 같은지를 나타내주는 척도를 의미합니다.

02_ 맨해튼 유사도

앞서 설명드린 맨해튼 거리 공식을 사용하여 유사도를 구할 수 있습니다.

 

코드의 예시는 아래와 같습니다.

PyTorch 코드:

x = torch.tensor([1., 2., 3.])
y = torch.tensor([2., 4., 6.])
man_d = torch.norm(x - y, p=1)
man_sim = 1 / (1 + man_d)
print(f"Manhattan Similarity: {man_sim}")

03_ 유클리드 유사도

앞서 설명드린 L2 거리의 공식을 사용하여 유사도를 구할 수 있습니다.

 

코드의 예시는 아래와 같습니다.

PyTorch 코드:

x = torch.tensor([1., 2., 3.])
y = torch.tensor([2., 4., 6.])
eucli_d = torch.norm(x - y, p=2)
eucli_sim = 1 / (1 + eucli_d)
print(f"Euclidean Similarity: {eucli_sim}")

04_ 코사인 유사도

코사인 유사도는 두 벡터 간의 각도의 코사인 값을 사용합니다.

https://wikidocs.net/24603

 

05-01 코사인 유사도(Cosine Similarity)

BoW에 기반한 단어 표현 방법인 DTM, TF-IDF, 또는 뒤에서 배우게 될 Word2Vec 등과 같이 단어를 수치화할 수 있는 방법을 이해했다면 이러한 표현 방법에 대해서 …

wikidocs.net

 

자세한 내용은 여기를 참고해주시면 감사하겠습니다.

03) 2D 텐서의 행렬 곱셈

행렬 곱셈은 딥러닝에서 매우 중요한 연산입니다. PyTorch에서는 여러 가지 방법으로 구현할 수 있습니다.

A = torch.tensor([[1, 2], [3, 4]])
B = torch.tensor([[5, 6], [7, 8]])

# 방법 1
C1 = torch.matmul(A, B)

# 방법 2
C2 = A @ B

# 방법 3
C3 = torch.mm(A, B)

print(f"Matrix Multiplication Result:\n{C1}")

또한 흑백 이미지 처리에서 행렬의 곱셈 연산을 사용한다면 대칭 이동을 수행할 수 있게됩니다.