모델 튜닝
하이퍼 파라미터 튜닝은 머신러닝 모델의 성능을 높이는 데에 있어 중요한 부분이다. 모델 튜닝의 간략한 개념을 알아보고, 파이프라인에 이러한 프로세스를 적용하는 방법에 대해 배워보자.
하이퍼 파라미터 튜닝 전략
간단한 머신러닝 모델의 경우 하이퍼 파라미터의 개수가 많지 않아 크게 중요하지 않을 수 있지만, 심층 신경망(Deep Neural Network) 기반의 딥러닝 모델일 경우 특히 중요하다.
튜닝해야 할 하이퍼 파라미터는 크게 두 종류로 나눌 수 있다. 모델 아키텍처에서 필요한 하이퍼 파라미터와 최적화(Optimizing)에 필요한 하이퍼 파라미터가 그것이다.
모델 아키텍처에서의 하이퍼 파라미터는 파이프라인에 있는 모델 유형에 따라 달라질 수 있다. 공통적으로 사용되는 하이퍼 파라미터로는 에포크(epochs)가 있다. 적절한 에포크 수를 설정함으로써 과적합 혹은 과소적합을 방지하는 것이 중요한데, 이를 돕기 위해 조기 종료 콜백(early stopping callback) 함수를 사용한다. 이는 에포크가 진행됨에 따라 설정한 patience만큼의 에포크 동안 val loss가 낮아지지 않으면 학습을 종료하는 기능을 한다. 이를 이용하면 에포크 수가 최적 수보다 클지라도 과대적합이 일어나지 않고 최적의 시점에서 학습을 멈출 수 있게 된다.
층의 개수나 크기 또한 매개변수라고 보기도 하는데, 이 값은 보통 늘릴수록 성능이 향상되지만 학습 시간이 길어지고 과적합의 원인이 될 수 있으므로 적정선을 찾는 것이 중요하다. 심층 신경망의 경우 과적합을 방지하기 위해 Fully-connected layer 대신 드롭아웃(drop-out)이나 잔차 연결(residual connection)을 사용하기도 한다.
또한 최적화 함수에도 여러 파라미터가 사용된다. 최적화 함수는 기본적으로 Adam 혹은 NAdam이 권장되며, 수행하고자 하는 태스크에 따라 다른 최적화 함수를 사용하기도 한다.
최적화 함수에서는 학습률(learning rate)을 조정할 수 있는데, 이는 실험에 매우 중요한 하이퍼 파라미터이므로 다양하게 시도해보는 것이 권장된다. Adagrad 기반의 최적화 함수를 사용할 때는 초기 학습률을 0.1로 하여서 학습률을 선형적으로 감소시키는 방식을 사용하기도 한다. 이때는 학습률이 정상적으로 0에 가까워질 수 있도록 콜백 함수를 사용하지 않는다.
하이퍼 파라미터 조합의 탐색은 크게 그리드 서치(Grid Search)와 랜덤 서치(Random Search) 방식이 있다. 그리드 서치 방식은 가능한 모든 하이퍼 파라미터 조합을 탐색하여 모델 학습을 수행한다. 그런 만큼 시간이 오래 걸리지만, 최적의 하이퍼 파라미터 조합을 반드시 찾아낼 수 있다는 장점이 있다. 랜덤 서치는 그리드 서치의 속도 문제를 해결한 방식으로, 하이퍼 파라미터를 샘플링하여 일부 조합을 랜덤 하게 시도하는 방식이다. 최적 조합을 놓칠 수 있다는 우려가 있지만, 그리드 서치 방식보다 속도면에서 우위를 가질 수 있다.
이렇게 탐색된 하이퍼 파라미터는 최적 조합이 선택되어 모델에 사용되며, 필요에 따라 추가적인 세부 조정(fine-tuning)을 수행하기도 한다.
텐서플로우에서는 케라스 튜너(Keras Tuner)가 구현되어 있고, 쿠브플로에서는 카팁(Katib)이 구현되어 있다. 이를 사용하여 하이퍼 파라미터 튜닝을 수행한다. 이 두 패키지는 그리드 및 랜덤 서치 외에도 베이지안 최적화(Bayesian Optimization) 및 하이퍼 밴드(Hyperband) 알고리즘을 지원한다.
TFX 파이프라인의 하이퍼 파라미터 튜닝
TFX 파이프라인에서 하이퍼 파라미터 튜닝은 Transform 컴포넌트에서 데이터를 가져오고 다양한 모델을 학습하여 최고의 하이퍼 파라미터를 선정한다. 이렇게 선정된 하이퍼 파라미터는 Trainer 컴포넌트로 전달되어 최종 모델 학습을 진행시킨다.
이때 모델 정의 함수(get_model)는 하이퍼 파라미터를 입력으로 받아들여 지정된 하이퍼 파라미터에 따라 모델을 정의할 수 있도록 만들어야 한다. 즉, 하이퍼 파라미터가 입력 인자로 정의되어야 한다.
TFX에서는 Tuner 컴포넌트를 제공하기 때문에 TFX에서 바로 튜닝을 수행할 수도 있다.
'MLOps' 카테고리의 다른 글
GitHub Actions를 활용한 머신러닝 모델 테스트 및 성능 모니터링 자동화 (0) | 2024.05.04 |
---|---|
모델 분석 방법 (0) | 2022.01.26 |
TFX Trainer 컴포넌트 (0) | 2022.01.11 |
TFX 모델 학습 - 모델 정의하기 (0) | 2022.01.10 |
TFT를 머신러닝 파이프라인에 통합하기 (0) | 2022.01.08 |
댓글