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}")

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