Study/A.I
[AI STUDY] 모델 튜닝과 하이퍼파라미터 최적화
knowledge hunter
2025. 1. 28. 09:18
728x90
반응형
1. 학습 목표
- 모델 튜닝의 개념과 중요성을 이해한다.
- 하이퍼파라미터와 학습 파라미터의 차이를 구분한다.
- 그리드 서치(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. 복습 질문
- 하이퍼파라미터와 학습 파라미터의 차이점은 무엇인가요?
- 그리드 서치와 랜덤 서치의 장단점은 무엇인가요?
- 딥러닝에서 학습률(learning rate)을 조정하는 이유는 무엇인가요?
8. 학습 결과
- 하이퍼파라미터가 모델 성능에 미치는 영향을 이해.
- 그리드 서치와 랜덤 서치 기법을 실습.
- 딥러닝 하이퍼파라미터를 조정하며 모델 성능 최적화.
9. 마무리
7일차 학습에서는 하이퍼파라미터 최적화를 통해 모델 성능을 높이는 방법을 배웠습니다. 최적화 과정을 이해하면 더 높은 정확도와 효율성을 갖춘 모델을 구축할 수 있습니다. 😊
728x90
반응형
LIST