텐서

최근 편집: 2023년 4월 26일 (수) 14:35

텐서(tensor)다차원 배열(multi-dimensional array)의 일반화된 모습으로, 스칼라(0차원), 벡터(1차원), 행렬(2차원)과 같은 단순한 구조뿐만 아니라, 이들을 조합한 고차원 배열까지 모두 텐서로 표현할 수 있다.

텐서는 딥러닝에서 핵심적인 데이터 구조 중 하나이며, 입력 데이터, 가중치(weight), 그리고 출력값을 모두 텐서 형태로 표현합니다. 텐서의 차원 수는 해당 데이터의 복잡도와 문제의 난이도를 결정하는데 중요한 역할을 한다.

딥러닝에서는 대부분의 데이터를 텐서 형태로 다루기 때문에, 텐서 연산을 효율적으로 처리하는 것이 중요한 연구 분야 중 하나다. 많은 라이브러리에서는 이러한 텐서 연산을 GPU와 같은 하드웨어 가속기를 사용하여 빠르게 처리할 수 있다.

종류

스칼라

스칼라는 0차원 텐서로, 하나의 실수값으로 이루어진 데이터이다.[1] 예컨대,

d = np.array(5)

이라고 했을 때, 텐서의 차원(d.ndim)은 0이며 텐서의 크기(d.shape)는 ( )이다.

벡터

벡터는 1차원 텐서로, 숫자를 배열한 데이터를 의미한다.[1]

d = np.array([1, 2, 3, 4])

위의 예시에서 d는 4차원 벡터이자 1차원 텐서이다. 또한 텐서의 차원은 1이며 크기는 (4, )이다.

행렬

행과 열이 존재하는 벡터의 배열인 행렬은 2차원 텐서이다.[1]

d = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

위의 예시에서 d의 차원은 2이며 크기는 (3, 4)이다.

(다차원) 텐서

행렬 또는 2차원 텐서를 단위로 한 번 더 배열하면 3차원 텐서라고 부르는데, 0차원 ~ 2차원 텐서는 각각 스칼라, 벡터, 행렬이라고 해도 무방하므로 3차원 이상의 텐서부터 본격적으로 텐서라고 부른다. 데이터 사이언스 분야 한정으로 주로 3차원 이상의 배열을 텐서라고 부른다고 이해해도 좋다.[1]

d = np.array([
            [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [10, 11, 12, 13, 14]],
            [[15, 16, 17, 18, 19], [19, 20, 21, 22, 23], [23, 24, 25, 26, 27]]
            ])

위의 예시에서 d의 차원은 3이며 크기는 (2, 3, 5)이다.

예시

  • 컬러 이미지를 처리하는 경우, 각각의 픽셀에 대한 RGB값을 가지는 3차원 텐서로 표현할 수 있다.
  • 자연어 처리에서는 각 단어를 고유한 숫자로 인코딩한 벡터를 연결하여 2차원 혹은 3차원의 텐서로 표현하는 경우가 많다.

출처

  1. 1.0 1.1 1.2 1.3 “06-08 벡터와 행렬 연산”. 2023년 4월 25일에 확인함.