티스토리 뷰
머신러닝 기초학습 6: 하이퍼파라미터 튜닝과 모델 최적화 — 모델의 ‘감’을 숫자로 조정하는 기술
“모델은 사람처럼 감이 없습니다.
대신 하이퍼파라미터가 그 감을 대신합니다.”
이번 글은 머신러닝 실무의 핵심 단계인
하이퍼파라미터 튜닝(Hyperparameter Tuning) 과
모델 최적화(Model Optimization) 에 대한 완전 해설입니다.
1. 하이퍼파라미터란?
“모델이 학습하기 전에 사람이 정해야 하는 설정값.”
모델이 스스로 학습하는 건 파라미터(parameter),
사람이 정해야 하는 건 하이퍼파라미터(hyperparameter) 입니다.
모델 하이퍼파라미터 예시 의미
| Linear Regression | α (정규화 강도) | 과적합 제어 |
| SVM | C, kernel | 마진 폭과 패널티 조절 |
| Random Forest | n_estimators, max_depth | 트리 개수, 깊이 |
| XGBoost | learning_rate, n_estimators, subsample | 학습률, 부스팅 단계, 데이터 비율 |
| Neural Network | learning_rate, batch_size, dropout | 학습 속도, 안정성, 과적합 제어 |
하이퍼파라미터는 모델의 성격, 속도, 일반화 능력을 결정합니다.
“잘못 조정된 하이퍼파라미터는 훌륭한 데이터도 망친다.”
2. 하이퍼파라미터 vs 파라미터
구분 하이퍼파라미터 파라미터
| 조정 시점 | 학습 전 | 학습 중 자동 결정 |
| 예시 | learning_rate, max_depth | 가중치(weight), 절편(bias) |
| 역할 | 학습 규칙/속도 조정 | 모델이 배우는 값 |
| 튜닝 방법 | 수동, 탐색, AutoML | 경사하강법 등으로 자동 |
3. 튜닝의 목적
“과적합을 피하면서 성능을 극대화하는 값 찾기”
하이퍼파라미터는 모델의 복잡도, 학습률, 정규화 정도를 조절합니다.
적절히 조정하면 훈련 손실은 안정적으로 감소하고, 검증 손실은 최소화됩니다.
아래는 전형적인 학습 곡선입니다.
손실
│ train ↓
│ /\
│ / \__ valid
│__/__________→ epoch
- 학습률이 너무 크면: 발산(unstable)
- 너무 작으면: 수렴이 느리거나 지역 최소점에 갇힘
- 정규화가 약하면: 과적합
- 강하면: 과소적합
4. 하이퍼파라미터 탐색 기법
(1) 수동 탐색 (Manual Search)
- 직관이나 경험으로 조정
- 간단하지만, 변수 많으면 비효율적
(2) 그리드 탐색 (Grid Search)
“모든 조합을 전수 조사한다.”
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [3, 5, None]
}
model = RandomForestClassifier(random_state=42)
grid = GridSearchCV(model, param_grid, cv=5, scoring='accuracy')
grid.fit(X, y)
print("최적 하이퍼파라미터:", grid.best_params_)
print("최적 점수:", grid.best_score_)
장점: 결과가 확실함
단점: 계산량이 많아 느림 (모든 조합 시도)
(3) 랜덤 탐색 (Random Search)
“일정 횟수만 랜덤하게 샘플링하여 탐색한다.”
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint
param_dist = {
'n_estimators': randint(50, 300),
'max_depth': randint(2, 10)
}
search = RandomizedSearchCV(model, param_distributions=param_dist, n_iter=10, cv=5)
search.fit(X, y)
print("최적 파라미터:", search.best_params_)
장점: 효율적, 계산 시간 단축
단점: 모든 조합을 보장하지 않음
(4) 베이지안 최적화 (Bayesian Optimization)
“이전 결과를 학습해, 다음 탐색 방향을 똑똑하게 정한다.”
기존 탐색들은 ‘무작위’였지만,
베이지안 최적화는 “어디를 탐색하면 좋을지”를 예측합니다.
대표 라이브러리:
- scikit-optimize (skopt)
- optuna
- hyperopt
import optuna
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
def objective(trial):
n_estimators = trial.suggest_int('n_estimators', 50, 300)
max_depth = trial.suggest_int('max_depth', 2, 10)
clf = RandomForestClassifier(
n_estimators=n_estimators,
max_depth=max_depth,
random_state=42
)
score = cross_val_score(clf, X, y, cv=5, scoring='accuracy').mean()
return score
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=20)
print("Best Params:", study.best_params)
print("Best Score:", study.best_value)
장점: 빠르고 효율적, 최신 AutoML 시스템의 기반
단점: 구현 복잡도 다소 높음
5. AutoML과 자동 튜닝
“튜닝도 AI에게 맡기자.”
AutoML(Auto Machine Learning)은
하이퍼파라미터뿐 아니라 모델 선택, 전처리, 피처 선택까지 자동화합니다.
대표 라이브러리:
- Auto-sklearn
- TPOT
- H2O AutoML
- Google Vertex AI, AWS SageMaker Autopilot
AutoML은 단순히 자동화가 아니라,
“사람의 실험 경험을 데이터화”한 시스템이라고 볼 수 있습니다.
6. 튜닝 시 고려해야 할 실무 팁
상황 권장 접근법
| 데이터 적음 | 교차검증으로 일반화 확인 |
| 데이터 많음 | Random Search + Early stopping |
| 모델 복잡 | Bayesian Optimization / Optuna |
| 시간 제한 | Hyperband / Successive Halving |
| 빠른 베이스라인 | Default 모델로 baseline 먼저 |
7. 하이퍼파라미터 탐색의 시각적 예시
성능
│ ●
│ ●●
│ ●●●
│ ●●●●●
│______________→ 파라미터 조합
- 그리드 탐색: 모든 점 찍음
- 랜덤 탐색: 일부만 찍음
- 베이지안 탐색: 좋은 점 근처로 점점 몰림
8. 학습률(learning rate)의 비밀
“딥러닝의 절반은 학습률 싸움이다.”
학습률은 파라미터를 업데이트할 때 이동하는 크기입니다.
상태 설명 결과
| 너무 큼 | 발산 | 손실 폭주 |
| 너무 작음 | 수렴 느림 | 시간 낭비 |
| 적절함 | 부드럽게 최소점 도달 | 최적 학습 |
Learning Rate Scheduler
→ epoch에 따라 점점 줄이는 방식이 일반적입니다. (StepLR, CosineAnnealingLR 등)
9. 튜닝 자동화 실전 예제
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import GradientBoostingClassifier
from scipy.stats import uniform
X, y = load_breast_cancer(return_X_y=True)
model = GradientBoostingClassifier()
param_dist = {
'learning_rate': uniform(0.01, 0.3),
'n_estimators': [50, 100, 200, 300],
'max_depth': [2, 3, 4, 5]
}
search = RandomizedSearchCV(model, param_distributions=param_dist,
n_iter=10, scoring='f1', cv=5, random_state=42)
search.fit(X, y)
print("최적 하이퍼파라미터:", search.best_params_)
print("최적 점수:", search.best_score_)
10. 결론: “튜닝은 과학이자 예술이다.”
하이퍼파라미터 튜닝은 데이터의 성격 + 모델의 특성 + 시간 제약의 조합입니다.
즉, 완벽한 공식은 없습니다.
하지만 원칙은 있습니다.
- 단순한 모델부터 시작하라.
- 탐색 범위를 넓게 설정하라.
- 최적값은 ‘한 지점’이 아니라 ‘범위’로 보라.
- 교차검증으로 일반화를 반드시 확인하라.
📘 다음 글 예고
👉 머신러닝 기초학습 7: 피처 중요도와 모델 해석 — 모델이 ‘왜 그렇게 예측했는가’를 이해하기
다음 글에서는 블랙박스 모델의 내부를 열어,
피처 중요도(Feature Importance), SHAP 값, LIME 등을 통해
“모델의 생각을 시각화”하는 방법을 다룹니다.
머신러닝,AI기초,하이퍼파라미터튜닝,모델최적화,그리드서치,랜덤서치,베이지안최적화,Optuna,AutoML,학습률
'study > ML' 카테고리의 다른 글
| 머신러닝 기초학습 8: 모델 배포와 운영 (MLOps) — 학습된 모델을 서비스로 연결하는 법 (0) | 2025.11.12 |
|---|---|
| 머신러닝 기초학습 7: 피처 중요도와 모델 해석 — 모델이 ‘왜 그렇게 예측했는가’를 이해하기 (0) | 2025.11.04 |
| 머신러닝 기초학습 5: 모델 평가와 일반화 — 과적합을 피하고 진짜 실력을 확인하는 법 (0) | 2025.10.30 |
| 머신러닝 기초학습 4: 데이터 전처리와 피처 엔지니어링 — 모델이 이해할 수 있는 데이터로 바꾸는 기술 (0) | 2025.10.29 |
| 머신러닝 기초학습 3 (개정판): 비전공자도 이해하는 머신러닝 핵심 용어 사전 (0) | 2025.10.28 |
- Total
- Today
- Yesterday
- DevOps
- 웹개발
- Next.js
- Prisma
- PostgreSQL
- ai철학
- 압박면접
- kotlin
- fastapi
- JWT
- Docker
- SEO최적화
- node.js
- flax
- 쿠버네티스
- 백엔드개발
- seo 최적화 10개
- NestJS
- Python
- 개발블로그
- LangChain
- llm
- Redis
- rag
- Express
- REACT
- JAX
- nextJS
- 딥러닝
- CI/CD
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |

