신경망에서 다수 등장하는 하이퍼파라미터는 각 층의 뉴런 수 ,배치 크기, 매개변수 갱신 시의 학습률과 가중치 감소 등입니다.
이런 하이퍼 파라미터의 값을 적절하게 설정하지 않으면 모델의 성능이 크게 떨어지기도 합니다.
따라서 하이퍼파라미터의 값을 최대한 효율적으로 탐색하는 방법을 설명합니다.
지금까지 데이터셋을 훈련데이터와 시험데이터라는 두가지로 분리해 이용했습니다. 훈련데이터로 학습하고, 시험데이터로 범용 성능을 평가했죠. 주의할 점은, 하이퍼파라미터의 성능을 평가할 때는 시험데이터를 사용해서는 안됩니다. 이유는 시험 데이터를 사용하여 하이퍼파라미터가 조정되면 하이퍼파라미터값이 시험데이터에 오버피팅 되기 때문입니다. 따라서 하이퍼파라미터를 조정할 때에는 전용 확인 데이터가 필요합니다. 이런 하이퍼파라미터의 적절성을 평가하는 데이터를 검증데이터 라고 부릅니다.
데이터셋에 따라 이렇게 세 가지로 분류해 놓은 것도 있지만, 그렇지 않고 훈련데이터와 시험데이터로만 분리되어있을 경우에는 보통 훈련데이터 중 20% 정도를 검증데이터로 먼저 분리합니다.
- 학습데이터를 얼마나 잘 맞추는지에 대한 정확성보다는 한번도 보지 못한(unseen)데이터를 얼마나 잘 예측하는지가 중요한데
성능 평가를 할 때 시험데이터를 사용하게 되면 시험데이터에만 적합하도록 조정이 되어서 unseen데이터에대해서는 적절하게 판단하지 못하는것
최적화 할 때 핵심은 '최적 값'이 존재하는 범위를 조금씩 줄여간다는 것 입니다. 그러려면, 우선 대략적인 범위를 설정하고 그 범위에서 무작위로 하이퍼 파라미터 값을 골라낸 후(=샘플링), 그 값으로 정확도를 평가합니다.
하이퍼파라미터 최적화에서 범위는 대략적으로 0.001~1000 사이의 로그스케일로 지정하고, 그리드 서치같은 규칙적인 탐색보다는 무작위로 샘플링해 탐색하는 것이 좋습니다. 또한 하이퍼파라미터를 최적화할때는 딥러닝 학습시간이 오래걸리므로, 학습을 위한 에폭을 작게 하여 1회 평가에 걸리는 시간을 단축하는 것이 효과적입니다.
정리를 해보자면 아래와 같습니다.
하이퍼파라미터의 최적 값 이 존재하는 범위를 조금씩 줄여가는 것이 핵심입니다.
grid search같은 규칙적인 탐색보다는 무작위로 샘플링해 탐색하는 편이 좋은 결과를 낸다고 알려져 있습니다.
이는 최종 정확도에 미치는 영향력이 하이퍼파라미터마다 다르기 때문입니다.
하이퍼파라미터의 범위는 대략적으로 지정하는 것이 효과적인데, 실제로도 0.001 ~ 1000 사이와 같이 10의 거듭제곱 단위로 범위를 지정합니다.
하이퍼파라미터를 최적화할 때는 딥러닝 학습에는 오랜 시간이 걸리므로, 학습을 위한 에폭을 작게 하여 1회 평가에 걸리는 시간을 단축하는 것이 효과적입니다.