Tensor란?

Tensor는 숫자 데이터를 여러 차원으로 배열한 자료구조이다.

쉽게 생각하면 Scalar, Vector, Matrix를 더 높은 차원까지 확장한 개념이라고 볼 수 있다.

예를 들어 하나의 숫자 1도 Tensor로 표현할 수 있고,

[1, 2, 3]

과 같은 1차원 배열이나,

[
    [1, 2],
    [3, 4]
]

과 같은 2차원 배열도 Tensor로 표현할 수 있다.

Tensor는 특히 Machine Learning과 Deep Learning에서 데이터를 표현하는 기본적인 구조로 사용된다.

Tensor의 Rank

Tensor가 몇 개의 차원을 가지는지를 Rank라고 한다.

Rank Type 예시
0 Scalar 1
1 Vector [1, 2, 3]
2 Matrix [[1, 2], [3, 4]]
3 3D Tensor [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]

Rank 0 Tensor는 하나의 숫자이다.

1

Rank 1 Tensor는 숫자가 한 방향으로 배열되어 있다.

[1, 2, 3]

Rank 2 Tensor는 행과 열을 가지는 Matrix 형태이다.

[
    [1, 2],
    [3, 4]
]

Rank 3 Tensor는 Matrix가 다시 여러 개 쌓여 있는 구조로 생각할 수 있다.

[
    [
        [1, 2],
        [3, 4]
    ],
    [
        [5, 6],
        [7, 8]
    ]
]

즉,

Scalar → Vector → Matrix → 3D Tensor → ...

와 같이 차원을 계속 확장할 수 있다.

Rank와 Shape의 차이

Tensor를 공부할 때 Rank와 함께 자주 등장하는 개념이 Shape이다.

Rank는 Tensor가 몇 차원인지를 나타내고, Shape은 각 차원에 몇 개의 데이터가 존재하는지를 나타낸다.

예를 들어 다음 Tensor가 있다.

[
    [1, 2, 3],
    [4, 5, 6]
]

이 Tensor에는 행 방향과 열 방향이라는 두 개의 차원이 있으므로 Rank는 2이다.

그리고

2개의 행
3개의 열

을 가지고 있으므로 Shape은 (2, 3)으로 표현할 수 있다.

따라서 다음과 같이 구분하면 된다.

Rank  = 차원의 개수
Shape = 각 차원의 크기

예를 들어,

[
    [
        [1, 2],
        [3, 4]
    ],
    [
        [5, 6],
        [7, 8]
    ]
]

은 Rank가 3이고 각 방향의 크기가 모두 2이므로 Shape은 (2, 2, 2)이다.

Tensor를 왜 사용하는가?

Deep Learning에서는 입력 데이터와 신경망의 연산 결과를 대부분 Tensor 형태로 표현한다.

예를 들어 하나의 흑백 이미지는 다음과 같이 나타낼 수 있다.

Height × Width

여러 장의 이미지를 한 번에 처리한다면 하나의 차원이 추가된다.

Batch × Height × Width

RGB 이미지라면 색상 정보를 나타내는 Channel 차원도 필요하다.

Batch × Channel × Height × Width

이처럼 실제 데이터는 여러 방향의 정보를 동시에 가지고 있기 때문에 이를 표현하기 위해 Tensor를 사용한다.

결국 Tensor를 처음 공부할 때는 다음 세 가지를 구분할 수 있으면 된다.

Tensor : 여러 차원으로 배열된 데이터

Rank   : Tensor의 차원 개수

Shape  : 각 차원의 크기