본문 바로가기
Deep Learning

Hyper parameter Tuning

by 자라자 2020. 9. 13.

미래연구소 홈페이지: futurelab.creatorlink.net/

 

Hyperparameter Tuning하기

 

모델을 구성하는 데 다양한 Hyper parameter들이 있는데, 이를 어떻게 조절하는 것이 좋은지에 대해 배웠습니다.

 

Hyperparameter는 위 그림과 같이 크게 두 가지로 분류해서 생각해줄 수 있는데, Model 자체에 관한 것과 Optimization에 관한 것입니다. 각각 어떤 방향으로 하는 것이 좋은지 정리해보았습니다.

 

Model

`the number of layers`: MLP에서는 1~10 개의 레이어를 사용하고 매우 유동적입니다. CNN에서는 보통 152개 이하, 근래 들어서는 1000개까지도 사용하곤 합니다.

`the number of units`: 10~1024개의 unit/layer를 사용합니다.

 

Optimization

`optimizer`: 통상적으로 `adam`을 가장 많이 사용하는데요, 시간에 여유가 있다면 `SGD`등 다양한 방법으로 시도해보는 것도 좋은 선택인 것 같습니다.

`learning rate`: log scale로 튜닝을 합니다. 보통 0.01정도부터 시작해서 0.001, 0.0001 등으로 내려갑니다. `learning rate scheduler`를 이용하면 이를 자동으로 조절할 수 있습니다.

 

`L2 coefficients`: 마찬가지로 log scale로 튜닝합니다. 보통 1e-5~1e5의 값을 갖습니다.

 

`dropout rate`: 보통 0.1에서 0.5 사이의 값을 갖습니다. 너무 크게 주면 데이터 손실이 커져서 그런 것 같습니다.

 

`batch size`: 얼마나 크게 쪼개냐가 중요한데, 당연히 큰 값을 할당할수록 train 속도가 빠르므로 컴퓨터 성능이 받쳐주는 선에서 정하면 됩니다. 관례적으로 2의 거듭제곱에 해당하는 size를 갖는데, 2^5~2^10의 값을 보통 사용합니다.

 

`epoch`: epoch도 다양한 시도를 통해서 정하는 게 좋은데, early stopping등을 활용하면 효율적으로 epoch을 찾을 수 있습니다.

 

Early Stopping

참조문서: keras.io/api/callbacks/#earlystopping

from tensorflow.keras.callbacks import EarlyStopping
es = EarlyStopping(monitor='val_loss', patience=2)
model = create_model()

history = model.fit(x, y,  epochs = 20, validation_split = 1/6,callbacks = [es], batch_size= 512)

Early Stopping을 구현하는 부분입니다. `monitor`는 early stopping을 결정하는 기준이고, `min_delta`는 이 값보다 변화가 작으면 멈추는 기준값입니다. `patience`는 이 숫자의 epoch만큼 개선되지 않으면 멈추는 기준입니다. 예를 들면 `patience`가 2이고 `monitor`가 `val_loss`일 때 두번 연속해서 `val_loss`가 증가하는 양상을 보이면 training이 중지됩니다.