머신러닝 및 딥러닝

Hyperparameter 튜닝은 어떻게 하는걸까?

AlgoPoolJa 2021. 1. 17. 10:56

딥러닝에는 여러가지 하이퍼 파라미터가 존재한다.

예를들어 대표적으로 몇개만 써보면

1.  층 별로 hidden unit의 갯수

2. 학습률 

3. Adam optimizer로 예시를 들면 베타값 2(0.9 와 0.999)개와 입실론값(10^-8)

4. layer의 수

5. 학습률을 쓰지 않는다면 learning rate decay

6. mini-batch 의 크기

7.모멘텀 값(0.9 가 가장 좋은 초기값으로 알려져 있다.)

빨간색이 가장 중요한 하이퍼파라미터이고 그다음 차례대로 중요한 것이 주황색 초록색이라고 생각하면 될 것 이다.(당연히 이렇게가 항상 중요한 순서다 라는 것은 아니다! 일반적으로 그렇다고 생각하면 될 것이다.)

Grid search 와 Random search의 비교

과거의 머신러닝에서는 위의 그림과 같이 하이퍼파라미터가 2개만 있다고 가정했을때. Grid Search를 사용했었다. 위 그림이라면 25번의 비교를 통해서 가장 좋은 하이퍼파라미터를 탐색할 수 있을것이다. 하지만 하이퍼파라미터가 상당히 많은 딥러닝에서는 이런 방법이 권장되지 않는다. 

하이퍼 파라미터가 무척 많은 딥러닝에서는 위와 같이 무작위하게 하이퍼 파라미터를 정하는 것이 권장된다. 왜냐하면 어떤 하이퍼 파라미터가 문제해결에 더 중요한지 미리 알 수 없기 때문이다. 

또한 하이퍼파라미터의 중요도 순위도 영향을 끼친다. 예를 들어 Hyperparameter1 을 learning rate(학습률, lr), Hyperparameter2를 E(입실론, Adam 알고리즘에서 분모에 있는 값) 이라고 가정해보자. 이런경우 당연히 lr을 고르는 것이 E고르는 것보다 더 중요하다.   

Grid Search일 경우 E보다 더 중요한 lr 값은 5번 밖에 비교 되지 않지만 random search 경우 Hyperparameter1의 값이 고루 퍼져있다고 했을때 25번 비교할 수 있다. 따라서 더 좋은 하이퍼 파라미터를 찾을 수 있게 된다.

 

From Rough to Fine

또한 하이퍼파라미터를 탐색하는 방법중엔 Coarse to fine 과 같은 방법도 있다. 해당 방법은 우선 어떤 점에서 가장 결과값이 좋았다면 그 점 주변으로 가장 좋은 값이 있을 확률이 높기 때문에 그 점 주위만 다시 조밀하게 세분화 해서 값을 비교해 보는 방식을 취한다.

 

여기서 Random 이라는 것이 조금 모호할 수 있는데  예를 들어 아래 그림의 경우 은닉 유닛의 갯수를 50개에서 100개 사이 층의 갯수를 2개에서 4개 사이로 뽑는다고 했을 때 여기서는 정말 무작위하게 뽑아 비교를 해도 괜찮다. 여기서 가장 작은 범위는 1이므로(은닉층의 갯수도 1개씩 추가할 수 있고 층도 1개씩 추가 할 수 있고) 둘의 scale이 비슷하기 때문에 괜찮다. 

비슷한 scale의 하이퍼 파라미터 뽑기
log-scale 하이퍼파라미터

만약 lr을 구할때 범위를 0.0001 에서 1까지를 생각하고 있다고 해보자. 그러면 0.1과 1에서 90%를 찾게 되고 0.1과. 0.0001에서는 10%만 찾게 될것이다. 상당히 불공평하지 않은가? 이럴 경우에는 log-scale로 찾아보는게 합리적이다. 그렇게 되면 -4부터 0까지 랜덤하게 찾기 때문에 공평하게 된다.(10^-4 와 10^0 이므로).

 

log-scale 2

만약에 여기서 B의 값을 0.9부터 0.999에서 고른다고 할때 이 값에 공평하게 뽑기 위해서는 1에서 B값을 빼준다. 그렇게 되면 0.1 에서 0.001의 값이 나오게 되는데 이를 log-scale로 표현하게 된다면 [-3.-1] 이 된다. 여기서 B값이 1-10^r 이라고 했을 때 r을 랜덤으로 뽑게 되면 아까 보았던 경우의 수와 같이 공평하게 뽑을 수 있게 된다. 

 

마지막으로 컴퓨팅 파워에 따라서 하나의 모델에 서로다른 하이퍼 파라미터를 적용해서 실험을 진행하는것을 캐비어 방법 그리고 하나의 모델에 하나의 하이퍼 파라미터를 적용하여 계속 섬세하게 모델의 파라미터를 교정하는것을  판다 방법이라고 한다.

판다 vs 캐비어