과적합(Overfitting)이란 무엇인가? 지도 학습을 통해 이해하기 — 정규화, 교차 검증, 앙상블까지
요약
본 글은 기계 학습의 핵심 개념인 과적합(Overfitting)과 일반화(Generalization)을 지도 학습의 관점에서 설명합니다. 모델이 훈련 데이터에만 지나치게 맞춰지는 과적합 문제를 정의하고, 이를 방지하는 정규화, 교차 검증, 앙상블 등의 방법을 소개하며 좋은 모델의 목표가 미지의 데이터에서도 성능을 유지하는 것임을 강조합니다.
핵심 포인트
- 과적합은 훈련 데이터에만 너무 맞춰져 미지 데이터에서 성능이 떨어지는 현상입니다.
- 일반화는 학습하지 못한 새로운 데이터에도 규칙을 적용할 수 있는 능력을 의미합니다.
- 정규화, 교차 검증 등은 과적합을 방지하고 모델의 일반화 성능을 높이는 대표적인 방법들입니다.
기계 학습의 용어는 하나씩 암기하면 관계를 파악하기 어려워지기 쉽습니다.
예를 들어,
- 과적합 (Overfitting)
- 일반화 (Generalization)
- 정규화 (Regularization)
- 교차 검증 (Cross-validation)
- 앙상블 학습 (Ensemble Learning)
- 다중 작업 학습 (Multi-task Learning)
이들은 모두 지도 학습(Supervised Learning) 주변에서 자주 등장합니다.
본 글에서는 이들을 개별적으로 외우기보다는,
"학습한 모델을 미지의 데이터에서도 잘 사용할 수 있도록 하는 방법"라는 하나의 흐름으로 정리하겠습니다.
지도 학습 (Supervised Learning)은,
입력 데이터와 정답(정답 레이블)을 세트로 묶어, 입력으로부터 정답을 예측하는 규칙을 학습시키는 방법입니다.
예를 들어 주택의 임대료를 예측하고 싶다면 다음과 같은 데이터를 준비합니다.
| 면적 | 건축 연도 | 역까지 거리 | 임대료 |
|---|---|---|---|
| 40㎡ | 5년 | 5분 | 9만 원 |
| ... | |||
| 여기서 "면적・건축 연도・역까지 거리"가 입력(Input)이고, "임대료"가 정답(Label)입니다. |
기계 학습에서 말하는 **모델(Model)**이란,
입력을 받아 그로부터 예측 결과를 내놓는, 학습이 완료된 구조물입니다.
예를 들어 주택 가격 예측이라면,
와 같은 역할을 합니다.
일반적인 프로그램에서는 사람이 규칙을 직접 작성합니다.
사람
↓
규칙 작성
...
반면, 기계 학습에서는
d이터
↓
학습 알고리즘
...
이러한 흐름이 됩니다. 여기서 **알고리즘(Algorithm)**과 **모델(Model)**은 같은 것이 아닙니다.
- 알고리즘: 어떻게 학습할 것인가에 대한 방법 -
- 모델: 그 방법으로 실제로 데이터를 학습하여 만들어진 결과물
요리에 비유하자면, "알고리즘 = 레시피", "데이터 = 재료", "모델 = 완성된 요리" 정도의 관계입니다.
지도 학습의 대표적인 문제는 크게 **분류(Classification)**와 **회귀(Regression)**로 나뉩니다. 기억하기는 간단합니다.
분류 = 무엇인지 (What kind)
회귀 = 몇 개인지 (How much)
모델을 만드는 목적은, 학습에 사용된 데이터만을 정확하게 맞추는 것이 아닙니다. 정말 중요한 것은,
학습 시에는 본 적이 없는 새로운 데이터에도 올바르게 대응할 수 있는 것입니다.
여기서 **과적합(Overfitting)**과 **일반화(Generalization)**라는 중요한 개념이 나옵니다.
모델이 훈련 데이터에 너무 맞춰져 버리는 것을 **과적합 (Overfitting)**이라고 합니다. 예를 들어,
와 같은 상태입니다. 훈련 데이터에는 매우 잘 맞지만, 미지 데이터에서는 성능이 떨어집니다.
모델이,
데이터 전체에 공통하는 본질적인 규칙
뿐만 아니라,
훈련 데이터에 우연히 포함되어 있던 세밀한 특징이나 노이즈
까지 기억해 버리면 이런 일이 발생합니다.
**일반화 (Generalization)**이란,
학습할 때 보지 못한 데이터에도 학습된 규칙을 적용할 수 있는 것을 말합니다. 그 능력을 **일반화 성능(Generalization Performance)**이라고 부릅니다.
훈련 데이터에는 강함
≠
좋은 모델
이상적인 상태는,
훈련 데이터에도 강함
+
미지 데이터에도 강함
과적합을 방지하는 대표적인 방법 중 하나가 **정규화 (Regularization)**입니다.
※ '정규화 (Normalization)'와는 다른 용어입니다.
정규화를 이해하려면, 먼저 **모델의 복잡성(Model Complexity)**이 무엇을 의미하는지 이해하면 쉽습니다. 여기서 말하는 복잡성은 "코드가 읽기 어렵다"라거나 "파일 크기가 크다"는 의미가 아닙니다. 대략적으로 말하면,
얼마나 다양한 규칙이나 형태를 표현할 수 있는가에 대한, 모델의 자유도/표현력입니다.
예를 들어, 입력 x로부터 출력 y를 예측한다고 가정해 봅시다. 가장 단순한 모델 중 하나는 직선입니다.
y = ax + b
이 모델이 조정할 수 있는 것은 주로 기울기 a와 절편 b입니다. 표현 가능한 형태가 직선뿐이므로, 자유도가 그리 높지 않습니다.
d이터 ●
●
●
...
데이터에서 약간 벗어나더라도 전체적인 경향을 포착하려고 합니다.
반면, 더 높은 차수의 다항식이라면,
y = a₀ + a₁x + a₂x² + a₃x³ + … + aₙxⁿ
처럼 조정할 수 있는 계수(coefficient)가 늘어납니다. 차수를 높일수록 더 복잡한 곡선을 표현할 수 있습니다.
단순한 모델
────────/────────
더 복잡한 모델
...
복잡하다는 것 자체가 나쁜 것은 아닙니다. 현실의 규칙 자체가 복잡하다면, 너무 단순한 모델로는 표현할 수 없습니다.
문제인 것은,
필요 이상으로 자유도가 높아 훈련 데이터의 우연한 변동까지 설명해 버리는 것입니다.
예를 들어, 공부 시간과 시험 점수에 대해,
공부 시간이 길수록 점수도 높기 쉽다
라는 대략적인 관계가 있다고 가정합시다.
하지만 실제 데이터에는,
- 그날 우연히 컨디션이 안 좋았다
- 잘하는 문제가 나왔다
- 수면 부족이었다
와 같은 우연한 변동도 포함됩니다.
자유도가 낮은 모델이라면,
'어느 정도 벗어난 점은 있지만, 전체적으로 우상향이다'라고 학습합니다.
반면에 자유도가 너무 높은 모델은 1점 1점의 우연한 변화까지 설명하도록 곡선을 바꿀 수 있습니다.
즉,
표현력이 높다 → 좋은 규칙도 표현할 수 있지만, 노이즈(noise)까지 표현해 버릴 수 있다
라는 양면성이 있습니다.
실제 머신러닝에서 말하는 복잡성은 단순히 '파라미터 개수'만으로 결정되는 것은 아닙니다.
예를 들어,
- 의사결정나무(Decision Tree): 나무의 깊이나 분기 수
- 다항식 회귀(Polynomial Regression): 다항식의 차수
- 신경망(Neural Network): 층, 유닛, 파라미터, 구조
- 각 모델: 제약이나 정규화(Regularization)의 강도
등, 모델의 종류에 따라 '자유도'와 관련된 요소는 다릅니다.
일반적인 학습에서는 예측 오차를 작게 하고 싶다고 생각합니다.
하지만 오차만 줄이려고 하면, 훈련 데이터에 과하게 맞추기 위해 모델이 필요 이상으로 복잡해질 수 있습니다.
그래서 정규화(Regularization)에서는,
예측 오차뿐만 아니라, 모델이 필요 이상으로 복잡해지는 것에도 비용을 부과하는
방식을 사용합니다.
개념적으로는 다음과 같이 생각할 수 있습니다.
Objective = Loss + λ × Complexity
여기서,
Loss: 예측이 얼마나 벗어났는지 -Complexity: 모델의 복잡도를 나타내는 양 -λ: 복잡도에 대한 페널티를 어느 정도 중요하게 볼지
입니다.
즉, 정규화는,
'훈련 데이터를 완벽하게 외우기만 하려고 필요 이상으로 복잡해지지 마라'라는 브레이크입니다.
대표적인 방법으로는,
- L1 정규화
- L2 정규화
등이 있습니다.
참고로, 위의 식은 생각을 파악하기 위한 개념도일 뿐입니다. 실제로 무엇을 '복잡도'로 페널티화할지는 정규화 기법이나 모델에 따라 다릅니다.
정규화는 과적합(Overfitting)을 억제하는 방법이었습니다.
하지만,
진짜 미지 데이터에도 강해졌는지?
는 별도로 확인할 필요가 있습니다.
그래서 등장하는 것이,
- 홀드아웃법 (Holdout Method)
- 교차 검증 (Cross Validation)
입니다.
정규화
↓
모델의 학습 방법을 조정한다...
가장 단순한 방법은 데이터를 학습용과 평가용으로 나누는 것입니다.
예를 들어 1,000건의 데이터라면,
800건 → 학습
200건 → 평가
로 합니다.
이것이 홀드아웃법입니다.
한 번만 분할하면, 어떤 데이터가 평가 쪽에 들어갔는지에 따라 결과가 달라집니다.
우연히 쉬운 데이터들만 평가 쪽에 들어가면, 실제보다 성능이 높게 보일 수도 있습니다.
반대로 어려운 데이터들만 들어가면, 실제보다 나쁘게 보일 가능성이 있습니다.
그래서 등장하는 것이 교차 검증입니다.
교차 검증(Cross Validation)은,
훈련용과 평가용 데이터를 바꿔가며 여러 번 학습과 평가를 수행하는 방법입니다.
대표적인 것이 **k-폴드 교차 검증 (k-fold cross validation)**입니다.
예를 들어 5분할이라면,
[A][B][C][D][E]
처럼 데이터를 나눕니다.
이렇게 함으로써, 특정 분할에만 평가 결과가 좌우되는 것을 막을 수 있습니다.
| 방법 | 목적 |
|---|---|
| 정규화 | 과적합을 억제하고 모델의 학습을 조정한다 |
| 교차 검증 | 미지 데이터에 대한 성능을 평가한다 |
앙상블 학습 (Ensemble Learning) 이란,
여러 개의 모델을 조합하여 하나의 예측 결과를 만드는 방법입니다.
하나의 모델에만 의존하는 것이 아니라, 여러 전문가에게 판단을 맡겨 종합적으로 판단하는 이미지와 같습니다.
대표적인 방법으로는,
- 배깅 (Bagging)
- 부스팅 (Boosting)
- 스태킹 (Stacking)
이 있습니다.
Random Forest도 여러 의사결정나무를 조합하는 대표적인 앙상블 학습입니다.
다중 작업 학습 (Multi-task Learning) 이란,
하나의 모델로 관련 있는 여러 과제를 동시에 학습하는 방법입니다.
예를 들어 얼굴 이미지에서,
- 나이
- 표정
- 얼굴 방향
을 예측한다고 가정합시다.
이러한 과제들에는 눈, 코, 윤곽, 얼굴 형태 등 공통적으로 유용한 특징들이 있습니다.
따라서 공통 부분을 공유하여 학습함으로써 각 과제에 지식을 활용할 수 있습니다.
여러 모델
↓
하나의 예측
하나의 모델
↓
여러 태스크
방향이 반대입니다.
| 용어 | 한마디로 말하면 | 주요 목적 |
|---|---|---|
| 지도 학습 (Supervised Learning) | 정답이 있는 데이터로부터 배움 | 예측 모델을 만듦 |
| ... |
과적합 (Overfitting)
↓
모델이 훈련 데이터에 너무 맞춰진 상태
...
개별적인 단어를 외우는 것보다,
'무엇이 문제이고, 그 문제에 대해 어떤 기술을 적용하는가'라는 관계로 이해하면 기계 학습 전체의 흐름을 상당히 잘 파악할 수 있습니다.
- Google for Developers — Machine Learning
https://developers.google.com/machine-learning/
- scikit-learn — 교차 검증 (Cross-validation)
https://scikit-learn.org/stable/modules/cross_validation.html
- IBM — 앙상블 학습 (Ensemble Learning)
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기