소위 말하는 딥러닝 구조를 쌓고 연산하기 위해선 텐서(Tensor) 구조에 대해서 선행적으로 알 필요가 있다.
오늘은 딥러닝에 중요한 개념인 텐서(Tensor)에 대해 정리해보고자 한다.
(파이토치 기반으로 정리함을 참고하기 바란다!)
텐서(Tensor)의 기본 개념
텐서(Tensor)는 수학적인 개념으로 데이터의 배열이라고 생각하면 된다. 프로그래밍하는 사람들에게는 Numpy 배열이 익숙할 것인데, Numpy 배열과 똑같은 개념이 바로 Tensor라고 생각하면 된다.
텐서는 일반적으로 수치형 데이터를 저장하고 동적인 크기를 갖는다.
텐서(Tensor)의 구조
일반적인 텐서의 구조는 아래 그림과 같다. 여기에는 6차원 Tensor 구조까지 나와있는데, 차원은 게속적으로 높일 수 있는 듯하다. (다만, 시각적으로 상상할 수 없는 구조가 되지 않을까 싶다.)
여기서 Rank는 축의 개수, Shape은 형상(각 축에 따른 차원 개수), Type은 데이터 타입을 의미한다.
0D Tensor(Scaler)
0차원 텐서는 하나의 숫자를 가지고 있는 텐서를 의미한다. 스칼라(Scaler)라고도 하며 축과 형상이 없는 숫자 1개를 의미한다.
1D Tensor(Vector)
1차원 텐서는 스칼라 값들을 저장한 리스트와 같다고 생각하면 된다. 우리가 아는 일반적인 벡터가 1차원 텐서에 해당한다.
Tip이 있다면, 보통 1D Tensor를 (N,)차원으로 표현한다는 것이다. 이는 행렬과 구분하기 위해 (N, 1)이 아닌, (N,)으로 표현한다.
2D Tensor(Matrix)
2차원 텐서는 행렬과 같은 모양으로 두 개의 축이 존재하는 Matrix와 같은 구조이다.
크기를 |t|라고 할 때, 아래와 같이 표현을 한다.
$$|t| = batch size(행) * dimension(열)$$
3D Tensor
3차원부터 딥러닝에 많이 사용되는 Tensor 구조라고 볼 수 있다. 3차원 텐서는 큐브와 같은 모양으로 3개의 축이 존재하며 이미지(image)를 표현하기에 가장 적합한 데이터 구조다. 그렇지만, 같은 3D Tensor 구조라고 해도 NLP, CV 등에 사용되는 데이터 형태가 다르다는 것을 알아주었으면 좋겠다.
먼저 이미지의 경우 이미지가 여러 장(batch size) 존재하기 때문에 3차원 텐서가 된다고 생각할 수 있다. 일반적으로 이미지 데이터를 표현할 때 행렬을 3개 생성하여 겹쳐놓은 구조로 볼 수 있는데, 이 행렬의 의미는 R(빨강), G(초록), B(파랑)로 표현이 될 수 있다.
이미지 데이터의 경우 크기가 |t|라고 할 때, 아래와 같이 표현한다.
$$ |t| = (Channel, width, height) $$
자연어 처리의 경우 크기가 |t|라고 할 때, 아래와 같이 표현할 수 있다.
$$|t| = (batch size, length(문장 길이), dim(단어 벡터의 차원)
# NLP 분야 3D 텐서 예제
# 전체 훈련 데이터 예시
[[나는 사과를 좋아해], [나는 바나나를 좋아해], [나는 사과를 싫어해], [나는 바나나를 싫어해]]
# 컴퓨터 입력으로 사용하기 위해 단어를 나눠줌.
[['나는', '사과를', '좋아해'], ['나는', '바나나를', '좋아해'], ['나는', '사과를', '싫어해'], ['나는', '바나나를', '싫어해']]
# 컴퓨터는 텍스트보다는 숫자를 더 잘 처리하기에 숫자 벡터로 변환
'나는' = [0.1, 0.2, 0.9]
'사과를' = [0.3, 0.5, 0.1]
'바나나를' = [0.3, 0.5, 0.2]
'좋아해' = [0.7, 0.6, 0.5]
'싫어해' = [0.5, 0.6, 0.7]
# 위 기준을 따라서 훈련 데이터 재구성
[[[0.1, 0.2, 0.9], [0.3, 0.5, 0.1], [0.7, 0.6, 0.5]],
[[0.1, 0.2, 0.9], [0.3, 0.5, 0.2], [0.7, 0.6, 0.5]],
[[0.1, 0.2, 0.9], [0.3, 0.5, 0.1], [0.5, 0.6, 0.7]],
[[0.1, 0.2, 0.9], [0.3, 0.5, 0.2], [0.5, 0.6, 0.7]]]
최종적으로 구성된 텐서의 크기(batch size, 문장 길이, 단어 벡터의 차원)는 (4 X 3 X 3)인 것을 확인할 수 있다.
고차원 텐서 (High-Dimensional Tensor)
딥러닝에서는 보통 5차원 Tensor 구조까지 다루게 된다. 고차원 텐서로 넘어가서는 각각의 큐브를 쌓아 하나의 큰 큐브를 다시 쌓는 구조로 생각할 수 있다. 4차원 텐서는 4가지의 축, 5차원 텐서는 5가지의 축을 갖는 것이라고 생각하면 된다. 4D Tensor의 경우 컬러 이미지가 대표적인 사례이며, 5D Tensor의 경우 비디오 데이터가 대표적인 예시가 되겠다.
Reference
https://velog.io/@sansa0722/%ED%85%90%EC%84%9C-%ED%91%9C%ED%98%84%EA%B3%BC-%EC%97%B0%EC%82%B0
https://rekt77.tistory.com/102
https://velog.io/@changwoo7463/PyTorch1
https://076923.github.io/posts/Python-pytorch-2/
'Analytics' 카테고리의 다른 글
[NLP] Text Representation (0) | 2024.06.14 |
---|---|
[ML/DL] 인공 신경망(Neural Networks) (0) | 2024.05.10 |
[ML/DL] Activation function(활성화 함수)의 쓸모 (0) | 2024.05.05 |
[ML/DL] Faiss(Faicbook AI Similarity Search) 사용법 (0) | 2024.05.03 |
[RecSys] 연관 규칙(Association Rule) (0) | 2024.04.30 |