기계학습(Machine Learning)은 데이터를 기반으로 패턴을 학습하고 예측 또는 결정을 내리는 인공지능의 핵심 기술이다. 이러한 학습 과정에서 입력 형식(Input Format)은 모델의 성능과 학습 효율성에 직접적인 영향을 미치는 중요한 요소이다. 입력 형식은 데이터가 기계학습 모델에 제공되기 전에 어떤 구조로 가공되어야 하는지를 의미하며, 잘못된 형식은 과적합, 학습 실패, 또는 낮은 정확도로 이어질 수 있다. 본 문서에서는 기계학습에서 일반적으로 사용되는 입력 형식의 종류, 전처리 과정, 그리고 각 데이터 유형에 따른 처리 방법을 체계적으로 설명한다.
입력 데이터의 기본 구조
기계학습 모델은 일반적으로 행렬(Matrix) 형태의 숫자 데이터를 입력으로 받는다. 각 행은 하나의 샘플(Sample) 또는 인스턴스를, 각 열은 하나의 특징(Feature)을 나타낸다. 예를 들어, 100명의 사람에 대한 키, 몸무게, 나이 데이터를 학습에 사용한다면, 입력 데이터는 100×3 크기의 행렬이 된다.
이러한 구조는 지도학습(Supervised Learning), 비지도학습(Unsupervised Learning), 강화학습(Reinforcement Learning) 등 다양한 학습 방식에서도 공통적으로 요구된다.
주요 데이터 유형과 입력 형식
1. 수치형 데이터 (Numerical Data)
수치형 데이터는 실수 또는 정수로 표현되는 연속적 또는 이산적인 값이다. 예: 온도, 가격, 연봉, 나이 등.
- 입력 형식: 실수 또는 정수 벡터
- 전처리 방법:
- 정규화(Normalization): 값의 범위를 변환하여 [0, 1] 또는 [-1, 1] 사이로 조정 (예: Min-Max Scaling)
- 표준화(Standardization): 평균을 0, 분산을 1로 만듦 (Z-score 표준화)
- 주의사항: 스케일 차이가 큰 특징은 모델 학습에 편향을 유발할 수 있으므로 반드시 전처리 필요
2. 범주형 데이터 (Categorical Data)
범주형 데이터는 유한한 수의 카테고리로 나뉘는 데이터이다. 예: 성별(남/여), 지역(서울, 부산, 대구), 직업 등.
- 입력 형식: 원-핫 인코딩(One-Hot Encoding), 레이블 인코딩(Label Encoding), 임베딩(Embedding)
- 전처리 방법:
- 원-핫 인코딩: 각 범주를 이진 벡터로 변환 (예: '서울' → [1, 0, 0], '부산' → [0, 1, 0])
- 레이블 인코딩: 각 범주에 정수 레이블 부여 (예: '남'=0, '여'=1) — 순서가 없는 경우 주의 필요
- 임베딩: 고차원 범주 데이터를 저차원 벡터로 매핑 (주로 딥러닝에서 사용)
- 주의사항: 순서가 없는 범주형 데이터에 레이블 인코딩을 사용하면 모델이 순서 관계를 오해할 수 있음
3. 텍스트 데이터 (Text Data)
자연어 처리(NLP) 분야에서 텍스트는 기계학습의 주요 입력 원천이다. 예: 문장, 문서, 댓글 등.
- 입력 형식: 단어 임베딩(Word Embedding), BOW(Bag of Words), TF-IDF, 서브워드 토큰화 등
- 전처리 방법:
- 토큰화(Tokenization): 문장을 단어 또는 서브워드 단위로 분리
- 정규화: 소문자 변환, 구두점 제거, 불용어 제거
- 벡터화: 텍스트를 숫자 벡터로 변환
- BOW: 각 단어의 출현 빈도를 기반
- TF-IDF: 단어의 중요도를 가중치로 반영
- 임베딩: Word2Vec, GloVe, BERT 등으로 의미적 정보 포함
- 참고: 딥러닝 모델에서는 토큰 시퀀스를 직접 입력으로 사용 (예: Transformer 기반 모델)
4. 이미지 데이터 (Image Data)
컴퓨터 비전 분야에서 이미지는 픽셀 값의 행렬로 표현된다.
- 입력 형식: 2D 또는 3D 텐서 (예: 224×224×3 RGB 이미지)
- 전처리 방법:
- 정규화: 픽셀 값을 [0, 1] 또는 [-1, 1] 범위로 조정
- 리사이징: 모델 입력 크기에 맞게 이미지 크기 조정
- 데이터 증강(Data Augmentation): 회전, 반전, 자르기 등을 통해 학습 데이터 다양화
- 모델 입력 예: CNN(Convolutional Neural Network)은 3차원 텐서를 입력으로 사용
5. 시계열 데이터 (Time Series Data)
시간에 따라 변화하는 데이터 (예: 주가, 기온, 센서 데이터)
- 입력 형식: 순차적 벡터 또는 시퀀스 (예: [t-5, t-4, ..., t])
- 전처리 방법:
- 슬라이딩 윈도우(Sliding Window): 과거 n개의 데이터를 묶어 하나의 입력 샘플로 사용
- 정규화/표준화: 시간에 따른 값의 스케일 조정
- 결측치 처리: 보간 또는 제거
- 모델 예: RNN, LSTM, GRU, 또는 Transformer 기반 시계열 모델
입력 형식의 표준화와 프레임워크 지원
현대의 머신러닝 프레임워크들은 입력 형식의 표준화를 위해 다양한 도구를 제공한다.
- Scikit-learn:
StandardScaler, OneHotEncoder, LabelEncoder 등 전처리 클래스 제공
- TensorFlow/Keras:
tf.data.Dataset, Tokenizer, ImageGenerator 등 데이터 파이프라인 지원
- PyTorch:
Dataset, DataLoader, transforms 등을 통해 입력 데이터 관리
이러한 도구들은 입력 데이터를 일관된 형식으로 변환하고, 배치 학습(Batch Learning)에 적합한 구조로 가공하는 데 도움을 준다.
참고 자료 및 관련 문서
기계학습 입력 형식은 단순한 데이터 준비 단계를 넘어, 모델의 학습 성능과 일반화 능력에 결정적인 영향을 미친다. 따라서 데이터의 특성에 맞는 적절한 입력 형식을 선택하고, 철저한 전처리를 수행하는 것은 성공적인 기계학습 프로젝트의 핵심 요소이다.
텐서의 개념과 차원 구조
딥러닝에서는 단순한 행렬을 넘어 다차원 배열인 텐서(Tensor)를 기본 입력 단위로 사용한다. 텐서의 랭크(Rank)는 차원의 수를 의미하며, 데이터의 성격에 따라 요구되는 랭크와 차원 구성이 달라진다.
| 텐서 랭크 |
명칭 |
일반적인 입력 형식 (Shape) |
예시 및 의미 |
| Rank 0 |
스칼라 (Scalar) |
() |
단일 값 (예: 손실 함수 값) |
| Rank 1 |
벡터 (Vector) |
(Feature,) |
단일 샘플의 특징 벡터 |
| Rank 2 |
행렬 (Matrix) |
(Batch, Feature) |
여러 샘플의 집합 (표 형식 데이터) |
| Rank 3 |
3D 텐서 |
(Batch, Seq_len, Dim) |
텍스트 시퀀스, 시계열 데이터 |
| Rank 4 |
4D 텐서 |
(Batch, Height, Width, Channel) |
컬러 이미지 배치 (RGB) |
| Rank 5 |
5D 텐서 |
(Batch, Depth, Height, Width, Channel) |
비디오 데이터, 의료용 CT 스캔 |
고급 입력 형식 및 텐서 구조
현대적인 딥러닝 모델은 연산 효율을 극대화하기 위해 다음과 같은 고차원 구조를 요구한다.
- 배치 크기(Batch Size): GPU의 병렬 연산 능력을 활용하기 위해 여러 개의 샘플을 하나의 텐서로 묶어 입력한다. 모든 입력 텐서의 첫 번째 차원은 일반적으로 배치 크기가 된다.
- 채널(Channel): 이미지의 RGB 색상 정보나 오디오의 스테레오 채널과 같이, 동일한 공간적/시간적 구조를 가진 서로 다른 특성 맵을 의미한다.
- 시퀀스 길이(Sequence Length): NLP나 시계열 데이터에서 시간축 또는 단어의 개수를 나타내며, 가변 길이를 처리하기 위해 최대 길이를 설정하고 패딩(Padding)을 적용한다.
LLM 특수 입력 형식
최신 대규모 언어 모델(LLM)은 텍스트를 단순 벡터화하는 것을 넘어, 모델의 메커니즘(Attention)을 제어하기 위한 특수 입력 형식을 사용한다.
- 토큰 ID 시퀀스 (Token ID Sequence): 텍스트가 토크나이저를 통해 정수 인덱스로 변환된 형태이다.
- 예시:
"I love AI" $\rightarrow$ [101, 1045, 2293, 9927, 102] (특수 토큰 [CLS], [SEP] 포함)
- 어텐션 마스크 (Attention Mask): 가변 길이 문장을 배치 처리할 때, 실제 데이터와 패딩(Padding) 영역을 구분하여 모델이 무의미한 값에 집중하지 않도록 제어하는 이진 마스크이다.
- 예시: 실제 토큰은
1, 패딩 토큰은 0으로 표시
- 입력 값:
[1, 1, 1, 1, 0, 0] (앞의 4개는 실제 단어, 뒤의 2개는 패딩)
입력 형식의 최적화 및 효율화
모델의 추론 속도를 높이고 메모리 사용량을 줄이기 위해 데이터 타입을 최적화하는 기법이 필수적이다.
데이터 타입별 메모리 사용량 비교
| 데이터 타입 |
비트 수 |
메모리 사용량 (요소당) |
특징 |
| FP32 (Float32) |
32-bit |
4 Bytes |
표준 정밀도, 학습 시 기본 사용 |
| FP16 (Half) |
16-bit |
2 Bytes |
반정밀도, 메모리 절감 및 연산 가속 |
| BF16 (Bfloat16) |
16-bit |
2 Bytes |
구글 개발, FP32와 유사한 지수 범위 유지 |
| INT8 (Integer8) |
8-bit |
1 Byte |
양자화(Quantization) 적용, 추론 최적화 |
효율화 기법
- 희소 행렬(Sparse Matrix) 처리: 데이터의 대부분이 0인 경우, 0이 아닌 값의 위치와 값만 저장하는 CSR(Compressed Sparse Row) 등의 형식을 사용하여 메모리를 획기적으로 줄인다.
- 입력 파이프라인 최적화: CPU에서 전처리를 수행하고 GPU로 전송하는 병목 현상을 줄이기 위해
Prefetching(미리 가져오기)과 Multi-threading 기반의 데이터 로더를 사용한다.
데이터 표준화 포맷 및 호환성
대규모 데이터셋을 효율적으로 관리하고 서로 다른 프레임워크 간에 데이터를 공유하기 위해 표준 파일 형식을 사용한다.
- 고성능 저장 포맷:
- TFRecord: TensorFlow 전용 바이너리 포맷으로, 대용량 데이터의 순차적 읽기 성능이 매우 뛰어나다.
- HDF5: 계층적 데이터 포맷으로, 대규모 수치 데이터를 저장하고 부분적으로 읽어오는 데 유리하다.
- Parquet: 열 지향(Columnar) 저장 형식으로, 데이터 압축률이 높고 분석 쿼리 속도가 빨라 데이터 엔지니어링 단계에서 널리 쓰인다.
- 프레임워크 간 호환성 (ONNX): ONNX(Open Neural Network Exchange)는 모델의 구조와 입력/출력 형식을 표준화하여, PyTorch에서 학습한 모델을 TensorFlow나 TensorRT 등 다른 런타임 환경에서 그대로 사용할 수 있게 한다.
# 기계학습 입력 형식
기계학습(Machine Learning)은 데이터를 기반으로 패턴을 학습하고 예측 또는 결정을 내리는 인공지능의 핵심 기술이다. 이러한 학습 과정에서 **입력 형식**(Input Format)은 모델의 성능과 학습 효율성에 직접적인 영향을 미치는 중요한 요소이다. 입력 형식은 데이터가 기계학습 모델에 제공되기 전에 어떤 구조로 가공되어야 하는지를 의미하며, 잘못된 형식은 과적합, 학습 실패, 또는 낮은 정확도로 이어질 수 있다. 본 문서에서는 기계학습에서 일반적으로 사용되는 입력 형식의 종류, 전처리 과정, 그리고 각 데이터 유형에 따른 처리 방법을 체계적으로 설명한다.
---
## 입력 데이터의 기본 구조
기계학습 모델은 일반적으로 **행렬**(Matrix) 형태의 숫자 데이터를 입력으로 받는다. 각 행은 하나의 **샘플**(Sample) 또는 **인스턴스**를, 각 열은 하나의 **특징**(Feature)을 나타낸다. 예를 들어, 100명의 사람에 대한 키, 몸무게, 나이 데이터를 학습에 사용한다면, 입력 데이터는 100×3 크기의 행렬이 된다.
이러한 구조는 지도학습(Supervised Learning), 비지도학습(Unsupervised Learning), 강화학습(Reinforcement Learning) 등 다양한 학습 방식에서도 공통적으로 요구된다.
---
## 주요 데이터 유형과 입력 형식
### 1. 수치형 데이터 (Numerical Data)
수치형 데이터는 실수 또는 정수로 표현되는 연속적 또는 이산적인 값이다. 예: 온도, 가격, 연봉, 나이 등.
- **입력 형식**: 실수 또는 정수 벡터
- **전처리 방법**:
- **정규화**(Normalization): 값의 범위를 변환하여 [0, 1] 또는 [-1, 1] 사이로 조정 (예: Min-Max Scaling)
- **표준화**(Standardization): 평균을 0, 분산을 1로 만듦 (Z-score 표준화)
- **주의사항**: 스케일 차이가 큰 특징은 모델 학습에 편향을 유발할 수 있으므로 반드시 전처리 필요
### 2. 범주형 데이터 (Categorical Data)
범주형 데이터는 유한한 수의 카테고리로 나뉘는 데이터이다. 예: 성별(남/여), 지역(서울, 부산, 대구), 직업 등.
- **입력 형식**: 원-핫 인코딩(One-Hot Encoding), 레이블 인코딩(Label Encoding), 임베딩(Embedding)
- **전처리 방법**:
- **원-핫 인코딩**: 각 범주를 이진 벡터로 변환 (예: '서울' → [1, 0, 0], '부산' → [0, 1, 0])
- **레이블 인코딩**: 각 범주에 정수 레이블 부여 (예: '남'=0, '여'=1) — 순서가 없는 경우 주의 필요
- **임베딩**: 고차원 범주 데이터를 저차원 벡터로 매핑 (주로 딥러닝에서 사용)
- **주의사항**: 순서가 없는 범주형 데이터에 레이블 인코딩을 사용하면 모델이 순서 관계를 오해할 수 있음
### 3. 텍스트 데이터 (Text Data)
자연어 처리(NLP) 분야에서 텍스트는 기계학습의 주요 입력 원천이다. 예: 문장, 문서, 댓글 등.
- **입력 형식**: 단어 임베딩(Word Embedding), BOW(Bag of Words), TF-IDF, 서브워드 토큰화 등
- **전처리 방법**:
- **토큰화**(Tokenization): 문장을 단어 또는 서브워드 단위로 분리
- **정규화**: 소문자 변환, 구두점 제거, 불용어 제거
- **벡터화**: 텍스트를 숫자 벡터로 변환
- **BOW**: 각 단어의 출현 빈도를 기반
- **TF-IDF**: 단어의 중요도를 가중치로 반영
- **임베딩**: Word2Vec, GloVe, BERT 등으로 의미적 정보 포함
- **참고**: 딥러닝 모델에서는 토큰 시퀀스를 직접 입력으로 사용 (예: Transformer 기반 모델)
### 4. 이미지 데이터 (Image Data)
컴퓨터 비전 분야에서 이미지는 픽셀 값의 행렬로 표현된다.
- **입력 형식**: 2D 또는 3D 텐서 (예: 224×224×3 RGB 이미지)
- **전처리 방법**:
- **정규화**: 픽셀 값을 [0, 1] 또는 [-1, 1] 범위로 조정
- **리사이징**: 모델 입력 크기에 맞게 이미지 크기 조정
- **데이터 증강**(Data Augmentation): 회전, 반전, 자르기 등을 통해 학습 데이터 다양화
- **모델 입력 예**: CNN(Convolutional Neural Network)은 3차원 텐서를 입력으로 사용
### 5. 시계열 데이터 (Time Series Data)
시간에 따라 변화하는 데이터 (예: 주가, 기온, 센서 데이터)
- **입력 형식**: 순차적 벡터 또는 시퀀스 (예: [t-5, t-4, ..., t])
- **전처리 방법**:
- **슬라이딩 윈도우**(Sliding Window): 과거 n개의 데이터를 묶어 하나의 입력 샘플로 사용
- **정규화/표준화**: 시간에 따른 값의 스케일 조정
- **결측치 처리**: 보간 또는 제거
- **모델 예**: RNN, LSTM, GRU, 또는 Transformer 기반 시계열 모델
---
## 입력 형식의 표준화와 프레임워크 지원
현대의 머신러닝 프레임워크들은 입력 형식의 표준화를 위해 다양한 도구를 제공한다.
- **Scikit-learn**: `StandardScaler`, `OneHotEncoder`, `LabelEncoder` 등 전처리 클래스 제공
- **TensorFlow/Keras**: `tf.data.Dataset`, `Tokenizer`, `ImageGenerator` 등 데이터 파이프라인 지원
- **PyTorch**: `Dataset`, `DataLoader`, `transforms` 등을 통해 입력 데이터 관리
이러한 도구들은 입력 데이터를 일관된 형식으로 변환하고, 배치 학습(Batch Learning)에 적합한 구조로 가공하는 데 도움을 준다.
---
## 참고 자료 및 관련 문서
- [Scikit-learn 데이터 전처리 문서](https://scikit-learn.org/stable/modules/preprocessing.html)
- [TensorFlow Data Guide](https://www.tensorflow.org/guide/data)
- [PyTorch 데이터 로딩 튜토리얼](https://pytorch.org/tutorials/beginner/basics/data_tutorial.html)
- Goodfellow, I., Bengio, Y., & Courville, A. (2016). *Deep Learning*. MIT Press.
---
기계학습 입력 형식은 단순한 데이터 준비 단계를 넘어, 모델의 학습 성능과 일반화 능력에 결정적인 영향을 미친다. 따라서 데이터의 특성에 맞는 적절한 입력 형식을 선택하고, 철저한 전처리를 수행하는 것은 성공적인 기계학습 프로젝트의 핵심 요소이다.
## 텐서의 개념과 차원 구조
딥러닝에서는 단순한 행렬을 넘어 다차원 배열인 **텐서(Tensor)**를 기본 입력 단위로 사용한다. 텐서의 **랭크(Rank)**는 차원의 수를 의미하며, 데이터의 성격에 따라 요구되는 랭크와 차원 구성이 달라진다.
| 텐서 랭크 | 명칭 | 일반적인 입력 형식 (Shape) | 예시 및 의미 |
| :--- | :--- | :--- | :--- |
| Rank 0 | 스칼라 (Scalar) | `()` | 단일 값 (예: 손실 함수 값) |
| Rank 1 | 벡터 (Vector) | `(Feature,)` | 단일 샘플의 특징 벡터 |
| Rank 2 | 행렬 (Matrix) | `(Batch, Feature)` | 여러 샘플의 집합 (표 형식 데이터) |
| Rank 3 | 3D 텐서 | `(Batch, Seq_len, Dim)` | 텍스트 시퀀스, 시계열 데이터 |
| Rank 4 | 4D 텐서 | `(Batch, Height, Width, Channel)` | 컬러 이미지 배치 (RGB) |
| Rank 5 | 5D 텐서 | `(Batch, Depth, Height, Width, Channel)` | 비디오 데이터, 의료용 CT 스캔 |
## 고급 입력 형식 및 텐서 구조
현대적인 딥러닝 모델은 연산 효율을 극대화하기 위해 다음과 같은 고차원 구조를 요구한다.
* **배치 크기(Batch Size)**: GPU의 병렬 연산 능력을 활용하기 위해 여러 개의 샘플을 하나의 텐서로 묶어 입력한다. 모든 입력 텐서의 첫 번째 차원은 일반적으로 배치 크기가 된다.
* **채널(Channel)**: 이미지의 RGB 색상 정보나 오디오의 스테레오 채널과 같이, 동일한 공간적/시간적 구조를 가진 서로 다른 특성 맵을 의미한다.
* **시퀀스 길이(Sequence Length)**: NLP나 시계열 데이터에서 시간축 또는 단어의 개수를 나타내며, 가변 길이를 처리하기 위해 최대 길이를 설정하고 패딩(Padding)을 적용한다.
## LLM 특수 입력 형식
최신 대규모 언어 모델(LLM)은 텍스트를 단순 벡터화하는 것을 넘어, 모델의 메커니즘(Attention)을 제어하기 위한 특수 입력 형식을 사용한다.
* **토큰 ID 시퀀스 (Token ID Sequence)**: 텍스트가 토크나이저를 통해 정수 인덱스로 변환된 형태이다.
* *예시*: `"I love AI"` $\rightarrow$ `[101, 1045, 2293, 9927, 102]` (특수 토큰 `[CLS]`, `[SEP]` 포함)
* **어텐션 마스크 (Attention Mask)**: 가변 길이 문장을 배치 처리할 때, 실제 데이터와 패딩(Padding) 영역을 구분하여 모델이 무의미한 값에 집중하지 않도록 제어하는 이진 마스크이다.
* *예시*: 실제 토큰은 `1`, 패딩 토큰은 `0`으로 표시
* *입력 값*: `[1, 1, 1, 1, 0, 0]` (앞의 4개는 실제 단어, 뒤의 2개는 패딩)
## 입력 형식의 최적화 및 효율화
모델의 추론 속도를 높이고 메모리 사용량을 줄이기 위해 데이터 타입을 최적화하는 기법이 필수적이다.
### 데이터 타입별 메모리 사용량 비교
| 데이터 타입 | 비트 수 | 메모리 사용량 (요소당) | 특징 |
| :--- | :--- | :--- | :--- |
| **FP32** (Float32) | 32-bit | 4 Bytes | 표준 정밀도, 학습 시 기본 사용 |
| **FP16** (Half) | 16-bit | 2 Bytes | 반정밀도, 메모리 절감 및 연산 가속 |
| **BF16** (Bfloat16) | 16-bit | 2 Bytes | 구글 개발, FP32와 유사한 지수 범위 유지 |
| **INT8** (Integer8) | 8-bit | 1 Byte | 양자화(Quantization) 적용, 추론 최적화 |
### 효율화 기법
* **희소 행렬(Sparse Matrix) 처리**: 데이터의 대부분이 0인 경우, 0이 아닌 값의 위치와 값만 저장하는 CSR(Compressed Sparse Row) 등의 형식을 사용하여 메모리를 획기적으로 줄인다.
* **입력 파이프라인 최적화**: CPU에서 전처리를 수행하고 GPU로 전송하는 병목 현상을 줄이기 위해 `Prefetching`(미리 가져오기)과 `Multi-threading` 기반의 데이터 로더를 사용한다.
## 데이터 표준화 포맷 및 호환성
대규모 데이터셋을 효율적으로 관리하고 서로 다른 프레임워크 간에 데이터를 공유하기 위해 표준 파일 형식을 사용한다.
* **고성능 저장 포맷**:
* **TFRecord**: TensorFlow 전용 바이너리 포맷으로, 대용량 데이터의 순차적 읽기 성능이 매우 뛰어나다.
* **HDF5**: 계층적 데이터 포맷으로, 대규모 수치 데이터를 저장하고 부분적으로 읽어오는 데 유리하다.
* **Parquet**: 열 지향(Columnar) 저장 형식으로, 데이터 압축률이 높고 분석 쿼리 속도가 빨라 데이터 엔지니어링 단계에서 널리 쓰인다.
* **프레임워크 간 호환성 (ONNX)**: **ONNX(Open Neural Network Exchange)**는 모델의 구조와 입력/출력 형식을 표준화하여, PyTorch에서 학습한 모델을 TensorFlow나 TensorRT 등 다른 런타임 환경에서 그대로 사용할 수 있게 한다.