매개변수 최적화
IT 위키
더 많은 작업
- Parameter Optimization; 매개변수 최적화
- 손실함수를 최소로 만드는 모형의 매개변수 값을 찾는 과정. 넓게는 학습 전에 정하는 하이퍼파라미터를 고르는 과정까지 포함한다
| 구분 | 매개변수(Parameter) | 하이퍼파라미터(Hyperparameter) |
|---|---|---|
| 정하는 주체 | 데이터로부터 학습으로 추정 | 분석가가 학습 전에 지정 |
| 예 | 신경망 가중치·편향, 회귀계수, 서포트 벡터 | 학습률, 배치 크기, 에포크 수, 은닉층·노드 수, 트리 최대 깊이, K-NN의 k, SVM의 C, 정규화 강도 |
| 찾는 방법 | 경사 하강법 계열 옵티마이저, 최소제곱법 등 | 그리드 서치, 랜덤 서치, 베이지안 최적화 |
매개변수 , 손실함수 , 학습률 일 때 기본 갱신식은 이다.
| 기법 | 핵심 아이디어 | 특징 |
|---|---|---|
| 경사 하강법(GD) | 전체 데이터의 기울기 반대 방향으로 이동 | 한 번 갱신에 전체 데이터를 써서 느리고, 지역 최솟값·안장점에 머무를 수 있다 |
| 확률적 경사 하강법(SGD) | 무작위로 고른 표본 하나(또는 미니배치)의 기울기로 갱신 | 빠르지만 경로가 지그재그로 흔들린다. 기울기가 방향마다 크게 다르면 비효율적이다 |
| 모멘텀(Momentum) | 이전 이동 방향을 관성처럼 유지해 진동을 줄이고 수렴을 빠르게 한다 | |
| AdaGrad | 많이 갱신된 매개변수의 학습률을 줄이는 적응적 학습률. 학습이 길어지면 학습률이 0에 가까워져 갱신이 멈출 수 있다 | |
| RMSProp | 과거 기울기를 지수이동평균으로 잊어 가며 반영해 AdaGrad의 학습률 소멸 문제를 완화한다 | |
| Adam | 1차 모멘트(기울기 평균, 모멘텀)와 2차 모멘트(기울기 제곱 평균, RMSProp)를 함께 쓰고 편향 보정 | 기본값 . 딥러닝에서 가장 널리 쓰는 기본 선택이다 |
은 0으로 나누는 것을 막는 작은 값이다.
| 방법 | 방식 | 장단점 |
|---|---|---|
| 그리드 서치(Grid Search) | 후보 값의 모든 조합을 시험 | 빠짐없지만 조합 수가 곱으로 늘어 계산량이 크다 |
| 랜덤 서치(Random Search) | 탐색 범위에서 조합을 무작위로 정해진 횟수만큼 추출 | 같은 계산량으로 중요한 하이퍼파라미터의 값을 더 다양하게 시험해 대개 더 효율적이다 |
| 베이지안 최적화 | 지금까지의 결과로 대리 모형(가우시안 프로세스 등)을 만들고, 획득 함수로 다음 시험 지점을 고름 | 적은 시도로 좋은 값을 찾는다. 순차적이라 병렬화가 어렵다 |
평가는 보통 K-fold 교차검증으로 하며, 최종 성능은 탐색에 쓰지 않은 테스트 데이터로 확인한다.
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.ensemble import RandomForestClassifier
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, stratify=y, random_state=42)
param_grid = {
"n_estimators": [100, 300],
"max_depth": [None, 5, 10],
"min_samples_leaf": [1, 3],
} # 2 x 3 x 2 = 12개 조합, 5-fold면 60번 학습
gs = GridSearchCV(RandomForestClassifier(random_state=42),
param_grid, cv=5, scoring="roc_auc", n_jobs=-1)
gs.fit(X_train, y_train)
print(gs.best_params_, gs.best_score_)
print(gs.best_estimator_.score(X_test, y_test))
랜덤 서치는 RandomizedSearchCV에 분포와 n_iter를 주어 같은 방식으로 쓴다.
- 매개변수와 하이퍼파라미터 구분(학습률·배치 크기·k·트리 깊이는 하이퍼파라미터)
- 옵티마이저 특징 짝짓기(모멘텀 = 관성, AdaGrad = 학습률 감소, RMSProp = 지수이동평균, Adam = 모멘텀 + RMSProp)
- 그리드 서치·랜덤 서치·베이지안 최적화의 차이, 실기에서 GridSearchCV 사용과 best_params_ 확인