하이퍼파라미터란?
앞서 우리는 학습률learning rate과 미니배치mini-batch 크기에 대해서 배우면서 하이퍼파라미터hyper-parameter에 대해서 언급하였습니다. 모델의 가중치 파라미터weight parameter는 보통 경사하강법을 통해 데이터를 기반으로 자동으로 최적화되는 반면, 하이퍼파라미터는 비록 모델의 성능에 영향을 끼치지만 자동으로 최적화되지 않는 파라미터들을 가리킵니다. 즉, 모델의 성능을 끌어올리기 위해서는 하이퍼파라미터도 최적optimal값을 찾아주어야 하는데요. 경사하강법과 같이 자동으로 찾아주는 방법이 기본적으로는 없기 때문에 사용자가 직접 실험을 통해 성능을 지켜보면서 값을 튜닝해나가야 합니다.[1] 이때 하이퍼파라미터가 생각보다 다양하므로 탐색 공간search space가 굉장히 커지게 됩니다. 따라서 높은 차원의 탐색 공간을 일일히 전부 탐색하며 최적의 하이퍼파라미터를 찾는다는 것은 불가능에 가깝습니다. 그러므로 우리는 최적의 하이퍼파라미터를 경험적emphricial으로 또는 휴리스틱heuristic한 방법을 통해 찾게 됩니다. 실제로 많은 실험을 진행하다보면 나중에는 “대충 이 하이퍼파라미터는 얼마정도면 되겠다”라는 감이 생기기도 합니다.
사실 학습률과 미니배치 크기 이외에도 우리는 이미 많은 하이퍼파라미터들을 만났습니다. 예를 들어 신경망의 깊이와 너비도 대표적인 하이퍼파라미터입니다. 신경망이 너무 깊으면 과적합overfitting이 발생하기 쉽고 최적화가 어려워집니다. 이에 반해 신경망이 너우 작으면 복잡한 데이터의 관계를 학습할 수 없습니다. 따라서 신경망의 크기도 분명히 최적의 크기라는 것이 존재할 것이고, 이것은 사용자가 직접 찾아주어야 합니다.[2]
이외에도 굉장히 사소한 하이퍼파라미터들도 존재합니다. 예를 들어 렐루ReLU와 리키렐루leaky ReLU 중에서 어떤 활성함수를 사용할 것인지 고르는 문제에서부터, 리키렐루에서의 음수 영역의 경사 각도도 하이퍼파라미터가 될 것입니다. 하지만 렐루를 쓸 때 풀리지 않는 문제가 리키렐루를 쓴다고 갑자기 풀리거나, 리키렐루의 각도를 조금 바꿨더니 풀리지 않던 문제가 갑자기 풀리는 등의 일은 거의 일어나지 않습니다. 보통은 아주 약간의 (어쩌면 오차 범위 내의) 성능만 바뀔 뿐이므로, 이런 하이퍼파라미터들을 튜닝하는 것까지 우리는 신경 쓸 겨를이 없습니다.[3] 하이퍼파라미터 튜닝은 보통 모델의 학습이 종료되고 성능을 평가한 이후에나 가능하기 때문에, 데이터셋과 모델이 커져서 학습에 많은 시간이 소요될수록 튜닝은 점점 힘들어집니다. 따라서 우리는 중요한 하이퍼파라미터와 사소한 하이퍼파라미터를 구분할 수 있는 능력이 있어야 합니다. 성능이 큰 영향을 끼치는 하이퍼파라미터들을 위주로 먼저 튜닝하여 최소한의 실험을 통해 최고의 성능을 이끌어낼 수 있어야 합니다. 이를 위해서는 많은 실험 경험이 필요하며, 평소에 실험을 잘 정리하는 요령과 습관을 가질 수 있도록 노력해야 합니다.
[1]: AutoML이 이러한 하이퍼파라미터를 자동으로 찾아주기 위한 방법 중의 하나입니다.
[2]: AutoML에서도 이를 위한 NASNetwork Architecture Search라는 연구 주제가 있습니다.
[3]: 특히 이런 사소한 하이퍼파라미터들은 다른 하이퍼파라미터들과 독립적으로 작용할 가능성이 높아, 나중에 따로 튜닝을 해주어도 충분합니다.