미래연구소 홈페이지: 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이 중지됩니다.
'Deep Learning' 카테고리의 다른 글
YOLOv3를 활용한 전동킥보드 헬멧 미착용 감시 시스템 만들기 3 (0) | 2021.05.13 |
---|---|
YOLOv3를 활용한 전동킥보드 헬멧 미착용 감시 시스템 만들기 2 (0) | 2021.05.08 |
YOLOv3를 활용한 전동킥보드 헬멧 미착용 감시 시스템 만들기 1 (0) | 2021.05.08 |
Batch Normalization, Transfer Learning (0) | 2020.09.19 |
Pandas 기초 2: Indexing & Slicing (3) | 2020.09.01 |
Pandas 기초 1: Series와 DataFrame 다루기 (2) | 2020.09.01 |
Metrics (0) | 2020.08.31 |
[Dacon] 공유된 코드를 통해 선수지식 학습하기 (0) | 2020.08.30 |