티스토리 뷰

반응형

머신러닝 기초학습 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. 결론: “튜닝은 과학이자 예술이다.”

하이퍼파라미터 튜닝은 데이터의 성격 + 모델의 특성 + 시간 제약의 조합입니다.
즉, 완벽한 공식은 없습니다.

하지만 원칙은 있습니다.

  1. 단순한 모델부터 시작하라.
  2. 탐색 범위를 넓게 설정하라.
  3. 최적값은 ‘한 지점’이 아니라 ‘범위’로 보라.
  4. 교차검증으로 일반화를 반드시 확인하라.

📘 다음 글 예고

👉 머신러닝 기초학습 7: 피처 중요도와 모델 해석 — 모델이 ‘왜 그렇게 예측했는가’를 이해하기

다음 글에서는 블랙박스 모델의 내부를 열어,
피처 중요도(Feature Importance), SHAP 값, LIME 등을 통해
“모델의 생각을 시각화”하는 방법을 다룹니다.



머신러닝,AI기초,하이퍼파라미터튜닝,모델최적화,그리드서치,랜덤서치,베이지안최적화,Optuna,AutoML,학습률

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
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
글 보관함
반응형