BLOG

Amazon SageMaker 자동 모델 튜닝: 기계 학습에 기계 학습을 사용하기
작성일: 2018년 7월 4일

오늘 저는 Amazon SageMaker 자동 모델 튜닝의 출시를 발표하게 되어 기쁩니다. 자동 모델 튜닝 기능은 더 정확한 모델을 위해 하이퍼파라미터를 탐색하는데 필요한 차별화되지 않는 귀찮은 작업을 제거합니다. 이 기능을 통해 개발자와 데이터 과학자는 기계 학습 모델을 훈련하고 튜닝하는 데 상당한 시간과 노력을 절약할 수 있습니다. 하이퍼파라미터 튜닝 작업은 완료된 훈련 작업의 결과에 따라 서로 다른 하이퍼파라미터 조합으로 여러 훈련 작업을 시작합니다. SageMaker는 Bayesian Optimization(베이지안 최적화)에 기반한 “메타” 기계 학습 모델을 훈련하여 저희의 훈련 업무를 위해 하이퍼파라미터 조합을 추론합니다. 좀 더 깊이 알아봅시다.

 

기계 학습 프로세스의 모델 튜닝

 

개발자의 일반적인 기계 학습 프로세스는 탐색 데이터 분석(EDA), 모델 설계, 모델 훈련 및 모델 평가의 4단계로 구성됩니다. SageMaker는 이미 강력한 Jupyter 노트북 인스턴스, 내장된 알고리즘 및 서비스 내에서의 모델 훈련을 통해 이러한 각 단계를 쉽게 수행할 수 있습니다. 과정의 훈련 부분에 초점을 맞추어 일반적으로 데이터를 사용하여 데이터를 모델로 제공하여 예상 결과와 비교하여 모형의 예측 값을 평가합니다. 저희는 전체 입력 데이터, 평가 데이터의 일부를 모델 훈련에 사용되는 훈련 데이터에서 제외하고 있습니다. 저희는 평가 데이터를 사용하여 본 적이 없는 데이터에 대한 모델의 행동을 조사할 수 있습니다. 대부분의 경우 알고리즘을 선택하거나 사용자 지정 모델을 작성한 후에 입력 데이터에 대한 최상의 결과를 얻으려면 해당 알고리즘의 가능한 하이퍼파라미터 구성을 검색해야 합니다.

 

하이퍼파라미터는 당사의 기본 알고리즘이 어떻게 작동하는지를 제어하고 모델의 성능에 영향을 미칩니다. 훈련해야 할 epoch의 수, 네트워크의 계층 수, 학습 속도, 최적화 알고리즘 등이 될 수 있습니다. 일반적으로 랜덤 값 또는 다른 문제에 대한 공통 값으로 시작하고 변경 사항이 어떤 영향을 미치는지 확인하기 시작할 때 조정을 반복합니다. 과거에 이는 힘든 수작업 과정이었습니다. 하지만, 매우 재능 있는 몇몇 연구원들의 연구 덕분에 저희는 SageMaker를 사용하여 거의 모든 수동 오버헤드(overhead)를 제거할 수 있습니다. 사용자는 튜닝할 하이퍼파라미터, 탐색할 각 파라미터의 범위, 예산에 필요한 총 훈련 작업 수를 선택하기만 하면 됩니다. 이것이 실제로 어떻게 작용하는지 봅시다.

 

하이퍼파라미터 튜닝

 

이 기능을 보여 드리기 위해 표준 MNIST 데이터셋, Apache MXNet 프레임워크 및 SageMaker Python SDK를 사용할 것입니다. 아래에 보이는 모든 내용은 SageMaker 예제 노트북에서 확인할 수 있습니다.

먼저 노트북 인스턴스에서 SageMaker Python SDK를 사용하여 기존의 MXNet Estimator를 생성하겠습니다.

 

import boto3

import sagemaker

from sagemaker.mxnet import MXNet

role = sagemaker.get_execution_role()

region = boto3.Session().region_name

train_data_location = ‘s3://sagemaker-sample-data-{}/mxnet/mnist/train’.format(region)

test_data_location = ‘s3://sagemaker-sample-data-{}/mxnet/mnist/test’.format(region)

estimator = MXNet(entry_point=’mnist.py’,

                  role=role,

                  train_instance_count=1,

                  train_instance_type=’ml.m4.xlarge’,

                  sagemaker_session=sagemaker.Session(),

                  base_job_name=’HPO-mxnet’,

                  hyperparameters={‘batch_size’: 100})

 

이것은 아마도 다른 SageMaker 예에서 보신 것과 매우 비슷할 것입니다.

이제 자동 모델 튜닝을 위한 몇 가지 도구를 가져와 하이퍼파라미터 범위를 만들 수 있습니다.

 

from sagemaker.tuner import HyperparameterTuner, IntegerParameter, CategoricalParameter, ContinuousParameter

hyperparameter_ranges = {‘optimizer’: CategoricalParameter([‘sgd’, ‘Adam’]),

                         ‘learning_rate’: ContinuousParameter(0.01, 0.2),

                         ‘num_epoch’: IntegerParameter(10, 50)}

 

튜닝 작업은 이러한 범위에서 파라미터를 선택하고 이를 사용하여 훈련 활동에 집중할 최적의 위치를 결정합니다. 파라미터에는 몇 가지 유형이 있습니다.

 

  • 범주형 파라미터는 이산형 셋에서 하나의 값을 사용합니다.
  • 연속 파라미터는 최소값과 최대값 사이의 실수(real number) 값을 사용할 수 있습니다.
  • 정수 파라미터는 지정된 범위 내의 정수를 사용할 수 있습니다.

 

이제 범위가 정의되었으므로 훈련 작업 로그에서 메트릭을 찾기 위한 성공 메트릭과 정규식을 정의하려고 합니다.

 

objective_metric_name = ‘Validation-accuracy’

metric_definitions = [{‘Name’: ‘Validation-accuracy’,

                       ‘Regex’: ‘Validation-accuracy=([0-9\\.]+)’}]

 

자, 이제 이렇게 정의된 몇 가지만 있으면 튜닝 작업을 시작할 수 있습니다!

 

tuner = HyperparameterTuner(estimator,

                            objective_metric_name,

                            hyperparameter_ranges,

                            metric_definitions,

                            max_jobs=9,

                            max_parallel_jobs=3)

tuner.fit({‘train’: train_data_location, ‘test’: test_data_location})

 

이제 SageMaker 콘솔을 열고 하이퍼파라미터 튜닝 작업 하위 콘솔을 선택하여 모든 튜닝 작업을 확인할 수 있습니다.

 

 

방금 만든 작업을 클릭하면 보다 자세한 내용을 확인하고 튜닝 결과를 살펴볼 수 있습니다.

 

 

기본적으로 콘솔에는 최상의 작업과 사용된 파라미터가 표시되지만 다른 작업도 모두 확인할 수 있습니다.

 

 

노트북 인스턴스로 돌아가 보면, tuner.analytics()의 유용한 분석 개체가 있습니다. 이 개체를 사용하면 일부 bokeh plots을 통해 훈련 결과를 시각화할 수 있습니다. 이러한 예는 SageMaker 예제 노트북에 나와 있습니다.

 

 

이 기능은 기본 제공 알고리즘, SageMaker Python SDK를 사용하여 생성된 작업, 또는 docker에서 소유자가 가지고 있는 훈련 작업에도 사용할 수 있습니다.

 

또한 하이퍼파라미터 튜닝 작업 생성을 클릭하여 콘솔에서 바로 튜닝 작업을 만들 수도 있습니다.

 

먼저 작업 이름, IAM 역할 및 실행해야 할 VPC(있는 경우)를 선택합니다.

 

 

그런 다음 훈련 작업을 구성합니다. 내장된 알고리즘이나 사용자 지정 docker 이미지를 사용할 수 있습니다. 사용자 지정 이미지를 사용하는 경우에는 로그에서 목표 메트릭을 찾기 위해 정규식을 정의했습니다. 지금부터는 XGBoost를 선택하고 Next를 클릭하면 됩니다.

 

 

이제 노트북의 예와 같이 튜닝 작업 파라미터를 구성하겠습니다. 곡선 아래 영역(AUC)을 최적화할 목표 측정 지표로 선택하겠습니다. 이 알고리즘은 내장형 알고리즘이므로 해당 메트릭에 대한 정규식이 이전 단계에서 이미 채워진 상태입니다. 최소 및 최대 라운드 수를 설정하고 다음을 클릭합니다.

 

 

다음 화면에서는 알고리즘에서 예상하는 입력 채널과 모델 출력 위치를 구성할 수 있습니다. 일반적으로 “훈련” 채널뿐만 아니라 “eval” 채널도 있습니다.

 

 

마지막으로 이 튜닝 작업에 대한 리소스 제한을 구성할 수 있습니다.

 

 

 

추가 리소스

 

자동 모델 튜닝 기능을 활용하려면 사용자가 정의해야 하는 몇 가지 사항만 있습니다. 하이퍼파라미터 범위, 성공 메트릭 및 정규식 찾기, 동시에 실행할 작업 수, 실행할 최대 작업 수가 있습니다. 내장된 알고리즘의 경우에는 정규식을 정의할 필요가 없습니다. 사용된 병렬 작업 수와 최종 모델의 정확성 사이에는 약간의 절충이 있습니다. max_parallel_jobs가 증가하면 튜닝 작업이 훨씬 더 빨리 완료되지만 병렬 처리가 낮아지면 일반적으로 약간 더 나은 최종 결과를 얻을 수 있습니다.

 

Amazon SageMaker 자동 모델 튜닝 기능은 추가 비용 없이 제공되며, 튜닝 작업이 시작되는 훈련 작업에 사용되는 기본 리소스에 대해서만 비용을 지불하면 됩니다. 현재 이 기능은 SageMaker가 있는 모든 리전에서 사용할 수 있습니다. 이 기능은 API에서 사용할 수 있으며 자동 모델 튜닝에 의해 시작된 훈련 작업이 콘솔에 표시됩니다. 자세한 내용은 설명서를 참조하십시오.

 

원문 URL: https://aws.amazon.com/ko/blogs/aws/sagemaker-automatic-model-tuning/

** 메가존 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.