[AI 수학적 기초]텐서연산(내적)

OasisGorilla·2024년 10월 10일
0

선형대수학에서 스칼라곱 또는 점곱(dot product)은 유클리드 공간의 두 벡터로부터 실수 스칼라를 얻는 연산이다
스칼라곱이 유클리드 공간의 내적을 이루므로, 이를 단순히 '내적'이라고 부르기도 한다.
[출처, 위키백과]

대수적 정의는 백터(1차원 텐서)의 같은 성분끼리 각각 곱하여 합하는 것이라고 한다.

Numpy와 PyTorch, TensorFlow에서 이를 위한 함수를 제공한다.

import numpy as np
import torch

x = np.array([25, 2, 5])
x_pt = torch.tensor(x)

y = np.array([0, 1, 2])
y_pt = torch.tensor(y)

print(np.dot(x, y)) # Numpy 내적
print(x @ y)
print(np.dot(x_pt, y_pt)) # numpy는 텐서도 내적해준다.
print(torch.dot(x_pt, y_pt)) # PyTorch에서의 내적
print(x_pt @ y_pt)

@ 연산자를 사용해서도 내적이 가능한데 내적은 벡터(1차원 텐서)끼리만 가능하다.
다차원 텐서끼리 연산에서는 행렬 곱 연산자로 작동한다.

x2 = np.array([[25, 2, 5]]) # (1, 3)
x2_pt = torch.tensor(x2)

y2 = np.array([[0, 1, 2]]) # (1, 3)
y2_pt = torch.tensor(y2)

# print(x2 @ y2) # 행렬 곱 조건에 맞지 않음
print(x2.T @ y2) # (3, 3) 결과
print(x2 @ y2.T) # (1, 1) 결과, 내적과 같은 결과

0개의 댓글