Tensor에 대해
1. 벡터, 행렬 그리고 텐서(Vector, Matrix and Tensor)
차원이 없는 값은 스칼라, 1차원 값은 벡터이다. 행렬은 모두가 알다시피 [1,2,3] 이런 값이다.
즉. 2차원으로 구성된 값을 행렬이라 한다.
이제 그 값들이 3차원으로 넘어가게 되면 그것을 Tensor(텐서)라고 부르게 된다.
그런데 컴퓨터 공학에서는 벡터를 1차원 텐서, 행렬을 2차원 텐서등으로 표현한다.
차원의 개념을 이해할때 1차원은 방, 2차원은 층, 3차원은 아파트 동, 4차원은 아파트 단지.
나는 이런 식으로 이해를 했다.
2차원 텐서 표현
그리고 2차원 텐서를 표현할때 행의 개수는 batch size, 열의 개수는 dimension으로 표기한다.
그 이유는 모델에 들어갈때 batch 단위로 들어가는데 이때 행 마다 들어가므로 batch size,
그리고 들어가는 입력의 길이 혹은 크기를 dimension이라고 하기 때문이다.
예를 들어 데이터가 6400개 있고, 각 데이터 하나의 크기가 64라고 하면 데이터의 차원은 64차원이고
전체 데이터셋의 크기는 6400 x 64이다.
하지만 모델이 데이터를 처리하는 기준은 batch size이다. batch size는 한번에 들어가는 데이터의 개수라고 생각하면 된다.
따라서, batch size가 64이면 64 x 64 의 데이터가 들어가고 이 과정을 100번 반복하게된다.
비전 분야의 3차원 텐서
이미지 데이터의 경우 RGB 값이 있고 각각의 영역이 2차원이므로 총 3차원이 된다.
여기서 이미지 데이터를 여러 장 사용하는 경우 3차원 데이터가 여러 개이므로 4차원 데이터가 된다.
이 경우 (batch size / # of images, width, height, channel)이 된다.
자연어 처리 분야의 3차원 텐서
자연어 처리 분야에서 3차원 텐서의 각 요소는 batch size, 문장 길이, 단어 벡터의 차원이 된다.
즉, (batch size, length, dimension)이 된다.
3D 텐서 예시
[[아 배고파 밥 줘] [집가서 빨리 게임하고 싶다] [운동해야 하는데 시간이 없다]]
컴퓨터는 이러한 데이터를 처리할때 단어가 몇개인지 알 수가 없다.
이를 컴퓨터가 처리할 수 있도록 하는 과정이 필요하다.
우선 단어별로 나눠준다.
[['아', '배고파', '밥','줘'],['집가서','빨리','게임하고','싶다'],['운동해야','하는데','시간이','없다']]
이제 위의 데이터는 3 x 4크기를 가지는 2D 텐서입니다. 컴퓨터는 텍스트보다는 숫자에 대한 처리가 빠릅니다.
이제 각 단어를 벡터로 만들어주는데 각 단어를 3차원의 벡터로 변환을 하게 됩니다.
'아' = [0.1,0.3,0.4]
'배고파' = [0.4,0.2,0.1]
'밥' = [0.2,0.2,0.1]
'줘' = [0.9,0.1,0.9]
... 이런식으로 변환한다.
그러면 이제 데이터를 벡터로 표현하면 아래와 같이 표현할 수 있습니다.
[[[0.1,0.3,0.4],[0.4,0.2,0.1],[0.2,0.2,0.1],[0.9,0.1,0.9]],
[[~~ ]],
[[~~ ]]]
데이터셋의 차원은 이제 3x4x4 차원 입니다.
여기서 batch size를 2로 하고 가운데 문장을 2번 사용한다고 할때,
첫번째 배치
[[[0.1,0.3,0.4],[0.4,0.2,0.1],[0.2,0.2,0.1],[0.9,0.1,0.9]],
[[~~ ]]]
두번째 배치
[[[~~ ]],
[[~~ ]]]
각 배치의 텐서의 크기는 2 x 4 x 4가 된다.