박해선

기계공학을 전공했으나 졸업 후엔 줄곧 코드를 읽고 쓰는 일을 했다. 지금은 ML GDE(Machine Learning Google Developer Expert)로 활동하고 있고, 머신러닝과 딥러닝에 관한 책을 집필하고 번역하면서 소프트웨어와 과학의 경계를 흥미롭게 탐험하고 있다. 『혼자 공부하는 머신러닝+딥러닝』, 『Do it! 딥러닝 입문』을 집필하고, 『개발자를 위한 머신러닝&딥러닝』, 『케라스 창시자에게 배우는 딥러닝 개정 2판』, 『머신 러닝 교과서 개정 3판』, 『핸즈온 머신러닝(2판)』 등 약 20권의 책을 우리말로 옮겼다.


머신 러닝(machine learning)은 데이터에서 유용한 패턴을 학습할 수 있는 뛰어난 방법이지만 특정 문제에 대해 좋은 머신 러닝 모델(model)을 만들기 위해 탐색할 수 있는 가설 공간은 너무 방대합니다. 따라서 모델을 훈련하기 전에 탐색 공간의 범위를 조절하거나 훈련 과정을 적절히 제어하는데, 모델이 데이터로부터 학습하는 값인 파라미터(parameter)와 달리 이런 용도로 사용하는 파라미터를 하이퍼파라미터(hyperparameter)라고 부릅니다.

하이퍼파라미터는 일반적으로 머신 러닝 패키지(package)의 클래스(class)나 메서드(method)의 매개변수로 제공됩니다. 예를 들어 신경망(neural network)의 경우 층(layer)의 종류나 층의 유닛(unit)(혹은 뉴런(neuron)) 개수 등이 될 수 있습니다. 모델이 크고 복잡해질수록 최상의 결과를 얻기 위해 조정해 볼 수 있는 하이퍼파라미터의 개수가 크게 늘어납니다. 하이퍼파라미터 개수가 늘어나면 이를 조합한 경우의 수는 더 급격히 증가합니다. 따라서 수동으로 하이퍼파라미터를 일일이 조정해가며 성능의 변화를 관찰하는 일은 금방 현실성이 떨어집니다. 그럼 어떻게 해야 할까요?

이런 문제를 해결하기 위해 좋은 하이퍼파라미터를 찾아주는 자동화된 방법이 등장하게 되었으며, 이런 작업을 하이퍼파라미터 탐색(hyperparameter search) 또는 하이퍼파라미터 튜닝(hyperparameter tuning)이라고 부릅니다. 가장 널리 사용되는 딥러닝(deep learning) 프레임워크 중 하나인 텐서플로(TensorFlow)의 케라스(Keras) API와 함께 쓸 수 있는 하이퍼파라미터 튜닝 라이브러리는 케라스 튜너(Keras Tuner)(https://keras.io/keras_tuner/)입니다.

이 글에서는 케라스 튜너를 사용한 하이퍼파라미터 튜닝에 대해 소개합니다. 이 글에 포함된 예제는 깃허브(https://bit.ly/3yd1PR9)에서 볼 수 있으며 구글 코랩(Colab)으로 실행할 수 있습니다. 케라스 튜너를 비롯해 케라스와 딥러닝에 대한 자세한 내용은 『케라스 창시자에게 배우는 딥러닝(개정 2판)』(길벗, 2022)을 참고해 주세요.

케라스 튜너는 하이퍼파라미터 탐색을 위해 네 개의 튜너 클래스를 제공합니다. RandomSearch, BayesianOptimization, Hyperband, Sklearn입니다.

RandomSearch는 균등 분포의 난수를 발생시켜 하이퍼파라미터를 랜덤하게 탐색합니다. BayesianOptimization은 가우시안 프로세스(Gaussian Process)를 사용하여 반복마다 더 좋은 하이퍼파라미터 조합을 찾습니다. Hyperband는 SHA(Successive Halving Algorithm) 기반의 하이퍼파라미터 탐색 방법으로 가능성이 높은 하이퍼파라미터 조합을 선택하여 점진적으로 계산 자원을 늘리는 방법입니다. Sklearn 튜너는 이 세 개의 튜너를 사용해 사이킷런(scikit-learn) 모델을 튜닝할 수 있는 래퍼 클래스입니다. 최근에는 하이퍼파라미터의 모든 조합을 시도해 보는 GridSearch 튜너가 추가되어 향후 버전에서 사용할 수 있을 것입니다.

여기에서는 가장 간단한 RandomSearch 클래스를 사용해 보겠습니다. BayesianOptimization을 사용한 예는 <케라스 창시자에게 배우는 딥러닝 개정 2판>의 13장을 참고해 주세요.

먼저 케라스 튜너가 설치되어 있지 않다면 pip 명령으로 설치합니다.