Training Data
학습 데이터는 모델이 가중치를 학습하는 데 사용하는 예제 집합입니다. 검증 데이터와 테스트 데이터의 차이, 레이블 품질이 데이터 양만큼 중요한 이유를 살펴봅니다.
학습 데이터는 머신러닝 모델이 학습하는 예제 집합입니다. 학습 중 옵티마이저는 예제에서 발생하는 오차를 줄이기 위해 모델 가중치를 반복해서 조정하므로, 이 예제 집합이 모델이 학습할 수 있는 내용을 결정합니다. 지도 학습에서는 각 예제가 입력과 정답으로 구성됩니다. 예를 들어 거리 사진에서 자동차와 보행자마다 바운딩 박스와 클래스 이름을 지정할 수 있습니다. 자기 지도 학습과 비지도 학습은 레이블이 없는 원시 입력으로 학습합니다. 학습 세트는 동의어이며, 대부분의 프로젝트에서 사용 가능한 데이터의 가장 큰 분할을 가리킵니다. 보통 전체 데이터의 70~80%를 차지합니다.
모델이 학습 데이터를 사용하는 방식#
모델은 학습 데이터를 배치 단위로 처리합니다. 각 배치에서 예측을 수행하고, 손실 함수가 예측과 레이블 간의 차이를 측정합니다. 역전파는 각 가중치가 오차에 기여한 정도를 계산하고, 옵티마이저는 오차를 줄이도록 가중치를 조금씩 조정합니다. 학습 세트 전체를 한 번 처리하는 과정을 에포크라고 하며, 학습은 보통 수십에서 수백 에포크 동안 진행됩니다.
모델은 이 특정 예제들에 맞춰 최적화되므로, 해당 예제에서의 점수는 새로운 데이터에서의 성능을 과대평가합니다. 이를 보정하기 위해 학습에 사용하지 않는 두 가지 데이터 분할을 활용합니다. 개발 중 검증 데이터로 점수를 산출해 하이퍼파라미터와 체크포인트를 선택하고, 마지막에 한 번 테스트 데이터로 점수를 산출해 실제 환경에서의 성능을 추정합니다. 학습 점수와 검증 점수 간의 큰 차이는 모델이 일반화 가능한 패턴을 학습하는 대신 학습 예제를 암기하는 과적합의 신호입니다. 두 점수가 모두 낮으면 과소적합을 의미합니다. 분할 간에 이미지를 공유해서는 안 됩니다. 동일한 동영상에서 추출한 거의 중복된 프레임이나 동일한 환자의 스캔 자료가 분할 양쪽에 포함되면 데이터 누출이 발생해 모든 홀드아웃 점수가 부풀려집니다.
양과 품질, 범위#
학습 세트의 세 가지 특성이 모델의 일반화 성능을 결정합니다.
- 양: 예제가 많을수록 도움이 되지만 효과는 점차 줄어듭니다. 전이 학습으로 사전 학습 모델을 활용하면 새 작업에 필요한 레이블 예제 수를 줄일 수 있습니다.
- 품질: 레이블이 잘못되거나 누락되거나 일관성 없이 그려질 때마다 모델은 잘못된 내용을 학습합니다. 일관된 데이터 라벨링 지침은 레이블 수만큼 중요합니다.
- 포괄성: 예제는 조명, 날씨, 카메라 각도, 배경, 희귀 클래스 등 모델이 마주할 조건을 포괄해야 합니다. 주간 이미지로만 학습한 감지기는 야간에 실패합니다. 얼굴 데이터 세트에서 특정 피부색이 빠진 경우처럼 격차가 인구통계학적 특성을 따라 나타나면 데이터 세트 편향이 됩니다.
아래 scikit-learn 스크립트는 함께 제공되는 손글씨 숫자 데이터셋으로 동일한 분류기를 서로 다른 학습 세트에서 학습하고, 고정된 테스트 분할에서 각 모델의 점수를 산출합니다.
import numpy as np
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
# 1,797 labeled 8x8 digit images; hold out 30% to score every model
X, y = load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0, stratify=y)
# Reassign 30% of the training labels at random to simulate careless labeling
rng = np.random.default_rng(0)
y_noisy = y_train.copy()
flip = rng.random(len(y_train)) < 0.3
y_noisy[flip] = rng.integers(0, 10, flip.sum())
# Train the same model on three different training sets
for name, n, labels in [("50 clean", 50, y_train), ("1,257 clean", 1257, y_train), ("1,257 noisy", 1257, y_noisy)]:
model = LogisticRegression(max_iter=5000).fit(X_train[:n], labels[:n])
print(f"{name}: test accuracy {model.score(X_test, y_test):.3f}")정제된 학습 세트를 이미지 50개에서 1,257개로 늘리면 테스트 정확도가 0.863에서 0.961로 높아집니다. 1,257개 레이블 중 315개(25%)가 잘못된 노이즈 데이터 실험의 점수는 0.861로, 정제된 이미지 50개로 학습한 모델보다 나아지지 않습니다.
학습 세트 구축#
팀은 공개 데이터셋, 자체 카메라와 로그, 그리고 점점 더 많이 활용되는 합성 데이터로 학습 데이터를 구성합니다. 공개 벤치마크는 좋은 출발점입니다. COCO 데이터셋은 감지, 분할, 캡셔닝 레이블이 지정된 학습 이미지 118,287개를 제공합니다. 원시 데이터 모음은 이후 데이터 정제를 거쳐 중복 파일, 손상된 파일, 대상과 무관한 이미지를 제거하고 라벨링 및 검토를 진행합니다. 데이터 증강은 뒤집기, 자르기, 색상 변경, 모자이크를 통해 학습 중 데이터의 다양성을 높입니다. 하지만 수집된 데이터를 재조합하는 것에 불과하므로 누락된 조건은 여전히 직접 촬영해야 합니다.
Ultralytics YOLO는 데이터셋 YAML 파일의 train 경로에서 학습 데이터를 읽고, 각 이미지를 객체당 한 행이 있는 .txt 레이블 파일과 연결합니다. 각 행에는 클래스 인덱스와 이미지 크기에 맞춰 정규화한 박스 중심, 너비, 높이가 포함됩니다. 모든 분할은 동일한 YOLO 데이터셋 형식을 사용하므로, 분할의 균형을 조정하려면 이미지와 레이블 파일을 함께 다른 폴더로 옮겨야 합니다.
from ultralytics import YOLO
# 사전 학습된 YOLO26 nano 모델을 불러옵니다
model = YOLO("yolo26n.pt")
# coco8.yaml은 학습 이미지(train: images/train)와 검증 이미지(val: images/val)를 나열합니다.
results = model.train(data="coco8.yaml", epochs=5)YOLO26 모델은 학습 파이프라인이 처음부터 끝까지 실행되는지 확인하기 위한 소규모 샘플인 COCO8의 학습 이미지 4개로 미세 조정됩니다. 이 샘플은 학습 파이프라인을 점검하는 데 사용됩니다.
학습 데이터와 관련 용어 비교#
- 검증 데이터: 학습을 언제 중단할지 등 개발 중 의사결정을 돕는 홀드아웃 분할입니다. 모델은 이 데이터를 사용해 가중치를 업데이트하지 않습니다.
- 테스트 데이터: 마지막에 한 번 점수를 산출하는 홀드아웃 분할로, 새로운 데이터에서의 성능을 편향 없이 추정할 수 있습니다.
- 정답: 예제에 연결된 올바른 답입니다. 지도 학습에서는 학습 데이터에 정답이 포함되지만, 점수를 산출하려면 모든 분할에 정답이 있어야 합니다.
- 골든 데이터셋: 평가 및 라벨러 품질 검사를 위한 신뢰할 수 있는 기준으로 사용되는, 전문가가 검수한 소규모 데이터셋입니다.
- 벤치마크 데이터셋: 모델을 비교하는 데 사용되는, 고정된 분할을 갖춘 공개 데이터셋입니다. 학습 분할은 사전 학습 데이터로도 사용되는 경우가 많고, 보류된 분할은 점수판 역할을 합니다. 예를 들어 많은 객체 탐지 논문은 5,000개 이미지로 구성된 COCO val2017 분할에서 mAP를 보고합니다.










