개발자식

[Pytorch] 행렬 곱(내적) vs 아다마르곱(element-wise product) 본문

AI/Pytorch

[Pytorch] 행렬 곱(내적) vs 아다마르곱(element-wise product)

밍츠 2022. 10. 20. 22:42

행렬 곱셈과 곱셈의 차이(Matrix Multiplication Vs. Multiplication)

행렬로 곱셈을 하는 방법은 크게 두 가지가 있다.

바로 행렬 곱셈(.matmul)과 원소 별 곱셈(.mul)이다.

 

행렬 곱셈 - 1차원 벡터

- .dot()을 활용하여 계산한다.

- tranpose 하지 않아도 계산 됨

 

행렬 곱셈 - matrix

- 기본적으로 모양이 맞아야 한다.

- (m x k) · (k x n) = (m x n)

 

아다마르 곱 (element-wise product)

- 두 벡터의 Hadamard 곱은 행렬 덧셈과 유사하며, 주어진 벡터/행렬의 동일한 행과 열에 해당하는 요소를 곱하여 새로운 벡터/행렬을 형성한다.

- 압축 기술에 사용된다.

- 곱할 행렬/벡터의 순서는 같아야 하며 결과 행렬도 같은 순서가 된다.

출처 : https://medium.com/linear-algebra/part-14-dot-and-hadamard-product-b7e0723b9133

 

파이토치 코드로 봐보자

import torch

print("---행렬 곱(내적)---")
a = torch.tensor([1,2,3])
b = torch.tensor([2,3,4])

print(torch.dot(a,b)) #only 1D

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

print(torch.matmul(a,b))
print(a @ b)

print("---element-wise 곱셈---")
print(a * b)
print(torch.mul(a,b))
Output:
---행렬 곱(내적)---
tensor(20)
tensor([[19, 22],
        [43, 50]])
tensor([[19, 22],
        [43, 50]])
---element-wise 곱셈---
tensor([[ 5, 12],
        [21, 32]])
tensor([[ 5, 12],
        [21, 32]])

 

Comments