Hyperparameter Tuning
파라미터 중, 인간이 지정해야 하는 파라미터를 하이퍼 파라미터라 부른다. 학습률이나 학습 횟수. 이런 것들을 어떻게 설정해야 좋을까?
모델의 결과가 안좋으면 모델을 바꾸거나, 데이터를 바꾸거나 추가하거나, 그리고 하이퍼 파라미터를 바꾸는 방법이 있다. 이 중에서 모델은 지금은 좋은게 많이 나와서 엄청 혁신적인 변화까지는 없는 편이고, 가장 좋은 건 데이터를 바꾸는 것이다. 하이퍼 파라미터로 인한 변화는 그다지 크지는 않지만, 조금이라도 모델을 향상시키는 효과는 볼 수 있다. 최후에 검토하면서 성능을 더 끌어올릴 때 고려해볼만한 부분이라고 할 수 있다. 요즘에는 NAS와 AutoML 같은 것들이 나와서 또 인간이 직접 안 해도 되는 수준까지 발전하기도 했다. 또한 데이터가 너무 많은 시대라 결과 값이 하이퍼 파라미터에 크게 좌우되지 않는다. 그래서 중요성은 많이 떨어졌지만, 그래도 조금은 도전해볼만한 작업이라고 할 수 있다.
보다시피 눈에 띄게 차이가 나는 경우도 존재한다! 완전히 무시할 수는 없는 것.
하이퍼 파라미터를 조정할 때 가장 보편적인 방법은 그리드 서치. 0.1부터 0.01, 이런 식으로 로그를 취해 값을 바꿔주는 것이 일반적인데, 아무튼 값을 일정하게 잘라서 다 비교해보고 좋은 것을 선택한다.
랜덤 서치는 말 그대로 그냥 랜덤하게 하는 방식이다. 보통은 랜덤 서치로 잘 나오는 구간을 찾고, 그곳에서 그리드 서치를 해나가는 방식으로 운용된다.
최근에는 베이지안기반 기법이 대세를 이룬다.
Ray
하이퍼 파라미터 탐색을 도와주는 도구들 중에서 Ray라는 모듈이 가장 보편적으로 쓰인다. 해당 모듈은 서버 단위의 컴퓨터의 병렬 처리를 지원하기 위해 개발된 모듈인데 다양한 기능을 지원하며 변수 조작도 도와주기에 도움이 된다.
위와 같이 내가 움직이고 싶은 변수들을 미리 설정해준다. 보면 값의 범위를 지정해주는데 아무래도 Ray가 그 값안에서 최적의 결과를 찾아주는 방식인 듯하다.
Ray를 사용할 때 쓸 수 있는 스케쥴러. 단계적으로 학습을 하면서 가망 없는 파라미터는 가차없이 버린다.
tune.run을 통해 본격적으로 파라미터 서치를 시작한다. 하나의 함수에 갖가지 값이 들어가는 것을 확인할 수 있다.
참고로 ray를 쓸 때는 하나의 함수로 모델이 작성되어야 한다. 그 이후에 ray를 사용하면 이렇게 값들이 나온다.