Amazon SageMaker 자동 모델 튜닝을 통해 하이퍼파라미터 최적화를 위한 고급 기술을 살펴보세요 | 아마존 웹 서비스

Amazon SageMaker 자동 모델 튜닝을 통해 하이퍼파라미터 최적화를 위한 고급 기술을 살펴보세요 | 아마존 웹 서비스

고성능 기계 학습(ML) 솔루션을 만드는 것은 하이퍼파라미터라고도 하는 훈련 매개변수를 탐색하고 최적화하는 데 달려 있습니다. 하이퍼파라미터는 특정 모델 및 작업에 따라 학습 속도, 배치 크기, 정규화 강도 등과 같은 훈련 프로세스를 조정하는 데 사용하는 손잡이와 레버입니다. 초매개변수 탐색에는 각 매개변수의 값을 체계적으로 변경하고 모델 성능에 미치는 영향을 관찰하는 작업이 포함됩니다. 이 프로세스에는 추가적인 노력이 필요하지만 그 이점은 상당합니다. 하이퍼파라미터 최적화(HPO)는 훈련 시간 단축, 모델 정확도 향상, 새로운 데이터에 대한 일반화 향상으로 이어질 수 있습니다.

우리는 포스트에서 여행을 계속합니다 Amazon SageMaker 자동 모델 튜닝으로 하이퍼파라미터 최적화. 이전에는 단일 작업 최적화를 탐색하고 SageMaker 내장 알고리즘의 결과를 시각화했으며 특정 하이퍼파라미터 값의 영향에 대해 배웠습니다. 모델 생성 주기 마지막에 일회성 최적화로 HPO를 사용하는 것 외에도 대화식 방식으로 여러 단계에서 HPO를 사용할 수도 있습니다. 각 튜닝 작업은 좋은 성능에 가까워지는 데 도움이 되지만, 또한 모델이 특정 하이퍼파라미터에 얼마나 민감한지 알아보고 이러한 이해를 활용하여 다음 튜닝 작업에 정보를 제공할 수 있습니다. 우리는 학습한 내용을 기반으로 하이퍼파라미터와 해당 값 범위를 수정할 수 있으므로 이러한 최적화 노력을 대화로 전환할 수 있습니다. ML 실무자로서 우리가 이러한 실행에 대한 지식을 축적하는 것과 같은 방식으로 Amazon SageMaker 자동 모델 튜닝(AMT) 웜 스타트를 사용하면 이전 튜닝 작업에서 얻은 지식을 다음 튜닝 작업에서도 유지할 수 있습니다.

이 게시물에서는 맞춤형 훈련 알고리즘과 베이지안 최적화 및 무작위 검색과 같은 다양한 HPO 전략을 사용하여 여러 HPO 작업을 실행합니다. 또한 웜 스타트를 실행하고 실험을 시각적으로 비교하여 초매개변수 공간 탐색을 개선합니다.

SageMaker AMT의 고급 개념

다음 섹션에서는 다음 각 주제를 자세히 살펴보고 SageMaker AMT가 ML 프로젝트에서 이를 구현하는 데 어떻게 도움이 되는지 보여줍니다.

  • SageMaker 교육에서 사용자 지정 교육 코드와 인기 있는 ML 프레임워크인 Scikit-learn을 사용하세요.
  • 평가 및 최적화를 위해 로그를 기반으로 사용자 정의 평가 측정항목 정의
  • 적절한 전략을 사용하여 HPO 수행
  • 웜 스타트를 사용하여 단일 하이퍼파라미터 검색을 모델과의 대화 상자로 전환
  • 솔루션 라이브러리를 사용하여 고급 시각화 기술을 사용하여 두 가지 HPO 전략과 튜닝 작업 결과를 비교합니다.

첫 번째 게시물에 사용된 내장 알고리즘을 사용하든 자체 교육 코드를 사용하든 SageMaker AMT는 ML 모델 최적화를 위한 원활한 사용자 경험을 제공합니다. 이는 시도와 결과를 자동으로 추적하는 동시에 당면한 ML 문제에 집중할 수 있는 핵심 기능을 제공합니다. 동시에 기본 인프라를 자동으로 관리합니다.

이 게시물에서는 SageMaker 기본 제공 알고리즘에서 벗어나 사용자 지정 코드를 사용합니다. 우리는 Random Forest를 사용합니다. SkLearn. 하지만 우리는 이전과 동일한 ML 작업과 데이터 세트를 고수합니다. 첫 번째 게시물, 손으로 쓴 숫자를 감지합니다. Jupyter 노트북의 내용을 다룹니다. 2_advanced_tuning_with_custom_training_and_visualizing.ipynb 더 자세히 읽어보려면 코드를 나란히 호출해 보세요.

하이퍼파라미터 검색 공간을 탐색하여 결과를 최적화하는 동시에 사용자 정의 학습 코드를 사용하고 배포하고 실행하는 방법을 자세히 살펴보겠습니다.

ML 모델을 구축하고 하이퍼파라미터 최적화를 수행하는 방법

ML 솔루션을 구축하는 일반적인 프로세스는 어떤 모습인가요? 가능한 사용 사례가 많고 ML 작업도 매우 다양하지만 단계별 접근 방식을 위해 다음과 같은 정신 모델을 제안합니다.

  1. 현재 ML 시나리오를 이해하고 요구 사항에 따라 알고리즘을 선택하세요. 예를 들어 지도 학습 알고리즘을 사용하여 이미지 인식 작업을 해결하려고 할 수 있습니다. 이 게시물에서는 필기 이미지 인식 시나리오와 첫 번째 게시물과 동일한 데이터 세트를 계속 사용합니다.
  2. SageMaker 교육에서 사용할 알고리즘 구현을 결정합니다. SageMaker 내부 또는 외부 옵션에는 다양한 옵션이 있습니다. 또한 작업에 가장 적합하고 최적화하려는 기본 측정항목(예: 정확도, F1 점수 또는 ROC)을 정의해야 합니다. SageMaker는 요구 사항과 리소스에 따라 네 가지 옵션을 지원합니다.
    • 다음을 통해 사전 훈련된 모델을 사용합니다. Amazon SageMaker 점프스타트, 즉시 사용하거나 미세 조정할 수 있습니다.
    • 이전 게시물에서 했던 것처럼 XGBoost와 같은 학습 및 튜닝을 위해 내장된 알고리즘 중 하나를 사용하세요.
    • Scikit-learn, TensorFlow 또는 PyTorch와 같은 주요 프레임워크 중 하나를 기반으로 사용자 정의 모델을 훈련하고 조정합니다. AWS는 이러한 목적으로 미리 만들어진 Docker 이미지를 제공합니다. 이 게시물에서는 미리 만들어진 컨테이너 이미지 위에 자체 코드를 실행하여 신속하게 실험해 볼 수 있는 이 옵션을 사용합니다.
    • 달리 지원되지 않는 프레임워크나 소프트웨어를 사용하려는 경우 사용자 지정 Docker 이미지를 가져오세요. 이 옵션은 가장 많은 노력이 필요하지만 최고 수준의 유연성과 제어 기능도 제공합니다.
  3. 데이터로 모델을 훈련하세요. 이전 단계의 알고리즘 구현에 따라 이는 훈련 데이터를 참조하고 훈련 작업을 실행하거나 훈련용 사용자 정의 코드를 추가로 제공하는 것만큼 간단할 수 있습니다. 우리의 경우 Scikit-learn을 기반으로 Python에서 일부 사용자 정의 학습 코드를 사용합니다.
  4. ML 모델과의 "대화"로 하이퍼파라미터 최적화를 적용합니다. 훈련 후에는 일반적으로 알고리즘의 하이퍼파라미터에 대한 가장 유망한 값 조합을 찾아 모델의 성능을 최적화하려고 합니다.

ML 알고리즘과 모델 크기에 따라 하이퍼파라미터 최적화의 마지막 단계가 예상보다 더 큰 도전이 될 수 있습니다. 다음 질문은 이 단계의 ML 실무자에게 일반적이며 익숙하게 들릴 수 있습니다.

  • ML 문제에 어떤 종류의 하이퍼파라미터가 영향을 미치나요?
  • 가장 성능이 좋은 값을 찾기 위해 거대한 하이퍼파라미터 공간을 효과적으로 검색하려면 어떻게 해야 합니까?
  • 특정 초매개변수 값의 조합이 성능 지표에 어떤 영향을 미치나요?
  • 비용이 중요합니다. 자원을 어떻게 효율적으로 사용할 수 있나요?
  • 어떤 종류의 튜닝 실험이 가치가 있으며 어떻게 비교할 수 있습니까?

이러한 질문에 답하기는 쉽지 않지만 좋은 소식이 있습니다. SageMaker AMT는 귀하의 무거운 짐을 덜어주고 귀하가 탐색하려는 올바른 HPO 전략과 가치 범위를 선택하는 데 집중할 수 있도록 해줍니다. 또한 당사의 시각화 솔루션은 반복 분석 및 실험 프로세스를 용이하게 하여 성능이 좋은 하이퍼파라미터 값을 효율적으로 찾습니다.

다음 섹션에서는 Scikit-learn을 사용하여 처음부터 숫자 인식 모델을 구축하고 이러한 모든 개념이 실제로 실행되는 모습을 보여줍니다.

솔루션 개요

SageMaker는 모델을 훈련, 평가 및 조정하는 데 매우 편리한 몇 가지 기능을 제공합니다. 엔드투엔드 ML 수명주기의 모든 기능을 다루므로 Jupyter 노트북을 떠날 필요도 없습니다.

첫 번째 게시물에서는 SageMaker 내장 알고리즘 XGBoost를 사용했습니다. 데모 목적으로 이번에는 Random Forest 분류자로 전환합니다. 그러면 자신만의 훈련 코드를 제공하는 방법을 보여줄 수 있기 때문입니다. 우리는 자체 Python 스크립트를 제공하고 Scikit-learn을 프레임워크로 사용하기로 결정했습니다. 이제 특정 ML 프레임워크를 사용하고 싶다는 것을 어떻게 표현합니까? 앞으로 살펴보겠지만 SageMaker는 백그라운드에서 다른 AWS 서비스를 사용하여 훈련을 위해 사전 구축된 Docker 컨테이너 이미지를 검색합니다.Amazon Elastic Container Registry (아마존 ECR).

점을 연결하는 코드 조각과 다이어그램을 포함하여 다음 단계를 자세히 다룹니다. 앞서 언급했듯이 기회가 있으면 노트북을 열고 코드 셀을 단계별로 실행하여 AWS 환경에서 아티팩트를 생성하십시오. 적극적 학습에 이보다 더 좋은 방법은 없습니다.

  1. 먼저 데이터를 로드하고 준비합니다. 우리는 사용 아마존 단순 스토리지 서비스 (Amazon S3) 손으로 쓴 숫자 데이터가 포함된 파일을 업로드합니다.
  2. 다음으로 학습 스크립트와 프레임워크 종속성을 준비합니다. Python으로 사용자 정의 학습 코드를 제공하고, 일부 종속 라이브러리를 참조하고, 테스트를 실행합니다.
  3. 사용자 정의 목표 지표를 정의하기 위해 SageMaker에서는 컨테이너 로그 파일에서 필요한 지표를 추출하는 정규식을 정의할 수 있습니다.
  4. scikit-learn 프레임워크를 사용하여 모델을 학습합니다. 사전 구축된 컨테이너 이미지를 참조하여 해당 Estimator 개체를 생성하고 사용자 지정 교육 스크립트를 전달합니다.
  5. AMT를 통해 우리는 다양한 HPO 전략을 시도할 수 있습니다. 이 게시물에서는 무작위 검색과 베이지안 검색이라는 두 가지에 중점을 둡니다.
  6. SageMaker HPO 전략 중에서 선택하세요.
  7. 튜닝 결과를 시각화, 분석 및 비교합니다. 우리의 시각화 패키지를 사용하면 어떤 전략이 더 잘 수행되고 어떤 하이퍼 매개변수 값이 메트릭을 기반으로 최고의 성능을 제공하는지 확인할 수 있습니다.
  8. 하이퍼파라미터 공간 탐색을 계속하고 HPO 작업을 웜 스타트하세요.

AMT는 기본 컴퓨팅 인프라의 확장 및 관리를 담당하여 다양한 튜닝 작업을 실행합니다. 아마존 엘라스틱 컴퓨트 클라우드 (Amazon EC2) 인스턴스. 이렇게 하면 인스턴스를 프로비저닝하고 운영 체제 및 하드웨어 문제를 처리하거나 로그 파일을 집계하는 데 부담을 느낄 필요가 없습니다. ML 프레임워크 이미지는 Amazon ECR에서 검색되며 튜닝 결과를 포함한 모델 아티팩트는 Amazon S3에 저장됩니다. 모든 로그와 지표는 다음에서 수집됩니다. 아마존 클라우드 워치 필요한 경우 편리한 액세스 및 추가 분석을 위해.

사전 조건

이 시리즈는 계속되는 시리즈이므로 반드시 읽어볼 것을 권장하지만 반드시 필요한 것은 아닙니다. SageMaker AMT 및 HPO에 대한 첫 번째 게시물. 그 외에도 ML 개념과 Python 프로그래밍에 대한 기본적인 지식이 있으면 도움이 됩니다. 또한 다음의 각 단계를 따라하는 것이 좋습니다. 수첩 이 게시물을 읽는 동안 GitHub 저장소에서. 노트북은 첫 번째 노트북과 독립적으로 실행될 수 있지만 하위 폴더의 일부 코드가 필요합니다. README 파일에 설명된 대로 환경에서 전체 저장소를 복제해야 합니다.

코드를 실험하고 대화형 시각화 옵션을 사용하면 학습 경험이 크게 향상됩니다. 그러니 꼭 확인해 보세요.

데이터 로드 및 준비

첫 번째 단계로, 다운로드된 숫자 데이터 교육에 필요한 정보는 SageMaker에서 액세스할 수 있습니다. Amazon S3를 사용하면 안전하고 확장 가능한 방식으로 이를 수행할 수 있습니다. 전체 소스 코드는 노트북을 참조하고 자신의 데이터에 맞게 자유롭게 적용하세요.

sm_sess = sagemaker.session.Session(boto_session=boto_sess, sagemaker_client=sm)
BUCKET = sm_sess.default_bucket()
PREFIX = 'amt-visualize-demo'
s3_data_url = f's3://{BUCKET}/{PREFIX}/data'
digits = datasets.load_digits()
digits_df = pd.DataFrame(digits.data)
digits_df['y'] = digits.target
digits_df.to_csv('data/digits.csv', index=False)
!aws s3 sync data/ {s3_data_url} —exclude '*' —include 'digits.csv'

XNUMXD덴탈의 digits.csv 파일에는 피처 데이터와 레이블이 포함되어 있습니다. 각 숫자는 숫자 8에 대한 다음 이미지에 표시된 것처럼 8×4 이미지의 픽셀 값으로 표시됩니다.
Scikit-learn의 숫자 데이터 세트

학습 스크립트 및 프레임워크 종속성 준비

이제 데이터가 S3 버킷에 저장되었으므로 다음을 기반으로 사용자 지정 교육 스크립트를 정의할 수 있습니다. 사이 킷 러닝 파이썬에서. SageMaker는 나중에 교육을 위해 Python 파일을 간단히 참조할 수 있는 옵션을 제공합니다. Scikit-learn 또는 pandas 라이브러리와 같은 종속성은 두 가지 방법으로 제공될 수 있습니다.

  • 명시적으로 지정할 수 있습니다. requirements.txt 파일
  • SageMaker에서 제공하거나 사용자 정의하여 제공하는 기본 ML 컨테이너 이미지에 사전 설치되어 있습니다.

두 옵션 모두 일반적으로 종속성 관리를 위한 표준 방법으로 간주되므로 이미 익숙할 수도 있습니다. SageMaker는 다음을 지원합니다. 다양한 ML 프레임워크 즉시 사용 가능한 관리 환경에서. 여기에는 우리의 경우처럼 PyTorch, TensorFlow 또는 Scikit-learn과 같은 가장 널리 사용되는 데이터 과학 및 ML 프레임워크가 많이 포함됩니다. 우리는 추가로 사용하지 않습니다 requirements.txt 파일로 만들 수 있지만 자유롭게 일부 라이브러리를 추가하여 사용해 보세요.

우리 구현 코드에는 다음과 같은 메소드가 포함되어 있습니다. fit(), 숫자 인식 작업을 위한 새로운 분류기를 생성하고 훈련합니다. SageMaker 내장 XGBoost 알고리즘을 사용한 첫 번째 게시물과 달리 이제 RandomForestClassifier ML 라이브러리 sklearn에서 제공됩니다. 의 전화 fit() 분류자 객체의 메서드는 CSV 데이터의 하위 집합(80%)을 사용하여 훈련 프로세스를 시작합니다.

def fit(train_dir, n_estimators, max_depth, min_samples_leaf, max_features, min_weight_fraction_leaf): digits = pd.read_csv(Path(train_dir)/'digits.csv') Xtrain, Xtest, ytrain, ytest = train_test_split(digits.iloc[:, :-1], digits.iloc[:, -1], test_size=.2) m = RandomForestClassifier(n_estimators=n_estimators, max_depth=max_depth, min_samples_leaf=min_samples_leaf, max_features=max_features, min_weight_fraction_leaf=min_weight_fraction_leaf) m.fit(Xtrain, ytrain) predicted = m.predict(Xtest) pre, rec, f1, _ = precision_recall_fscore_support(ytest, predicted, pos_label=1, average='weighted') print(f'pre: {pre:5.3f} rec: {rec:5.3f} f1: {f1:5.3}') return m

Jupyter Notebook에서 전체 스크립트를 확인하세요. GitHub의.

전체 학습 프로세스를 위해 컨테이너 리소스를 가동하기 전에 스크립트를 직접 실행하려고 했나요? 이는 코드에 구문 오류가 없는지 신속하게 확인하고, 데이터 구조의 차원 일치 및 기타 오류를 초기에 확인하는 좋은 방법입니다.

코드를 로컬에서 실행하는 방법에는 두 가지가 있습니다. 첫째, 노트북에서 바로 실행할 수 있으며, 이를 통해 Python 디버거도 사용할 수 있습니다. pdb:

# Running the code from within the notebook. It would then be possible to use the Python Debugger, pdb.
from train import fit
fit('data', 100, 10, 1, 'auto', 0.01)

또는 컨테이너에서 사용하려는 것과 동일한 방식으로 명령줄에서 train 스크립트를 실행합니다. 이는 또한 다양한 매개변수 설정과 필요에 따라 기본값 덮어쓰기를 지원합니다. 예를 들면 다음과 같습니다.

!cd src && python train.py --train ../data/ --model-dir /tmp/ --n-estimators 100

출력으로 객관적 측정항목 정밀도, 재현율 및 F1 점수를 기반으로 한 모델 성능의 첫 번째 결과를 볼 수 있습니다. 예를 들어, pre: 0.970 rec: 0.969 f1: 0.969.

그렇게 빠른 훈련에는 나쁘지 않습니다. 하지만 이 숫자는 어디에서 왔으며 우리는 그 숫자로 무엇을 해야 할까요?

맞춤 목표 측정항목 정의

우리의 목표는 작업과 관련이 있다고 생각하는 객관적인 지표를 기반으로 모델을 완전히 훈련하고 조정하는 것입니다. 사용자 지정 훈련 스크립트를 사용하기 때문에 SageMaker에 대한 해당 지표를 명시적으로 정의해야 합니다.

우리 스크립트는 단순히 print 기능:

print(f'pre: {pre:5.3f} rec: {rec:5.3f} f1: {f1:5.3}')

표준 출력은 SageMaker에서 캡처하여 로그 스트림으로 CloudWatch에 전송됩니다. 지표 값을 검색하고 나중에 SageMaker AMT에서 작업하려면 해당 출력을 구문 분석하는 방법에 대한 몇 가지 정보를 제공해야 합니다. 정규식 문을 정의하여 이를 달성할 수 있습니다(자세한 내용은 다음을 참조하세요). Amazon CloudWatch 지표를 사용하여 훈련 작업 모니터링 및 분석):

metric_definitions = [ {'Name': 'valid-precision', 'Regex': r'pre:s+(-?[0-9.]+)'}, {'Name': 'valid-recall', 'Regex': r'rec:s+(-?[0-9.]+)'}, {'Name': 'valid-f1', 'Regex': r'f1:s+(-?[0-9.]+)'}] 

이전 코드의 첫 번째 측정항목 정의를 함께 살펴보겠습니다. SageMaker는 다음으로 시작하는 로그에서 출력을 찾습니다. pre: 그 뒤에는 하나 이상의 공백과 추출하려는 숫자가 따르므로 둥근 괄호를 사용합니다. SageMaker는 이와 같은 값을 찾을 때마다 이를 이름이 있는 CloudWatch 지표로 변환합니다. valid-precision.

Scikit-learn 프레임워크를 사용하여 모델 학습

훈련 스크립트를 생성한 후 train.py CloudWatch 내에서 지표를 모니터링하는 방법을 SageMaker에 지시하고 SageMaker 추정기 물체. 훈련 작업을 시작하고 우리가 지정한 인스턴스 유형을 사용합니다. 하지만 이 인스턴스 유형이 실행하는 인스턴스 유형과 어떻게 다를 수 있습니까? 아마존 세이지 메이커 스튜디오 노트북을 켜놓고 왜? SageMaker Studio는 노트북이 아닌 별도의 컴퓨팅 인스턴스에서 교육(및 추론) 작업을 실행합니다. 이를 통해 작업이 백그라운드에서 실행되는 동안 노트북에서 계속 작업할 수 있습니다.

매개 변수 framework_version 훈련 작업에 사용하는 Scikit-learn 버전을 나타냅니다. 또는 통과할 수 있습니다. image_uri ~로 estimator. 선호하는 프레임워크나 ML 라이브러리가 사용 가능한지 확인할 수 있습니다. 사전 구축된 SageMaker Docker 이미지 그대로 사용하거나 확장 기능이 있는.

또한 다음을 설정하여 EC2 스팟 인스턴스에서 SageMaker 교육 작업을 실행할 수 있습니다. use_spot_instancesTrue. 이는 다음을 수행할 수 있는 예비 용량 인스턴스입니다. 최대 90%의 비용 절감. 이러한 인스턴스는 훈련 작업 실행 시기에 대한 유연성을 제공합니다.

estimator = SKLearn( 'train.py', source_dir='src', role=get_execution_role(), instance_type= 'ml.m5.large', instance_count=1, framework_version='0.23-1', metric_definitions=metric_definitions, # Uncomment the following three lines to use Managed Spot Training # use_spot_instances= True, # max_run= 60 * 60 * 24, # max_wait= 60 * 60 * 24, hyperparameters = {'n-estimators': 100, 'max-depth': 10, 'min-samples-leaf': 1, 'max-features': 'auto', 'min-weight-fraction-leaf': 0.1}
)

Estimator 개체가 설정된 후 다음을 호출하여 훈련을 시작합니다. fit() 함수를 사용하여 Amazon S3의 교육 데이터 세트에 대한 경로를 제공합니다. 이와 동일한 방법을 사용하여 검증 및 테스트 데이터를 제공할 수 있습니다. 우리는 wait 에 매개 변수 True 따라서 후속 코드 셀에서 훈련된 모델을 사용할 수 있습니다.

estimator.fit({'train': s3_data_url}, wait=True)

하이퍼파라미터 정의 및 튜닝 작업 실행

지금까지 우리는 하나의 하이퍼파라미터 값 세트로 모델을 훈련했습니다. 그런데 그 가치관이 좋았던 걸까요? 아니면 더 나은 것을 찾아볼 수 있을까요? 을 사용하자 HyperparameterTuner 클래스 하이퍼파라미터 공간에 대해 체계적인 검색을 실행합니다. 튜너로 이 공간을 어떻게 검색하나요? 필수 매개변수는 최적화를 안내할 목표 측정항목 이름과 목표 유형입니다. 최적화 전략은 검색 공간을 추가로 정의하므로 튜너의 또 다른 핵심 인수입니다. 선택할 수 있는 네 가지 전략은 다음과 같습니다.

  • 그리드 검색
  • 무작위 검색
  • 베이지안 최적화(기본값)
  • 하이퍼밴드

우리는 이러한 전략에 대해 더 자세히 설명하고 이 게시물의 뒷부분에서 하나를 선택할 수 있도록 몇 가지 지침을 제공합니다.

튜너 개체를 정의하고 실행하기 전에 아키텍처 관점에서 이해한 내용을 요약해 보겠습니다. 우리는 SageMaker AMT의 아키텍처 개요를 다루었습니다. 우리의 마지막 게시물 편의를 위해 여기에 그 내용을 발췌하여 재현합니다.

Amazon SageMaker 자동 모델 튜닝 아키텍처

조정하거나 정적으로 남겨두려는 하이퍼파라미터를 선택할 수 있습니다. 동적 하이퍼파라미터의 경우 다음을 제공합니다. hyperparameter_ranges 조정 가능한 하이퍼파라미터를 최적화하는 데 사용할 수 있습니다. 우리는 Random Forest 분류자를 사용하기 때문에 다음의 하이퍼파라미터를 활용했습니다. Scikit-learn Random Forest 문서.

또한 튜너가 사용할 수 있는 최대 훈련 작업 및 병렬 훈련 작업 수로 리소스를 제한합니다. 우리는 이러한 한계가 다양한 전략의 결과를 서로 비교하는 데 어떻게 도움이 되는지 살펴보겠습니다.

tuner_parameters = { 'estimator': estimator, 'base_tuning_job_name': 'random', 'metric_definitions': metric_definitions, 'objective_metric_name': 'valid-f1', 'objective_type': 'Maximize', 'hyperparameter_ranges': hpt_ranges, 'strategy': 'Random', 'max_jobs': n, # 50 'max_parallel_jobs': k # 2 } 

Estimator와 유사 fit 함수를 사용하여 튜너의 호출을 호출하여 튜닝 작업을 시작합니다. fit:

random_tuner = HyperparameterTuner(**tuner_parameters)
random_tuner.fit({'train': s3_data_url}, wait=False)

SageMaker가 훈련 작업을 실행하도록 하기 위해 우리가 해야 할 일은 이것이 전부입니다(n=50) 백그라운드에서 각각은 서로 다른 하이퍼파라미터 세트를 사용합니다. 이 게시물의 뒷부분에서 결과를 살펴보겠습니다. 하지만 그 전에 이번에는 베이지안 최적화 전략을 적용하는 또 다른 조정 작업을 시작하겠습니다. 두 전략을 완료한 후 시각적으로 비교해 보겠습니다.

tuner_parameters['strategy'] = 'Bayesian'
tuner_parameters['base_tuning_job_name'] = 'bayesian'
bayesian_tuner = HyperparameterTuner(**tuner_parameters)
bayesian_tuner.fit({'train': s3_data_url}, wait=False)

SageMaker가 필요한 컴퓨팅 인스턴스를 서로 독립적으로 조정하기 때문에 두 튜너 작업이 병렬로 실행될 수 있습니다. 이는 우리가 여기서 하는 것처럼 동시에 다양한 접근 방식을 실험하는 실무자에게 매우 도움이 됩니다.

SageMaker HPO 전략 중에서 선택

조정 전략과 관련하여 SageMaker AMT에는 그리드 검색, 무작위 검색, 베이지안 최적화, 하이퍼밴드 등 몇 가지 옵션이 있습니다. 이러한 전략은 자동 조정 알고리즘이 지정된 하이퍼파라미터 범위를 탐색하는 방법을 결정합니다.

무작위 검색은 매우 간단합니다. 지정된 범위에서 값의 조합을 무작위로 선택하며 순차 또는 병렬 방식으로 실행될 수 있습니다. 그것은 눈을 가린 채 다트를 던지는 것과 같으며, 목표물에 맞기를 바라면서 말입니다. 우리는 이 전략으로 시작했지만, 다른 전략으로 결과가 개선될까요?

베이지안 최적화는 무작위 검색과 다른 접근 방식을 취합니다. 이전 선택 내역을 고려하고 최상의 결과를 얻을 수 있는 값을 선택합니다. 이전 탐색에서 배우고 싶다면 이전 탐색 후에 새 튜닝 작업을 실행해야만 이를 달성할 수 있습니다. 말이 되네요, 그렇죠? 이러한 방식으로 베이지안 최적화는 이전 실행에 따라 달라집니다. 하지만 어떤 HPO 전략이 더 높은 병렬화를 허용하는지 아시나요?

하이퍼밴드 흥미로운 것입니다! 이는 다중 충실도 전략을 사용합니다. 즉, 가장 유망한 교육 작업에 리소스를 동적으로 할당하고 성과가 저조한 작업은 중지합니다. 따라서 Hyperband는 이전 훈련 작업을 통해 학습하여 리소스를 효율적으로 사용합니다. 성능이 저하된 구성을 중지한 후 새 구성이 시작되고 해당 값이 무작위로 선택됩니다.

요구 사항과 모델의 특성에 따라 튜닝 전략으로 무작위 검색, 베이지안 최적화 또는 하이퍼밴드 중에서 선택할 수 있습니다. 각각에는 고유한 접근 방식과 장점이 있으므로 어느 것이 ML 탐색에 가장 적합한지 고려하는 것이 중요합니다. ML 실무자에게 좋은 소식은 객관적 지표에 대한 각 시도의 영향을 시각적으로 비교하여 최상의 HPO 전략을 선택할 수 있다는 것입니다. 다음 섹션에서는 다양한 전략의 영향을 시각적으로 식별하는 방법을 살펴보겠습니다.

튜닝 결과 시각화, 분석, 비교

튜닝 작업이 완료되면 흥미진진해집니다. 그들은 어떤 결과를 제공합니까? 기본 모델과 비교하여 측정항목에서 어떤 종류의 향상을 기대할 수 있습니까? 우리 사용 사례에 가장 적합한 하이퍼파라미터는 무엇입니까?

HPO 결과를 보는 빠르고 간단한 방법은 SageMaker 콘솔을 방문하는 것입니다. 아래에 초매개변수 조정 작업, 우리는 테스트를 거쳐 객관적인 지표로 측정된 최고의 성능을 제공한 하이퍼파라미터 값의 조합을 (튜닝 작업별로) 확인할 수 있습니다(valid-f1).

초매개변수 조정 작업에 대한 측정항목

그게 전부인가요? ML 실무자로서 귀하는 이러한 가치에 관심이 있을 뿐만 아니라 모델의 내부 작동 방식에 대해 자세히 알아보고 경험적 피드백을 통해 모델의 잠재력을 최대한 탐색하고 직관을 강화하고 싶을 수도 있습니다.

좋은 시각화 도구는 시간 경과에 따른 HPO 개선을 ​​이해하고 ML 모델의 설계 결정에 대한 경험적 피드백을 얻는 데 큰 도움이 될 수 있습니다. 이는 목표 지표에 대한 각 개별 하이퍼파라미터의 영향을 보여주고 튜닝 결과를 더욱 최적화하기 위한 지침을 제공합니다.

우리는을 사용하여 amtviz 튜닝 작업을 시각화하고 분석하는 맞춤형 시각화 패키지입니다. 사용이 간단하고 유용한 기능을 제공합니다. 우리는 일부 개별 차트를 해석하고 마지막으로 무작위 검색을 베이지안 최적화와 나란히 비교하여 그 이점을 보여줍니다.

먼저 무작위 검색을 위한 시각화를 만들어 보겠습니다. 전화해서 할 수 있어요 visualize_tuning_job()amtviz 첫 번째 튜너 객체를 인수로 전달합니다.

from amtviz import visualize_tuning_job
visualize_tuning_job(random_tuner, advanced=True, trials_only=True)

몇 가지 차트가 표시되지만 단계별로 살펴보겠습니다. 출력의 첫 번째 산점도는 다음과 같으며 이미 어떤 테이블에서도 인식할 수 없는 몇 가지 시각적 단서를 제공합니다.

하이퍼파라미터 최적화 작업 결과

각 점은 개별 훈련 작업의 성과를 나타냅니다(우리의 목표 valid-f1 특정 하이퍼파라미터 세트에 의해 생성된 시작 시간(x축)을 기반으로 합니다. 따라서 우리는 튜닝 작업 기간 동안 진행되는 모델의 성능을 살펴봅니다.

점선은 지금까지 발견된 최상의 결과를 강조하고 시간 경과에 따른 개선을 나타냅니다. 가장 좋은 두 가지 훈련 작업은 약 1의 F0.91 점수를 달성했습니다.

누적 진행 상황을 보여주는 점선 외에 차트에서 추세가 보이시나요?

아마도 그렇지 않을 것입니다. 그리고 이는 무작위 HPO 전략의 결과를 보고 있기 때문에 예상된 것입니다. 각 훈련 작업은 서로 다르지만 무작위로 선택된 하이퍼파라미터 세트를 사용하여 실행되었습니다. 튜닝 작업을 계속하거나 동일한 설정으로 다른 작업을 실행하면 시간이 지남에 따라 더 나은 결과를 얻을 수 있지만 확신할 수는 없습니다. 무작위성은 까다로운 일입니다.

다음 차트는 하이퍼파라미터가 전체 성능에 미치는 영향을 측정하는 데 도움이 됩니다. 모든 하이퍼파라미터는 시각화되어 있지만 간결성을 위해 그 중 두 가지에 중점을 둡니다. n-estimatorsmax-depth.

하이퍼파라미터 작업 세부정보

우리의 상위 XNUMX개 훈련 작업은 n-estimators 20~80 정도이고, max-depth 각각 10개와 18개 정도다. 정확한 하이퍼파라미터 값은 각 점(훈련 작업)에 대한 도구 설명을 통해 표시됩니다. 모든 차트에서 동적으로 강조 표시되며 다차원적인 보기를 제공합니다! 그거 봤어? 각 초매개변수는 목표 측정항목에 대해 별도의 차트로 표시됩니다.

이제 우리는 어떤 종류의 통찰력을 얻게 됩니까? n-estimators?

왼쪽 차트에 따르면 매우 낮은 값 범위(10 미만)는 높은 값에 비해 좋지 않은 결과를 제공하는 경우가 더 많은 것으로 보입니다. 따라서 값이 높을수록 모델이 더 나은 성능을 발휘하는 데 도움이 될 수 있습니다.

대조적으로, max-depth 객관적인 지표에 대한 하이퍼파라미터는 다소 낮습니다. 일반적인 관점에서는 어떤 값 범위의 실적이 더 좋은지 명확하게 알 수 없습니다.

요약하자면, 무작위 검색은 상대적으로 짧은 시간에도 성능이 좋은 하이퍼파라미터 세트를 찾는 데 도움이 될 수 있습니다. 또한 좋은 솔루션에 편향되지 않고 검색 공간에 대한 균형 잡힌 시각을 제공합니다. 그러나 리소스 활용도는 그다지 효율적이지 않을 수 있습니다. 결과가 좋지 않은 것으로 알려진 값 범위의 하이퍼파라미터를 사용하여 훈련 작업을 계속 실행합니다.

베이지안 최적화를 사용한 두 번째 튜닝 작업의 결과를 살펴보겠습니다. 우리는 사용할 수 있습니다 amtviz 지금까지 무작위 검색 튜너에 대해 했던 것과 동일한 방식으로 결과를 시각화합니다. 또는 더 나은 방법은 기능의 기능을 사용하여 단일 차트 세트에서 두 튜닝 작업을 비교할 수 있다는 것입니다. 매우 편리합니다!

visualize_tuning_job([random_tuner, bayesian_tuner], advanced=True, trials_only=True)

하이퍼파라미터 최적화 작업 베이지안 VS 랜덤

이제 무작위 검색(주황색 점)과 베이지안 최적화(파란색 점) 모두에 대한 모든 훈련 작업의 결과를 시각화하기 때문에 점이 더 많습니다. 오른쪽에는 모든 F1 점수의 분포를 시각화한 밀도 차트가 표시됩니다. 대부분의 훈련 작업은 F1 척도의 상위 부분(0.6 이상)의 결과를 달성했습니다. 좋습니다.

여기서 핵심 내용은 무엇입니까? 산점도는 베이지안 최적화의 이점을 명확하게 보여줍니다. 이전 실행을 통해 학습할 수 있으므로 시간이 지남에 따라 더 나은 결과를 제공합니다. 이것이 동일한 수의 훈련 작업을 사용하여 무작위(0.967 대 0.919)에 비해 베이지안을 사용하여 훨씬 더 나은 결과를 얻은 이유입니다.

당신이 할 수 있는 일이 훨씬 더 많습니다 amtviz. 자세히 살펴보겠습니다.

SageMaker AMT에 튜닝을 위해 더 많은 수의 작업을 실행하라는 지시를 제공하면 한 번에 많은 시도를 보는 것이 지저분해질 수 있습니다. 이것이 우리가 이 차트를 대화형으로 만든 이유 중 하나입니다. 모든 초매개변수 분산형 차트를 클릭하고 드래그하여 특정 값 범위를 확대하고 결과의 시각적 해석을 개선할 수 있습니다. 다른 모든 차트는 자동으로 업데이트됩니다. 꽤 도움이 되지 않나요? 다음 차트를 예시로 보고 노트북에서 직접 시도해 보세요!

하이퍼파라미터 최적화 작업 시각화 기능

튜닝 최대주의자로서 다른 초매개변수 튜닝 작업을 실행하면 모델 성능이 더욱 향상될 수 있다고 결정할 수도 있습니다. 하지만 이번에는 더 나은 결과를 기대할 수 있는 위치를 이미 (대략) 알고 있으므로 보다 구체적인 범위의 하이퍼매개변수 값을 탐색할 수 있습니다. 예를 들어, 100~200 사이의 값에 집중하도록 선택할 수 있습니다. n-estimators, 차트에 표시된 것처럼. 이를 통해 AMT는 가장 유망한 교육 작업에 집중하고 튜닝 효율성을 높일 수 있습니다.

그것을 요 ​​약하기, amtviz 모델의 하이퍼파라미터가 성능에 미치는 영향을 더 잘 이해하고 튜닝 활동에서 보다 현명한 결정을 내릴 수 있는 풍부한 시각화 기능 세트를 제공합니다.

하이퍼파라미터 공간 탐색을 계속하고 HPO 작업을 웜 스타트합니다.

우리는 AMT가 하이퍼파라미터 검색 공간을 효율적으로 탐색하는 데 도움이 된다는 것을 확인했습니다. 하지만 결과를 반복적으로 개선하기 위해 여러 차례의 조정이 필요한 경우에는 어떻게 해야 할까요? 처음에 언급했듯이 우리는 최적화 피드백 주기, 즉 모델과의 "대화"를 구축하려고 합니다. 매번 처음부터 다시 시작해야 하나요?

실행의 개념을 살펴보겠습니다. 웜 스타트 초매개변수 조정 작업. 처음부터 새로운 튜닝 작업을 시작하지 않고 이전 HPO 실행에서 학습한 내용을 재사용합니다. 이를 통해 튜닝 시간과 컴퓨팅 리소스를 더욱 효율적으로 활용할 수 있습니다. 이전 결과를 바탕으로 추가로 반복할 수 있습니다. 웜 스타트를 사용하기 위해 WarmStartConfig 지정 warm_start_type as IDENTICAL_DATA_AND_ALGORITHM. 이는 하이퍼파라미터 값을 변경하지만 데이터나 알고리즘은 변경하지 않는다는 의미입니다. 우리는 AMT에게 이전 지식을 새로운 튜닝 작업으로 전송하라고 지시합니다.

이전 베이지안 최적화 및 무작위 검색 튜닝 작업을 다음과 같이 참조합니다. parents, 웜 스타트를 위해 둘 다 사용할 수 있습니다.

warm_start_config = WarmStartConfig(warm_start_type=WarmStartTypes.IDENTICAL_DATA_AND_ALGORITHM, parents=[bayesian_tuner_name, random_tuner_name])
tuner_parameters['warm_start_config'] = warm_start_config

웜 스타트 사용의 이점을 확인하려면 다음 차트를 참조하세요. 이들은 다음에 의해 생성됩니다. amtviz 앞서 했던 것과 비슷한 방식이지만 이번에는 웜 스타트를 기반으로 또 다른 튜닝 작업을 추가했습니다.

초매개변수 최적화 작업 Warmstart

왼쪽 차트에서는 새로운 튜닝 작업이 대부분 성능 지표 그래프의 오른쪽 상단에 있는 것을 볼 수 있습니다(주황색으로 표시된 점 참조). 웜 스타트는 실제로 이전 결과를 재사용했기 때문에 해당 데이터 포인트가 F1 점수의 상위 결과에 포함됩니다. 이러한 개선은 오른쪽의 밀도 차트에도 반영됩니다.

즉, AMT는 이전 시험에서 얻은 지식을 바탕으로 유망한 하이퍼파라미터 값 세트를 자동으로 선택합니다. 이는 다음 차트에 나와 있습니다. 예를 들어, 알고리즘은 다음에 대한 낮은 값을 테스트합니다. n-estimators F1 점수가 좋지 않은 것으로 알려져 있기 때문에 덜 자주 사용됩니다. 웜 스타트 덕분에 리소스를 낭비하지 않습니다.

하이퍼파라미터 최적화 시각화된 작업

정리

HPO 실험을 마친 후 원치 않는 비용이 발생하지 않도록 하려면 접두사가 있는 S3 버킷의 모든 파일을 제거해야 합니다. amt-visualize-demo 그리고 또한 SageMaker Studio 리소스 종료.

이 게시물에서 모든 S3 파일을 제거하려면 노트북에서 다음 코드를 실행하세요.

!aws s3 rm s3://{BUCKET}/amt-visualize-demo --recursive

데이터 세트 또는 모델 아티팩트를 유지하려면 코드의 접두사를 다음과 같이 수정할 수 있습니다. amt-visualize-demo/data 데이터만 삭제하거나 amt-visualize-demo/output 모델 아티팩트만 삭제합니다.

결론

우리는 ML 솔루션 구축 기술에 하이퍼파라미터 탐색 및 최적화가 어떻게 포함되는지 배웠습니다. 이러한 손잡이와 레버를 조정하는 것은 더 빠른 훈련 시간, 향상된 모델 정확도 및 전반적으로 더 나은 ML 솔루션으로 이어지는 까다롭지만 보람 있는 프로세스입니다. SageMaker AMT 기능은 여러 튜닝 작업을 실행하고 웜 스타트하는 데 도움이 되며 추가 검토, 시각적 비교 및 ​​분석을 위한 데이터 포인트를 제공합니다.

이 게시물에서는 SageMaker AMT와 함께 사용하는 HPO 전략을 살펴보았습니다. 우리는 하이퍼파라미터가 검색 공간에서 무작위로 샘플링되는 간단하지만 성능이 뛰어난 전략인 무작위 검색으로 시작했습니다. 다음으로, 확률 모델을 사용하여 최적의 초매개변수 검색을 안내하는 베이지안 최적화와 결과를 비교했습니다. 초기 시험을 통해 적합한 HPO 전략과 좋은 하이퍼파라미터 값 범위를 식별한 후 웜 스타트를 사용하여 향후 HPO 작업을 간소화하는 방법을 보여주었습니다.

정량적 결과를 비교하여 초매개변수 검색 공간을 탐색할 수 있습니다. 우리는 병렬적인 시각적 비교를 제안하고 대화형 탐색에 필요한 패키지를 제공했습니다. 하이퍼파라미터 튜닝 과정에서 이것이 얼마나 도움이 되었는지 댓글로 알려주세요!


저자 소개

우에미트 욜다스위미트 욜다스 Amazon Web Services의 수석 솔루션 아키텍트입니다. 그는 독일 내 여러 산업 분야의 기업 고객과 협력하고 있습니다. 그는 AI 개념을 실제 솔루션으로 변환하는 데 주력하고 있습니다. 업무 외 시간에는 가족과 함께 좋은 음식을 맛보며 건강을 추구하는 시간을 즐깁니다.

엘리나 레시크엘리나 레시크 뮌헨에 위치한 솔루션 아키텍트입니다. 그녀는 금융 서비스 업계의 기업 고객에 초점을 맞추고 있습니다. 여가 시간에는 일부 IT 모임에서 Elina가 생성 AI를 사용하여 애플리케이션을 구축하거나, 기후 변화를 빠르게 해결하기 위한 새로운 아이디어를 추진하거나, 계획된 일정에서 일반적으로 벗어나는 하프 마라톤을 준비하기 위해 숲에서 달리는 모습을 볼 수 있습니다.

마리아노 캄프마리아노 캠프 Amazon Web Services의 수석 솔루션 설계자입니다. 그는 기계 학습에 관해 독일의 은행 및 보험 회사와 협력하고 있습니다. 여가 시간에는 마리아노는 아내와 함께 하이킹을 즐깁니다.

타임 스탬프 :

더보기 AWS 기계 학습