Study/A.I

[AI STUDY] 모델 튜닝과 하이퍼파라미터 최적화

knowledge hunter 2025. 1. 28. 09:18
728x90
반응형

1. 학습 목표

  1. 모델 튜닝의 개념과 중요성을 이해한다.
  2. 하이퍼파라미터와 학습 파라미터의 차이를 구분한다.
  3. 그리드 서치(Grid Search)와 랜덤 서치(Random Search) 같은 최적화 기법을 실습한다.

2. 모델 튜닝이란?

1) 모델 튜닝의 정의

  • 모델 튜닝은 머신러닝 및 딥러닝 모델의 성능을 향상시키기 위해 하이퍼파라미터를 조정하는 과정입니다.
  • 모델의 구조와 학습 과정을 최적화해 더 나은 예측 성능을 제공합니다.

2) 모델 튜닝의 중요성

  • 모델의 하이퍼파라미터는 성능에 큰 영향을 미칩니다.
  • 올바른 하이퍼파라미터 설정은 과적합(Overfitting)과 과소적합(Underfitting)을 방지하고 일반화 성능을 향상시킵니다.

3. 하이퍼파라미터와 학습 파라미터

1) 학습 파라미터

  • 학습 중에 모델이 자동으로 학습하는 값.
  • 예: 가중치(weight), 편향(bias).

2) 하이퍼파라미터

  • 학습 전에 사용자가 설정해야 하는 값.
  • :
    • 머신러닝: 학습률(learning rate), 결정 트리의 깊이(max_depth).
    • 딥러닝: 은닉층의 개수, 뉴런의 수, 배치 크기(batch size), 활성화 함수.

4. 하이퍼파라미터 최적화 기법

1) 그리드 서치(Grid Search)

  • 개념:
    • 모든 가능한 하이퍼파라미터 조합을 탐색해 최적의 값을 찾음.
  • 장점:
    • 최적의 하이퍼파라미터를 보장.
  • 단점:
    • 계산량이 많아 실행 속도가 느릴 수 있음.

2) 랜덤 서치(Random Search)

  • 개념:
    • 하이퍼파라미터 공간에서 무작위로 조합을 샘플링.
  • 장점:
    • 계산량 감소, 고차원 공간에서 효율적.
  • 단점:
    • 최적값을 놓칠 가능성이 있음.

3) 베이지안 최적화(Bayesian Optimization)

  • 개념:
    • 과거의 평가 결과를 바탕으로 하이퍼파라미터 조합을 점진적으로 개선.
  • 장점:
    • 효율적이고 고성능.
  • 단점:
    • 구현이 복잡할 수 있음.

5. 하이퍼파라미터 최적화 실습

1) 그리드 서치 실습

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris

# 데이터 준비
data = load_iris()
X, y = data.data, data.target

# 모델 정의
model = RandomForestClassifier(random_state=42)

# 하이퍼파라미터 설정
param_grid = {
    'n_estimators': [50, 100, 150],
    'max_depth': [None, 10, 20],
    'min_samples_split': [2, 5, 10]
}

# 그리드 서치
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5, scoring='accuracy')
grid_search.fit(X, y)

# 최적의 하이퍼파라미터와 성능 출력
print("최적 하이퍼파라미터:", grid_search.best_params_)
print("최적 성능:", grid_search.best_score_)

2) 랜덤 서치 실습

from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
import numpy as np

# 데이터 준비
data = load_iris()
X, y = data.data, data.target

# 모델 정의
model = RandomForestClassifier(random_state=42)

# 하이퍼파라미터 범위 설정
param_dist = {
    'n_estimators': np.arange(50, 200, 10),
    'max_depth': [None, 10, 20, 30],
    'min_samples_split': [2, 5, 10, 15]
}

# 랜덤 서치
random_search = RandomizedSearchCV(estimator=model, param_distributions=param_dist, n_iter=10, cv=5, scoring='accuracy', random_state=42)
random_search.fit(X, y)

# 최적의 하이퍼파라미터와 성능 출력
print("최적 하이퍼파라미터:", random_search.best_params_)
print("최적 성능:", random_search.best_score_)

6. 딥러닝 하이퍼파라미터 최적화

TensorFlow/Keras를 활용한 하이퍼파라미터 조정

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.datasets import mnist

# 데이터 준비
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train.reshape(-1, 28*28) / 255.0, x_test.reshape(-1, 28*28) / 255.0

# 하이퍼파라미터 설정
batch_size = 32
epochs = 10
learning_rate = 0.001

# 모델 정의
model = Sequential([
    Dense(128, activation='relu', input_shape=(28*28,)),
    Dense(10, activation='softmax')
])

# 옵티마이저 설정
optimizer = Adam(learning_rate=learning_rate)

# 모델 컴파일
model.compile(optimizer=optimizer, loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# 모델 학습
model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.2)

# 평가
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"테스트 정확도: {test_acc}")

7. 복습 질문

  1. 하이퍼파라미터와 학습 파라미터의 차이점은 무엇인가요?
  2. 그리드 서치와 랜덤 서치의 장단점은 무엇인가요?
  3. 딥러닝에서 학습률(learning rate)을 조정하는 이유는 무엇인가요?

8. 학습 결과

  • 하이퍼파라미터가 모델 성능에 미치는 영향을 이해.
  • 그리드 서치와 랜덤 서치 기법을 실습.
  • 딥러닝 하이퍼파라미터를 조정하며 모델 성능 최적화.

9. 마무리

7일차 학습에서는 하이퍼파라미터 최적화를 통해 모델 성능을 높이는 방법을 배웠습니다. 최적화 과정을 이해하면 더 높은 정확도와 효율성을 갖춘 모델을 구축할 수 있습니다. 😊

728x90
반응형
LIST