본문 바로가기
수학

텐서란?(what is tensor from deep learning)

by 나이아카 2020. 6. 9.

 텐서는 미분 기하학을 만들면서 가우스가 도입했다고 알려져 있습니다.

 

 뭐, 아무튼... 사실 누가 만들었는지는 중요하지 않습니다. 알고 싶지도 않구요. 하지만 이 텐서라는 개념은 물리학에서도 필수적이고, 인공지능을 하기 위해서도 필수적으로 사용되는 그러한 도구입니다.

 

 현실 세계는 x, y, z축의 3차원과 time 축을 이용한 차원으로 총 4차원으로 표현된다고 합니다. 뭐, 제가 물리학을 전공하는 건 아니니 아무래도 그럴듯 합니다. 

 

 그리고 이러한 세계를 표현하는데에도 여러가지 방식이 존재합니다. x, y, z 축이라는 것만 봐도 학생때 공부했던 수학에 대한 지식을 끄집어 내 보면, 좌표로서 표현이 될 것 같다는 생각이 듭니다. 실제로 현실 세계를 표현하기 위해 좌표계를 쓰기도 하고, 그 좌표계의 종류 역시 매우 다양합니다.

 

 차원 별로 1차원 좌표계, 직교 좌표계, 3차원 좌표계, 극좌표계, 원기둥 좌표계....등등 많기도 하죠. 하지만 저는 이부분에 대해 잘 모르고 여기서 다루고자 하는 것은 아니니 넘어가도록 하겠습니다. 그냥 많은 좌표계가 있다는 것 정도만 아셔도 무방할 겁니다.

 

 이렇게 많은 좌표계들이 존재함으로서 세계를 나타내는데 통일성이 부족했던 거죠. 마치 인류가 여러 언어를 동시에 사용하고 있어 통역 없이 소통이 불가능하기도 하고, 여러가지 언어를 알고 있어야 하는 것처럼 말이죠. 하지만 사과라는 과일이 사과라고 불리든 apple이라고 불리든 결국 그 과일의 본질이 변하지 않는 것과 같이, 실제로 본질이 변하지 않는 무언가가 필요해서 만들어진 것이 이 텐서라고 합니다.

 

 무수히 많은 표현법과 별개로 세상에 대한 어떤 것을 표현하기 위해 만든 것이 텐서입니다. 아까 설명했던 언어로 돌아가보자면 모든 사람이 공통적으로 사용하는 공용어 정도의 느낌이라고 보는 거죠. (물론 이와 같은 비유가 정확하다고 생각은 하지 않지만, 일반인의 관점에서 이 정도의 비유가 적절하다고 생각합니다.)

 

 

 물리학적이나 수학적으로의 텐서는 매우 복잡하고 다양하지만, 다행히도 인공지능에서 사용하는 텐서는 그리 어려운 개념으로 받아들일 필요가 없습니다.

 

 그럼 천천히 텐서에 대해서 살펴보기 전에 먼저 랭크에 따라 텐서가 어떤 이름을 가지는 지 알아보겠습니다.

 

rank 0

0, 1, 2와 같이 하나의 숫자로 표현이 가능한 스칼라로 이름 붙여진 것들을 0 - 차원 텐서라고 합니다.
넘파이에서는 float32나 float64와 같은 타입이 이에 해당합니다.

 

rank 1

기하학에서 벡터라고 부르는 것들을 1D 텐서라고 합니다. 변위벡터와 같은 것들은 텐서로 보지 않기 때문에 벡터 == 1D 텐서는 아니지만, 1D 텐서 안에는 특정 벡터들이 들어가 있습니다.
넘파이로 본다면 숫자 타입의 변수가 들어가 있는 배열이 되겠네요.

 

rank 2

rank 1이 모여 배열을 이루면 rank 2의 텐서가 됩니다. 이것을 알기 쉽게 말하면 행렬이 됩니다.
[[1, 2, 3, 4, 5],
[2, 4, 6, 8, 9],
[1, 3, 5, 6, 8]]
이러한 형태로 구성되어 있다고 볼 수 있습니다.

 

rank 3

여기서부터는 rank n으로 표현됩니다. 대부분을 보면 rank 3까지는 3D tensor로 표현하지만, 사용하기에는 rank N과 큰 차이를 보이지 않습니다.
형태는 rank 2가 모여 있는 배열이라고 생각할 수 있습니다.

 위와 같이 텐서를 설명할 수 있습니다.

 오히려 이와 같은 설명은 텐서플로우나 파이토치와 같이 인공지능을 위해 텐서를 사용할 때에는 더 도움이 되지 않을 지도 모르지만, 간단한 수학적 지식을 통해 언젠가 텐서에 대해 더 잘 이해해서 응용할 수 있게 되었으면 좋겠습니다.

 

 그렇다면 현실에서 텐서플로우에 담겨 있는 데이터는 어떤 것이 될까요.

 

 

 

 이미지의 데이터를 예로 살펴봅시다. 컴퓨터에서 이미지는 크게 R, G, B의 값으로 이루어져 있고 세 가지의 채널이 합쳐져서 하나의 이미지가 됩니다. 아래의 그림과 같이 말이죠.

 

 이러한 그림은 쉽게 R 채널의 데이터, G 채널의 데이터, B 채널의 데이터로 rank 3의 텐서에 담기게 됩니다. 각 채널의 이미지를 행렬로 바라보았을 때, 그 행렬이 3개 존재하게 되는 것이죠.

 물론 이러한 이미지 데이터를 100개를 모아둔다면, rank 4가 될 수 있습니다.

 

 하나의 예를 더 들자면, 택시는 손님이 타는 순간 도착지가 정해지고 내리는 그 순간 금액이 정해집니다. 손님 한 명을 받으면 출발지와 목적지, 금액을 묶을 수 있게 되죠. 그것을 텐서로 표현하면 [출발지, 목적지, 금액]의 데이터로 표현할 수 있습니다. 이것은 rank 1로 보이죠. 그리고 두 명의 손님의 데이터를 묶으면 [[출발지, 목적지, 금액], [출발지, 목적지, 금액]]로 묶이게 되죠. 이는 rank 2가 되는 것입니다.

 

 이렇게 텐서는 인공지능에서 사용할 어떠한 데이터가 어떤 형태로 묶여있는지에 대한 형태라고 본다면, 딥러닝에서의 사용에 대해서 적절한 이해가 될 수 있을 것이라고 봅니다.

댓글