본문 바로가기
deeplearning

머신러닝 vs 딥러닝 차이를 이해하는 중요 개념 : 3차원 데이터

by jinny-log 2024. 9. 15.

머신러닝에서 딥러닝으로 넘어가는 과정에서 제일 어려웠던 개념이 3차원 벡터 개념이었습니다. 공부를 하다보니 부족한 개념이 무엇인지 보이기 시작했고, 제 코딩선생님인 chatgpt에게 부족한 개념을 알려달라고 했습니다. 그리고 이에 대한 gpt의 답글을 원문에 첨부하였습니다. 저와 같이 딥러닝을 헤매고 있는 누군가에게 도움이 되길 바라며 결론은 이미지 및 시계열 데이터 구성 요소 개념이 부재하였고, 아래 답글을 통해 부족한 개념을 체득해나가길 바라겠습니다. :-)

 

 

 

 

CNN 모델에서 데이터를 3차원 텐서로 변환하는 과정은 매우 중요하며, 이를 이해하는 것이 CNN의 핵심 개념을 파악하는 데 도움이 됩니다. 2차원 이미지 데이터(예: MNIST)와 시계열 데이터를 어떻게 3차원 벡터(텐서)로 변환하는지 단계별로 설명하겠습니다.

1. 이미지 데이터의 3차원 텐서 변환

이미지 데이터를 CNN에 입력하기 위해서는 데이터의 차원 구조를 변형해야 합니다. 이미지는 가로, 세로 픽셀로 이루어져 있고, 이미지가 흑백인지 컬러인지에 따라 채널이 달라집니다. 이 구조를 CNN에 맞는 3차원 형식으로 만들어야 합니다.

(1) 흑백 이미지 (MNIST 예제)
MNIST 데이터는 28x28 픽셀의 흑백 이미지로 구성되어 있습니다. 

흑백 이미지의 경우, 각 픽셀에 하나의 값만 있기 때문에, 채널 수는 1입니다.

- 픽셀 크기: 이미지의 가로와 세로 길이. MNIST의 경우 28x28.
- 채널 수: 흑백 이미지는 1개의 채널, 컬러 이미지는 RGB 채널로 3개가 됩니다.

MNIST 데이터의 구조 변환
MNIST 데이터는 기본적으로 `(28, 28)`의 2차원 배열로 주어집니다. 

CNN 모델에 입력하기 위해선 이 데이터를 3차원 텐서로 만들어야 하며, 그 형식은 (높이, 너비, 채널)입니다. 

따라서, `reshape` 함수를 사용하여 데이터를 `(28, 28, 1)`로 변환합니다. 

여기서 마지막의 `1`은 흑백 이미지의 채널 수를 나타냅니다.

예를 들어, 60,000장의 이미지를 CNN에 넣기 위해서는 각 이미지를 `(28, 28, 1)`로 변환하여 

최종적으로 (60000, 28, 28, 1)의 형태로 만듭니다. 여기서 첫 번째 차원은 이미지의 개수(배치 크기)를 나타냅니다.



(2) 컬러 이미지 (CIFAR-10 예제)

CIFAR-10 데이터는 32x32 픽셀의 컬러 이미지로 구성되어 있으며, 각 이미지는 RGB 채널을 가집니다.

즉, 각 픽셀마다 3개의 값(빨강, 초록, 파랑)이 있습니다.

CIFAR-10 데이터의 구조 변환
CIFAR-10 데이터는 기본적으로 (32, 32, 3)의 3차원 배열로 주어집니다.

여기서 마지막의 `3`은 RGB 채널을 나타내며, 각 픽셀에 3개의 값이 있는 것입니다.

따라서, 50,000장의 CIFAR-10 이미지를 CNN에 넣기 위해서는 각 이미지를 `(32, 32, 3)`의 형태로 표현하고, 전체 데이터는 (50000, 32, 32, 3)의 형식으로 변환됩니다.

이때도 `reshape` 함수를 사용하여 데이터를 적절하게 변환할 수 있습니다.



이미지 데이터의 3차원 텐서 구조
- 가로(Height): 이미지의 세로 길이.
- 세로(Width): 이미지의 가로 길이.
- 채널(Channel): 흑백 이미지에서는 `1`, 컬러 이미지에서는 `3`(RGB)입니다.

이미지를 CNN에 적용할 때, 이 **3차원 형식(가로, 세로, 채널)**으로 변환해야 합니다. CNN은 이 3차원 텐서를 입력으로 받아 이미지의 공간적 구조를 분석하고 패턴을 학습합니다.



2. 시계열 데이터의 3차원 텐서 변환

시계열 데이터를 CNN 모델에 적용할 때는 타임스텝(시간에 따른 데이터 흐름)과 특징 수(feature)를 고려해야 합니다. CNN에서 시계열 데이터를 처리할 때, 이를 (배치 크기, 타임스텝, 특징) 형식으로 변환해야 합니다.

시계열 데이터의 구조
예를 들어, 6,000개의 시계열 데이터가 있고, 각 데이터는 6개의 특징(feature)을 가지고 있으며, 6시간 단위의 타임스텝으로 나뉜다고 가정합니다. 이 데이터를 CNN에 입력할 때도 3차원 텐서로 변환해야 합니다.

시계열 데이터의 구조 변환
주어진 데이터를 6시간 단위의 타임스텝으로 묶고, 각 타임스텝마다 6개의 특징이 있다고 가정하면, 데이터는 (타임스텝, 특징)으로 나타낼 수 있습니다. CNN에 적용하기 위해서는 배치 크기(데이터 개수)까지 포함하여 (배치 크기, 타임스텝, 특징)의 형식으로 데이터를 변환해야 합니다.



- 타임스텝(Time Step): 한 번에 CNN이 학습하는 시간 구간(여기서는 6시간).
- 특징(Feature): 각 시간 스텝마다의 변수(여기서는 x1 ~ x6까지 6개의 변수).
- 배치 크기(Batch Size): 전체 데이터 샘플의 개수를 나타내는 차원(자동으로 맞춰집니다).

시계열 데이터를 CNN에 적용하기 위해서는 시간에 따른 데이터를 타임스텝과 특징 수로 나누어 3차원 텐서로 만들어야 합니다.


3. 이미지 데이터와 시계열 데이터의 차이점
- 이미지 데이터는 고정된 가로, 세로, 채널의 2D 형태의 데이터이기 때문에, CNN에 입력할 때 (높이, 너비, 채널) 형식으로 변환됩니다.
- 시계열 데이터는 시간 흐름에 따라 발생한 데이터를 다루기 때문에, CNN에 입력할 때는 (타임스텝, 특징) 형식으로 처리됩니다. 즉, 시간에 따른 데이터를 구간별로 묶어 CNN이 공간적 구조가 아니라 시간적 패턴을 학습하도록 합니다.


핵심 정리
1. 이미지 데이터는 CNN에 입력하기 위해 3차원 텐서(가로, 세로, 채널)로 변환됩니다.
   - 흑백 이미지는 `(높이, 너비, 1)`로 변환.
   - 컬러 이미지는 `(높이, 너비, 3)`로 변환.

2. 시계열 데이터는 CNN에 입력하기 위해 3차원 텐서(배치 크기, 타임스텝, 특징)로 변환됩니다.
   - 타임스텝: 데이터를 시간 구간으로 묶은 단위.
   - 특징: 각 시간 스텝에서의 변수들.

이미지와 시계열 모두 CNN에서 다룰 수 있는 형식으로 데이터를 변환하는 과정이 중요하며, 

데이터의 구조에 따라 차원 수를 맞춰야 CNN이 공간적/시간적 패턴을 학습할 수 있습니다.