🧑‍💻 IT 범생이 Finn/🤖 데이터 석사 생존기

딥러닝 필수개념: 텐서 TENSOR 이해하기

It's FInn's Place 2021. 6. 19. 02:15

안녕하세요 IT 범생이 Finn 입니다~!

오늘은 다차원 데이터 형태 중에서도 악명이 높은 텐서 (Tensor) 데이터에 대해 정리해 보고자 합니다. 사실 텐서는 텐서플로우가 유명해지며 데이터를 공부하는 사람들 사이에서 유명해진 단어인데요. 정작 텐서가 무엇인지 모르면서 텐서플로우를 사용하는 경우가 잦은것 같아, 정리를 위해 포스팅을 하게 되었습니다. 텐서는 물리학에서도 함께 사용되는 만큼 본 포스팅은 데이터의 영역에 국한하여 최대한 쉽게 정리해 보고자 합니다.

텐서란 무엇인가?

컴퓨터 과학에서 배열 (array)는 번호 (index)와 각 번호에 대응하는 값들로 이루어진 데이터 형태를 말합니다. Numpy 혹은 Pandas를 사용해 보신 분들이라면 가장 기본적으로, 또 많이 다루어 보셨을 텐데요,

텐서 (Tensor)란 간단히 말해, 다차원의 배열을 통칭합니다. 수학적으로 깊게 접근하면 텐서는 '선형 관계를 나타내는 다중선형대수학의 대상'으로 풀이되나, 데이터를 공부하는 입장에서는 여러 차원을 가진 배열이라고 이해하면 좋습니다.

따라서, 텐서는 (우리가 익히 배웠을) 아래 형태의 데이터를 모두 포괄하는 개념입니다.

형태 예시 변수 표기
스칼라 13 x
(소문자)
벡터 (13, 42, 2011) x
(소문자, 볼드)
매트릭스
X
(대문자, 볼드)
매트릭스 수열

(Euler 체, 볼드)

Tensor를 쪼갠다면? Fibers와 Slices 이해

텐서의 차원의 수를 order, ways 또는 modes로 칭합니다.

따라서 1-order의 텐서는 벡터, 2-order는 매트릭스, 3-order는 매트릭스 수열의 형태를 띄겠죠.

특히, 시간의 추이에 따른 이미지를 변화를 바탕으로 이상 반응을 탐지하는 등의 고차원 분석일 수행하는 경우, 2차원의 이미지에 시간이라는 축을 더한 3-order 텐서의 형태로 데이터를 표현하게 됩니다.

이 텐서를 세부적인 요소의 단위로 쪼개어 보아야 할 경우, Fibers와 Slices로 표현하게 됩니다.

먼저 Fiber란, 하나의 인덱스를 제외한 나머지 인덱스를 고정할 수 있는 경우를 말합니다. 예를 들어, 아래와 같이 3-order 텐서에서 행을 제외한 나머지 인덱스는 개별적으로 설정할 수 있지만, 행 인덱스는 전체 범위로 설정되어 있습니다. (본 Fiber는 x:jk로 표현 될 수 있겠네요) 주의할 점은 제외할 인덱스에 따라서 Fiber가 다른 모양으로 형성됩니다. 하나의 텐서를 1차원의 형태로 잘잘히 쪼갠다고 생각하면 이해가 쉬우실겁니다.

행의 차원을 제외한 Fiber

 

나머지 차원을 각각 제외한 Fiber

 

Slices는 더 나아가 두개의 인덱스를 제외한 나머지 인덱스를 고정할 수 있는 형태를 말합니다. 텐서를 2차원 형태의 면적으로 쪼갠다면? 으로 생각하면 됩니다. 마찬가지로 제외할 인덱스의 조합에 따라 형태가 달라지게 됩니다.

행을 제외한 나머지 두 차원을 제외한 경우

 

Tensor를 곱하는 기초적인 방법

텐서의 기초적인 내용을 배웠으니, 가장 많이 응용되는 곱셈법을 간단히 살펴보겠습니다.

n-mode 곱셈이란, 텐서의 n번째 차원 (mode)에서 곱셈을 진행하는 것을 의미합니다. 차원이 같아 계산하기 용이한 행렬과 달리, 고차원의 텐서는 어느 영역을 기준으로 곱셈을 진행할지 명시가 필요하기 때문입니다.

매트릭스와의 n-mode 곱셈은 매트릭스와의 곱셈과 벡터와의 곱셈으로 나눌 수 있습니다. 매트릭스와 곱셈을 하는 경우 n번째 mode 기준 Fiber과 매트릭스를 곱하게 되며, n-mode에서 텐서의 크기가 RIn 이고 매트릭스의 크기가 RJ*In 이라면, n-mode에서의 크기가 새로운 값인 J로 대체되게 됩니다.

반면, 벡터와 n-mode 곱셈을 하는 경우 전체 텐서의 차원은 한 차원 감소하게 되고, n번째 mode 기준 Fiber와 벡터를 곱하는 방식 (내적)으로 이루어집니다.

이렇게 텐서라는 자료구조 형태에 대한 정의 및 기본적인 곱셈법을 알아보았는데요, 최대한 쉽게 풀어쓰고자 해도 어려움이 느껴지는건 어쩔 수 없는 부분인것 같습니다. 지속적으로 공부하며 텐서라는 자료구조 자체에 많이 익숙해 지는 시간이 필요할것 같습니다 ㅎㅎ