Tensor 연산: 기본 사칙연산

Tensor의 덧셈(Addition)

두 Tensor 간의 덧셈은 같은 크기를 가져야 한다. 두 Tensor가 같은 크기일 때, 각각의 요소를 대응하는 위치끼리 더하는 방식으로 이루어진다. 두 Tensor, (\mathbf{A})와 (\mathbf{B})가 각각 (m \times n) 크기라면, 덧셈 연산은 다음과 같이 정의된다.

[ \mathbf{C} = \mathbf{A} + \mathbf{B} \quad \text{where} \quad C_{ij} = A_{ij} + B_{ij}, \quad i \in {1, \ldots, m}, ; j \in {1, \ldots, n} ]

예제 코드:

import torch

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

Tensor의 뺄셈(Subtraction)

Tensor의 뺄셈 역시 덧셈과 마찬가지로 동일한 크기의 두 Tensor 사이에서 수행된다. (\mathbf{A})와 (\mathbf{B})가 (m \times n) 크기를 가질 때, (\mathbf{D} = \mathbf{A} - \mathbf{B})는 각 요소의 차로 정의된다.

[ \mathbf{D} = \mathbf{A} - \mathbf{B} \quad \text{where} \quad D_{ij} = A_{ij} - B_{ij}, \quad i \in {1, \ldots, m}, ; j \in {1, \ldots, n} ]

예제 코드:

D = A - B
print(D)

Tensor의 스칼라 곱(Scalar Multiplication)

Tensor와 스칼라 간의 곱셈은 각 요소에 스칼라 값을 곱하는 방식으로 이루어진다. 스칼라 (k)와 Tensor (\mathbf{A})에 대해 다음과 같이 정의된다.

[ \mathbf{E} = k \cdot \mathbf{A} \quad \text{where} \quad E_{ij} = k \cdot A_{ij}, \quad i \in {1, \ldots, m}, ; j \in {1, \ldots, n} ]

예제 코드:

Tensor의 원소별 곱(Element-wise Multiplication)

두 Tensor 간의 원소별 곱은 대응하는 위치의 요소끼리 곱하는 연산이다. 두 Tensor (\mathbf{A})와 (\mathbf{B})가 같은 크기를 가질 때, 원소별 곱은 다음과 같이 정의된다.

[ \mathbf{F} = \mathbf{A} \odot \mathbf{B} \quad \text{where} \quad F_{ij} = A_{ij} \cdot B_{ij}, \quad i \in {1, \ldots, m}, ; j \in {1, \ldots, n} ]

이 연산은 종종 Hadamard 곱이라고도 불리며, 두 Tensor가 동일한 차원을 가질 때 수행할 수 있다.

예제 코드:

Tensor의 행렬 곱(Matrix Multiplication)

행렬 곱은 원소별 곱과 달리 두 Tensor가 행렬로서 곱해질 때 사용되는 연산이다. 두 Tensor (\mathbf{A})와 (\mathbf{B})가 각각 (m \times n)과 (n \times p)의 크기를 가질 때, 행렬 곱은 다음과 같이 정의된다.

[ \mathbf{G} = \mathbf{A} \cdot \mathbf{B} \quad \text{where} \quad G_{ij} = \sum_{k=1}^{n} A_{ik} \cdot B_{kj}, \quad i \in {1, \ldots, m}, ; j \in {1, \ldots, p} ]

여기서 (\mathbf{A})의 열 수와 (\mathbf{B})의 행 수가 같아야만 곱셈이 가능하다. 결과로 생성된 Tensor (\mathbf{G})는 (m \times p) 크기를 가진다.

예제 코드:

Tensor의 나눗셈(Element-wise Division)

Tensor의 나눗셈은 대응하는 위치의 요소끼리 나누는 방식으로 이루어진다. 두 Tensor (\mathbf{A})와 (\mathbf{B})가 같은 크기를 가질 때, 원소별 나눗셈은 다음과 같이 정의된다.

[ \mathbf{H} = \mathbf{A} \oslash \mathbf{B} \quad \text{where} \quad H_{ij} = \frac{A_{ij}}{B_{ij}}, \quad i \in {1, \ldots, m}, ; j \in {1, \ldots, n} ]

단, 이 연산에서 (\mathbf{B})의 요소 중 (0)인 값이 있을 경우, 계산 과정에서 에러가 발생하거나 무한대 값이 나올 수 있으므로 주의해야 한다.

예제 코드:

Tensor의 멱승(Power)

Tensor의 각 요소에 대해 스칼라 멱승 연산을 수행할 수 있다. Tensor (\mathbf{A})와 스칼라 (p)에 대해, 멱승 연산은 다음과 같이 정의된다.

[ \mathbf{I} = \mathbf{A}^{p} \quad \text{where} \quad I_{ij} = (A_{ij})^{p}, \quad i \in {1, \ldots, m}, ; j \in {1, \ldots, n} ]

예제 코드:

Tensor의 전치(Transpose)

Tensor의 전치 연산은 행과 열을 교환하는 작업이다. 이 연산은 특히 2차원 Tensor, 즉 행렬에 대해 자주 사용되며, (m \times n) 크기의 Tensor (\mathbf{A})를 (n \times m) 크기의 Tensor로 변환한다. 수학적으로는 다음과 같이 표현된다.

[ \mathbf{A}^{T} \quad \text{where} \quad (A^{T}){ij} = A{ji}, \quad i \in {1, \ldots, n}, ; j \in {1, \ldots, m} ]

예제 코드:

Tensor의 내적(Dot Product)

두 벡터의 내적은 두 벡터가 동일한 차원을 가질 때 수행할 수 있으며, 벡터의 각 요소를 대응하는 위치끼리 곱한 뒤, 그 결과들을 모두 더하는 방식으로 계산된다. 두 벡터 (\mathbf{u})와 (\mathbf{v})가 (n)차원일 때, 내적은 다음과 같이 정의된다.

[ \mathbf{u} \cdot \mathbf{v} = \sum_{i=1}^{n} u_{i} v_{i} ]

예제 코드:

Tensor의 외적(Outer Product)

외적은 두 벡터가 주어졌을 때, 벡터 (\mathbf{u})와 (\mathbf{v})의 요소별 곱으로 구성된 행렬을 생성한다. (\mathbf{u})가 (m)차원, (\mathbf{v})가 (n)차원 벡터일 때, 외적은 (m \times n) 크기의 행렬로 나타난다.

[ \mathbf{P} = \mathbf{u} \otimes \mathbf{v} \quad \text{where} \quad P_{ij} = u_{i} v_{j}, \quad i \in {1, \ldots, m}, ; j \in {1, \ldots, n} ]

예제 코드:

Tensor의 행렬-벡터 곱(Matrix-Vector Multiplication)

Tensor 간의 행렬-벡터 곱은 행렬 (\mathbf{A})와 벡터 (\mathbf{u})가 주어졌을 때 수행된다. (\mathbf{A})가 (m \times n) 크기의 행렬이고, (\mathbf{u})가 (n)차원 벡터라면, 결과는 (m)차원 벡터가 된다.

[ \mathbf{w} = \mathbf{A} \mathbf{u} \quad \text{where} \quad w_{i} = \sum_{j=1}^{n} A_{ij} u_{j}, \quad i \in {1, \ldots, m} ]

예제 코드:

Last updated