우리가 지난 게시글에서 배웠듯이 1-D tensor의 구조, 2-D tensor의 구조, 텐서의 크기를 알 수 있는 shape,size()를 배웠었다. (이때 1-D tensor의 크기는 요소의 개수를 의미한다.)
여기서 우리가 짚고 넘어가야할 문제가 있다.
두 tensor를 비교할 때 한 tensor의 요소의 개수가 많다고 해서 크기가 더 크다고 판단할 수 있을까?
안된다!!!
[1,2,3]인 텐서와 [1,2]인 텐서를 애초에 차원이 달라서 비교할 수가 없다.
그렇다면 어떻게 비교해야 할까?
1-D tensor의 노름은 벡터가 원점에서 얼마나 떨어져 있는지를 알려준다.(벡터의 길이)
1-D tensor의 노름에는 L1,L2,L infinite 등 여러가지 유형이 있다.

L1노름
1차원 tensor의 요소들의 절댓값의 합으로 정의된다.('맨해튼 노름'이라고도 한다.)
a=torch.tensor([1,2,3])
torch.norm(a,p=1)

L2노름
1차원 tensor의 요소들의 제곱합의 제곱근으로 정의된다.('유클리드 노름'이라고도 한다.)
torch.norm(a,p=2)

L-infinite 노름
1차원 tensor의 요소들의 절댓값 중 최대값으로 정의된다.
torch.norm(a,p=float('inf')) or torch.max(a.abs())

노름의 기하하적 의미
이 3가지 norm은 성능평가를 할때 사용되기 때문에 잘 알아두는 것이 좋다!

두 1차원 tensor가 얼마나 유사한지를 측정한 값
이러한 유사도는 군집화 알고리즘에서 중요한 기준으로 사용된다.
맨해튼 유사도
두 1차원 tensor사이의 맨헤튼 거리를 역수로 변환하여 계산한 값
그래서 거리가 짧을수록 유사도가 증가한다.(유사도가 1의 가까울수록 매우 유사한 것이다.)
분모가 0이 되는 것을 방지하기 위해 분모에 1을 같이 더해준다.
manhattan=torch.norm(a-b,p=1) ---> 1/(1+manhattan)

유클리드 유사도
두 1차원 tensor사이의 유클리드 거리를 역수로 변환하여 계산한 값
맨해튼과 같이 1에 가까울수록 유사하다.
euclidean=torch.norm(a-b,p=2) ---> 1/(1+euclidean)
코사인 유사도(활용도가 높다)
두 1차원 tensor사의 각도를 계산한 값, 코사인 값이 1에 가까울 수록 유사하다는 것을 의미한다.
cosine의 값은 내적을 통해 구할 수 있다.
내적을 구하는 방법
1) 두 1차원 tensor의 각 요소를 곱해서 더하기
torch.dot(b,c)
2) 두 1차원 tensor의 길이를 곱하는 법
이 방법을 통해 우리는 cosine 값을 알아낼 수 있다.
cosine=torch.dot(b,c)/(torch.norm(b,p=2)*torch.norm(c,p=2))
왜 길이와 각도가 연관이 있는 것일까?
우리가 그냥 단순히 x와 y의 유클리드 거리를 구해서 곱해주면 내적의 값이 나오는 것이 아니다.
왜냐하면 그 두 벡터의 사이 각을 고려해주지 않았기 때문이다.
그래서 그 값까지 고려하면 아래와 같은 식을 얻을 수 있고 cosine으로 정리하면 코사인 값을 알 수 있다.
cosine=torch.dot(b,c)/(torch.norm(b,p=2)*torch.norm(c,p=2))

