편향-분산 트레이드오프는 모델 복잡도와 일반화 사이의 근본 긴장이다. 복잡도를 올리면 편향은 줄지만 분산이 커지고, 낮추면 그 반대다. 목표는 (편향 + 분산) 합이 최소가 되는 지점을 찾는 것이다. 정규화는 분산을 줄여 과적합을 잡고, 모델 용량·특징 추가는 편향을 줄여 과소적합을 잡는다.
[과적합 신호] loss │╲ ← 검증 손실이 어느 시점 이후 다시 올라감 │ ╲___ valid 정확도: train 99% / valid 72% (격차 큼) │ ╲ ╱‾‾‾ 에폭이 갈수록 train loss만 계속 하락 │ ╲_╱ │ ╲_______ train └──────────────── epoch ↑ 여기가 조기 종료 지점[과소적합 신호] loss │‾‾‾‾‾‾‾‾‾‾‾ valid 정확도: train 65% / valid 64% (둘 다 낮고 비슷) │‾‾‾‾‾‾‾‾‾‾‾ train 더 학습해도 손실이 높은 채 평탄(plateau) └──────────────── epoch[이상적] loss │╲___ │ ╲___╲______ valid 두 곡선이 함께 내려가 낮은 값에서 근접 │ ╲_________ train └──────────────── epoch
드롭아웃(Dropout): 스텝마다 뉴런을 무작위로 비활성화(예: rate 0.5). 특정 뉴런 의존을 막고 암묵적 앙상블 효과를 낸다. 추론 시에는 비활성화하고 가중치를 보정한다.
조기 종료(Early Stopping): 검증 손실이 더 나아지지 않으면 학습을 멈춘다. 과적합 지점에 도달하기 전에 끊는다.
# 예: 신경망 하이퍼파라미터hyperparameters = { "dropout": 0.5, "early_stopping_patience": 5, # 5에폭 개선 없으면 중단}
드롭아웃은 매 스텝 서로 다른 하위 신경망을 학습시키고 추론 시 그것들을 평균 내는 셈이라 암묵적 앙상블로 작동한다. 조기 종료는 잡음 암기가 시작되기 직전에 학습을 멈춰 분산을 줄인다. 둘 다 "실효 모델을 더 단순하게 만든다"는 같은 목표를 서로 다른 방식으로 달성한다.
[올바른 순서]원시 데이터 │ ① 분할 (train / validation / test) ← 여기서부터 모든 fit은 학습셋만 │ ② 결측 대치 · 인코딩 · 스케일링 (train에서 fit → 전체에 transform) │ ③ 증강 / SMOTE (train에만) │ ④ 학습 → 검증셋으로 하이퍼파라미터 선택 (여기서 정규화 강도 조정) │ ⑤ 테스트셋 1회 채점 (최종 보고용)
모델 성능이 기대에 못 미친다├─ 학습 성능 자체가 낮은가?│ ├─ 예 → 과소적합(편향↑)│ │ ├─ 모델 복잡도↑ (층·트리 깊이·특징 추가)│ │ ├─ 정규화 강도↓ (L1/L2/드롭아웃 완화)│ │ └─ 더 오래 학습 (에폭↑)│ └─ 아니오 ↓├─ 학습은 좋은데 검증과 격차가 큰가?│ ├─ 예 → 과적합(분산↑)│ │ ├─ 데이터를 더 모을 수 있나?│ │ │ ├─ 예 → 데이터 추가│ │ │ └─ 아니오 → 데이터 증강(이미지: 회전·크롭 / 텍스트: 역번역)│ │ ├─ 특징이 너무 많고 일부는 무관한가? → L1│ │ ├─ 모든 특징을 남기며 눌러야 하나? → L2│ │ ├─ 신경망인가? → 드롭아웃│ │ └─ 검증 손실이 다시 오르는가? → 조기 종료│ └─ 아니오 ↓└─ 검증 점수가 비현실적으로 높은가? └─ 예 → 데이터 누수 의심 (전처리 fit 범위·타깃 파생 특징·중복 확인)