

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 알고리즘 유형
<a name="algorithms-choose"></a>

기계 학습은 일종의 귀납적 추론이 필요한 경험적 작업을 수행하는 데 도움이 될 수 있습니다. 이 작업에는 데이터를 사용하여 알고리즘을 훈련시켜 일반화시킬 수 있는 추론을 수행하는 귀납법이 포함됩니다. 즉, 알고리즘은 훈련에 사용되지 않은 새 데이터에 적용할 경우 통계적으로 신뢰할 수 있는 예측 또는 결정을 내리거나 다른 태스크를 완료할 수 있습니다.

태스크에 가장 적합한 알고리즘을 선택할 수 있도록 다양한 추상화 수준에 따라 이러한 작업을 분류합니다. 가장 높은 추상화 수준에서 기계 학습은 특징 또는 데이터세트의 텍스트와 같이 덜 구조화된 항목 간의 패턴이나 관계를 찾으려고 시도합니다. 패턴 인식 기법은 고유한 기계 학습 패러다임으로 분류할 수 있으며, 각 패러다임은 특정 문제 유형을 다룹니다. 현재 다양한 문제 유형을 해결하는 데 사용되는 기계 학습에는 세 가지 기본 패러다임이 있습니다.
+ [지도 학습](#algorithms-choose-supervised-learning)
+ [비지도 학습](#algorithms-choose-unsupervised-learning)
+ [강화 학습](#algorithms-choose-reinforcement-learning)

보유하고 있거나 수집할 수 있는 데이터 유형으로부터 도출하고자 하는 추론(또는 예측, 결정 또는 기타 태스크)을 고려하여 각 학습 패러다임이 해결할 수 있는 문제 유형을 식별합니다. 기계 학습 패러다임은 알고리즘 방법을 사용하여 다양한 문제 유형을 해결합니다. 알고리즘은 이러한 문제를 해결하기 위한 방법을 제공합니다.

그러나 신경망과 같은 많은 알고리즘을 다양한 학습 패러다임과 다양한 유형의 문제에 적용할 수 있습니다. 여러 알고리즘을 사용하여 특정 문제 유형을 해결할 수도 있습니다. 일부 알고리즘은 더 일반적으로 적용할 수 있고 다른 알고리즘은 특정 종류의 목표와 데이터에 매우 구체적입니다. 따라서 기계 학습 알고리즘과 문제 유형 간의 매핑은 다대다로 이루어집니다. 또한 알고리즘에 사용할 수 있는 다양한 구현 옵션이 있습니다.

다음 섹션에서는 다양한 문제 유형에 적합한 구현 옵션, 기계 학습 패러다임 및 알고리즘에 관한 지침을 제공합니다.

**Topics**
+ [알고리즘 구현 선택](#algorithms-choose-implementation)
+ [기본 기계 학습 패러다임의 문제 유형](#basic-machine-learning-paradigms)
+ [Amazon SageMaker 기본 제공 알고리즘 또는 사전 훈련된 모델 사용](algos.md)
+ [Amazon SageMaker AI를 통한 강화형 기계 학습 사용](reinforcement-learning.md)

## 알고리즘 구현 선택
<a name="algorithms-choose-implementation"></a>

알고리즘을 선택한 후에는 어떤 구현을 사용할지 결정해야 합니다. Amazon SageMaker AI는 점점 더 많은 작업이 필요한 3가지 구현 옵션을 지원합니다.
+ **사전 훈련된 모델**은 최소한의 노력이 필요하며 배포 준비 완료 상태이거나 SageMaker JumpStart를 사용하여 미세 조정 및 배포할 수 있는 모델입니다.
+ 데이터세트가 크고 모델을 학습하고 배포하는 데 상당한 리소스가 필요한 경우 **기본 제공 알고리즘**은 더 많은 노력과 확장이 필요합니다.
+ 제대로 작동하는 내장 솔루션이 없는 경우 Scikit-Learn, TensorFlow, PyTorch, MXNet 또는 Chainer와 같은 지원되는 프레임워크를 위해 **기계 및 딥 러닝 프레임워크용으로 미리 만들어진 이미지**를 사용하는 솔루션을 개발해 보세요.
+ 사용자 지정 패키지를 실행하거나 지원되는 프레임워크의 일부가 아니거나 PyPi를 통해 제공되는 코드를 사용해야 하는 경우 필요한 패키지 또는 소프트웨어를 설치하도록 구성된 **사용자 지정 도커 이미지를 직접** 빌드해야 합니다. 또한 사용자 지정 이미지는 Amazon Elastic Container Registry와 같은 온라인 리포지토리로 푸시해야 합니다.

**Topics**
+ [기본 제공 알고리즘 사용](#built-in-algorithms-benefits)
+ [지원되는 프레임워크에서 스크립트 모드를 사용하세요.](#supported-frameworks-benefits)
+ [사용자 지정 도커 이미지 사용](#custom-image-use-case)

알고리즘 구현 지침


| 구현 | 코드 요구 | 사전 코딩된 알고리즘 | 타사 패키지 지원 | 사용자 지정 코드 지원 | 노력 수준 | 
| --- | --- | --- | --- | --- | --- | 
| 기본 제공 | 아니요 | 예 | 아니요 | 아니요 | 낮음 | 
| Scikit-learn | 예 | 예 | PyPi 전용 | 예 | 중간 | 
| Spark ML | 예 | 예 | PyPi 전용 | 예 | 중간 | 
| XGBoost (오픈 소스) | 예 | 예 | PyPi 전용 | 예 | 중간 | 
| TensorFlow | 예 | 아니요 | PyPi 전용 | 예 | 중간-높음 | 
| PyTorch | 예 | 아니요 | PyPi 전용 | 예 | 중간-높음 | 
| MXNet | 예 | 아니요 | PyPi 전용 | 예 | 중간-높음 | 
| Chainer | 예 | 아니요 | PyPi 전용 | 예 | 중간-높음 | 
| 사용자 지정 이미지 | 예 | 아니요 | 예, 모든 소스에서 | 예 | 높음 | 

### 기본 제공 알고리즘 사용
<a name="built-in-algorithms-benefits"></a>

문제 유형과 데이터에 맞는 알고리즘을 선택할 때 가장 쉬운 옵션은 Amazon SageMaker AI 기본 제공 알고리즘 중 하나를 사용하는 것입니다. 이러한 기본 제공 알고리즘에는 두 가지 주요 이점이 있습니다.
+ 기본 제공 알고리즘은 코딩하지 않아도 실험을 실행할 수 있습니다. 입력으로 데이터, 하이퍼파라미터, 컴퓨팅 리소스만 제공하면 됩니다. 이를 통해 결과 및 코드 변경을 추적하는 데 드는 오버헤드를 줄이면서 실험을 더 빠르게 실행할 수 있습니다.
+ 기본 제공 알고리즘은 여러 컴퓨팅 인스턴스에서 병렬화를 지원하며 적용 가능한 모든 알고리즘에 대해 GPU를 즉시 지원합니다(일부 알고리즘은 고유한 제한으로 인해 포함되지 않을 수 있음). 모델 훈련에 사용할 데이터가 많은 경우 대부분의 기본 제공 알고리즘은 수요에 맞게 쉽게 규모를 조정할 수 있습니다. 사전 훈련된 모델이 있더라도, 지원되는 프레임워크의 스크립트 모드를 사용하여 모델을 포팅하는 것보다 SageMaker AI에서 결과를 사용하고 이미 알고 있는 하이퍼파라미터를 입력하는 것이 더 쉬울 수 있습니다.

SageMaker AI에서 제공하는 내장된 알고리즘에 대한 자세한 내용은 [Amazon SageMaker 기본 제공 알고리즘 또는 사전 훈련된 모델 사용](algos.md) 섹션을 참조하세요.

Docker 레지스트리 경로, 데이터 형식, 권장 EC2 인스턴스 유형 및 SageMaker AI에서 제공하는 모든 내장된 알고리즘에 공통적인 CloudWatch 로그에 대한 중요한 내용은 [기본 제공 알고리즘의 파라미터](common-info-all-im-models.md) 섹션을 참조하세요.

### 지원되는 프레임워크에서 스크립트 모드를 사용하세요.
<a name="supported-frameworks-benefits"></a>

모델에 사용하려는 알고리즘이 내장된 선택으로 지원되지 않고 자체 솔루션을 코딩하는 데 익숙하다면 Amazon SageMaker AI 지원 프레임워크 사용을 고려해야 합니다. `.py` 확장자가 있는 텍스트 파일에 사용자 지정 코드(스크립트)를 작성하기 때문에 이를 ‘스크립트 모드’라고 합니다. 위의 테이블에서 알 수 있듯이 SageMaker AI는 널리 사용되는 대부분의 기계 학습 프레임워크를 지원합니다. 이러한 프레임워크에는 해당 프레임워크와 Pandas, NumPy와 같은 일부 추가 Python 패키지가 미리 로드되어 있으므로 알고리즘 훈련을 위한 코드를 직접 작성할 수 있습니다. 또한 이러한 프레임워크를 사용하면 훈련 코드와 함께 requirements.txt 파일을 포함하거나 자체 코드 디렉토리를 포함하여 PyPi에서 호스팅되는 모든 Python 패키지를 설치할 수 있습니다. R은 SageMaker 노트북 커널에서도 기본적으로 지원됩니다. scikit-learn 및 Spark ML과 같은 일부 프레임워크에는 쉽게 사용할 수 있는 사전 코딩된 알고리즘이 있는 반면, TensorFlow 및 PyTorch와 같은 다른 프레임워크에서는 알고리즘을 직접 구현해야 할 수도 있습니다. 지원되는 프레임워크 이미지를 사용할 때의 유일한 제한은 PyPi에서 호스팅되지 않거나 프레임워크 이미지에 아직 포함되지 않은 소프트웨어 패키지를 가져올 수 없다는 것입니다.

SageMaker AI에서 지원하는 프레임워크에 대한 자세한 내용은 [기계 학습 프레임워크 및 언어](frameworks.md) 섹션을 참조하세요.

### 사용자 지정 도커 이미지 사용
<a name="custom-image-use-case"></a>

Amazon SageMaker AI 기본 제공 알고리즘과 지원되는 프레임워크는 대부분의 사용 사례를 포함해야 하지만, 지원되는 프레임워크에 포함되지 않은 패키지의 알고리즘을 사용해야 하는 경우도 있습니다. 또한 배포해야 하는 곳에 사전 훈련된 모델을 선택하거나 유지한 모델이 있을 수 있습니다. SageMaker AI는 Docker 이미지를 사용하여 모든 모델의 훈련 및 서비스를 호스팅하므로 필요한 패키지 또는 소프트웨어가 지원되는 프레임워크에 포함되어 있지 않은 경우 사용자 지정 Docker 이미지를 제공할 수 있습니다. 이것은 사용자 고유의 Python 패키지일 수도 있고 Stan 또는 Julia와 같은 언어로 코딩된 알고리즘일 수도 있습니다. 또한 이러한 이미지의 경우 Dockerfile에서 알고리즘 훈련 및 모델 제공을 적절히 구성해야 합니다. 이를 위해서는 도커에 대한 중급 지식이 필요하므로, 사용자가 스스로 기계 학습 알고리즘을 작성하는 데 익숙하지 않은 한 사용하지 않는 것이 좋습니다. 모델을 제대로 교육시키고 제공할 수 있으려면 먼저 도커 이미지를 Amazon Elastic Container Registry(ECR)와 같은 온라인 리포지토리에 업로드해야 합니다.

 SageMaker AI의 사용자 지정 Docker 이미지에 대한 자세한 내용은 [모델 훈련 및 배포를 위한 Docker 컨테이너](docker-containers.md) 섹션을 참조하세요.

## 기본 기계 학습 패러다임의 문제 유형
<a name="basic-machine-learning-paradigms"></a>

다음 세 섹션에서는 기계 학습의 세 가지 기본 패러다임에서 다루는 주요 문제 유형을 설명합니다. SageMaker AI가 이러한 문제 유형을 해결하기 위해 제공하는 내장된 알고리즘 목록은 [Amazon SageMaker 기본 제공 알고리즘 또는 사전 훈련된 모델 사용](algos.md) 섹션을 참조하세요.

**Topics**
+ [지도 학습](#algorithms-choose-supervised-learning)
+ [비지도 학습](#algorithms-choose-unsupervised-learning)
+ [강화 학습](#algorithms-choose-reinforcement-learning)

### 지도 학습
<a name="algorithms-choose-supervised-learning"></a>

데이터세트가 대상 값(출력)을 포함하는 특징 또는 속성(입력)으로 구성된 경우 지도 학습 문제가 있는 것입니다. 대상 값이 범주형(수학적으로 불연속형)이면 **분류에 문제**가 있는 것입니다. 바이너리를 멀티클래스 분류와 구별하는 것이 표준 방법입니다.
+ **바이너리 분류**는 개인의 속성에 따라 미리 정의되고 상호 배타적인 두 클래스 중 하나에 개인을 할당하는 지도 학습의 한 유형입니다. 올바르게 레이블이 지정된 객체가 있는 속성을 제공하는 예제를 사용하여 모델이 훈련되므로 지도가 가능합니다. 진단 테스트의 결과에 기반하여 개인이 질병을 갖고 있는지 여부에 대한 의학적 진단은 바이너리 분류의 예입니다.
+ **멀티클래스 분류**는 개인의 속성에 따라 여러 클래스 중 하나에 개인을 할당하는 지도 학습의 한 유형입니다. 올바르게 레이블이 지정된 객체가 있는 속성을 제공하는 예제를 사용하여 모델이 훈련되므로 지도가 가능합니다. 예를 들어 텍스트 문서와 가장 관련성이 높은 주제를 예측합니다. 문서는 종교, 정치, 금융 또는 기타 다양한 미리 정의된 주제 클래스 중 하나에 대한 것으로 분류될 수 있습니다.

예측하려는 대상 값이 수학적으로 연속적이면 **회귀** 문제가 있는 것입니다. 회귀는 상관 관계가 있는 하나 이상의 다른 변수 또는 속성을 기반으로 종속 대상 변수의 값을 추정합니다. 예를 들어 욕실 및 침실 수, 주택 및 정원의 평방 피트와 같은 특징을 사용하여 주택 가격을 예측합니다. 회귀 분석을 통해 이들 특징 중 하나 이상을 입력으로 사용하는 모델을 만들고 주택 가격을 예측할 수 있습니다.

SageMaker AI에서 제공하는 내장된 지도 학습 알고리즘에 대한 자세한 내용은 [지도 학습](algos.md#algorithms-built-in-supervised-learning) 섹션을 참조하세요.

### 비지도 학습
<a name="algorithms-choose-unsupervised-learning"></a>

데이터세트가 레이블 또는 대상 값(출력)을 포함하지 않는 특징 또는 속성(입력)으로 구성된 경우 비지도 학습 문제가 있는 것입니다. 이 유형의 문제에서는 입력 데이터에서 발견된 패턴을 기반으로 출력을 예측해야 합니다. 비지도 학습 문제의 목표는 데이터 내에서 그룹화와 같은 패턴을 발견하는 것입니다. 비지도 학습을 적용할 수 있는 태스크나 문제 유형은 매우 다양합니다. 주요 구성 요소 분석과 클러스터 분석은 데이터 사전 처리에 일반적으로 사용되는 두 가지 주요 방법입니다. 다음은 비지도 학습으로 해결할 수 있는 문제 유형의 간단한 목록입니다.
+ **차원 축소**는 일반적으로 모델 구성에 사용할 관련성이 가장 높은 특징을 결정하는 데 사용되는 데이터 탐색 단계의 일부입니다. 그러니까 인구 밀도가 낮은 고차원 공간의 데이터를 원본 데이터의 가장 중요한 속성을 유지하는 저차원 공간으로 변환하는 것입니다. 이렇게 하면 통계 분석에 문제가 되는 인구 밀도가 낮은 고차원 데이터에서 발생할 수 있는 차원상 폐해를 완화할 수 있습니다. 또한 고차원 데이터를 시각화할 수 있는 저차원으로 축소하여 데이터를 더 잘 이해할 수 있도록 사용할 수 있습니다.
+ **클러스터 분석**은 객체 또는 사례를 클러스터라는 그룹으로 분류하는 데 사용되는 일종의 기법입니다. 데이터 내 별도의 그룹화를 찾으려 합니다. 이 경우 그룹의 멤버는 가급적 다른 멤버와 유사하고 다른 그룹의 멤버와는 가급적 다릅니다. 알고리즘이 유사성을 결정하는 데 사용할 특징이나 속성을 정의하고, 유사성을 측정할 거리 함수를 선택하고, 분석에 사용할 클러스터 수를 지정합니다.
+ **이상 탐지**는 데이터세트에서 나머지 데이터와 크게 다르기 때문에 의심을 불러일으키는 희귀 항목, 이벤트 또는 관측치를 식별하는 것입니다. 예를 들어, 은행 사기 또는 의료 오류를 탐지하는 데 변칙 항목을 식별하는 데 사용할 수 있습니다. 이상은 특이값, 신규성, 노이즈, 편차, 예외라고도 합니다.
+ **밀도 추정**은 관측된 데이터를 기반으로 관측할 수 없는 기본 확률 밀도 함수의 추정치를 구성하는 것입니다. 밀도 추정치는 데이터 탐색에 자연스럽게 사용됩니다. 밀도 추정치를 통해 데이터에서 왜도 및 다중 모달과 같은 특징을 발견할 수 있습니다. 밀도 추정의 가장 기본적인 형태는 크기가 조정된 히스토그램입니다.

SageMaker AI는 이러한 비지도 학습 작업에 사용할 수 있는 몇 가지 내장 기계 학습 알고리즘을 제공합니다. SageMaker AI에서 제공하는 내장된 비지도 알고리즘에 대한 자세한 내용은 [비지도 학습](algos.md#algorithms-built-in-unsupervised-learning) 섹션을 참조하세요.

### 강화 학습
<a name="algorithms-choose-reinforcement-learning"></a>

강화형 기계 학습은 환경과의 상호 작용을 기반으로 하는 학습 유형입니다. 이러한 유형의 학습은 행동의 결과로 받는 장기적 보상을 극대화하는 것을 목표로 동적 환경과의 시행착오 상호 작용을 통해 행동을 학습해야 하는 에이전트가 사용합니다. 불확실한 보상이 있는 행동의 탐색을 알려진 보상이 있는 행동의 악용과 절충함으로써 보상을 극대화합니다.

강화 학습을 위한 SageMaker AI의 프레임워크, 도구 키트 및 환경에 대한 자세한 내용은 [Amazon SageMaker AI를 통한 강화형 기계 학습 사용](reinforcement-learning.md) 섹션을 참조하세요.

# Amazon SageMaker 기본 제공 알고리즘 또는 사전 훈련된 모델 사용
<a name="algos"></a>

Amazon SageMaker는 기본 제공 알고리즘, 사전 훈련된 모델, 사전 구축된 솔루션 템플릿 제품군을 제공하여 데이터 사이언티스트와 기계 학습 실무자가 기계 학습 모델을 빠르게 훈련 및 배포할 수 있도록 지원합니다. SageMaker를 처음 사용하는 사람에게는 특정 사용 사례에 적합한 알고리즘을 선택하는 것이 어려울 수 있습니다. 다음 테이블은 예제 문제 또는 사용 사례로 시작하여 해당 문제 유형에 적합한 SageMaker에서 제공하는 적절한 기본 제공 알고리즘을 찾는 방법을 보여주는 간단한 치트 시트를 제공합니다. 학습 패러다임(지도 및 비지도)과 중요한 데이터 도메인(텍스트 및 이미지)별로 구성된 추가 지침은 테이블 아래 섹션에 나와 있습니다.

테이블: 사용 사례를 기본 제공 알고리즘에 매핑

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/algos.html)

SageMaker AI에서 제공하는 모든 내장된 알고리즘에 공통적으로 사용되는 다음 항목에 대한 중요 내용은 [기본 제공 알고리즘의 파라미터](common-info-all-im-models.md) 섹션을 참조하세요.
+ Docker 레지스트리 경로
+ 데이터 형식
+ 권장 Amazon EC2 인스턴스 유형
+ CloudWatch 로그

다음 섹션에서는 Amazon SageMaker AI 기본 제공 알고리즘에 대한 추가 가이드를 제공합니다. 알고리즘은 해당 알고리즘이 속한 지도 학습 및 비지도 학습 패러다임으로 그룹화되어 있습니다. 이러한 학습 패러다임 및 관련 문제 유형에 대한 설명은 [알고리즘 유형](algorithms-choose.md) 섹션을 참조하세요. 텍스트 분석과 이미지 처리라는 2가지 중요한 기계 학습 영역을 다루는 데 사용할 수 있는 SageMaker AI 기본 제공 알고리즘에 대한 섹션도 제공됩니다.
+ [사전 훈련된 모델 및 솔루션 템플릿](#algorithms-built-in-jumpstart)
+ [지도 학습](#algorithms-built-in-supervised-learning)
+ [비지도 학습](#algorithms-built-in-unsupervised-learning)
+ [텍스트 분석](#algorithms-built-in-text-analysis)
+ [이미지 프로세싱](#algorithms-built-in-image-processing)

## 사전 훈련된 모델 및 솔루션 템플릿
<a name="algorithms-built-in-jumpstart"></a>

Amazon SageMaker JumpStart는 다양한 사전 훈련된 모델, 사전 구축된 솔루션 템플릿 및 인기 있는 문제 유형에 대한 예제를 제공합니다. 이들은 SageMaker SDK와 Studio Classic을 사용합니다. 이러한 모델, 솔루션 및 Amazon SageMaker JumpStart에서 제공하는 예제 노트북에 대한 자세한 내용은 섹션을 참조하세요[SageMaker JumpStart 사전 훈련된 모델](studio-jumpstart.md).

## 지도 학습
<a name="algorithms-built-in-supervised-learning"></a>

Amazon SageMaker AI는 분류 또는 회귀 문제에 사용할 수 있는 몇 가지 내장된 범용 알고리즘을 제공합니다.
+ [AutoGluon-Tabular](autogluon-tabular.md) - 모델을 앙상블하고 여러 레이어로 쌓아 승계하는 오픈 소스 AutoML 프레임워크.
+ [CatBoost](catboost.md) - 그라디언트 부스트 트리 알고리즘의 구현으로, 순서가 있는 부스팅과 범주형 특성 처리를 위한 혁신적인 알고리즘의 구현.
+ [Factorization Machine 알고리즘](fact-machines.md) - 고차원 저밀도 데이터세트 내 특성 간 상호 작용을 경제적으로 캡처하도록 설계된 선형 모델의 확장.
+ [K-Nearest Neighbors(k-NN) 알고리즘](k-nearest-neighbors.md) - 가장 가까운 레이블이 지정된 k 점을 사용하여 값을 할당하는 비모수적 메서드입니다. 분류의 경우 새 데이터 포인트의 레이블입니다. 회귀의 경우 가장 가까운 k 포인트의 평균에서 예측된 목표 값입니다.
+ [LightGBM](lightgbm.md) - 효율성과 확장성을 높이기 위해 두 가지 새로운 기법을 추가하는 그라데이션 부스트 트리 알고리즘의 구현입니다. 이 두 가지 새로운 기법은 GOSS(Gradient-based One-Side Sampling)와 EFB(Exclusive Feature Bundling)입니다.
+ [선형 학습자 알고리즘](linear-learner.md) - 회귀를 위한 선형 함수 또는 분류를 위한 선형 임계값 함수를 학습합니다.
+ [TabTransformer](tabtransformer.md) - 셀프 어텐션 기반 변환기를 기반으로 구축된 새로운 딥 테이블 형식 데이터 모델링 아키텍처.
+ [Amazon SageMaker AI를 사용한 XGBoost 알고리즘](xgboost.md) - 더 간단하고 약한 모델 세트의 예상치 앙상블을 결합하는 그라디언트 부스트 트리 알고리즘의 구현.

Amazon SageMaker AI는 특성 엔지니어링과 예측 중에 시계열 데이터를 통해 더 전문화된 작업에 사용되는 몇 가지 내장된 지도 학습 알고리즘을 제공합니다.
+ [Object2Vec 알고리즘](object2vec.md) - 특성 추출에 사용되는 고도로 사용자 지정이 가능한 새로운 다목적 알고리즘. 고차원 객체의 저차원 밀도 임베딩을 학습하여 다운스트림 모델의 훈련 효율성을 향상시키는 특성을 생성할 수 있습니다. 이 알고리즘은 훈련에 레이블이 지정된 데이터가 필요하기 때문에 지도 알고리즘이지만, 사람의 명시적인 주석 없이 데이터의 자연스러운 클러스터링을 통해서만 관계 레이블을 얻을 수 있는 시나리오가 많이 있습니다. 훈련을 위해 레이블이 지정된 데이터가 필요하지만 명시적인 인적 주석 없이도 발생할 수 있습니다.
+ [SageMaker AI DeepAR 예측 알고리즘 사용](deepar.md) - 반복 신경망(RNN)을 사용하여 스칼라(1차원) 시계열을 예상하는 지도 학습 알고리즘.

## 비지도 학습
<a name="algorithms-built-in-unsupervised-learning"></a>

Amazon SageMaker AI는 다양한 비지도 학습 작업에 사용할 수 있는 몇 가지 내장된 기계 학습 알고리즘을 제공합니다. 이러한 작업에는 클러스터링, 차원 축소, 패턴 인식, 이상 감지 등이 포함됩니다.
+ [Principal Component Analysis(PCA) 알고리즘](pca.md) - 처음 몇 개의 주요 구성 요소에 데이터 포인트를 프로젝션하여 데이터세트 내의 차원(특성 수)을 줄입니다. 목표는 가능한 한 많은 정보나 변형을 유지하는 것입니다. 수학자의 경우 주요 구성 요소은 데이터 공분산 행렬의 고유벡터입니다.
+ [k-means 알고리즘](k-means.md) - 데이터 내에서 이산 그룹화를 찾습니다. 이 경우 그룹의 멤버는 가급적 다른 멤버와 유사하고 다른 그룹의 멤버와는 최대한 다릅니다.
+ [IP Insights](ip-insights.md) - IPv4 주소의 사용 패턴을 학습합니다. IPv4 주소와 여러 엔터티(예: 사용자 ID 또는 계정 번호) 간 연결을 캡처하도록 설계되어 있습니다.
+ [Random Cut Forest(RCF) 알고리즘](randomcutforest.md) - 데이터세트 내에서 제대로 구조화되거나 패턴이 있는 데이터와 다른 비정상적인 데이터 포인트를 탐지합니다.

## 텍스트 분석
<a name="algorithms-built-in-text-analysis"></a>

SageMaker AI는 텍스트 문서의 분석에 맞게 조정된 알고리즘을 제공합니다. SageMaker는 자연어 처리, 문서 분류 또는 요약, 주제 모델링 또는 분류, 언어 트랜스크립션 또는 번역에 사용되는 텍스트 문서의 분석에 맞게 조정된 알고리즘을 제공합니다.
+ [BlazingText 알고리즘](blazingtext.md) - 대규모 데이터세트로 쉽게 확장할 수 있는 Word2vec 및 텍스트 분류 알고리즘의 고도로 최적화된 구현. 많은 다운스트림 자연어 처리 (NLP) 태스크에 유용합니다.
+ [Sequence-to-Sequence 알고리즘](seq-2-seq.md) - 신경망 기계 번역에 일반적으로 사용되는 감독형 알고리즘.
+ [Latent Dirichlet Allocation(LDA) 알고리즘](lda.md) - 여러 문서에서 주제를 결정하는 데 적합한 알고리즘. 비지도 알고리즘으로 훈련 중 답이 포함된 예제 데이터를 사용하지 않습니다.**
+ [Neural Topic Model(NTM) 알고리즘](ntm.md) - 신경망 접근 방식을 사용하여 여러 문서에서 주제를 결정하는 또 다른 비지도 기법.
+ [텍스트 분류 - TensorFlow](text-classification-tensorflow.md) - 텍스트 분류에 사용할 수 있는 사전 훈련된 모델을 사용하여 전이 학습을 지원하는 지도 알고리즘.

## 이미지 프로세싱
<a name="algorithms-built-in-image-processing"></a>

또한 SageMaker AI는 이미지 분류, 객체 감지 및 컴퓨팅 비전에 사용되는 이미지 처리 알고리즘을 제공합니다.
+ [이미지 분류 - MXNet](image-classification.md) - 답이 포함된 예제 데이터를 사용합니다(지도 알고리즘이라고 함).** 이 알고리즘을 사용하여 이미지를 분류할 수 있습니다.
+ [이미지 분류 - TensorFlow](image-classification-tensorflow.md) - 사전 훈련된 TensorFlow Hub 모델을 사용하여 특정 태스크에 맞게 미세 조정합니다(지도 알고리즘이라고 함).** 이 알고리즘을 사용하여 이미지를 분류할 수 있습니다.
+ [의미 체계 분할 알고리즘](semantic-segmentation.md) - 컴퓨터 비전 응용 분야를 개발하는 데 세분화된 픽셀 수준 접근 방식을 제공합니다.
+ [객체 감지 - MXNet](object-detection.md) - 단일 심층 신경망을 사용하여 이미지의 물체를 감지하고 분류합니다. 이 알고리즘은 입력으로 이미지를 가져와 이미지 장면 내에서 객체의 모든 인스턴스를 식별하는 지도 학습 알고리즘입니다.
+ [객체 감지 - TensorFlow](object-detection-tensorflow.md) - 이미지에서 경계 상자와 객체 레이블을 감지합니다. 사전 훈련된 TensorFlow 모델에 사용할 수 있는 전이 학습을 지원하는 지도 알고리즘입니다.

**Topics**
+ [사전 훈련된 모델 및 솔루션 템플릿](#algorithms-built-in-jumpstart)
+ [지도 학습](#algorithms-built-in-supervised-learning)
+ [비지도 학습](#algorithms-built-in-unsupervised-learning)
+ [텍스트 분석](#algorithms-built-in-text-analysis)
+ [이미지 프로세싱](#algorithms-built-in-image-processing)
+ [기본 제공 알고리즘의 파라미터](common-info-all-im-models.md)
+ [테이블 형식 데이터용 내장된 SageMaker AI 알고리즘](algorithms-tabular.md)
+ [텍스트 데이터용 내장된 SageMaker AI 알고리즘](algorithms-text.md)
+ [시계열 데이터용 내장된 SageMaker AI 알고리즘](algorithms-time-series.md)
+ [비지도 내장 SageMaker AI 알고리즘](algorithms-unsupervised.md)
+ [컴퓨터 비전용 내장 SageMaker AI 알고리즘](algorithms-vision.md)

# 기본 제공 알고리즘의 파라미터
<a name="common-info-all-im-models"></a>

다음 테이블에는 Amazon SageMaker AI에서 제공되는 각 알고리즘에 대한 파라미터가 나열되어 있습니다.


| 알고리즘 이름 | 채널 이름 | 훈련 입력 모드 | 파일 유형 | 인스턴스 클래스 | 병렬화 가능 | 
| --- | --- | --- | --- | --- | --- | 
| AutoGluon-Tabular | 훈련 및 (선택적으로) 검증 | 파일 | CSV | CPU 또는 GPU(단일 인스턴스 전용) | 아니요 | 
| BlazingText | train | 파일 또는 파이프 | 텍스트 파일(행당 공백으로 분류된 토큰이 포함된 하나의 문장)  | CPU 또는 GPU(단일 인스턴스 전용)  | 아니요 | 
| CatBoost | 훈련 및 (선택적으로) 검증 | 파일 | CSV | CPU(단일 인스턴스 전용) | 아니요 | 
| DeepAR Forecasting | train 및 (선택 사항) test | 파일 | JSON 라인 또는 Parquet | CPU 또는 GPU | 예 | 
| Factorization Machines | train 및 (선택 사항) test | 파일 또는 파이프 | recordIO-protobuf | CPU(밀집 데이터의 경우 GPU) | 예 | 
| 이미지 분류 - MXNet | train 및 validation, (선택 사항) train\$1lst, validation\$1lst 및 model | 파일 또는 파이프 | recordIO 또는 이미지 파일(.jpg 또는 .png)  | GPU | 예 | 
| 이미지 분류 - TensorFlow | 훈련 및 검증 | 파일 | 이미지 파일(.jpg, .jpeg 또는.png)  | CPU 또는 GPU | 예(단일 인스턴스의 여러 GPU에서만 가능) | 
| IP Insights | 훈련 및 (선택적으로) 검증 | 파일 | CSV | CPU 또는 GPU | 예 | 
| K-Means | train 및 (선택 사항) test | 파일 또는 파이프 | recordIO-protobuf 또는 CSV | CPU 또는 GPUCommon(하나 이상의 인스턴스에 대한 단일 GPU 디바이스) | 아니요 | 
| K-Nearest-Neighbors(k-NN) | train 및 (선택 사항) test | 파일 또는 파이프 | recordIO-protobuf 또는 CSV | CPU 또는 GPU(하나 이상의 인스턴스에 대한 단일 GPU 디바이스) | 예 | 
| LDA | train 및 (선택 사항) test | 파일 또는 파이프 | recordIO-protobuf 또는 CSV | CPU(단일 인스턴스 전용) | 아니요 | 
| LightGBM | 훈련/훈련 및 (선택적으로) 검증 | 파일 | CSV | CPU | 예 | 
| Linear Learner | train 및 (선택 사항) validation, test 또는 모두 | 파일 또는 파이프 | recordIO-protobuf 또는 CSV | CPU 또는 GPU | 예 | 
| Neural Topic Model | train 및 (선택 사항) validation, test 또는 모두 | 파일 또는 파이프 | recordIO-protobuf 또는 CSV | CPU 또는 GPU | 예 | 
| Object2Vec | train 및 (선택 사항) validation, test 또는 모두 | 파일 | JSON Lines  | CPU 또는 GPU(단일 인스턴스 전용) | 아니요 | 
| 객체 감지 - MXNet | train 및 validation, (선택 사항) train\$1annotation, validation\$1annotation 및 model | 파일 또는 파이프 | recordIO 또는 이미지 파일(.jpg 또는 .png)  | GPU | 예 | 
| 객체 감지 - TensorFlow | 훈련 및 검증 | 파일 | 이미지 파일(.jpg, .jpeg 또는.png)  | GPU | 예(단일 인스턴스의 여러 GPU에서만 가능) | 
| PCA | train 및 (선택 사항) test | 파일 또는 파이프 | recordIO-protobuf 또는 CSV | CPU 또는 GPU | 예 | 
| Random Cut Forest | train 및 (선택 사항) test | 파일 또는 파이프 | recordIO-protobuf 또는 CSV | CPU | 예 | 
| 의미 체계 분할 | train 및 validation, train\$1annotation, validation\$1annotation, 및 (선택 사항) label\$1map 및 model | 파일 또는 파이프 | 이미지 파일 | GPU(단일 인스턴스 전용) | 아니요 | 
| Seq2Seq Modeling | train, validation 및 vocab | 파일 | recordIO-protobuf | GPU(단일 인스턴스 전용) | 아니요 | 
| TabTransformer | 훈련 및 (선택적으로) 검증 | 파일 | CSV | CPU 또는 GPU(단일 인스턴스 전용) | 아니요 | 
| 텍스트 분류 - TensorFlow | 훈련 및 검증 | 파일 | CSV | CPU 또는 GPU | 예(단일 인스턴스의 여러 GPU에서만 가능) | 
| XGBoost(0.90-1, 0.90-2, 1.0-1, 1.2-1, 1.2-21) | 훈련 및 (선택적으로) 검증 | 파일 또는 파이프 | CSV, LibSVM, Parquet | CPU(또는 1.2-1의 경우 GPU) | 예 | 

병렬화할 수 있는 알고리즘은 분산 훈련을 위해 여러 컴퓨팅 인스턴스에 배포할 수 있습니다.**

다음 주제에서는 Amazon SageMaker AI에서 제공하는 모든 내장된 알고리즘에 공통적인 데이터 형식, 권장 Amazon EC2 인스턴스 유형 및 CloudWatch 로그에 대한 정보를 제공합니다.

**참고**  
SageMaker AI에서 관리하는 내장된 알고리즘의 Docker 이미지 URI를 조회하려면 [Docker Registry Paths and Example Code](https://docs.aws.amazon.com/sagemaker/latest/dg-ecr-paths/sagemaker-algo-docker-registry-paths)를 참조하세요.

**Topics**
+ [훈련을 위한 공통 데이터 형식](cdf-training.md)
+ [추론을 위한 공통 데이터 형식](cdf-inference.md)
+ [기본 제공 알고리즘의 인스턴스 유형](cmn-info-instance-types.md)
+ [기본 제공 알고리즘에 대한 로그](common-info-all-sagemaker-models-logs.md)

# 훈련을 위한 공통 데이터 형식
<a name="cdf-training"></a>

훈련을 준비하기 위해 Amazon EMR, Amazon Redshift AWS Glue, Amazon Relational Database Service, Amazon Athena 등 다양한 AWS 서비스를 사용하여 데이터를 사전 처리할 수 있습니다. 사전 처리 이후 데이터를 Amazon S3 버킷에 게시합니다. 훈련을 위해 데이터는 다음을 포함한 여러 변환 및 변형을 거쳐야 합니다.
+ 훈련 데이터 직렬화(사용자가 처리) 
+ 훈련 데이터 역직렬화(알고리즘이 처리) 
+ 훈련 모델 직렬화(알고리즘이 처리) 
+ 교육 모델 역직렬화(선택 사항, 사용자가 처리) 

알고리즘의 훈련 부분에서 Amazon SageMaker AI를 사용할 때 모든 데이터를 한 번에 업로드해야 합니다. 해당 위치에 더 많은 데이터가 추가된 경우 새로운 훈련 호출을 통해 새 모델을 생성해야 합니다.

**Topics**
+ [기본 제공 알고리즘으로 지원되는 콘텐츠 유형](#cdf-common-content-types)
+ [파이프 모드 사용](#cdf-pipe-mode)
+ [CSV 형식 사용](#cdf-csv-format)
+ [RecordIO 형식 사용](#cdf-recordio-format)
+ [교육된 모델 역직렬화](#td-deserialization)

## 기본 제공 알고리즘으로 지원되는 콘텐츠 유형
<a name="cdf-common-content-types"></a>

다음 테이블에는 일반적으로 지원되는 몇 가지 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-ContentType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-ContentType) 값과 이를 사용하는 알고리즘이 나와 있습니다.

기본 제공 알고리즘의 ContentTypes


| ContentType | Algorithm | 
| --- | --- | 
| application/x-image | 객체 감지 알고리즘, 의미 체계 분할 | 
| application/x-recordio |  Object Detection 알고리즘  | 
| application/x-recordio-protobuf |  Factorization Machines, K-Means, k-NN, Latent Dirichlet Allocation, Linear Learner, NTM, PCA, RCF, Sequence-to-Sequence  | 
| application/jsonlines |  BlazingText, DeepAR  | 
| 이미지/jpeg |  객체 감지 알고리즘, 의미 체계 분할  | 
| 이미지/png |  객체 감지 알고리즘, 의미 체계 분할  | 
| text/csv |  IP Insights, K-Means, k-NN, Latent Dirichlet Allocation, Linear Learner, NTM, PCA, RCF, XGBoost  | 
| 텍스트/libsvm |  XGBoost  | 

각 알고리즘에서 사용되는 파라미터에 대한 요약은 개별 알고리즘의 설명서 또는 이 [테이블](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html)을 참조하세요.

## 파이프 모드 사용
<a name="cdf-pipe-mode"></a>

파이프 모드에서는 Amazon Simple Storage Service(S3)에서 훈련 작업이 데이터를 직접 스트리밍합니다.** 스트리밍을 통해 훈련 작업의 시작 시간을 더 앞당기고 처리량을 늘릴 수 있습니다. 이는 Amazon S3의 데이터가 훈련 인스턴스 볼륨에 저장되는 파일 모드와는 대조적입니다.** 파일 모드에서는 최종 모델 결과물과 전체 훈련 데이터세트를 저장하기 위한 공간을 사용합니다. 파이프 모드에서 Amazon S3에서 직접 데이터를 스트리밍하면 훈련 인스턴스의 Amazon Elastic 블록 스토어 볼륨 크기를 줄일 수 있습니다. 파이프 모드에서는 최종 모델 결과물을 저장하는 데 충분한 디스크 공간만 필요합니다. 훈련 입력 모드에 대한 자세한 정보는 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html) 섹션을 참조하세요.

## CSV 형식 사용
<a name="cdf-csv-format"></a>

많은 Amazon SageMaker AI 알고리즘은 CSV 형식의 데이터를 사용하여 훈련을 지원합니다. CSV 형식의 데이터를 훈련에 사용하려면 입력 데이터 채널 사양에서 **text/csv**를 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-ContentType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-ContentType)으로 지정하세요. Amazon SageMaker AI에서는 CSV 파일에 헤더 레코드가 없고 대상 변수가 첫 번째 열에 있어야 합니다. 목표가 없는 비지도 학습 알고리즘을 실행하려면 콘텐츠 유형에서 레이블 열의 수를 지정합니다. 예를 들어, 이 경우에는 **'content\$1type=text/csv;label\$1size=0'**입니다. 자세한 내용은 [Now use Pipe mode with CSV datasets for faster training on Amazon SageMaker AI built-in algorithms](https://aws.amazon.com/blogs/machine-learning/now-use-pipe-mode-with-csv-datasets-for-faster-training-on-amazon-sagemaker-built-in-algorithms/)을 참조하세요.

## RecordIO 형식 사용
<a name="cdf-recordio-format"></a>

protobuf recordIO 형식의 경우 SageMaker AI에서는 데이터세트의 각 관측치를 4바이트 부동 소수점 세트로 나타나는 바이너리 표현으로 변환한 다음 protobuf values 필드로 로드합니다. 데이터 준비에 Python을 사용하는 경우에는 기존 변환을 사용하는 것이 좋습니다. 그러나 다른 언어를 사용하는 경우에는 아래의 protobuf 정의 파일이 데이터를 SageMaker AI protobuf 형식으로 변환하는 데 사용하는 스키마를 제공합니다.

**참고**  
일반적으로 사용되는 numPy 배열을 protobuf recordIO 형식으로 변환하는 방법을 보여주는 예제는 [An Introduction to Factorization Machines with MNIST](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/factorization_machines_mnist/factorization_machines_mnist.html)를 참고하세요.**

```
syntax = "proto2";

 package aialgs.data;

 option java_package = "com.amazonaws.aialgorithms.proto";
 option java_outer_classname = "RecordProtos";

 // A sparse or dense rank-R tensor that stores data as doubles (float64).
 message Float32Tensor   {
     // Each value in the vector. If keys is empty, this is treated as a
     // dense vector.
     repeated float values = 1 [packed = true];

     // If key is not empty, the vector is treated as sparse, with
     // each key specifying the location of the value in the sparse vector.
     repeated uint64 keys = 2 [packed = true];

     // An optional shape that allows the vector to represent a matrix.
     // For example, if shape = [ 10, 20 ], floor(keys[i] / 20) gives the row,
     // and keys[i] % 20 gives the column.
     // This also supports n-dimensonal tensors.
     // Note: If the tensor is sparse, you must specify this value.
     repeated uint64 shape = 3 [packed = true];
 }

 // A sparse or dense rank-R tensor that stores data as doubles (float64).
 message Float64Tensor {
     // Each value in the vector. If keys is empty, this is treated as a
     // dense vector.
     repeated double values = 1 [packed = true];

     // If this is not empty, the vector is treated as sparse, with
     // each key specifying the location of the value in the sparse vector.
     repeated uint64 keys = 2 [packed = true];

     // An optional shape that allows the vector to represent a matrix.
     // For example, if shape = [ 10, 20 ], floor(keys[i] / 10) gives the row,
     // and keys[i] % 20 gives the column.
     // This also supports n-dimensonal tensors.
     // Note: If the tensor is sparse, you must specify this value.
     repeated uint64 shape = 3 [packed = true];
 }

 // A sparse or dense rank-R tensor that stores data as 32-bit ints (int32).
 message Int32Tensor {
     // Each value in the vector. If keys is empty, this is treated as a
     // dense vector.
     repeated int32 values = 1 [packed = true];

     // If this is not empty, the vector is treated as sparse with
     // each key specifying the location of the value in the sparse vector.
     repeated uint64 keys = 2 [packed = true];

     // An optional shape that allows the vector to represent a matrix.
     // For Exmple, if shape = [ 10, 20 ], floor(keys[i] / 10) gives the row,
     // and keys[i] % 20 gives the column.
     // This also supports n-dimensonal tensors.
     // Note: If the tensor is sparse, you must specify this value.
     repeated uint64 shape = 3 [packed = true];
 }

 // Support for storing binary data for parsing in other ways (such as JPEG/etc).
 // This is an example of another type of value and may not immediately be supported.
 message Bytes {
     repeated bytes value = 1;

     // If the content type of the data is known, stores it.
     // This allows for the possibility of using decoders for common formats
     // in the future.
     optional string content_type = 2;
 }

 message Value {
     oneof value {
         // The numbering assumes the possible use of:
         // - float16, float128
         // - int8, int16, int32
         Float32Tensor float32_tensor = 2;
         Float64Tensor float64_tensor = 3;
         Int32Tensor int32_tensor = 7;
         Bytes bytes = 9;
     }
 }

 message Record {
     // Map from the name of the feature to the value.
     //
     // For vectors and libsvm-like datasets,
     // a single feature with the name `values`
     // should be specified.
     map<string, Value> features = 1;

     // An optional set of labels for this record.
     // Similar to the features field above, the key used for
     // generic scalar / vector labels should be 'values'.
     map<string, Value> label = 2;

     // A unique identifier for this record in the dataset.
     //
     // Whilst not necessary, this allows better
     // debugging where there are data issues.
     //
     // This is not used by the algorithm directly.
     optional string uid = 3;

     // Textual metadata describing the record.
     //
     // This may include JSON-serialized information
     // about the source of the record.
     //
     // This is not used by the algorithm directly.
     optional string metadata = 4;

     // An optional serialized JSON object that allows per-record
     // hyper-parameters/configuration/other information to be set.
     //
     // The meaning/interpretation of this field is defined by
     // the algorithm author and may not be supported.
     //
     // This is used to pass additional inference configuration
     // when batch inference is used (e.g. types of scores to return).
     optional string configuration = 5;
 }
```

프로토콜 버퍼를 만들면 Amazon SageMaker AI에서 액세스가 가능하고 `create_training_job`의 `InputDataConfig` 일부로 전달되는 Amazon S3 위치에 프로토콜 버퍼를 저장합니다.

**참고**  
모든 Amazon SageMaker AI 알고리즘에서 `InputDataConfig`의 `ChannelName`은 `train`으로 설정되어야 합니다. 일부 알고리즘은 또한 검증 또는 테스트 `input channels`을 지원합니다. 이러한 채널은 일반적으로 홀드아웃 데이터세트를 사용하여 모델의 성능을 평가하는 데 사용됩니다. 홀드아웃 데이터세트는 초기 훈련에서는 사용되지 않지만 추가로 모델을 튜닝하는 데에는 사용할 수 있습니다.

## 교육된 모델 역직렬화
<a name="td-deserialization"></a>

Amazon SageMaker AI 모델은 `create_training_job` 직접 호출의 `OutputDataConfig` `S3OutputPath` 파라미터에 지정된 S3 버킷에 model.tar.gz로 저장됩니다. S3 버킷은 노트북 인스턴스와 동일한 AWS 리전에 있어야 합니다. 호스팅 모델 생성 시 이러한 모델 결과물 대부분을 지정할 수 있습니다. 또한 노트북 인스턴스에서 이를 열고 검토할 수 있습니다. `model.tar.gz`가 압축 해제될 때 직렬화된 Apache MXNet 객체인 `model_algo-1`이 포함됩니다. 예를 들어 다음을 사용하여 메모리에 k-means 모델을 로드하고 이를 검토할 수 있습니다.

```
import mxnet as mx
print(mx.ndarray.load('model_algo-1'))
```

# 추론을 위한 공통 데이터 형식
<a name="cdf-inference"></a>

Amazon SageMaker AI 알고리즘은 온라인 및 미니 배치 예측을 가져오는 데 사용되는 HTTP 페이로드에 대한 여러 가지 MIME 유형을 수락 및 프로덕션합니다. 추론을 실행하기 전에 여러 AWS 서비스를 사용하여 레코드를 변환하거나 사전 처리할 수 있습니다. 최소한 다음에 대한 데이터를 변환해야 합니다.
+ 추론 요청 직렬화(사용자가 처리) 
+ 추론 요청 역직렬화(알고리즘이 처리) 
+ 추론 응답 직렬화(알고리즘이 처리) 
+ 추론 응답 역직렬화(사용자가 처리) 

**Topics**
+ [추론 요청 직렬화를 위한 데이터 변환](#ir-serialization)
+ [추론 응답 역직렬화를 위한 데이터 변환](#ir-deserialization)
+ [모든 알고리즘에 대한 공통 요청 형식](#common-in-formats)
+ [기본 제공 알고리즘에서 배치 변환 사용](#cm-batch)

## 추론 요청 직렬화를 위한 데이터 변환
<a name="ir-serialization"></a>

Amazon SageMaker AI 알고리즘 추론 요청을 위한 콘텐츠 유형 옵션에는 `text/csv`, `application/json` 및 `application/x-recordio-protobuf`가 있습니다. 이러한 유형을 모두 지원하지 않는 알고리즘은 다른 유형을 지원할 수 있습니다. 예를 들어 XGBoost는 이 목록에서 `text/csv`만 지원하지만 `text/libsvm`도 지원합니다.

`text/csv`에서 `invoke_endpoint`에 대한 Body 인수의 값은 각 특성에 대한 값을 쉼표로 구분하는 문자열이어야 합니다. 예를 들어 4가지 특성이 포함된 모델에 대한 레코드는 `1.5,16.0,14,23.0`과 유사할 수 있습니다. 훈련 데이터에서 수행되는 모든 변형은 또한 추론을 얻기 전 데이터에서 수행되어야 합니다. 특성의 순서가 중요하고, 변경되어서는 안 됩니다.

`application/json`은 더욱 유연하고 개발자가 애플리케이션에서 사용할 수 있는 여러 형식을 제공합니다. 상위 수준의 JavaScript에서 페이로드는 다음과 같은 모습일 수 있습니다.

```
let request = {
  // Instances might contain multiple rows that predictions are sought for.
  "instances": [
    {
      // Request and algorithm specific inference parameters.
      "configuration": {},
      // Data in the specific format required by the algorithm.
      "data": {
         "<field name>": dataElement
       }
    }
  ]
}
```

`dataElement` 지정에 대해 다음과 같은 옵션이 있습니다.

**프로토콜 버퍼 동등**

```
// Has the same format as the protocol buffers implementation described for training.
let dataElement = {
  "keys": [],
  "values": [],
  "shape": []
}
```

**단순한 숫자 벡터**

```
// An array containing numeric values is treated as an instance containing a
// single dense vector.
let dataElement = [1.5, 16.0, 14.0, 23.0]

// It will be converted to the following representation by the SDK.
let converted = {
  "features": {
    "values": dataElement
  }
}
```

**여러 레코드**

```
let request = {
  "instances": [
    // First instance.
    {
      "features": [ 1.5, 16.0, 14.0, 23.0 ]
    },
    // Second instance.
    {
      "features": [ -2.0, 100.2, 15.2, 9.2 ]
    }
  ]
}
```

## 추론 응답 역직렬화를 위한 데이터 변환
<a name="ir-deserialization"></a>

Amazon SageMaker AI 알고리즘은 여러 레이아웃에서 JSON을 반환합니다. 상위 수준에서 구조는 다음과 같습니다.

```
let response = {
  "predictions": [{
    // Fields in the response object are defined on a per algorithm-basis.
  }]
}
```

알고리즘 간 다른 예측이 포함된 필드입니다. 다음은 k-means 알고리즘 출력의 예제입니다.

**단일 레코드 추론** 

```
let response = {
  "predictions": [{
    "closest_cluster": 5,
    "distance_to_cluster": 36.5
  }]
}
```

**다중 레코드 추론**

```
let response = {
  "predictions": [
    // First instance prediction.
    {
      "closest_cluster": 5,
      "distance_to_cluster": 36.5
    },
    // Second instance prediction.
    {
      "closest_cluster": 2,
      "distance_to_cluster": 90.3
    }
  ]
}
```

**protobuf 입력이 포함된 다중 레코드 추론**

```
{
  "features": [],
  "label": {
    "closest_cluster": {
      "values": [ 5.0 ] // e.g. the closest centroid/cluster was 1.0
    },
    "distance_to_cluster": {
      "values": [ 36.5 ]
    }
  },
  "uid": "abc123",
  "metadata": "{ "created_at": '2017-06-03' }"
}
```

또한 SageMaker AI 알고리즘은 레코드당 응답 콘텐츠가 JSON 형식과 동일한 JSONLINES 형식을 지원합니다. 멀티 레코드 구조는 줄 바꿈 문자로 구분되는 레코드당 응답 객체의 모음입니다. 입력 데이터 포인트 2개에 대한 기본 제공 KMeans 알고리즘의 응답 콘텐츠는 다음과 같습니다.

```
{"distance_to_cluster": 23.40593910217285, "closest_cluster": 0.0}
{"distance_to_cluster": 27.250282287597656, "closest_cluster": 0.0}
```

배치 변환을 실행하는 중에는 `CreateTransformJobRequest`의 `Accept` 필드를 `application/jsonlines`로 설정하여 `jsonlines` 응답 유형을 사용하는 것이 좋습니다.

## 모든 알고리즘에 대한 공통 요청 형식
<a name="common-in-formats"></a>

대부분의 알고리즘은 다음과 같은 여러 가지 추론 요청 형식을 사용합니다.

### JSON 요청 형식
<a name="cm-json"></a>

**콘텐츠 유형:** application/JSON

**고밀도 형식**

```
let request =   {
    "instances":    [
        {
            "features": [1.5, 16.0, 14.0, 23.0]
        }
    ]
}


let request =   {
    "instances":    [
        {
            "data": {
                "features": {
                    "values": [ 1.5, 16.0, 14.0, 23.0]
                }
            }
        }
    ]
}
```

**저밀도 형식**

```
{
	"instances": [
		{"data": {"features": {
					"keys": [26, 182, 232, 243, 431],
					"shape": [2000],
					"values": [1, 1, 1, 4, 1]
				}
			}
		},
		{"data": {"features": {
					"keys": [0, 182, 232, 243, 431],
					"shape": [2000],
					"values": [13, 1, 1, 4, 1]
				}
			}
		},
	]
}
```

### JSONLINES 요청 형식
<a name="cm-jsonlines"></a>

**콘텐츠 유형:** application/JSONLINES

**고밀도 형식**

밀집 형식의 단일 레코드는 다음 중 하나로 표현될 수 있습니다.

```
{ "features": [1.5, 16.0, 14.0, 23.0] }
```

또는 다음과 같습니다.

```
{ "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } }
```

**저밀도 형식**

희소 형식의 단일 레코드는 다음 중 하나로 표현될 수 있습니다.

```
{"data": {"features": { "keys": [26, 182, 232, 243, 431], "shape": [2000], "values": [1, 1, 1, 4, 1] } } }
```

멀티 레코드는 줄 바꿈 문자로 구분되는 위의 단일 레코드 표현이 연결된 형태로 표현됩니다.

```
{"data": {"features": { "keys": [0, 1, 3], "shape": [4], "values": [1, 4, 1] } } }
{ "data": { "features": { "values": [ 1.5, 16.0, 14.0, 23.0] } }
{ "features": [1.5, 16.0, 14.0, 23.0] }
```

### CSV 요청 형식
<a name="cm-csv"></a>

**콘텐츠 유형:** text/CSV; label\$1size=0

**참고**  
Factorization Machine에 대해 CSV 지원을 이용할 수 없습니다.

### RECORDIO 요청 형식
<a name="cm-recordio"></a>

콘텐츠 유형: application/x-recordio-protobuf

## 기본 제공 알고리즘에서 배치 변환 사용
<a name="cm-batch"></a>

알고리즘에서 지원하는 경우 배치 변환을 실행하는 동안에는 JSON 대신 JSONLINES 응답 유형을 사용하는 것이 좋습니다. 이렇게 하려면 `CreateTransformJobRequest`의 `Accept` 필드를 `application/jsonlines`로 설정합니다.

변환 작업을 생성할 때 `SplitType`은 입력 데이터의 `ContentType`에 따라 설정해야 합니다. 마찬가지로, `CreateTransformJobRequest`의 `Accept` 필드에 따라 `AssembleWith`를 설정해야 합니다. 다음 테이블을 사용하여 이러한 필드를 설정합니다.


| ContentType | 권장 SplitType | 
| --- | --- | 
| application/x-recordio-protobuf | RecordIO | 
| text/csv | Line | 
| application/jsonlines | Line | 
| application/json | None | 
| application/x-image | None | 
| image/\$1 | None | 


| Accept | 권장 AssembleWith | 
| --- | --- | 
| application/x-recordio-protobuf | None | 
| application/json | None | 
| application/jsonlines | Line | 

특정 알고리즘의 응답 형식에 자세한 정보는 다음을 참조하세요.
+ [DeepAR 추론 형식](deepar-in-formats.md)
+ [Factorization Machine 응답 형식](fm-in-formats.md)
+ [IP Insights 추론 데이터 형식](ip-insights-inference-data-formats.md)
+ [K-Means 응답 형식](km-in-formats.md)
+ [k-NN 요청 및 응답 형식](kNN-inference-formats.md)
+ [선형 학습자 응답 형식](LL-in-formats.md)
+ [NTM 응답 형식](ntm-in-formats.md)
+ [Object2Vec 추론을 위한 데이터 형식](object2vec-inference-formats.md)
+ [Object2Vec에 대한 인코더 임베딩](object2vec-encoder-embeddings.md)
+ [PCA 응답 형식](PCA-in-formats.md)
+ [RCF 응답 형식](rcf-in-formats.md)

# 기본 제공 알고리즘의 인스턴스 유형
<a name="cmn-info-instance-types"></a>

대부분의 Amazon SageMaker AI 알고리즘은 훈련하는 데 GPU 컴퓨팅을 활용하도록 엔지니어링되었습니다. 높은 인스턴스당 비용에도 불구하고 GPU는 더욱 빠르게 교육하여 더욱 효율적입니다. 예외가 이 가이드에 언급되어 있습니다.

지원되는 EC2 인스턴스에 대한 자세한 내용은 [인스턴스 세부 정보](https://aws.amazon.com/sagemaker-ai/pricing/#Instance_details)를 참조하세요.

데이터의 크기와 유형은 어떤 하드웨어 구성이 가장 효율적인지에 대해 큰 영향을 미칠 수 있습니다. 동일한 모델이 반복적으로 훈련될 때 일련의 인스턴스 유형에 걸친 초기 테스팅을 통해 장기적으로 가장 비용 효과적인 구성을 발견할 수 있습니다. 추가로 GPU에서 가장 효율적으로 교육하는 알고리즘은 효율적인 추론에 대해 GPU가 필요하지 않을 수 있습니다. 실험을 통해 비용 효율성이 가장 높은 솔루션을 결정합니다. 자동 인스턴스 추천을 받거나 사용자 지정 로드 테스트를 수행하려면 [Amazon SageMaker Inference Recommender](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender.html)를 사용하세요.

SageMaker AI 하드웨어 사양에 대한 자세한 내용은 [Amazon SageMaker AI 요금을](https://aws.amazon.com/sagemaker/ai/pricing/) 참조하세요.

**UltraServer**

UltraServer는 지연 시간이 짧은 고대역폭 액셀러레이터 인터커넥트를 사용하여 여러 Amazon EC2 인스턴스를 연결합니다. 상당한 처리 능력이 필요한 대규모 AI/ML 워크로드를 처리하도록 구축되었습니다. 자세한 내용은 [Amazon EC2 UltraServers](https://aws.amazon.com/ec2/ultraservers/)를 참조하세요. UltraServer를 시작하려면 [훈련 작업 또는 HyperPod 클러스터에 대한 훈련 계획 예약](https://docs.aws.amazon.com/sagemaker/latest/dg/reserve-capacity-with-training-plans.html)을 참조하세요.

Amazon SageMaker AI에서 UltraServer를 시작하려면 [훈련 계획을 만듭니다](https://docs.aws.amazon.com/sagemaker/latest/dg/reserve-capacity-with-training-plans.html). 훈련 계획에서 UltraServer를 사용할 수 있게 되면 AWS Management Console Amazon SageMaker AI API 또는를 사용하여 훈련 작업을 생성합니다 AWS CLI. 훈련 계획에서 구매한 UltraServer 인스턴스 유형을 지정해야 합니다.

UltraServer는 한 번에 하나 또는 여러 개의 작업을 실행할 수 있습니다. UltraServer는 인스턴스를 그룹화하여 조직에서 UltraServer 용량을 할당하는 방법에 대한 유연성을 제공합니다. 또한 작업을 구성할 때 조직의 데이터 보안 가이드라인을 기억합니다. 하나의 UltraServer에 있는 인스턴스는 동일한 UltraServer에 있는 또 다른 인스턴스의 다른 작업에 대한 데이터에 액세스할 수 있기 때문입니다.

UltraServer에서 하드웨어 장애가 발생하면 SageMaker AI는 자동으로 문제를 해결하려고 시도합니다. SageMaker AI가 문제를 조사하고 해결하면 AWS Health 이벤트 또는를 통해 알림 및 작업을 받을 수 있습니다 AWS Support.

훈련 작업이 완료되면 SageMaker AI는 인스턴스를 중지하지만 계획이 아직 활성 상태인 경우 훈련 계획에 계속 사용할 수 있습니다. 작업이 완료된 후 UltraServer에서 인스턴스를 계속 실행하려면 [관리형 웜 풀](https://docs.aws.amazon.com/sagemaker/latest/dg/train-warm-pools.html)을 사용할 수 있습니다.

훈련 계획에 충분한 용량이 있는 경우 여러 UltraServer에서 훈련 작업을 실행할 수도 있습니다. 기본적으로 각 UltraServer에는 인스턴스 17개와 예비 인스턴스 1개로 구성된 인스턴스 18개가 함께 제공됩니다. 인스턴스가 더 필요한 경우 UltraServer를 더 구매해야 합니다. 훈련 작업을 만들 때 `InstancePlacementConfig` 파라미터를 사용하여 UltraServer에 작업을 배치하는 방법을 구성할 수 있습니다.

작업 배치를 구성하지 않으면 SageMaker AI는 UltraServer 내의 인스턴스에 작업을 자동으로 할당합니다. 이 기본 전략은 최선의 노력을 기반으로 하며, 다른 UltraServer를 사용하기 전에 단일 UltraServer의 모든 인스턴스를 채우는 데 우선순위를 둡니다. 예를 들어 인스턴스 14개를 요청하고 훈련 계획에 UltraServer가 2개 있는 경우 SageMaker AI는 첫 번째 UltraServer에서 모든 인스턴스를 사용합니다. 인스턴스 20개를 요청했고 훈련 계획에 UltraServer가 2개 있는 경우 SageMaker AI는 첫 번째 UltraServer에서 인스턴스 17개를 모두 사용한 다음, 두 번째 UltraServer에서 인스턴스 3개를 사용합니다. UltraServer 내의 인스턴스는 NVLink를 사용하여 통신하지만 개별 UltraServer는 모델 훈련 성능에 영향을 미칠 수 있는 Elastic Fabric Adapter(EFA)를 사용합니다.

# 기본 제공 알고리즘에 대한 로그
<a name="common-info-all-sagemaker-models-logs"></a>

Amazon SageMaker AI 알고리즘은 훈련 프로세스 관련 세부 사항을 제공하는 Amazon CloudWatch 로그를 프로덕션합니다. 로그를 보려면 AWS 관리 콘솔에서 **CloudWatch**를 선택하고 **로그**를 선택한 다음 /aws/sagemaker/TrainingJobs **로그 그룹을** 선택합니다. 각 훈련 작업에는 훈련된 노드당 하나의 로그 스트림이 있습니다. 로그 스트림의 이름은 작업 생성 시 `TrainingJobName` 파라미터에 지정된 값으로 시작합니다.

**참고**  
작업이 실패하고 로그가 CloudWatch에 표시되지 않는 경우 훈련 시작 전에 오류가 발생했을 수 있습니다. 이유 중에는 잘못된 훈련 이미지 또는 S3 위치 지정이 있습니다.

로그의 콘텐츠는 알고리즘에 따라 다릅니다. 하지만 일반적으로 다음 정보를 확인할 수 있습니다.
+ 로그 시작 시 제공된 인수의 확인
+ 훈련 도중 발생한 오류
+ 알고리즘 정확도 또는 수치 성능의 측정
+ 알고리즘에 대한 시점 및 알고리즘의 모든 주요 단계

## 일반적인 오류
<a name="example-errors"></a>

훈련 작업이 실패한 경우 훈련 작업 설명의 `FailureReason` 반환 값에 실패에 대한 세부 정보가 제공됩니다.

```
sage = boto3.client('sagemaker')
sage.describe_training_job(TrainingJobName=job_name)['FailureReason']
```

나머지는 CloudWatch 로그에서만 보고됩니다. 일반적인 오류는 다음과 같습니다.

1. 하이퍼파라미터 미지정 또는 알고리즘에 대해 유효하지 않은 하이퍼파라미터 지정.

   **CloudWatch 로그에서**

   ```
   [10/16/2017 23:45:17 ERROR 139623806805824 train.py:48]
   Additional properties are not allowed (u'mini_batch_siz' was
   unexpected)
   ```

1. 하이퍼파라미터에 대한 유효하지 않은 값 지정.

   **FailureReason**

   ```
   AlgorithmError: u'abc' is not valid under any of the given
   schemas\n\nFailed validating u'oneOf' in
   schema[u'properties'][u'feature_dim']:\n    {u'oneOf':
   [{u'pattern': u'^([1-9][0-9]*)$', u'type': u'string'},\n
   {u'minimum': 1, u'type': u'integer'}]}\
   ```

   **FailureReason**

   ```
   [10/16/2017 23:57:17 ERROR 140373086025536 train.py:48] u'abc'
   is not valid under any of the given schemas
   ```

1. 정확하지 않은 protobuf 파일 형식.

   **CloudWatch 로그에서**

   ```
   [10/17/2017 18:01:04 ERROR 140234860816192 train.py:48] cannot
                      copy sequence with size 785 to array axis with dimension 784
   ```

# 테이블 형식 데이터용 내장된 SageMaker AI 알고리즘
<a name="algorithms-tabular"></a>

Amazon SageMaker AI는 테이블 형식 데이터 분석에 맞게 조정된 내장 알고리즘을 제공합니다. 테이블 형식 데이터는 행(관측치)과 열(특징)로 구성된 테이블로 이루어진 모든 데이터 세트를 의미합니다. 테이블 형식 데이터용 내장된 SageMaker AI 알고리즘은 분류 또는 회귀 문제에 사용할 수 있습니다.
+ [AutoGluon-Tabular](autogluon-tabular.md) - 모델을 앙상블하고 여러 레이어로 쌓아 승계하는 오픈 소스 AutoML 프레임워크.
+ [CatBoost](catboost.md) - 그라디언트 부스트 트리 알고리즘의 구현으로, 순서가 있는 부스팅과 범주형 특성 처리를 위한 혁신적인 알고리즘의 구현.
+ [Factorization Machine 알고리즘](fact-machines.md) - 고차원 저밀도 데이터 세트 내 특성 간 상호 작용을 경제적으로 캡처하도록 설계된 선형 모델의 확장.
+ [K-Nearest Neighbors(k-NN) 알고리즘](k-nearest-neighbors.md) - 레이블이 지정된 가장 가까운 k개의 포인트를 사용하여 분류할 새 데이터 포인트에 레이블을 할당하거나 회귀를 위해 가장 가까운 k개의 포인트 평균을 바탕으로 예측된 대상 값을 지정하는 비모수적 방법.
+ [LightGBM](lightgbm.md) - 효율성과 확장성을 개선하기 위한 두 가지 새로운 기법인 그라디언트 기반 단측 샘플링(GOSS)과 배타적 특성 번들링(EFB)이 추가된 그라디언트 부스트 트리 알고리즘의 구현.
+ [선형 학습자 알고리즘](linear-learner.md) - 회귀를 위한 선형 함수 또는 분류를 위한 선형 임계값 함수를 학습합니다.
+ [TabTransformer](tabtransformer.md) - 셀프 어텐션 기반 변환기를 기반으로 구축된 새로운 딥 테이블 형식 데이터 모델링 아키텍처.
+ [Amazon SageMaker AI를 사용한 XGBoost 알고리즘](xgboost.md) - 더 간단하고 약한 모델 세트의 예상치 앙상블을 결합하는 그라디언트 부스트 트리 알고리즘의 구현.


| 알고리즘 이름 | 채널 이름 | 훈련 입력 모드 | 파일 유형 | 인스턴스 클래스 | 병렬화 가능 | 
| --- | --- | --- | --- | --- | --- | 
| AutoGluon-Tabular | 훈련 및 (선택적으로) 검증 | 파일 | CSV | CPU 또는 GPU(단일 인스턴스 전용) | 아니요 | 
| CatBoost | 훈련 및 (선택적으로) 검증 | 파일 | CSV | CPU(단일 인스턴스 전용) | 아니요 | 
| Factorization Machines | train 및 (선택 사항) test | 파일 또는 파이프 | recordIO-protobuf | CPU(밀집 데이터의 경우 GPU) | 예 | 
| K-Nearest-Neighbors(k-NN) | train 및 (선택 사항) test | 파일 또는 파이프 | recordIO-protobuf 또는 CSV | CPU 또는 GPU(하나 이상의 인스턴스에 대한 단일 GPU 디바이스) | 예 | 
| LightGBM | 훈련 및 (선택적으로) 검증 | 파일 | CSV | CPU(단일 인스턴스 전용) | 아니요 | 
| Linear Learner | train 및 (선택 사항) validation, test 또는 모두 | 파일 또는 파이프 | recordIO-protobuf 또는 CSV | CPU 또는 GPU | 예 | 
| TabTransformer | 훈련 및 (선택적으로) 검증 | 파일 | CSV | CPU 또는 GPU(단일 인스턴스 전용) | 아니요 | 
| XGBoost(0.90-1, 0.90-2, 1.0-1, 1.2-1, 1.2-21) | 훈련 및 (선택적으로) 검증 | 파일 또는 파이프 | CSV, LibSVM, Parquet | CPU(또는 1.2-1의 경우 GPU) | 예 | 

# AutoGluon-Tabular
<a name="autogluon-tabular"></a>

[AutoGluon-Tabular](https://auto.gluon.ai/stable/index.html)는 널리 사용되는 오픈 소스 AutoML 프레임워크로, 처리되지 않은 테이블 형식 데이터세트에서 매우 정확한 기계 학습 모델을 훈련시킵니다. 주로 모델 및 하이퍼파라미터 선택에 초점을 맞춘 기존 AutoML 프레임워크와 달리 AutoGluon-Tabular는 여러 모델을 앙상블하고 여러 계층으로 쌓아 성공합니다. 이 페이지에는 AutoGluon-Tabular용 Amazon EC2 인스턴스 권장 사항 및 샘플 노트북에 대한 정보가 포함되어 있습니다.

# SageMaker AI AutoGluon-Tabular 사용 방법
<a name="autogluon-tabular-modes"></a>

AutoGluon-Tabular를 Amazon SageMaker AI 기본 제공 알고리즘으로 사용할 수 있습니다. 다음 섹션에서는 SageMaker Python SDK와 함께 AutoGluon-Tabular를 사용하는 방법을 설명합니다. Amazon SageMaker Studio Classic UI에서 AutoGluon-Tabular를 사용하는 방법에 대한 자세한 내용은 [SageMaker JumpStart 사전 훈련된 모델](studio-jumpstart.md) 섹션을 참조하세요.
+ **AutoGluon-Tabular를 기본 제공 알고리즘으로 사용하기**

  AutoGluon-Tabular 기본 제공 알고리즘을 사용하여 다음 코드 예제와 같이 AutoGluon-Tabular 훈련 컨테이너를 빌드합니다. SageMaker AI `image_uris.retrieve` API(또는 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 버전 2를 사용하는 경우 `get_image_uri` API)를 사용하여 AutoGluon-Tabular 내장 알고리즘 이미지 URI를 자동으로 찾아낼 수 있습니다.

  AutoGluon-Tabular 이미지 URI를 지정한 후 AutoGluon-Tabular 컨테이너를 사용하여 SageMaker AI Estimator API를 사용하는 예측기를 구문화하고 훈련 작업을 시작할 수 있습니다. AutoGluon-Tabular의 기본 제공 알고리즘은 스크립트 모드에서 실행되지만 훈련 스크립트는 자동으로 제공되므로 교체할 필요가 없습니다. 스크립트 모드를 사용하여 SageMaker 훈련 작업을 생성한 경험이 풍부하다면 사용자의 AutoGluon-Tabular 훈련 스크립트를 직접 통합할 수 있습니다.

  ```
  from sagemaker import image_uris, model_uris, script_uris
  
  train_model_id, train_model_version, train_scope = "autogluon-classification-ensemble", "*", "training"
  training_instance_type = "ml.p3.2xlarge"
  
  # Retrieve the docker image
  train_image_uri = image_uris.retrieve(
      region=None,
      framework=None,
      model_id=train_model_id,
      model_version=train_model_version,
      image_scope=train_scope,
      instance_type=training_instance_type
  )
  
  # Retrieve the training script
  train_source_uri = script_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, script_scope=train_scope
  )
  
  train_model_uri = model_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, model_scope=train_scope
  )
  
  # Sample training data is available in this bucket
  training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
  training_data_prefix = "training-datasets/tabular_binary/"
  
  training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/train"
  validation_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/validation"
  
  output_bucket = sess.default_bucket()
  output_prefix = "jumpstart-example-tabular-training"
  
  s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"
  
  from sagemaker import hyperparameters
  
  # Retrieve the default hyperparameters for training the model
  hyperparameters = hyperparameters.retrieve_default(
      model_id=train_model_id, model_version=train_model_version
  )
  
  # [Optional] Override default hyperparameters with custom values
  hyperparameters[
      "auto_stack"
  ] = "True"
  print(hyperparameters)
  
  from sagemaker.estimator import Estimator
  from sagemaker.utils import name_from_base
  
  training_job_name = name_from_base(f"built-in-algo-{train_model_id}-training")
  
  # Create SageMaker Estimator instance
  tabular_estimator = Estimator(
      role=aws_role,
      image_uri=train_image_uri,
      source_dir=train_source_uri,
      model_uri=train_model_uri,
      entry_point="transfer_learning.py",
      instance_count=1,
      instance_type=training_instance_type,
      max_run=360000,
      hyperparameters=hyperparameters,
      output_path=s3_output_location
  )
  
  # Launch a SageMaker Training job by passing the S3 path of the training data
  tabular_estimator.fit(
      {
          "training": training_dataset_s3_path,
          "validation": validation_dataset_s3_path,
      }, logs=True, job_name=training_job_name
  )
  ```

  AutoGluon-Tabular를 기본 제공 알고리즘으로 설정하는 방법에 대한 자세한 내용은 다음 노트북 예제를 참조하세요. 이러한 예제에서 사용되는 모든 S3 버킷은 이를 실행하는 데 사용되는 노트북 인스턴스와 동일한 AWS 리전에 있어야 합니다.
  + [Amazon SageMaker AI AutoGluon-Tabular 알고리즘을 사용한 테이블 형식 분류](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/autogluon_tabular/Amazon_Tabular_Classification_AutoGluon.ipynb)
  + [Amazon SageMaker AI AutoGluon-Tabular 알고리즘을 사용한 테이블 형식 회귀](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/autogluon_tabular/Amazon_Tabular_Regression_AutoGluon.ipynb)

# AutoGluon-Tabular 알고리즘의 입력 및 출력 인터페이스
<a name="InputOutput-AutoGluon-Tabular"></a>

그라디언트 부스팅은 테이블형 데이터에서 작동합니다. 행은 관측치를 나타내고 1개 열은 대상 변수 또는 레이블을 나타내며, 나머지 열은 특징을 나타냅니다.

AutoGluon-Tabular의 SageMaker AI 구현은 훈련 및 추론을 위한 CSV를 지원합니다.
+ **훈련 ContentType**의 경우 유효한 입력은 *text/csv*여야 합니다.
+ **추론 ContentType**의 경우 유효한 입력은 *text/csv*여야 합니다.

**참고**  
CSV 훈련의 경우 알고리즘은 대상 변수가 첫 번째 열에 있고 CSV에는 헤더 레코드가 없다고 추정합니다.  
CSV 추론의 경우 알고리즘은 CSV 입력에 레이블 열이 없다고 추정합니다.

**훈련 데이터, 검증 데이터 및 범주형 기능의 입력 형식**

AutoGluon-Tabular 모델에 입력하기 위해 훈련 데이터의 형식을 지정하는 방법을 염두에 두세요. 훈련 및 검증 데이터를 포함하는 Amazon S3 버킷의 경로를 제공해야 합니다. 범주형 기능 목록을 포함시킬 수도 있습니다. `training` 및 `validation` 채널을 모두 사용하여 입력 데이터를 제공하세요 또는 `training` 채널만 사용해도 됩니다.

**`training` 및 `validation` 채널을 모두 사용**

`training` 채널용과 `validation` 채널용 두 개의 S3 경로를 통해 입력 데이터를 제공할 수 있습니다. 각 S3 경로는 S3 접두사이거나 특정 CSV 파일 하나를 가리키는 전체 S3 경로일 수 있습니다. 대상 변수는 CSV 파일의 첫 번째 열에 있어야 합니다. 나머지 열에는 예측 변수(특징)가 표시되어야 합니다. 검증 데이터는 각 부스팅 반복 종료 시 검증 점수를 계산하는 데 사용됩니다. 유효성 검증 점수가 더 이상 향상되지 않으면 조기 중지가 적용됩니다.

예측 변수에 범주형 기능이 포함된 경우 훈련 데이터 파일이 있는 위치에 이름이 `categorical_index.json`인 JSON 파일을 제공할 수 있습니다. 범주형 기능을 위한 JSON 파일을 제공하는 경우 `training` 채널은 특정 CSV 파일이 아닌 S3 접두사를 가리켜야 합니다. 이 파일은 키가 문자열 `"cat_index_list"`이고 값이 고유 정수 목록인 Python 사전을 포함해야 합니다. 값 목록의 각 정수는 훈련 데이터 CSV 파일에 있는 해당 범주형 기능의 열 인덱스를 나타내야 합니다. 각 값은 양의 정수(0은 목표 값을 나타내므로 0보다 커야 함), `Int32.MaxValue`(2147483647) 미만, 총 열 수보다 작아야 합니다. 범주형 인덱스 JSON 파일은 하나만 있어야 합니다.

**`training` 채널만 사용**:

`training` 채널의 단일 S3 경로를 통해 입력 데이터를 제공할 수도 있습니다. 이 S3 경로는 CSV 파일이 들어 있는 `training/`이라는 이름의 하위 디렉터리가 있는 디렉터리를 가리켜야 합니다. 선택적으로 `validation/`이라는 동일한 위치에 CSV 파일이 있는 다른 하위 디렉토리를 포함할 수 있습니다. 검증 데이터가 제공되지 않는 경우 훈련 데이터의 20%가 무작위로 샘플링되어 검증 데이터로 사용됩니다. 예측 변수에 범주형 기능이 포함되어 있다면 데이터 하위 디렉터리와 같은 위치에 `categorical_index.json`이라는 이름의 JSON 파일을 제공할 수 있습니다.

**참고**  
CSV 훈련 입력 모드의 경우, 알고리즘에 대해 사용 가능한 전체 메모리(인스턴스 수 \$1 `InstanceType`의 가용 메모리)가 훈련 데이터세트를 담을 수 있어야 합니다.

SageMaker AI AutoGluon-Tabular는 `autogluon.tabular.TabularPredictor` 모듈을 사용하여 모델을 직렬화/역직렬화하고, 이는 모델 저장 또는 로딩에 사용될 수 있습니다.

**SageMaker AI AutoGluon-Tabular로 훈련된 모델을 AutoGluon 프레임워크와 함께 사용하려면 다음과 같이 합니다.**
+ 다음 Python 코드를 사용합니다.

  ```
  import tarfile
  from autogluon.tabular import TabularPredictor
  
  t = tarfile.open('model.tar.gz', 'r:gz')
  t.extractall()
  
  model = TabularPredictor.load(model_file_path)
  
  # prediction with test data
  # dtest should be a pandas DataFrame with column names feature_0, feature_1, ..., feature_d
  pred = model.predict(dtest)
  ```

## AutoGluon-Tabular 알고리즘에 대한 Amazon EC2 인스턴스 권장 사항
<a name="Instance-AutoGluon-Tabular"></a>

SageMaker AI AutoGluon-Tabular는 단일 인스턴스 CPU 및 단일 인스턴스 GPU 훈련을 지원합니다. 높은 인스턴스당 비용에도 불구하고 GPU는 더욱 빠르게 교육하여 더욱 효율적입니다. GPU 훈련을 활용하려면 인스턴스 유형을 GPU 인스턴스 중 하나로 지정하세요. (예: P3) SageMaker AI AutoGluon-Tabular는 현재 멀티 GPU 훈련을 지원하지 않습니다.

## AutoGluon-Tabular 샘플 노트북
<a name="autogluon-tabular-sample-notebooks"></a>

 다음 테이블에는 Amazon SageMaker AI AutoGluon-Tabular 알고리즘의 다양한 사용 사례를 다루는 여러 샘플 노트북이 나와 있습니다.


****  

| **노트북 제목** | **설명** | 
| --- | --- | 
|  [Amazon SageMaker AI AutoGluon-Tabular 알고리즘을 사용한 테이블 형식 분류](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/autogluon_tabular/Amazon_Tabular_Classification_AutoGluon.ipynb)  |  이 노트북은 Amazon SageMaker AI AutoGluon-Tabular 알고리즘을 사용하여 테이블 형식 분류 모델을 훈련하고 호스팅하는 방법을 보여줍니다.  | 
|  [Amazon SageMaker AI AutoGluon-Tabular 알고리즘을 사용한 테이블 형식 회귀](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/autogluon_tabular/Amazon_Tabular_Regression_AutoGluon.ipynb)  |  이 노트북은 Amazon SageMaker AI AutoGluon-Tabular 알고리즘을 사용하여 테이블 형식 회귀 모델을 훈련하고 호스팅하는 방법을 보여줍니다.  | 

SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 액세스하는 방법은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열고 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인하세요. 노트북을 열려면 **사용** 탭을 선택한 후 **사본 생성**을 선택합니다.

# AutoGluon-Tabular의 작동 방식
<a name="autogluon-tabular-HowItWorks"></a>

AutoGluon-Tabular는 고급 데이터 처리, 딥 러닝 및 다층 모델 앙상블 메서드를 수행합니다. 텍스트 필드의 특수 처리를 포함하여 각 열의 데이터 유형을 자동으로 인식하여 강력한 데이터 전처리가 가능합니다.

AutoGluon은 상용 부스트 트리부터 맞춤형 신경망에 이르기까지 다양한 모델에 적합합니다. 이러한 모델은 참신한 방식으로 결합됩니다. 모델을 여러 계층으로 쌓아 계층별로 훈련함으로써 주어진 시간 제약 내에서 원시 데이터를 고품질 예측으로 변환할 수 있습니다. 이 프로세스는 틀린 예제를 주의 깊게 추적하여 데이터를 다양한 방식으로 분할하여 과적합을 완화합니다.

AutoGluon-Tabular 알고리즘은 다양한 데이터 형식, 관계, 분포를 강력하게 처리하기 때문에 기계 학습 경쟁에서 잘 작동합니다. 회귀, 분류(바이너리 및 멀티클래스) 및 순위 결정 관련 문제에 AutoGluon-Tabular를 사용할 수 있습니다.

다층 적층 전략의 작동 방식을 보여주는 다음 다이어그램을 참조하세요.

![\[AutoGluon의 다층 적층 전략은 두 개의 적층 계층으로 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/autogluon_tabular_illustration.png)


자세한 내용은 [AutoGluon-Tabular: 구조화된 데이터를 위한 강력하고 정확한 AutoML](https://arxiv.org/pdf/2003.06505.pdf)을 참조하세요.**

# AutoGluon-Tabular 하이퍼파라미터
<a name="autogluon-tabular-hyperparameters"></a>

다음 테이블에는 Amazon SageMaker AI AutoGluon-Tabular 알고리즘에 필요하거나 가장 일반적으로 사용되는 하이퍼파라미터 하위 세트가 포함되어 있습니다. 이들은 사용자가 데이터를 통해 모델 파라미터를 쉽게 예측하기 위해 설정하는 파라미터입니다. SageMaker AI AutoGluon-Tabular 알고리즘은 오픈 소스 [AutoGluon-Tabular](https://github.com/awslabs/autogluon) 패키지를 구현한 것입니다.

**참고**  
기본 하이퍼파라미터는 [AutoGluon-Tabular 샘플 노트북](autogluon-tabular.md#autogluon-tabular-sample-notebooks)의 예제 데이터세트를 기준으로 정해집니다.

기본적으로 SageMaker AI AutoGluon-Tabular 알고리즘은 분류 문제 유형에 따라 평가 지표를 자동으로 선택합니다. 이 알고리즘은 데이터의 레이블 수를 기반으로 분류 문제 유형을 탐지합니다. 회귀 문제의 경우 평가 지표는 평균 제곱근 오차입니다. 바이너리 분류 문제의 경우 평가 지표는 수신기 작동 특성 곡선(AUC) 아래 영역입니다. 멀티클래스 분류 문제의 경우 평가 지표는 정확도입니다. `eval_metric` 하이퍼파라미터를 사용하여 기본 평가 지표를 변경할 수 있습니다. 설명, 유효한 값, 기본값을 포함하여 AutoGluon-Tabular 하이퍼파라미터에 대한 자세한 내용은 다음 테이블을 참조하세요.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| eval\$1metric |  검증 데이터에 대한 평가 지표. `eval_metric`을 디폴트 `"auto"` 값으로 설정하면 알고리즘이 분류 문제의 유형에 따라 평가 지표를 자동으로 선택합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/autogluon-tabular-hyperparameters.html) 유효한 값: 문자열, 유효한 값은 [AutoGluon 설명서](https://auto.gluon.ai/stable/api/autogluon.tabular.TabularPredictor.html)를 참조하세요. 기본값: `"auto"`.  | 
| presets |  다양한 인수에 대한 사전 설정 구성 목록은 `fit()`에서 확인할 수 있습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/autogluon-tabular-hyperparameters.html) 자세한 내용은 [AutoGluon Predictors](https://auto.gluon.ai/stable/api/autogluon.tabular.TabularPredictor.html)를 참조하세요. 유효한 값: 문자열, 다음 중 하나: (`"best_quality"`, `"high_quality"`, `good_quality"`, `"medium_quality"`, `"optimize_for_deployment"` 또는 ` or "interpretable"`). 기본값: `"medium_quality"`.  | 
| auto\$1stack |  AutoGluon의 예측 정확도를 높이기 위한 배깅 및 다중 계층 스택 앙상블 자동 활용 여부. 예측 정확도를 극대화하기 위해 더 긴 훈련 시간을 감수할 의향이 있으면 `auto_stack`을 `"True"`로 설정하세요. 이렇게 하면 데이터세트 속성에 따라 `num_bag_folds` 및 `num_stack_levels` 인수가 자동으로 설정됩니다. 유효한 값: 문자열: `"True"` 또는 `"False"` 기본값: `"False"`.  | 
| num\$1bag\$1folds |  모델 배깅에 사용되는 폴드 수. `num_bag_folds`가 `k`와 같으면 훈련 시간이 대략 `k`배 증가합니다. 배깅을 비활성화하려면 `num_bag_folds`를 0으로 설정합니다. 이 기능은 기본적으로 비활성화되어 있지만 예측 성능을 극대화하려면 5에서 10 사이의 값을 사용하는 것이 좋습니다. `num_bag_folds`를 증가시키면 치우침은 낮은 모델이 생성되지만 과적합이 발생하기 쉽습니다. 이 파라미터의 값이 1이면 유효하지 않으므로 `ValueError`가 발생합니다. 값이 10보다 크면 수익이 감소할 수 있으며 과적합으로 인해 전체 결과에 해를 끼칠 수도 있습니다. 예측치를 더 높이려면 `num_bag_folds` 값을 늘리지 말고 `num_bag_sets` 값을 높이세요. 유효한 값: 문자열, `"0"` 및 `"10"`과 그 사이의 모든 정수. 기본값: `"0"`.  | 
| num\$1bag\$1sets |  수행할 kfold 배깅 반복 횟수(값은 1 이상이어야 함) 배깅 중에 훈련된 총 모델 수는 `num_bag_folds` \$1 `num_bag_sets`와 같습니다. `time_limit`이 지정되지 않은 경우 이 파라미터의 기본값은 1입니다. `num_bag_folds`를 지정하지 않으면 이 파라미터를 사용할 수 없습니다. 값이 1보다 크면 예측 성능이 뛰어나며, 특히 작은 문제에서 스택이 활성화된 경우 더욱 그렇습니다. 유효한 값: 정수, 범위: [`1`, `20`]. 기본값: `1`.  | 
| num\$1stack\$1levels |  스택 앙상블에서 사용할 스태킹 레벨 수. 모델 훈련 시간을 대략 `num_stack_levels`\$11배 늘립니다. 스택 앙상블을 비활성화하려면 이 파라미터를 0으로 설정합니다. 이 파라미터는 기본적으로 비활성화되지만 예측 성능을 극대화하려면 1에서 3 사이의 값을 사용하는 것이 좋습니다. 과적합과 `ValueError`를 방지하려면 `num_bag_folds`는 2보다 크거나 같아야 합니다. 유효한 값: 부동 소수점, 범위: [`0`, `3`]. 기본값: `0`.  | 
| refit\$1full |  정상적인 훈련 절차 후에 모든 데이터(훈련 및 검증)에 대해 모든 모델을 재훈련할지 여부. 자세한 내용은 [AutoGluon Predictors](https://auto.gluon.ai/stable/api/autogluon.tabular.TabularPredictor.html)를 참조하세요. 유효한 값: 문자열: `"True"` 또는 `"False"` 기본값: `"False"`.  | 
| set\$1best\$1to\$1refit\$1full |  예측자가 예측에 사용하는 기본 모델을 변경할지 여부. `set_best_to_refit_full`을 `"True"`로 설정하면 기본 모델이 재구성(`refit_full`에 의해 활성화) 결과 가장 높은 검증 점수를 보인 모델로 변경됩니다. `refit_full`이 설정된 경우에만 유효합니다. 유효한 값: 문자열: `"True"` 또는 `"False"` 기본값: `"False"`.  | 
| save\$1space |  새 데이터 예측에 필요하지 않은 보조 모델 파일을 삭제하여 예측자의 메모리 및 디스크 크기를 줄일지 여부. 이는 추론 정확도에는 영향을 미치지 않습니다. 훈련된 모델을 예측에 사용하는 것이 유일한 목표라면 `save_space`를 `"True"`로 설정하는 것이 좋습니다. `save_space`를 `"True"`로 설정하면 특정 고급 기능을 더 이상 사용하지 못할 수 있습니다. 자세한 내용은 `[predictor.save\$1space()](https://auto.gluon.ai/stable/api/autogluon.tabular.TabularPredictor.save_space.html)` 설명서를 참조하세요. 유효한 값: 문자열: `"True"` 또는 `"False"` 기본값: `"False"`.  | 
| verbosity |  인쇄 메시지의 상세 내용. `verbosity` 레벨의 범위는 `0`\$1`4`까지입니다. 레벨이 높을수록 인쇄 명세서가 더 상세해집니다. `0`의 `verbosity`는 경고를 표시하지 않습니다. 유효한 값: 정수, 다음 중 하나: (`0`, `1`, `2`, `3` 또는 `4`). 기본값: `2`.  | 

# AutoGluon-Tabular 모델 튜닝
<a name="autogluon-tabular-tuning"></a>

AutoGluon-Tabular를 모델 튜닝과 함께 사용할 수 있지만, AutoGluon-Tabular의 설계는 스태킹 및 앙상블 방법을 사용하여 우수한 성능을 제공할 수 있으므로 하이퍼파라미터 최적화가 필요하지 않습니다. AutoGluon-Tabular는 모델 튜닝에 초점을 맞추는 대신 모델을 여러 계층으로 쌓고 계층별로 훈련함으로써 성공을 거둡니다.

AutoGluon-Tabular 하이퍼파라미터에 대한 자세한 내용은 [AutoGluon-Tabular 하이퍼파라미터](autogluon-tabular-hyperparameters.md)을 참조하세요.

# CatBoost
<a name="catboost"></a>

[CatBoost](https://catboost.ai/)는 그라데이션 부스팅 의사 결정 트리 알고리즘(GBDT)에서 널리 사용되는 고성능 오픈 소스 구현입니다. GBDT는 더욱 단순하고 약한 모델 세트의 추정치의 앙상블을 결합하여 대상 변수를 정확하게 예측하려 시도하는 지도 학습 알고리즘입니다.

CatBoost는 GBDT에 두 가지 중요한 알고리즘 고급 기능을 도입했습니다.

1. 기존 알고리즘에 대한 순열 기반 대안인 순서가 있는 부스팅 구현

1. 범주형 기능을 처리하기 위한 혁신적인 알고리즘

두 기법 모두 현재의 모든 기존 그라데이션 부스팅 알고리즘 구현에 존재하는 특수한 종류의 표적 누출로 인한 예측 변화를 막기 위해 개발되었습니다. 이 페이지에는 Amazon EC2 인스턴스 권장 사항 및 CatBoost용 샘플 노트북에 대한 정보가 포함되어 있습니다.

# SageMaker AI CatBoost 사용 방법
<a name="catboost-modes"></a>

CatBoost를 Amazon SageMaker AI 기본 제공 알고리즘으로 사용할 수 있습니다. 다음 섹션에서는 SageMaker Python SDK와 함께 CatBoost를 사용하는 방법을 설명합니다. Amazon SageMaker Studio Classic UI에서 CatBoost를 사용하는 방법에 대한 자세한 내용은 [SageMaker JumpStart 사전 훈련된 모델](studio-jumpstart.md)을 참조하세요.
+ **CatBoost를 기본 제공 알고리즘으로 사용**

  CatBoost 기본 제공 알고리즘을 사용하여 다음 코드 예제와 같이 CatBoost 훈련 컨테이너를 빌드합니다. SageMaker AI `image_uris.retrieve` API(또는 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 버전 2를 사용하는 경우 `get_image_uri` API)를 사용하여 CatBoost 내장 알고리즘 이미지 URI를 자동으로 찾아낼 수 있습니다.

  CatBoost 이미지 URI를 지정한 후 CatBoost 컨테이너를 사용하여 SageMaker AI Estimator API를 사용하는 예측기를 구문화하고 훈련 작업을 시작할 수 있습니다. CatBoost 기본 제공 알고리즘은 스크립트 모드에서 실행되지만 훈련 스크립트가 제공되므로 교체할 필요가 없습니다. 스크립트 모드를 사용하여 SageMaker 훈련 작업을 생성한 경험이 풍부하다면 사용자의 CatBoost 훈련 스크립트를 직접 통합할 수 있습니다.

  ```
  from sagemaker import image_uris, model_uris, script_uris
  
  train_model_id, train_model_version, train_scope = "catboost-classification-model", "*", "training"
  training_instance_type = "ml.m5.xlarge"
  
  # Retrieve the docker image
  train_image_uri = image_uris.retrieve(
      region=None,
      framework=None,
      model_id=train_model_id,
      model_version=train_model_version,
      image_scope=train_scope,
      instance_type=training_instance_type
  )
  
  # Retrieve the training script
  train_source_uri = script_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, script_scope=train_scope
  )
  
  train_model_uri = model_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, model_scope=train_scope
  )
  
  # Sample training data is available in this bucket
  training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
  training_data_prefix = "training-datasets/tabular_multiclass/"
  
  training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/train"
  validation_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/validation"
  
  output_bucket = sess.default_bucket()
  output_prefix = "jumpstart-example-tabular-training"
  
  s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"
  
  from sagemaker import hyperparameters
  
  # Retrieve the default hyperparameters for training the model
  hyperparameters = hyperparameters.retrieve_default(
      model_id=train_model_id, model_version=train_model_version
  )
  
  # [Optional] Override default hyperparameters with custom values
  hyperparameters[
      "iterations"
  ] = "500"
  print(hyperparameters)
  
  from sagemaker.estimator import Estimator
  from sagemaker.utils import name_from_base
  
  training_job_name = name_from_base(f"built-in-algo-{train_model_id}-training")
  
  # Create SageMaker Estimator instance
  tabular_estimator = Estimator(
      role=aws_role,
      image_uri=train_image_uri,
      source_dir=train_source_uri,
      model_uri=train_model_uri,
      entry_point="transfer_learning.py",
      instance_count=1,
      instance_type=training_instance_type,
      max_run=360000,
      hyperparameters=hyperparameters,
      output_path=s3_output_location
  )
  
  # Launch a SageMaker Training job by passing the S3 path of the training data
  tabular_estimator.fit(
      {
          "training": training_dataset_s3_path,
          "validation": validation_dataset_s3_path,
      }, logs=True, job_name=training_job_name
  )
  ```

  CatBoost를 기본 제공 알고리즘으로 설정하는 방법에 대한 자세한 내용은 다음 노트북 예제를 참조하세요.
  + [Amazon SageMaker AI LightGBM 및 CatBoost 알고리즘을 사용한 테이블 형식 분류](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Classification_LightGBM_CatBoost.ipynb)
  + [Amazon SageMaker AI LightGBM 및 CatBoost 알고리즘을 사용한 테이블 형식 회귀](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Regression_LightGBM_CatBoost.ipynb)

# CatBoost 알고리즘의 입력 및 출력 인터페이스
<a name="InputOutput-CatBoost"></a>

그라디언트 부스팅은 테이블형 데이터에서 작동합니다. 행은 관측치를 나타내고 1개 열은 대상 변수 또는 레이블을 나타내며, 나머지 열은 특징을 나타냅니다.

CatBoost의 SageMaker AI 구현은 훈련 및 추론을 위한 CSV를 지원합니다.
+ **훈련 ContentType**의 경우 유효한 입력은 *text/csv*여야 합니다.
+ **추론 ContentType**의 경우 유효한 입력은 *text/csv*여야 합니다.

**참고**  
CSV 훈련의 경우 알고리즘은 대상 변수가 첫 번째 열에 있고 CSV에는 헤더 레코드가 없다고 추정합니다.  
CSV 추론의 경우 알고리즘은 CSV 입력에 레이블 열이 없다고 추정합니다.

**훈련 데이터, 검증 데이터 및 범주형 기능의 입력 형식**

CatBoost 모델에 입력하기 위한 훈련 데이터의 형식을 지정하는 방법을 염두에 두세요. 훈련 및 검증 데이터를 포함하는 Amazon S3 버킷의 경로를 제공해야 합니다. 범주형 기능 목록을 포함시킬 수도 있습니다. `training` 및 `validation` 채널을 모두 사용하여 입력 데이터를 제공하세요 또는 `training` 채널만 사용해도 됩니다.

**`training` 및 `validation` 채널을 모두 사용**

`training` 채널용과 `validation` 채널용 두 개의 S3 경로를 통해 입력 데이터를 제공할 수 있습니다. 각 S3 경로는 하나 이상의 CSV 파일을 가리키는 S3 접두사이거나 특정 CSV 파일 하나를 가리키는 전체 S3 경로일 수 있습니다. 대상 변수는 CSV 파일의 첫 번째 열에 있어야 합니다. 예측기 변수(기능)는 나머지 열에 있어야 합니다. `training` 또는 `validation` 채널에 대해 여러 CSV 파일이 제공되는 경우 CatBoost 알고리즘은 파일을 연결합니다. 검증 데이터는 각 부스팅 반복 종료 시 검증 점수를 계산하는 데 사용됩니다. 유효성 검증 점수가 더 이상 향상되지 않으면 조기 중지가 적용됩니다.

예측 변수에 범주형 기능이 포함된 경우 훈련 데이터 파일 또는 파일이 있는 위치에 이름이 `categorical_index.json`인 JSON 파일을 제공할 수 있습니다. 범주형 기능을 위한 JSON 파일을 제공하는 경우 `training` 채널은 특정 CSV 파일이 아닌 S3 접두사를 가리켜야 합니다. 이 파일은 키가 문자열 `"cat_index_list"`이고 값이 고유 정수 목록인 Python 사전을 포함해야 합니다. 값 목록의 각 정수는 훈련 데이터 CSV 파일에 있는 해당 범주형 기능의 열 인덱스를 나타내야 합니다. 각 값은 양의 정수(0은 목표 값을 나타내므로 0보다 커야 함), `Int32.MaxValue`(2147483647) 미만, 총 열 수보다 작아야 합니다. 범주형 인덱스 JSON 파일은 하나만 있어야 합니다.

**`training` 채널만 사용**:

`training` 채널의 단일 S3 경로를 통해 입력 데이터를 제공할 수도 있습니다. 이 S3 경로는 하나 이상의 CSV 파일이 들어 있는 `training/`이라는 이름의 하위 디렉터리가 있는 디렉터리를 가리켜야 합니다. 선택적으로 `validation/`이라는 동일한 위치에 하나 이상의 CSV 파일이 있는 다른 하위 디렉토리를 포함할 수 있습니다. 검증 데이터가 제공되지 않는 경우 훈련 데이터의 20%가 무작위로 샘플링되어 검증 데이터로 사용됩니다. 예측 변수에 범주형 기능이 포함되어 있다면 데이터 하위 디렉터리와 같은 위치에 `categorical_index.json`이라는 이름의 JSON 파일을 제공할 수 있습니다.

**참고**  
CSV 훈련 입력 모드의 경우, 알고리즘에 대해 사용 가능한 전체 메모리(인스턴스 수 \$1 `InstanceType`의 가용 메모리)가 훈련 데이터세트를 담을 수 있어야 합니다.

SageMaker AI CatBoost는 `catboost.CatBoostClassifier` 및 `catboost.CatBoostRegressor` 모듈을 사용하여 모델을 직렬화/역직렬화하며, 이는 모델 저장 또는 로딩에 사용될 수 있습니다.

**`catboost`를 포함한 SageMaker AI CatBoost로 훈련된 모델을 사용하려면 다음과 같이 합니다.**
+ 다음 Python 코드를 사용합니다.

  ```
  import tarfile
  from catboost import CatBoostClassifier
  
  t = tarfile.open('model.tar.gz', 'r:gz')
  t.extractall()
  
  file_path = os.path.join(model_file_path, "model")
  model = CatBoostClassifier()
  model.load_model(file_path)
  
  # prediction with test data
  # dtest should be a pandas DataFrame with column names feature_0, feature_1, ..., feature_d
  pred = model.predict(dtest)
  ```

## CatBoost 알고리즘에 대한 Amazon EC2 인스턴스 권장 사항
<a name="Instance-CatBoost"></a>

SageMaker AI CatBoost는 현재 CPU를 사용한 훈련만 가능합니다. CatBoost는 메모리 바운드(컴퓨팅 바운드와는 반대) 알고리즘입니다. 따라서 컴퓨팅 최적화 인스턴스(예: C5)보다 범용 컴퓨팅 인스턴스(예: M5)를 선택하는 것이 좋습니다. 또한 훈련 데이터를 보유하기 위해 선택한 인스턴스에 총 메모리가 충분한 것이 좋습니다.

## CatBoost 샘플 노트북
<a name="catboost-sample-notebooks"></a>

 다음 테이블에는 Amazon SageMaker AI CatBoost 알고리즘의 다양한 사용 사례를 다루는 다양한 샘플 노트북이 나와 있습니다.


****  

| **노트북 제목** | **설명** | 
| --- | --- | 
|  [Amazon SageMaker AI LightGBM 및 CatBoost 알고리즘을 사용한 테이블 형식 분류](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Classification_LightGBM_CatBoost.ipynb)  |  이 노트북은 Amazon SageMaker AI CatBoost 알고리즘을 사용하여 테이블 형식 분류 모델을 훈련하고 호스팅하는 방법을 보여줍니다.  | 
|  [Amazon SageMaker AI LightGBM 및 CatBoost 알고리즘을 사용한 테이블 형식 회귀](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Regression_LightGBM_CatBoost.ipynb)  |  이 노트북은 Amazon SageMaker AI CatBoost 알고리즘을 사용하여 테이블 형식 회귀 모델을 훈련하고 호스팅하는 방법을 보여줍니다.  | 

SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 액세스하는 방법은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열고 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인하세요. 노트북을 열려면 **사용** 탭을 선택한 후 **사본 생성**을 선택합니다.

# CatBoost 작동 방식
<a name="catboost-HowItWorks"></a>

CatBoost는 기존의 GBDT(그라데이션 부스팅 의사 결정 트리) 알고리즘을 구현하여 다음과 같은 두 가지 중요한 알고리즘 개선 사항을 추가했습니다.

1. 기존 알고리즘에 대한 순열 기반 대안인 순서가 있는 부스팅 구현

1. 범주형 기능을 처리하기 위한 혁신적인 알고리즘

두 기법 모두 현재의 모든 기존 그라데이션 부스팅 알고리즘 구현에 존재하는 특수한 종류의 표적 누출로 인한 예측 변화를 막기 위해 개발되었습니다.

CatBoost 알고리즘은 다양한 데이터 형식, 관계, 분포 및 미세 조정할 수 있는 다양한 하이퍼파라미터를 강력하게 처리하기 때문에 기계 학습 경쟁에서 잘 작동합니다. 회귀, 분류(바이너리 및 멀티클래스) 및 순위 결정 관련 문제에 CatBoost를 사용할 수 있습니다.

그라데이션 부스팅에 대한 자세한 내용은 [SageMaker AI XGBoost 알고리즘의 작동 방식](xgboost-HowItWorks.md) 섹션을 참조하세요. CatBoost 방법에 사용되는 추가 GOSS 및 EFB 기법에 대한 자세한 내용은 [CatBoost: 범주형 기능을 사용한 편견 없는 부스팅](https://arxiv.org/pdf/1706.09516.pdf)을 참조하세요.**

# CatBoost 하이퍼파라미터
<a name="catboost-hyperparameters"></a>

다음 테이블에는 Amazon SageMaker AI CatBoost 알고리즘에 필요하거나 가장 일반적으로 사용되는 하이퍼파라미터 하위 세트가 포함되어 있습니다. 이들은 사용자가 데이터를 통해 모델 파라미터를 쉽게 예측하기 위해 설정하는 파라미터입니다. SageMaker AI CatBoost 알고리즘은 오픈 소스 [CatBoost](https://github.com/catboost/catboost) 패키지의 구현입니다.

**참고**  
기본 하이퍼파라미터는 [CatBoost 샘플 노트북](catboost.md#catboost-sample-notebooks)의 예제 데이터세트를 기준으로 정해집니다.

기본적으로 SageMaker AI CatBoost 알고리즘은 분류 문제 유형에 따라 평가 지표와 손실 함수를 자동 선택합니다. 이 CatBoost 알고리즘은 데이터의 레이블 수를 기반으로 분류 문제 유형을 탐지합니다. 회귀 문제의 경우 평가 지표와 손실 함수는 모두 평균 제곱근 오차입니다. 바이너리 분류 문제의 경우 평가 지표는 곡선 아래 면적(AUC)이고 손실 함수는 로그 손실입니다. 멀티클래스 분류 문제의 경우 평가 지표 및 손실 함수는 멀티클래스 교차 엔트로피입니다. `eval_metric` 하이퍼파라미터를 사용하여 기본 평가 지표를 변경할 수 있습니다. 설명, 유효한 값, 기본값을 포함하여 LightGBM 하이퍼파라미터에 대한 자세한 내용은 다음 표를 참조하세요.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| iterations |  빌드할 수 있는 최대 트리 수입니다. 유효한 값: 정수, 범위: 양의 정수. 기본값: `500`.  | 
| early\$1stopping\$1rounds |  마지막 `early_stopping_rounds` 라운드에서 한 검증 데이터 요소 중 하나의 지표가 개선되지 않으면 훈련이 중지됩니다. `early_stopping_rounds`가 0보다 작거나 같으면 이 하이퍼파라미터는 무시됩니다. 유효한 값: 정수. 기본값: `5`.  | 
| eval\$1metric |  검증 데이터에 대한 평가 지표. `eval_metric`을 디폴트 `"auto"` 값으로 설정하면 알고리즘이 분류 문제의 유형에 따라 평가 지표를 자동으로 선택합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/catboost-hyperparameters.html) 유효한 값: 문자열, 유효한 값은 [CatBoost 설명서](https://catboost.ai/en/docs/references/eval-metric__supported-metrics)를 참조하세요. 기본값: `"auto"`.  | 
| learning\$1rate |  각 훈련 예제 배치를 살펴본 후 모델 가중치가 업데이트되는 비율입니다. 유효한 값: 부동 소수점, 범위: (`0.0`, `1.0`). 기본값: `0.009`.  | 
| depth |  트리의 깊이. 유효한 값: 정수, 범위: (`1`, `16`). 기본값: `6`.  | 
| l2\$1leaf\$1reg |  비용 함수의 L2 정규화 항에 대한 계수. 유효한 값: 정수, 범위: 양의 정수. 기본값: `3`.  | 
| random\$1strength |  점수를 매기는 데 사용할 무작위성의 양은 트리 구조를 선택할 때 분할됩니다. 이 파라미터를 사용하면 모델이 과적합되지 않도록 할 수 있습니다. 유효한 값: 부동 소수, 범위: 양의 부동 소수점 수 기본값: `1.0`.  | 
| max\$1leaves |  결과 트리의 최대 잎 수입니다. `"Lossguide"` 성장 정책에만 사용할 수 있습니다. 유효한 값: 정수, 범위: [`2`, `64`]. 기본값: `31`.  | 
| rsm |  무작위 부분 공간 매서드. 기능을 무작위로 다시 선택한 경우 각 분할 선택에서 사용할 기능의 백분율. 유효한 값: 부동 소수, 범위: (`0.0`, `1.0`]. 기본값: `1.0`.  | 
| sampling\$1frequency |  트리를 빌드할 때 가중치와 객체를 샘플링하는 빈도. 유효한 값: 문자열, 둘 중 하나: (`"PerTreeLevel"` 또는 `"PerTree"`). 기본값: `"PerTreeLevel"`.  | 
| min\$1data\$1in\$1leaf |  리프에 있는 훈련 샘플의 최소 개수. CatBoost는 샘플 수가 지정된 값보다 적은 리프에서 새 분할을 검색하지 않습니다. `"Lossguide"` 및 `"Depthwise"` 성장 정책에만 사용할 수 있습니다. 유효한 값: 정수, 범위: (`1` 또는 `∞`). 기본값: `1`.  | 
| bagging\$1temperature |  베이지안 부트스트랩의 설정을 정의합니다. 베이지안 부트스트랩을 사용하여 객체에 임의의 가중치를 할당할 수 있습니다. `bagging_temperature`를 `1.0`로 설정하면 지수 분포에서 가중치를 샘플링합니다. `bagging_temperature`를 `0.0`로 설정하면 모든 가중치는 1.0입니다. 유효한 값: 부동 소수, 범위: 음수가 아닌 부동 소수. 기본값: `1.0`.  | 
| boosting\$1type |  부스팅 체계. ‘자동’은 `boosting_type`이 처리 장치 유형, 훈련 데이터세트의 개체 수, 선택한 학습 모드를 기반으로 선택됨을 의미합니다. 유효한 값: 문자열, 다음 중 하나: (`"Auto"`, `"Ordered"`, `"Plain"`). 기본값: `"Auto"`.  | 
| scale\$1pos\$1weight |  바이너리 분류에서 양의 클래스에 대한 가중치. 이 값은 양의 클래스의 객체 가중치를 곱한 값으로 사용됩니다. 유효한 값: 부동 소수, 범위: 양의 부동 소수. 기본값: `1.0`.  | 
| max\$1bin |  수치적 특징의 분할 횟수. `"Auto"`이란 `max_bin`가 처리 중인 장치 유형 및 기타 파라미터를 기반으로 선택됨을 의미합니다. 자세한 내용은 CatBoost 설명서를 참조하세요. 유효한 값: 문자열, 둘 중 하나 (`"Auto"` 또는 `"1"` \$1 `"65535"`까지의 정수 문자열). 기본값: `"Auto"`.  | 
| grow\$1policy |  트리 성장 정책. 거대한 트리 빌드 방법을 정의합니다. 유효한 값: 문자열, 다음 중 하나: (`"SymmetricTree"`, `"Depthwise"` 또는 `"Lossguide"`). 기본값: `"SymmetricTree"`.  | 
| random\$1seed |  훈련에 사용되는 무작위 시드. 유효한 값: 정수, 범위: 음수가 아닌 정수. 기본값: `1.0`. | 
| thread\$1count |  훈련 중에 사용할 스레드 수입니다. `thread_count`이 `-1`인 경우 스레드 수는 프로세서 코어 수와 같습니다. `thread_count`은 `0`일 수 없습니다. 유효한 값: 정수, 둘 중 하나 (`-1` 또는 양의 정수). 기본값: `-1`.  | 
| verbose |  인쇄 메시지의 상세 내용. 레벨이 높을수록 인쇄 명세서가 더 상세해집니다. 유효한 값: 정수, 범위: 양의 정수. 기본값: `1`.  | 

# CatBoost 모델 튜닝
<a name="catboost-tuning"></a>

자동 모델 튜닝은 하이퍼파라미터 튜닝이라고도 하며, 훈련 데이터세트 및 검증 데이터세트에 대한 다양한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾는 기능입니다.** 모델 튜닝은 다음과 같은 하이퍼파라미터에 초점을 맞춥니다.

**참고**  
훈련 손실 함수는 레이블 열의 고유 정수 수에 따라 결정되는 분류 작업 유형에 따라 자동 할당됩니다. 자세한 내용은 [CatBoost 하이퍼파라미터](catboost-hyperparameters.md) 섹션을 참조하세요.
+ 모델 훈련 중에 최적화하는 학습 손실 함수
+ 검증 중에 모델 성능을 평가하는 데 사용되는 평가 지표입니다.
+ 모델을 자동 튜닝할 때 사용할 하이퍼파라미터 세트와 각 값의 범위

자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 선택된 평가 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

**참고**  
CatBoost의 자동 모델 튜닝은 SageMaker AI 콘솔이 아닌 Amazon SageMaker SDK에서만 사용할 수 있습니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## CatBoost 알고리즘으로 계산되는 평가 지표
<a name="catboost-metrics"></a>

SageMaker AI CatBoost 알고리즘은 모델 검증에 사용할 다음 지표를 계산합니다. 평가 지표는 분류 작업 유형(레이블 열에 표시된 고유 정수의 개수로 결정됨)에 따라 자동으로 할당됩니다.


| 지표 이름 | 설명 | 최적화 방향 | 정규식 패턴 | 
| --- | --- | --- | --- | 
| RMSE | 평균 제곱근 오차 | 최소화 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| MAE | 평균 절대 오차 | 최소화 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| MedianAbsoluteError | 평균 절대 오차 | 최소화 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| R2 | r2 점수 | 최대화 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| Logloss | 바이너리 교차 엔트로피 | 최대화 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| Precision | precision | 최대화 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| Recall | 리콜 | 최대화 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| F1 | F1 점수 | 최대화 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| AUC | 오크 점수 | 최대화 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| MultiClass | 멀티클래스 교차 엔트로피 | 최대화 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| Accuracy | 정확도 | 최대화 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| BalancedAccuracy | 균형 잡힌 정확도 | 최대화 | "bestTest = ([0-9\$1\$1.]\$1)" | 

## 튜닝 가능한 CatBoost 하이퍼파라미터
<a name="catboost-tunable-hyperparameters"></a>

다음 하이퍼파라미터를 사용하여 CatBoost 모델을 튜닝합니다. CatBoost 평가 지표를 최적화하는데 가장 큰 영향을 미치는 하이퍼파라미터는 `learning_rate`, `depth`, `l2_leaf_reg`, 및 `random_strength`입니다. 모든 CatBoost 하이퍼파라미터 목록은 [CatBoost 하이퍼파라미터](catboost-hyperparameters.md) 섹션을 참조하세요.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| learning\$1rate | ContinuousParameterRanges | MinValue: 0.001, MaxValue: 0.01 | 
| depth | IntegerParameterRanges | MinValue: 4, MaxValue: 10 | 
| l2\$1leaf\$1reg | IntegerParameterRanges | MinValue: 2, MaxValue: 10 | 
| random\$1strength | ContinuousParameterRanges | MinValue: 0, MaxValue: 10 | 

# Factorization Machine 알고리즘
<a name="fact-machines"></a>

Factorization Machine 알고리즘은 분류 및 회귀 작업 모두에 대해 사용할 수 있는 범용 지도 학습 알고리즘입니다. 고차원 희소 데이터세트 내 특징 간 상호 작용을 경제적으로 캡처하도록 설계된 선형 모델의 확장입니다. 예를 들어 클릭 예측 시스템에서 Factorization Machine 모델은 특정 페이지 범주에 속한 페이지에 배치된 특정 광고 범주의 광고로부터 관측된 클릭 비율 패턴을 캡쳐할 수 있습니다. Factorization Machine은 클릭 예측 및 품목 추천과 같은 고차원 희소 데이터세트를 처리하는 작업에 있어 좋은 선택합니다.

**참고**  
Factorization Machine 알고리즘의 Amazon SageMaker AI 구현은 특성 간 쌍 비교(pair-wise)(2차) 상호 작용만을 고려합니다.

**Topics**
+ [Factorization Machines 알고리즘의 입력/출력 인터페이스](#fm-inputoutput)
+ [Factorization Machines 알고리즘에 대한 EC2 인스턴스 권장 사항](#fm-instances)
+ [Factorization Machines 샘플 노트북](#fm-sample-notebooks)
+ [Factorization Machine 작동 방법](fact-machines-howitworks.md)
+ [Factorization Machine 하이퍼파라미터](fact-machines-hyperparameters.md)
+ [Factorization Machine 모델 튜닝](fm-tuning.md)
+ [Factorization Machine 응답 형식](fm-in-formats.md)

## Factorization Machines 알고리즘의 입력/출력 인터페이스
<a name="fm-inputoutput"></a>

Factorization Machine 알고리즘은 바이너리 분류 모드 또는 회귀 모드 중 하나에서 실행될 수 있습니다. 각 모드에서 데이터세트는 교육 채널 데이터세트와 함께 **테스트** 채널로 제공될 수 있습니다. 점수 계산은 사용하는 모드에 따라 달라집니다. 회귀 모드에서 테스팅 데이터세트는 평균 제곱근 오차(RMSE)를 사용하여 점수가 매겨집니다. 바이너리 분류 모드에서 테스트 데이터세트는 바이너리 교차 엔트로피(로그 손실), 정확성(임계치 = 0.5) 및 F1 점수(임계치 = 0.5)를 사용하여 점수가 매겨집니다.

**훈련**의 경우 Factorization Machine 알고리즘은 현재 `Float32` 텐서가 포함된 `recordIO-protobuf` 형식만 지원합니다. 사용 사례가 주로 희소 데이터이기 때문에 `CSV`는 좋은 선택이 아닙니다. 파일 및 파이프 모드 훈련 둘 다 recordIO-wrapped protobuf에 대해 지원됩니다.

**추론**의 경우 Factorization Machine 알고리즘은 `application/json` 및 `x-recordio-protobuf` 형식을 지원합니다.
+ **바이너리 분류** 문제의 경우 알고리즘은 점수와 레이블을 예측합니다. 레이블은 숫자이고 `0` 또는 `1`일 수 있습니다. 점수는 알고리즘이 레이블이 `1`일 것이라고 판단하는 강도를 나타내는 숫자입니다. 알고리즘은 먼저 점수를 계산한 후 점수 값에서 레이블을 도출합니다. 점수가 0.5 이상이면 레이블은 `1`입니다.
+ **회귀** 문제의 경우 점수만 반환되며 이것은 예측된 값입니다. 예를 들어 Factorization Machines을 사용하여 영화 평점을 예측하는 경우 점수는 에측된 평점 값입니다.

훈련 및 추론 파일 형식에 대한 자세한 정보는 [Factorization Machines 샘플 노트북](#fm-sample-notebooks) 섹션을 참조하세요.

## Factorization Machines 알고리즘에 대한 EC2 인스턴스 권장 사항
<a name="fm-instances"></a>

Amazon SageMaker AI Factorization Machine 알고리즘은 확장성이 높고 배포된 인스턴스에 걸쳐 훈련이 가능합니다. 희소 및 밀집 데이터세트에 대해 CPU 인스턴스를 사용한 훈련 및 추론을 권장합니다. 일부 환경의 경우 밀집 데이터에서 하나 이상의 GPU를 사용한 훈련은 약간의 이점을 제공할 수 있습니다. GPU를 사용한 훈련은 밀집 데이터에서만 가능합니다. 희소 데이터에 대해 CPU 인스턴스를 사용하세요. Factorization Machines 알고리즘은 훈련 및 추론을 위해 P2, P3, G4dn, G5 인스턴스를 지원합니다.

## Factorization Machines 샘플 노트북
<a name="fm-sample-notebooks"></a>

SageMaker AI Factorization Machines 알고리즘을 사용하여 MNIST 데이터세트 내에서 0\$19의 수기 숫자 이미지를 분석하는 샘플 노트북은 [An Introduction to Factorization Machines with MNIST](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/factorization_machines_mnist/factorization_machines_mnist.html)를 참조하세요. SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 이 인스턴스에 액세스하는 방법에 대한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열면 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인할 수 있습니다. Factorization Machines 알고리즘을 사용하는 예제 노트북은 **Amazon 알고리즘 소개** 섹션에 있습니다. 노트북을 열려면 **사용** 탭을 클릭하고 사본 생성을 선택합니다.

# Factorization Machine 작동 방법
<a name="fact-machines-howitworks"></a>

Factorization Machines 모델의 예측 작업은 기능 세트 xi에서 대상 도메인까지 함수 ŷ를 추정하는 것입니다. 이 도메인은 회귀의 경우 실제 값이고 분류의 경우 바이너리입니다. Factorization Machine 모델은 감독되므로 사용 가능한 훈련 데이터세트 (xi,yj)가 있습니다. 이 모델의 이점은 인수분해된 파라미터화를 사용하여 쌍으로 이루어지는 특징 상호 작용을 캡처하는 방식에 있습니다. 이는 다음과 같은 수학 공식으로 나타낼 수 있습니다.

![\[Factorization Machine 모델에 대한 방정식을 포함한 이미지\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/FM1.jpg)


 이 방정식의 3개 항은 각각 모델 구성 요소 3개에 해당합니다.
+ w0 항은 전역 편향을 나타냅니다.
+ wi 선형항은 i번째 변수의 강도를 모델링합니다.
+ <vi,vj> 인수분해 항은 i번째와 j번째 변수 간 쌍별 상호 작용을 모델링합니다.

전역 편향 및 선형항은 선형 모델에서와 동일합니다. 쌍별 특징 상호 작용은 각 특징에 대해 학습된 해당 인수의 내적으로 세 번째 항에서 모델링됩니다. 학습된 팩터는 각 특징에 대한 임베딩 벡터로 고려될 수 있습니다. 예를 들어 분류 작업에서 한 쌍의 기능이 정상 샘플에서 더욱 자주 동시에 발생하는 편인 경우 이러한 팩터의 내적은 클 것입니다. 다시 말해 임베딩 벡터는 코사인 유사도에 있는 각각과 근접합니다. Factorization Machine 모델에 대한 자세한 정보는 [Factorization Machines](https://www.ismll.uni-hildesheim.de/pub/pdfs/Rendle2010FM.pdf)를 참조하세요.

회귀 작업의 경우 모델 예측 ŷn 및 대상 값 yn 사이의 제곱근 오차를 최소화함으로써 모델을 훈련합니다. 이를 제곱 손실이라고 합니다.

![\[제곱 손실에 대한 방정식이 포함된 이미지\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/FM2.jpg)


분류 작업의 경우 모델은 교차 엔트로피 손실(로그 손실이라고도 함)을 최소화함으로써 훈련됩니다.

![\[로그 손실에 대한 방정식이 포함된 이미지\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/FM3.jpg)


여기서 각 항목은 다음과 같습니다.

![\[예측 값의 로지스틱 함수가 포함된 이미지\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/FM4.jpg)


분류용 손실 함수에 대한 자세한 정보는 [Loss functions for classification](https://en.wikipedia.org/wiki/Loss_functions_for_classification)을 참조하세요.

# Factorization Machine 하이퍼파라미터
<a name="fact-machines-hyperparameters"></a>

다음 표에는 Factorization Machines 알고리즘의 하이퍼파라미터가 나와 있습니다. 이들은 사용자가 데이터로부터 모델 파라미터의 예측을 촉진하기 위해 설정하는 파라미터입니다. 먼저 반드시 설정해야 하는 필수 하이퍼파라미터가 알파벳 순으로 나열되어 있습니다. 그 다음에 설정할 수 있는 선택적 하이퍼파라미터가 알파벳 순으로 나열되어 있습니다.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| feature\$1dim | 입력 특징 공간의 차원. 희소 입력을 포함하여 매우 높을 수 있습니다. **필수** 유효한 값: 양수. 제안 값 범위: [10000,10000000]  | 
| num\$1factors | 인수분해의 차원. **필수** 유효한 값: 양수. 제안된 값 범위: [2,1000], 64는 일반적으로 좋은 결과를 생성하므로 좋은 출발점이 됩니다.  | 
| predictor\$1type | 예측기의 유형. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/fact-machines-hyperparameters.html) **필수** 유효한 값: 문자열: `binary_classifier` 또는 `regressor`  | 
| bias\$1init\$1method | 편향항에 대한 초기화 메서드: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/fact-machines-hyperparameters.html) **선택 사항** 유효값: `uniform`, `normal` 또는 `constant` 기본값: `normal`  | 
| bias\$1init\$1scale | 편향항 초기화 범위. `bias_init_method`가 `uniform`으로 설정된 경우에만 적용됩니다. **선택 사항** 유효한 값: 음수가 아닌 부동 소수점. 제안 값 범위: [1e-8, 512]. 기본값: 없음  | 
| bias\$1init\$1sigma | 편향항 초기화 표준편차. `bias_init_method`가 `normal`으로 설정된 경우에만 적용됩니다. **선택 사항** 유효한 값: 음수가 아닌 부동 소수점. 제안 값 범위: [1e-8, 512]. 기본 값: 0.01  | 
| bias\$1init\$1value | 편향항의 초기 값. `bias_init_method`가 `constant`으로 설정된 경우에만 적용됩니다. **선택 사항** 유효한 값: 부동 소수점. 제안 값 범위: [1e-8, 512]. 기본값: 없음  | 
| bias\$1lr | 편향항에 대한 학습률. **선택 사항** 유효한 값: 음수가 아닌 부동 소수점. 제안 값 범위: [1e-8, 512]. 기본값: 0.1  | 
| bias\$1wd | 편향항에 대한 가중치 감소. **선택 사항** 유효한 값: 음수가 아닌 부동 소수점. 제안 값 범위: [1e-8, 512]. 기본 값: 0.01  | 
| clip\$1gradient | 그라디언트 클리핑 옵티마이저 파라미터. 간격 [-`clip_gradient`, \$1`clip_gradient`]에 투사하여 그라디언트를 클리핑합니다. **선택 사항** 유효한 값: 부동 소수점. 기본값: 없음  | 
| epochs | 실행할 훈련 epoch의 수. **선택 사항** 유효한 값: 양수 기본값: 1  | 
| eps | 0으로 나누기를 방지하는 Epsilon 파라미터. **선택 사항** 유효한 값: 부동 소수점. 제안 값: 작음 기본값: 없음  | 
| factors\$1init\$1method | 인수분해 항에 대한 초기화 메서드: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/fact-machines-hyperparameters.html) **선택 사항** 유효한 값: `uniform`, `normal` 또는 `constant`. 기본값: `normal`  | 
| factors\$1init\$1scale  | 인수분해 항 초기화 범위. `factors_init_method`가 `uniform`으로 설정된 경우에만 적용됩니다. **선택 사항** 유효한 값: 음수가 아닌 부동 소수점. 제안 값 범위: [1e-8, 512]. 기본값: 없음  | 
| factors\$1init\$1sigma | 인수분해 항 초기화 표준편차. `factors_init_method`가 `normal`으로 설정된 경우에만 적용됩니다. **선택 사항** 유효한 값: 음수가 아닌 부동 소수점. 제안 값 범위: [1e-8, 512]. 기본값: 0.001  | 
| factors\$1init\$1value | 인수분해 항의 초기 값. `factors_init_method`가 `constant`으로 설정된 경우에만 적용됩니다. **선택 사항** 유효한 값: 부동 소수점. 제안 값 범위: [1e-8, 512]. 기본값: 없음  | 
| factors\$1lr | 인수분해 항에 대한 학습률. **선택 사항** 유효한 값: 음수가 아닌 부동 소수점. 제안 값 범위: [1e-8, 512]. 기본값: 0.0001  | 
| factors\$1wd | 인수분해 항에 대한 가중치 감소. **선택 사항** 유효한 값: 음수가 아닌 부동 소수점. 제안 값 범위: [1e-8, 512]. 기본값: 0.00001  | 
| linear\$1lr | 선형항에 대한 학습률. **선택 사항** 유효한 값: 음수가 아닌 부동 소수점. 제안 값 범위: [1e-8, 512]. 기본값: 0.001  | 
| linear\$1init\$1method | 선형항에 대한 초기화 메서드: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/fact-machines-hyperparameters.html) **선택 사항** 유효한 값: `uniform`, `normal` 또는 `constant`. 기본값: `normal`  | 
| linear\$1init\$1scale | 선형항 초기화 범위. `linear_init_method`가 `uniform`으로 설정된 경우에만 적용됩니다. **선택 사항** 유효한 값: 음수가 아닌 부동 소수점. 제안 값 범위: [1e-8, 512]. 기본값: 없음  | 
| linear\$1init\$1sigma | 선형항 초기화 표준편차. `linear_init_method`가 `normal`으로 설정된 경우에만 적용됩니다. **선택 사항** 유효한 값: 음수가 아닌 부동 소수점. 제안 값 범위: [1e-8, 512]. 기본 값: 0.01  | 
| linear\$1init\$1value | 선형항의 초기 값. `linear_init_method`가 *constant*로 설정된 경우에만 적용됩니다. **선택 사항** 유효한 값: 부동 소수점. 제안 값 범위: [1e-8, 512]. 기본값: 없음  | 
| linear\$1wd | 선형항에 대한 가중치 감소. **선택 사항** 유효한 값: 음수가 아닌 부동 소수점. 제안 값 범위: [1e-8, 512]. 기본값: 0.001  | 
| mini\$1batch\$1size | 훈련용 미니 배치의 크기. **선택 사항** 유효한 값: 양수 기본값: 1000  | 
| rescale\$1grad |  그라디언트 리스케일링 옵티마이저 파라미터. 설정된 경우 업데이트 전에 `rescale_grad`를 사용하여 경사를 곱합니다. 주로 1.0/`batch_size`를 선택합니다. **선택 사항** 유효한 값: 부동 소수점. 기본값: 없음  | 

# Factorization Machine 모델 튜닝
<a name="fm-tuning"></a>

하이퍼파라미터 튜닝이라고도 하는 자동 모델 튜닝은 데이터세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 알고리즘에서 계산하는 지표 중에서 목표 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 목표 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## Factorization Machine 알고리즘으로 계산되는 지표
<a name="fm-metrics"></a>

Factorization Machine 알고리즘에는 바이너리 분류 및 회귀 예측기 유형이 둘 다 있습니다. 예측기 유형은 자동 모델 튜닝에 사용할 수 있는 지표를 결정합니다. 알고리즘은 `test:rmse` 회귀 지표를 보고하며, 이러한 지표는 훈련 중 계산됩니다. 회귀 작업을 위한 모델을 튜닝하는 경우 이 지표를 목표 지표로 선택합니다.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| test:rmse | 평균 제곱근 오차 | 최소화 | 

Factorization Machine 알고리즘은 3가지 바이너리 분류 지표를 보고하며, 이러한 지표는 훈련 중 계산됩니다. 바이너리 분류 작업을 위한 모델을 튜닝하는 경우 이러한 지표 중 하나를 목표 지표로 선택합니다.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| test:binary\$1classification\$1accuracy | 정확도 | 최대화 | 
| test:binary\$1classification\$1cross\$1entropy | 교차 엔트로피 | 최소화 | 
| test:binary\$1f\$1beta | 베타 | 최대화 | 

## 튜닝 가능한 Factorization Machine 하이퍼파라미터
<a name="fm-tunable-hyperparameters"></a>

Factorization Machine 알고리즘에 대한 다음 하이퍼파라미터를 튜닝할 수 있습니다. 편향항, 선형 및 인수분해가 포함된 초기화 파라미터는 초기화 메서드에 따라 달라집니다. `uniform`, `normal` 및 `constant`, 이렇게 3가지 초기화 메서드가 있습니다. 이러한 초기화 메서드 자체는 튜닝이 불가능합니다. 튜닝 가능한 파라미터는 선택한 초기화 메서드에 따라 달라집니다. 예를 들어, 초기화 메서드가 `uniform`이면 `scale` 파라미터만 튜닝할 수 있습니다. 특히, 초기화 메서드가 `bias_init_method==uniform`인 경우에는 `bias_init_scale`, `linear_init_scale` 및 `factors_init_scale`을 튜닝할 수 있습니다. 마찬가지로, 초기화 메서드가 `normal`이면 `sigma` 파라미터만 튜닝할 수 있습니다. 초기화 메서드가 `constant`이면 `value` 파라미터만 튜닝할 수 있습니다. 다음 표에는 이러한 종속성이 나열되어 있습니다.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 종속성 | 
| --- | --- | --- | --- | 
| bias\$1init\$1scale | ContinuousParameterRange | MinValue: 1e-8, MaxValue: 512 | bias\$1init\$1method==uniform | 
| bias\$1init\$1sigma | ContinuousParameterRange | MinValue: 1e-8, MaxValue: 512 | bias\$1init\$1method==normal | 
| bias\$1init\$1value | ContinuousParameterRange | MinValue: 1e-8, MaxValue: 512 | bias\$1init\$1method==constant | 
| bias\$1lr | ContinuousParameterRange | MinValue: 1e-8, MaxValue: 512 | 없음 | 
| bias\$1wd | ContinuousParameterRange | MinValue: 1e-8, MaxValue: 512 | 없음 | 
| epoch | IntegerParameterRange | MinValue: 1, MaxValue: 1000 | 없음 | 
| factors\$1init\$1scale | ContinuousParameterRange | MinValue: 1e-8, MaxValue: 512 | bias\$1init\$1method==uniform | 
| factors\$1init\$1sigma | ContinuousParameterRange | MinValue: 1e-8, MaxValue: 512 | bias\$1init\$1method==normal | 
| factors\$1init\$1value | ContinuousParameterRange | MinValue: 1e-8, MaxValue: 512 | bias\$1init\$1method==constant | 
| factors\$1lr | ContinuousParameterRange | MinValue: 1e-8, MaxValue: 512 | 없음 | 
| factors\$1wd | ContinuousParameterRange | MinValue: 1e-8, MaxValue: 512] | 없음 | 
| linear\$1init\$1scale | ContinuousParameterRange | MinValue: 1e-8, MaxValue: 512 | bias\$1init\$1method==uniform | 
| linear\$1init\$1sigma | ContinuousParameterRange | MinValue: 1e-8, MaxValue: 512 | bias\$1init\$1method==normal | 
| linear\$1init\$1value | ContinuousParameterRange | MinValue: 1e-8, MaxValue: 512 | bias\$1init\$1method==constant | 
| linear\$1lr | ContinuousParameterRange | MinValue: 1e-8, MaxValue: 512 | 없음 | 
| linear\$1wd | ContinuousParameterRange | MinValue: 1e-8, MaxValue: 512 | 없음 | 
| mini\$1batch\$1size | IntegerParameterRange | MinValue: 100, MaxValue: 10000 | 없음 | 

# Factorization Machine 응답 형식
<a name="fm-in-formats"></a>

Amazon SageMaker AI는 바이너리 분류 및 회귀 작업을 위한 특정 구조와 함께 JSON, JSONLINES 및 RECORDIO와 같은 Factorization Machines 모델에서 추론을 가져오기 위한 여러 응답 형식을 제공합니다.

## JSON 응답 형식
<a name="fm-json"></a>

바이너리 분류

```
let response =   {
    "predictions":    [
        {
            "score": 0.4,
            "predicted_label": 0
        } 
    ]
}
```

회귀

```
let response =   {
    "predictions":    [
        {
            "score": 0.4
        } 
    ]
}
```

## JSONLINES 응답 형식
<a name="fm-jsonlines"></a>

바이너리 분류

```
{"score": 0.4, "predicted_label": 0}
```

회귀

```
{"score": 0.4}
```

## RECORDIO 응답 형식
<a name="fm-recordio"></a>

바이너리 분류

```
[
    Record = {
        features = {},
        label = {
            'score’: {
                keys: [],
                values: [0.4]  # float32
            },
            'predicted_label': {
                keys: [],
                values: [0.0]  # float32
            }
        }
    }
]
```

회귀

```
[
    Record = {
        features = {},
        label = {
            'score’: {
                keys: [],
                values: [0.4]  # float32
            }   
        }
    }
]
```

# K-Nearest Neighbors(k-NN) 알고리즘
<a name="k-nearest-neighbors"></a>

Amazon SageMaker AI k-Nearest Neighbors(k-NN) 알고리즘은 인덱스 기반 알고리즘입니다. 이 알고리즘은 분류 또는 회귀에 비모수적 방법을 사용합니다. 분류 문제의 경우 이 알고리즘은 샘플 지점과 가장 가까운 *k* 지점을 쿼리하여 가장 자주 사용하는 클래스 레이블을 예측 레이블로 반환합니다. 회귀 문제의 경우 이 알고리즘은 샘플 지점과 가장 가까운 *k* 지점을 쿼리해 특징 값의 평균을 예측 값으로 반환합니다.

k-NN 알고리즘을 사용한 훈련에는 샘플링, 차원 감소 및 인덱스 빌드, 이렇게 3가지 단계가 있습니다. 샘플링은 메모리에 맞도록 최초 데이터세트의 크기를 줄입니다. 차원 감소를 위해 이 알고리즘은 데이터의 특징 차원을 줄여 메모리 내에서 k-NN 모델이 차지하는 공간을 줄이고 추론 지연 시간을 단축합니다. 차원 감소 메서드로 Random Projection과 빠른 Johnson-Lindenstrauss 변환 두 가지를 제공합니다. 일반적으로, 차원의 증가에 따라 밀도가 떨어지는 데이터의 통계적 분석 문제를 일으키는 "차원의 저주"(curse of dimensionality)를 피하기 위해 고차원(d >1000) 데이터세트에 대해 차원 감소를 사용합니다. k-NN의 주요 훈련 목표는 인덱스를 생성하는 것입니다. 인덱스를 사용하면 값 또는 클래스 레이블이 아직 확인되지 않은 지점과 추론에 사용할 k nearest 지점 간에 거리를 효율적으로 조회할 수 있습니다.

**Topics**
+ [k-NN 알고리즘에 대한 입력/출력 인터페이스](#kNN-input_output)
+ [k-NN 샘플 노트북](#kNN-sample-notebooks)
+ [k-NN 알고리즘 작동 방법](kNN_how-it-works.md)
+ [k-NN 알고리즘에 대한 EC2 인스턴스 권장 사항](#kNN-instances)
+ [k-NN 하이퍼파라미터](kNN_hyperparameters.md)
+ [k-NN 모델 튜닝](kNN-tuning.md)
+ [k-NN 훈련 입력을 위한 데이터 형식](kNN-in-formats.md)
+ [k-NN 요청 및 응답 형식](kNN-inference-formats.md)

## k-NN 알고리즘에 대한 입력/출력 인터페이스
<a name="kNN-input_output"></a>

SageMaker AI k-NN은 훈련 및 테스트 데이터 채널을 지원합니다.
+ train 채널은 샘플링하거나 k-NN 인덱스로 생성하려는 데이터에 사용합니다.**
+ test 채널은 로그 파일에 점수를 내보냅니다.** 점수는 미니 배치당 행 하나로 나열되는데, `classifier`는 정확도, `regressor` 점수는 평균 제곱근 오차(mse)를 나타냅니다.

훈련 입력의 경우 k-NN은 `text/csv` 및 `application/x-recordio-protobuf` 데이터 형식을 지원합니다. 입력 유형 `text/csv`의 경우 첫 번째 `label_size` 열은 해당 행의 레이블 벡터로 해석됩니다. 파일 모드 또는 파이프 모드를 사용하여 `recordIO-wrapped-protobuf` 또는 `CSV`로 형식이 지정된 데이터에 대해 모델을 훈련할 수 있습니다.

추론 입력의 경우 k-NN은 `application/json`, `application/x-recordio-protobuf` 및 `text/csv` 데이터 형식을 지원합니다. `text/csv` 형식은 `label_size` 및 인코딩 파라미터를 수용하고, 0의 `label_size`와 UTF-8 인코딩을 가정합니다.

추론 출력의 경우 k-NN은 `application/json` 및 `application/x-recordio-protobuf` 데이터 형식을 지원합니다. 이러한 두 가지 데이터 형식 역시 verbose 출력 모드를 지원합니다. verbose 출력 모드에서 API는 가장 작은 항목에서 가장 큰 항목 순으로 정렬된 거리 벡터 및 레이블 벡터의 해당 요소와 함께 검색 결과를 제공합니다.

배치 변환의 경우 k-NN은 입력 및 출력 둘 다에 대해 `application/jsonlines` 데이터 형식을 지원합니다. 예제 입력은 다음과 같습니다.

```
content-type: application/jsonlines

{"features": [1.5, 16.0, 14.0, 23.0]}
{"data": {"features": {"values": [1.5, 16.0, 14.0, 23.0]}}
```

예제 출력은 다음과 같습니다.

```
accept: application/jsonlines

{"predicted_label": 0.0}
{"predicted_label": 2.0}
```

입력 및 출력 파일 형식에 대한 자세한 정보는 [k-NN 훈련 입력을 위한 데이터 형식](kNN-in-formats.md)(훈련의 경우), [k-NN 요청 및 응답 형식](kNN-inference-formats.md)(추론의 경우) 및 [k-NN 샘플 노트북](#kNN-sample-notebooks) 섹션을 참조하세요.

## k-NN 샘플 노트북
<a name="kNN-sample-notebooks"></a>

지질 및 삼림 서비스 데이터에서 황무지 초목 유형을 예측하기 위해 SageMaker AI K-Nearest Neighbor 알고리즘을 사용하는 샘플 노트북은 [K-Nearest Neighbor Covertype](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/k_nearest_neighbors_covtype/k_nearest_neighbors_covtype.html)을 참조하세요.

Jupyter Notebook 인스턴스를 사용하여 SageMaker AI에서 예시를 실행합니다. SageMaker AI에서 Jupyter Notebook 인스턴스를 만들어 여는 방법은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만들어 열었으면 **SageMaker 예시** 탭을 선택하여 모든 SageMaker AI 예시 노트북의 목록을 확인합니다. **Introduction to Amazon algorithms(Amazon 알고리즘 소개)** 섹션에서 K-Nearest Neighbor 노트북을 찾으세요. 노트북을 열려면 **사용** 탭을 클릭하고 사본 생성을 선택합니다.

# k-NN 알고리즘 작동 방법
<a name="kNN_how-it-works"></a>

Amazon SageMaker AI k-Nearest Neighbors(k-NN) 알고리즘은 입력 데이터 샘플링, 차원 축소 수행, 인덱스 구축을 포함하는 다단계 훈련 프로세스를 따릅니다. 그런 다음 추론 중에 인덱싱된 데이터를 사용하여 지정된 데이터 포인트에 대한 k-Nearest Neighbors(k-NN)를 효율적으로 찾고 인접 레이블 또는 값을 기반으로 예측합니다.

## 1단계: 샘플
<a name="step1-k-NN-sampling"></a>

훈련 데이터세트에서 샘플링할 데이터 포인트의 총 수를 지정하려면 `sample_size` 파라미터를 사용합니다. 예를 들어, 최초 데이터세트에 데이터 포인트가 1,000개 있고, `sample_size`가 100으로 설정되어 있으면(여기서 총 인스턴스 수는 2개임) 이 각 작업자는 포인트 50개를 샘플링합니다. 총 100개의 데이터 포인트 세트가 수집됩니다. 샘플링은 데이터 포인트 수를 기준으로 선형 시간으로 실행됩니다.

## 2단계: 차원 감소 수행
<a name="step2-kNN-dim-reduction"></a>

현재 구현된 k-NN 알고리즘에는 두 가지 차원 감소 방법이 있습니다. 이러한 메서드는 `dimension_reduction_type` 하이퍼파라미터에서 지정합니다. `sign` 메서드는 무작위 투영을 지정하는데, 이 투영은 임의 신호 매트릭스를 사용하는 선형 투영을 사용합니다. `fjlt` 메서드는 푸리에 변환을 기반으로 하는 방법인 빠른 Johnson-Lindenstrauss 변환을 지정합니다. 두 메서드 모두 L2 및 내적 거리를 보존합니다. `fjlt` 메서드는 대상 차원이 크고 CPU 추론과 관련해 성능이 보다 뛰어난 경우 사용해야 합니다. 메서드는 컴퓨팅 복잡성에 따라 달라집니다. 차원 d의 n개 포인트로 구성된 배치의 차원을 대상 차원 k로 줄이려면 `sign` 메서드에는 O(ndk) 시간이 필요합니다. `fjlt` 메서드에는 O(nd 로그(d)) 시간이 필요하지만 관련 상수가 더 클 수 있습니다. 차원 감소를 사용하면 데이터에 노이즈가 유입되고 이러한 노이즈는 예측 정확도를 떨어뜨릴 수 있습니다.

## 3단계: 인덱스 빌드
<a name="step3-kNN-build-index"></a>

추론 중 이 알고리즘은 샘플 포인트의 k-nearest-neighbors에 대한 인덱스를 쿼리합니다. 포인트에 대한 추론을 기반으로 이 알고리즘은 분류 또는 회귀 예측을 수행합니다. 제공된 클래스 레이블 또는 값을 기반으로 예측합니다. k-NN은 플랫 인덱스, 반전 인덱스 및 프로덕트 양자화가 적용된 반전 인덱스, 이렇게 3가지 다른 유형의 인덱스가 있습니다. `index_type` 파라미터를 사용하여 유형을 지정합니다.

## 모델 직렬화
<a name="kNN-model-serialization"></a>

k-NN 알고리즘이 훈련을 마치면 추론을 준비하기 위해 파일 3개를 직렬화합니다.
+ model\$1algo-1: 가장 가까운 아웃을 계산하기 위해 직렬화된 인덱스를 포함합니다.
+ model\$1algo-1.labels: 인덱스의 쿼리 결과를 기반으로 예측 레이블을 계산하기 위해 직렬화된 레이블(np.float32 바이너리 형식)을 포함합니다.
+ model\$1algo-1.json: 추론을 위한 훈련에서 `k` 및 `predictor_type` 하이퍼파라미터를 저장하는 JSON 형식 모델 메타데이터를 기타 관련 상태와 함께 포함합니다.

k-NN이 현재 구현을 사용하면 메타데이터 파일을 수정해 예측 계산 방식을 변경할 수 있습니다. 예를 들어, `k`를 10으로 변경하거나 `predictor_type`을 *regressor*로 변경할 수 있습니다.

```
{
  "k": 5,
  "predictor_type": "classifier",
  "dimension_reduction": {"type": "sign", "seed": 3, "target_dim": 10, "input_dim": 20},
  "normalize": False,
  "version": "1.0"
}
```

## k-NN 알고리즘에 대한 EC2 인스턴스 권장 사항
<a name="kNN-instances"></a>

CPU 인스턴스(예: ml.m5.2xlarge) 또는 GPU 인스턴스에서 훈련하는 것이 좋습니다. k-NN 알고리즘은 훈련 및 추론을 위해 P2, P3, G4dn, G5 GPU 인스턴스 패밀리를 지원합니다.

GPU 하드웨어를 사용하는 경우 GPU 간 통신에 대한 부담이 있기 때문에 CPU의 추론 요청은 일반적으로 GPU의 요청보다 평균 지연 시간이 낮습니다. 그러나 GPU는 일반적으로 큰 배치에 대해 처리량이 더 많습니다.

# k-NN 하이퍼파라미터
<a name="kNN_hyperparameters"></a>

다음 표에는 Amazon SageMaker AI k-Nearest Neighbors(k-NN) 알고리즘에 대해 설정할 수 있는 하이퍼파라미터가 나열되어 있습니다.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| feature\$1dim |  입력 데이터의 특징 수. **필수** 유효한 값: 양수.  | 
| k |  가장 가까운 이웃 수. **필수** 유효한 값: 양수  | 
| predictor\$1type |  데이터 레이블에 사용할 추론 유형. **필수** 유효한 값: 분류의 경우 분류자 또는 회귀의 경우 *regressor***  | 
| sample\$1size |  훈련 데이터세트에서 샘플링할 데이터 포인트의 총 수. **필수** 유효한 값: 양수  | 
| dimension\$1reduction\$1target |  줄일 대상 차원. `dimension_reduction_type` 파라미터를 지정하는 경우 **필수**입니다. 유효한 값: 0보다 크고 `feature_dim`보다 작은 양의 정수.  | 
| dimension\$1reduction\$1type |  차원 감소 메서드 유형. **선택 사항** 유효한 값: 무작위 투영의 경우 *sign* 또는 빠른 Johnson-Lindenstrauss 변환의 경우 *fjlt* 기본값: 차원 감소 없음  | 
| faiss\$1index\$1ivf\$1nlists |  `index_type`이 *faiss.IVFFlat* 또는 *faiss.IVFPQ*인 경우 인덱스 내에서 생성할 중심 수. **선택 사항** 유효한 값: 양수 기본값: 자동이며 `sqrt(sample_size)`로 확인됩니다.**  | 
| faiss\$1index\$1pq\$1m |  `index_type`이 *faiss.IVFPQ*로 설정된 경우 인덱스 내에서 생성할 벡터 하위 구성 요소 수. FaceBook AI Similarity Search(FAISS) 라이브러리를 사용하려면 `faiss_index_pq_m`의 값이 데이터 차원의 나눗수여야 합니다. `faiss_index_pq_m`이 데이터 차원의 나눗수가 아닌 경우 데이터 차원을 `faiss_index_pq_m`으로 나눌 수 있는 가장 작은 정수로 늘립니다. 차원 감소가 적용되지 않는 경우 이 알고리즘은 제로 패딩을 추가합니다. 차원 감소가 적용된 경우 이 알고리즘은 `dimension_reduction_target` 하이퍼파라미터의 값을 늘립니다. **선택 사항** 유효한 값: 다음 정수 중 하나: 1, 2, 3, 4, 8, 12, 16, 20, 24, 28, 32, 40, 48, 56, 64, 96  | 
| index\$1metric |  가장 가까운 이웃을 찾을 때 지점 간 거리를 측정하는 지표. `faiss.IVFPQ`로 설정된 `index_type`을 사용하여 훈련하는 경우 `INNER_PRODUCT` 거리 및 `COSINE` 유사성은 지원되지 않습니다. **선택 사항** 유효한 값: 유클리드 거리의 경우 *L2*, 내적 거리의 경우 *INNER\$1PRODUCT*, 코사인 유사도의 경우 *COSINE*. 기본값: *L2*  | 
| index\$1type |  인덱스의 유형. **선택 사항** 유효한 값: *faiss.Flat*, *faiss.IVFFlat*, *faiss.IVFPQ*. 기본값: *faiss.Flat*  | 
| mini\$1batch\$1size |  데이터 반복자의 미니 배치당 관측치의 수. **선택 사항** 유효한 값: 양수 기본값: 5000  | 

# k-NN 모델 튜닝
<a name="kNN-tuning"></a>

Amazon SageMaker AI k-nearest-neighbor 알고리즘은 지도 알고리즘입니다. 이 알고리즘은 테스트 데이터세트를 사용하고 분류 작업에 대한 정확도 관련 지표 또는 회귀 작업에 대한 평균 제곱근 오차 관련 지표를 내보냅니다. 이러한 정확도 지표는 경험적 테스트 데이터가 제공하는 실측 정보를 기준으로 각 작업에 대한 모델 예측을 비교합니다. 테스트 데이터세트에 대해 가장 높은 정확도 또는 가장 낮은 오차를 보고하는 최적의 모델을 찾기 위해 k-NN에 대해 하이퍼파라미터 튜닝 작업을 실행할 수 있습니다.

하이퍼파라미터 튜닝이라고도 하는 자동 모델 튜닝은 데이터세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 알고리즘의 예측 작업에 적절한 목표 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 목표 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다. 이러한 하이퍼파라미터는 예측 모델 파라미터를 지원하기 위한 용도로만 사용하고, 훈련된 모델이 예측을 위해 사용하지 않습니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## k-NN 알고리즘으로 계산되는 지표
<a name="km-metrics"></a>

k-nearest neighbors 알고리즘은 훈련 중 `predictor_type` 하이퍼파라미터가 지정한 작업 유형에 따라 다음 표에 있는 두 가지 지표 중 하나를 계산합니다.
+ 분류자는 분류 작업을 지정하고 `test:accuracy`를 계산합니다.**
+ *regressor*는 회귀 작업을 지정하고 `test:mse`를 계산합니다.

모델 튜닝 시 관련 목표 지표를 계산하기 위해 수행되는 작업 유형에 적절한 `predictor_type` 값을 선택합니다.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| test:accuracy |  `predictor_type`을 *classifier*로 설정하면 k-NN은 k-nearest neighbors의 레이블 평균을 기반으로 예측 레이블을 test 채널 데이터에서 제공되는 실측 정보 레이블과 비교합니다. 보고되는 정확도 범위는 0.0(0%)\$11.0(100%)입니다.  |  최대화  | 
| test:mse |  `predictor_type`을 *regressor*로 설정하면 k-NN은 k-nearest neighbors의 레이블 평균을 기반으로 예측 레이블을 test 채널 데이터에서 제공되는 실측 정보 레이블과 비교합니다. 평균 제곱근 오차는 두 레이블을 비교해 계산됩니다.  |  최소화  | 



## 튜닝 가능한 k-NN 하이퍼파라미터
<a name="km-tunable-hyperparameters"></a>

다음 하이퍼파라미터를 사용하여 Amazon SageMaker AI k-nearest-neighbor 모델을 튜닝합니다.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| k |  IntegerParameterRanges  |  MinValue: 1, MaxValue: 1024  | 
| sample\$1size |  IntegerParameterRanges  |  MinValue: 256, MaxValue: 20000000  | 

# k-NN 훈련 입력을 위한 데이터 형식
<a name="kNN-in-formats"></a>

모든 Amazon SageMaker AI 기본 제공 알고리즘은 [공통 데이터 형식 - 훈련](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-training.html)에서 설명하는 공통 입력 훈련 형식을 따릅니다. 이 주제에는 Amazon SageMaker AI k-nearest-neighbor 알고리즘에 사용 가능한 입력 형식 목록이 포함되어 있습니다.

## CSV 데이터 형식
<a name="kNN-training-data-csv"></a>

content-type: text/csv; label\$1size=1

```
4,1.2,1.3,9.6,20.3
```

첫 번째 `label_size` 열은 해당 행의 레이블 벡터로 해석됩니다.

## RECORDIO 데이터 형식
<a name="kNN-training-data-recordio"></a>

content-type: application/x-recordio-protobuf

```
[
    Record = {
        features = {
            'values': {
                values: [1.2, 1.3, 9.6, 20.3]  # float32
            }
        },
        label = {
            'values': {
                values: [4]  # float32
            }
        }
    }
] 

                
}
```

# k-NN 요청 및 응답 형식
<a name="kNN-inference-formats"></a>

모든 Amazon SageMaker AI 기본 제공 알고리즘은 [공통 데이터 형식 - 추론](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)에서 설명하는 공통 입력 추론 형식을 따릅니다. 이 주제에는 Amazon SageMaker AI k-nearest-neighbor 알고리즘에 사용 가능한 출력 형식 목록이 포함되어 있습니다.

## 입력: CSV 요청 형식
<a name="kNN-input-csv"></a>

content-type: text/csv

```
1.2,1.3,9.6,20.3
```

`label_size` 또는 인코딩 파라미터를 수용합니다. 0의 `label_size`와 utf-8 인코딩을 가정합니다.

## 입력: JSON 요청 형식
<a name="kNN-input-json"></a>

content-type: application/json

```
{
  "instances": [
    {"data": {"features": {"values": [-3, -1, -4, 2]}}},
    {"features": [3.0, 0.1, 0.04, 0.002]}]
}
```

## INPUT: JSONLINES 요청 형식
<a name="kNN-input-jsonlines"></a>

content-type: application/jsonlines

```
{"features": [1.5, 16.0, 14.0, 23.0]}
{"data": {"features": {"values": [1.5, 16.0, 14.0, 23.0]}}
```

## 입력: RECORDIO 요청 형식
<a name="kNN-input-recordio"></a>

content-type: application/x-recordio-protobuf

```
[
    Record = {
        features = {
            'values': {
                values: [-3, -1, -4, 2]  # float32
            }
        },
        label = {}
    },
    Record = {
        features = {
            'values': {
                values: [3.0, 0.1, 0.04, 0.002]  # float32
            }
        },
        label = {}
    },
]
```

## OUTPUT: JSON 응답 형식
<a name="kNN-output-json"></a>

accept: application/json

```
{
  "predictions": [
    {"predicted_label": 0.0},
    {"predicted_label": 2.0}
  ]
}
```

## OUTPUT: JSONLINES 응답 형식
<a name="kNN-output-jsonlines"></a>

accept: application/jsonlines

```
{"predicted_label": 0.0}
{"predicted_label": 2.0}
```

## 출력: VERBOSE JSON 응답 형식
<a name="KNN-output-verbose-json"></a>

verbose 모드에서 API는 가장 작은 항목에서 가장 큰 항목 순으로 정렬된 거리 벡터 및 레이블 벡터의 해당 요소와 함께 검색 결과를 제공합니다. 이 예에서는 k가 3으로 설정되어 있습니다.

accept: application/json; verbose=true

```
{
  "predictions": [
    {
        "predicted_label": 0.0,
        "distances": [3.11792408, 3.89746071, 6.32548437],
        "labels": [0.0, 1.0, 0.0]
    },
    {
        "predicted_label": 2.0,
        "distances": [1.08470316, 3.04917915, 5.25393973],
        "labels": [2.0, 2.0, 0.0]
    }
  ]
}
```

## 출력: RECORDIO-PROTOBUF 응답 형식
<a name="kNN-output-recordio-protobuf"></a>

content-type: application/x-recordio-protobuf

```
[
    Record = {
        features = {},
        label = {
            'predicted_label': {
                values: [0.0]  # float32
            }
        }
    },
    Record = {
        features = {},
        label = {
            'predicted_label': {
                values: [2.0]  # float32
            }
        }
    }
]
```

## 출력: VERBOSE RECORDIO-PROTOBUF 응답 형식
<a name="kNN-output-verbose-recordio"></a>

verbose 모드에서 API는 가장 작은 항목에서 가장 큰 항목 순으로 정렬된 거리 벡터 및 레이블 벡터의 해당 요소와 함께 검색 결과를 제공합니다. 이 예에서는 k가 3으로 설정되어 있습니다.

accept: application/x-recordio-protobuf; verbose=true

```
[
    Record = {
        features = {},
        label = {
            'predicted_label': {
                values: [0.0]  # float32
            },
            'distances': {
                values: [3.11792408, 3.89746071, 6.32548437]  # float32
            },
            'labels': {
                values: [0.0, 1.0, 0.0]  # float32
            }
        }
    },
    Record = {
        features = {},
        label = {
            'predicted_label': {
                values: [0.0]  # float32
            },
            'distances': {
                values: [1.08470316, 3.04917915, 5.25393973]  # float32
            },
            'labels': {
                values: [2.0, 2.0, 0.0]  # float32
            }
        }
    }
]
```

## k-NN 알고리즘의 샘플 출력
<a name="kNN-sample-output"></a>

regressor 작업의 경우:

```
[06/08/2018 20:15:33 INFO 140026520049408] #test_score (algo-1) : ('mse', 0.013333333333333334)
```

classifier 작업의 경우:

```
[06/08/2018 20:15:46 INFO 140285487171328] #test_score (algo-1) : ('accuracy', 0.98666666666666669)
```

# LightGBM
<a name="lightgbm"></a>

[LightGBM](https://lightgbm.readthedocs.io/en/latest/)은 그라디언트 부스팅 의사 결정 트리 알고리즘(GBDT)에서 유명하고 효율적인 오픈 소스 구현입니다. GBDT는 더욱 단순하고 약한 모델 세트의 추정치의 앙상블을 결합하여 대상 변수를 정확하게 예측하려 시도하는 지도 훈련 알고리즘입니다. LightGBM은 추가 기술을 사용하여 기존 GBDT의 효율성과 확장성을 크게 개선합니다. 이 페이지에는 Amazon EC2 인스턴스 권장 사항 및 LightGBM용 샘플 노트북에 대한 정보가 포함되어 있습니다.

# SageMaker AI LightGBM 사용 방법
<a name="lightgbm-modes"></a>

LightGBM을 Amazon SageMaker AI 기본 제공 알고리즘으로 사용할 수 있습니다. 다음 섹션에서는 SageMaker Python SDK와 함께 LightGBM을 사용하는 방법을 설명합니다. Amazon SageMaker Studio Classic UI에서 LightGBM을 사용하는 방법에 대한 자세한 내용은 [SageMaker JumpStart 사전 훈련된 모델](studio-jumpstart.md) 섹션을 참조하세요.
+ **LightGBM을 내장 알고리즘으로 사용**

  LightGBM 기본 제공 알고리즘을 사용하여 다음 코드 예제와 같이 LightGBM 훈련 컨테이너를 빌드합니다. SageMaker AI `image_uris.retrieve` API(또는 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 버전 2를 사용하는 경우 `get_image_uri` API)를 사용하여 LightGBM 내장 알고리즘 이미지 URI를 자동으로 찾아낼 수 있습니다.

  LightGBM 이미지 URI를 지정한 후 LightGBM 컨테이너를 사용하여 SageMaker AI Estimator API를 사용하는 예측기를 구문화하고 훈련 작업을 시작할 수 있습니다. LightGBM 내장 알고리즘은 스크립트 모드에서 실행되지만 훈련 스크립트는 자동으로 제공되므로 교체할 필요가 없습니다. 스크립트 모드를 사용하여 SageMaker 훈련 작업을 만든 경험이 많으면 자체 LightGBM 훈련 스크립트를 통합할 수 있습니다.

  ```
  from sagemaker import image_uris, model_uris, script_uris
  
  train_model_id, train_model_version, train_scope = "lightgbm-classification-model", "*", "training"
  training_instance_type = "ml.m5.xlarge"
  
  # Retrieve the docker image
  train_image_uri = image_uris.retrieve(
      region=None,
      framework=None,
      model_id=train_model_id,
      model_version=train_model_version,
      image_scope=train_scope,
      instance_type=training_instance_type
  )
  
  # Retrieve the training script
  train_source_uri = script_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, script_scope=train_scope
  )
  
  train_model_uri = model_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, model_scope=train_scope
  )
  
  # Sample training data is available in this bucket
  training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
  training_data_prefix = "training-datasets/tabular_multiclass/"
  
  training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/train" 
  validation_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/validation" 
  
  output_bucket = sess.default_bucket()
  output_prefix = "jumpstart-example-tabular-training"
  
  s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"
  
  from sagemaker import hyperparameters
  
  # Retrieve the default hyperparameters for training the model
  hyperparameters = hyperparameters.retrieve_default(
      model_id=train_model_id, model_version=train_model_version
  )
  
  # [Optional] Override default hyperparameters with custom values
  hyperparameters[
      "num_boost_round"
  ] = "500"
  print(hyperparameters)
  
  from sagemaker.estimator import Estimator
  from sagemaker.utils import name_from_base
  
  training_job_name = name_from_base(f"built-in-algo-{train_model_id}-training")
  
  # Create SageMaker Estimator instance
  tabular_estimator = Estimator(
      role=aws_role,
      image_uri=train_image_uri,
      source_dir=train_source_uri,
      model_uri=train_model_uri,
      entry_point="transfer_learning.py",
      instance_count=1, # for distributed training, specify an instance_count greater than 1
      instance_type=training_instance_type,
      max_run=360000,
      hyperparameters=hyperparameters,
      output_path=s3_output_location
  )
  
  # Launch a SageMaker Training job by passing the S3 path of the training data
  tabular_estimator.fit(
      {
          "train": training_dataset_s3_path,
          "validation": validation_dataset_s3_path,
      }, logs=True, job_name=training_job_name
  )
  ```

  XGBoost를 기본 제공 알고리즘으로 설정하는 방법에 대한 자세한 내용은 다음 노트북 예제를 참조하세요.
  + [Amazon SageMaker AI LightGBM 및 CatBoost 알고리즘을 사용한 테이블 형식 분류](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Classification_LightGBM_CatBoost.ipynb)
  + [Amazon SageMaker AI LightGBM 및 CatBoost 알고리즘을 사용한 테이블 형식 회귀](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Regression_LightGBM_CatBoost.ipynb)

# LightGBM 알고리즘의 입력 및 출력 인터페이스
<a name="InputOutput-LightGBM"></a>

그라디언트 부스팅은 테이블형 데이터에서 작동합니다. 행은 관측치를 나타내고 1개 열은 대상 변수 또는 레이블을 나타내며, 나머지 열은 특징을 나타냅니다.

LightGBM의 SageMaker AI 구현은 훈련 및 추론을 위한 CSV를 지원합니다.
+ **훈련 ContentType**의 경우 유효한 입력은 *text/csv*여야 합니다.
+ **추론 ContentType**의 경우 유효한 입력은 *text/csv*여야 합니다.

**참고**  
CSV 훈련의 경우 알고리즘은 대상 변수가 첫 번째 열에 있고 CSV에는 헤더 레코드가 없다고 추정합니다.  
CSV 추론의 경우 알고리즘은 CSV 입력에 레이블 열이 없다고 추정합니다.

**훈련 데이터, 검증 데이터 및 범주형 기능의 입력 형식**

LightGBM 모델에 입력하기 위해 훈련 데이터의 형식을 지정하는 방법을 염두에 두세요. 훈련 및 검증 데이터를 포함하는 Amazon S3 버킷의 경로를 제공해야 합니다. 범주형 기능 목록을 포함시킬 수도 있습니다. `train` 및 `validation` 채널을 모두 사용하여 입력 데이터를 제공하세요 아니면 `train` 채널만 사용해도 됩니다.

**참고**  
`train` 및 `training`은 모두 LightGBM 훈련에 사용할 수 있는 유효한 채널 이름입니다.

**`train` 및 `validation` 채널을 모두 사용하세요.**

`train` 채널용과 `validation` 채널용 두 개의 S3 경로를 통해 입력 데이터를 제공할 수 있습니다. 각 S3 경로는 하나 이상의 CSV 파일을 가리키는 S3 접두사이거나 특정 CSV 파일 하나를 가리키는 전체 S3 경로일 수 있습니다. 대상 변수는 CSV 파일의 첫 번째 열에 있어야 합니다. 예측 변수(특징)는 나머지 열에 있어야 합니다. `train` 또는 `validation` 채널에 대해 여러 CSV 파일이 제공되는 경우 LightGBM 알고리즘은 파일을 연결합니다. 검증 데이터는 각 부스팅 반복 종료 시 검증 점수를 계산하는 데 사용됩니다. 유효성 검증 점수가 더 이상 향상되지 않으면 조기 중지가 적용됩니다.

예측 변수에 범주형 기능이 포함된 경우 훈련 데이터 파일 또는 파일이 있는 위치에 이름이 `categorical_index.json`인 JSON 파일을 제공할 수 있습니다. 범주형 기능을 위한 JSON 파일을 제공하는 경우 `train` 채널은 특정 CSV 파일이 아닌 S3 접두사를 가리켜야 합니다. 이 파일은 키가 문자열 `"cat_index_list"`이고 값이 고유 정수 목록인 Python 사전을 포함해야 합니다. 값 목록의 각 정수는 훈련 데이터 CSV 파일에 있는 해당 범주형 기능의 열 인덱스를 나타내야 합니다. 각 값은 양의 정수(0은 목표 값을 나타내므로 0보다 커야 함), `Int32.MaxValue`(2147483647) 미만, 총 열 수보다 작아야 합니다. 범주형 인덱스 JSON 파일은 하나만 있어야 합니다.

**`train` 채널만 사용**:

`train` 채널의 단일 S3 경로를 통해 입력 데이터를 제공할 수도 있습니다. 이 S3 경로는 하나 이상의 CSV 파일이 들어 있는 `train/`이라는 이름의 하위 디렉터리가 있는 디렉터리를 가리켜야 합니다. 선택적으로 `validation/`이라는 동일한 위치에 하나 이상의 CSV 파일이 있는 다른 하위 디렉토리를 포함할 수 있습니다. 검증 데이터가 제공되지 않는 경우 훈련 데이터의 20%가 무작위로 샘플링되어 검증 데이터로 사용됩니다. 예측 변수에 범주형 기능이 포함되어 있다면 데이터 하위 디렉터리와 같은 위치에 `categorical_index.json`이라는 이름의 JSON 파일을 제공할 수 있습니다.

**참고**  
CSV 훈련 입력 모드의 경우, 알고리즘에 대해 사용 가능한 전체 메모리(인스턴스 수 \$1 `InstanceType`의 가용 메모리)가 훈련 데이터세트를 담을 수 있어야 합니다.

SageMaker AI LightGBM는 Python Joblib 모듈을 사용하여 모델을 직렬화 또는 역직렬화하고, 이는 모델 저장 또는 로드에 사용될 수 있습니다.

**SageMaker AI LightGBM으로 훈련한 모델을 JobLib 모듈과 함께 사용하려면 다음과 같이 합니다.**
+ 다음 Python 코드를 사용합니다.

  ```
  import joblib 
  import tarfile
  
  t = tarfile.open('model.tar.gz', 'r:gz')
  t.extractall()
  
  model = joblib.load(model_file_path)
  
  # prediction with test data
  # dtest should be a pandas DataFrame with column names feature_0, feature_1, ..., feature_d
  pred = model.predict(dtest)
  ```

## LightGBM 알고리즘에 대한 Amazon EC2 인스턴스 권장 사항
<a name="Instance-LightGBM"></a>

SageMaker AI LightGBM은 현재 단일 인스턴스 및 여러 인스턴스 CPU 훈련을 지원합니다. 다중 인스턴스 CPU 훈련(분산 훈련)의 경우, 예측기를 정의할 때 1보다 큰 `instance_count`를 지정하세요 LightGBM을 사용한 분산 훈련에 대한 자세한 내용은 [Amazon SageMaker AI LightGBM Distributed training using Dask](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_applying_machine_learning/sagemaker_lightgbm_distributed_training_dask/sagemaker-lightgbm-distributed-training-dask.html)를 참조하세요.

LightGBM은 메모리 바운드(컴퓨팅 파운드와는 반대) 알고리즘입니다. 따라서 컴퓨팅 최적화 인스턴스(예: C5)보다 범용 컴퓨팅 인스턴스(예: M5)를 선택하는 것이 좋습니다. 또한 훈련 데이터를 보유하기 위해 선택한 인스턴스에 총 메모리가 충분한 것이 좋습니다.

## LightGBM 샘플 노트북
<a name="lightgbm-sample-notebooks"></a>

다음 표에는 Amazon SageMaker AI LightGBM 알고리즘의 다양한 사용 사례를 다루는 다양한 샘플 노트북이 요약되어 있습니다.


****  

| **노트북 제목** | **설명** | 
| --- | --- | 
|  [Amazon SageMaker AI LightGBM 및 CatBoost 알고리즘을 사용한 테이블 형식 분류](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Classification_LightGBM_CatBoost.html)  |  이 노트북은 Amazon SageMaker AI LightGBM 알고리즘을 사용하여 테이블 형식 분류 모델을 훈련하고 호스팅하는 방법을 보여줍니다.  | 
|  [Amazon SageMaker AI LightGBM 및 CatBoost 알고리즘을 사용한 테이블 형식 회귀](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Regression_LightGBM_CatBoost.html)  |  이 노트북은 Amazon SageMaker AI LightGBM 알고리즘을 사용하여 테이블 형식 회귀 모델을 훈련하고 호스팅하는 방법을 보여줍니다.  | 
|  [Amazon SageMaker AI LightGBM Distributed training using Dask](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_applying_machine_learning/sagemaker_lightgbm_distributed_training_dask/sagemaker-lightgbm-distributed-training-dask.html)  |  이 노트북은 Dask 프레임워크를 사용하는 Amazon SageMaker AI LightGBM 알고리즘을 사용한 분산 훈련을 보여줍니다.  | 

SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 액세스하는 방법은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열고 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인하세요. 노트북을 열려면 **사용** 탭을 선택한 후 **사본 생성**을 선택합니다.

# LightGBM의 작동 방식
<a name="lightgbm-HowItWorks"></a>

LightGBM은 GOSS(그라디언트 기반 단면 샘플링)와 EFB(독점 기능 번들링)라는 두 가지 새로운 기술을 추가하여 기존의 GBDT(그라디언트 부스팅 의사 결정 트리) 알고리즘을 구현합니다. 이러한 기법은 GBDT의 효율성과 확장성을 크게 개선하도록 설계되었습니다.

LightGBM 알고리즘은 다양한 데이터 형식, 관계, 분포 및 미세 조정할 수 있는 다양한 하이퍼파라미터를 강력하게 처리하기 때문에 기계 훈련 경쟁에서 잘 작동합니다. 회귀, 분류(바이너리 및 멀티클래스) 및 순위 결정 관련 문제에 LightGBM을 사용할 수 있습니다.

그라디언트 부스팅에 대한 자세한 내용은 [SageMaker AI XGBoost 알고리즘의 작동 방식](xgboost-HowItWorks.md) 섹션을 참조하세요. LightGBM 방법에 사용되는 추가 GOSS 및 EFB 기술에 대한 자세한 내용은 [LightGBM: 매우 효율적인 그라디언트 부스팅 의사 결정 트리](https://proceedings.neurips.cc/paper/2017/file/6449f44a102fde848669bdd9eb6b76fa-Paper.pdf)를 참조하세요.**

# 라이트GBM 하이퍼파라미터
<a name="lightgbm-hyperparameters"></a>

다음 표에는 Amazon SageMaker AI LightGBM 알고리즘에 필요하거나 가장 일반적으로 사용되는 하이퍼파라미터 하위 세트가 포함되어 있습니다. 이들은 사용자가 데이터를 통해 모델 파라미터를 쉽게 예측하기 위해 설정하는 파라미터입니다. SageMaker AI LightGBM 알고리즘은 [LightGBM](https://github.com/microsoft/LightGBM) 패키지의 오픈 소스 구현입니다.

**참고**  
기본 하이퍼파라미터는 [LightGBM 샘플 노트북](lightgbm.md#lightgbm-sample-notebooks)의 예제 데이터세트를 기준으로 정해집니다.

기본적으로 SageMaker AI LightGBM 알고리즘은 분류 문제 유형에 따라 평가 지표와 목적 함수를 자동으로 선택합니다. LightGBM 알고리즘은 데이터의 레이블 수를 기반으로 분류 문제 유형을 탐지합니다. 회귀 문제의 경우 평가 지표는 평균 제곱근 오차이고 목적 함수는 L2 손실입니다. 바이너리 분류 문제의 경우 평가 지표와 목적 함수는 모두 바이너리 교차 엔트로피입니다. 다중 클래스 분류 문제의 경우 평가 지표는 다중 클래스 교차 엔트로피이고 목적 함수는 소프트맥스입니다. `metric` 하이퍼파라미터를 사용하여 기본 평가 지표를 변경할 수 있습니다. 설명, 유효한 값, 기본값을 포함하여 LightGBM 하이퍼파라미터에 대한 자세한 내용은 다음 표를 참조하세요.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| num\$1boost\$1round |  최대 부스팅 반복 횟수. **참고:** 내부적으로 LightGBM은 다중 클래스 분류 문제에 대한 `num_class * num_boost_round` 트리를 생성합니다. 유효 값: 정수, 범위: 양의 정수. 기본값: `100`.  | 
| early\$1stopping\$1rounds |  마지막 `early_stopping_rounds` 라운드에서 한 검증 데이터 요소 중 하나의 지표가 개선되지 않으면 훈련이 중지됩니다. `early_stopping_rounds`가 0보다 작거나 같으면 이 하이퍼파라미터는 무시됩니다. 유효한 값: 정수. 기본값: `10`.  | 
| metric |  검증 데이터에 대한 평가 지표. `metric`을 디폴트 `"auto"` 값으로 설정하면 알고리즘이 분류 문제의 유형에 따라 평가 지표를 자동으로 선택합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/lightgbm-hyperparameters.html) 유효한 값: 문자열, 다음 중 하나: (`"auto"`, `"rmse"`, `"l1"`, `"l2"`, `"huber"`, `"fair"`, `"binary_logloss"`, `"binary_error"`, `"auc"`, `"average_precision"`, `"multi_logloss"`, `"multi_error"`, `"auc_mu"` 또는 `"cross_entropy"`). 기본값: `"auto"`.  | 
| learning\$1rate |  각 훈련 예제 배치를 살펴본 후 모델 가중치가 업데이트되는 비율입니다. 유효한 값: 부동 소수점, 범위: (`0.0`, `1.0`). 기본값: `0.1`.  | 
| num\$1leaves |  한 나무의 최대 잎 수입니다. 유효한 값: 정수, 범위: (`1`, `131072`). 기본값: `64`.  | 
| feature\$1fraction |  각 반복(트리)에서 선택할 기능의 하위 집합. 1.0 미만이어야 합니다. 유효한 값: 부동 소수점, 범위: (`0.0`, `1.0`). 기본값: `0.9`.  | 
| bagging\$1fraction |  `feature_fraction`과 유사한 기능의 하위 집합이지만 `bagging_fraction`은 리샘플링 없이 데이터의 일부를 무작위로 선택합니다. 유효한 값: 부동 소수점, 범위: (`0.0`, `1.0`]. 기본값: `0.9`.  | 
| bagging\$1freq |  배깅을 수행하는 빈도. LightGBM은 `bagging_freq` 반복 때마다 다음 `bagging_freq` 반복에 사용할 데이터의 백분율을 무작위로 선택합니다. 이 비율은 `bagging_fraction` 하이퍼파라미터에 의해 결정됩니다. `bagging_freq`이 0이면 배깅이 비활성화됩니다. 유효한 값: 정수, 범위: 음수가 아닌 정수. 기본값: `1`.  | 
| max\$1depth |  나무 모델의 최대 깊이입니다. 이는 데이터 양이 적을 때 오버피팅을 처리하는 데 사용됩니다. `max_depth`가 0보다 작거나 같으면 최대 깊이에 제한이 없습니다. 유효한 값: 정수. 기본값: `6`.  | 
| min\$1data\$1in\$1leaf |  한 리프에 있는 최소 데이터 양. 오버피팅을 처리하는 데 사용할 수 있습니다. 유효한 값: 정수, 범위: 음수가 아닌 정수. 기본값: `3`.  | 
| max\$1delta\$1step |  나무 잎의 최대 생산량을 제한하는 데 사용됩니다. `max_delta_step`이 0보다 작거나 같으면 제약 조건이 없습니다. 나뭇잎의 최종 최대 출력은 `learning_rate * max_delta_step`입니다. 유효한 값: 부동 소수점. 기본값: `0.0`.  | 
| lambda\$1l1 |  L1 정규화. 유효한 값: 부동 소수점, 범위: 음수가 아닌 부동 소수점. 기본값: `0.0`.  | 
| lambda\$1l2 |  L2 정규화. 유효한 값: 부동 소수점, 범위: 음수가 아닌 부동 소수점. 기본값: `0.0`.  | 
| boosting |  부스팅 타입 유효한 값: 문자열, 다음 중 하나: (`"gbdt"`, `"rf"`, `"dart"` 또는 `"goss"`). 기본값: `"gbdt"`.  | 
| min\$1gain\$1to\$1split |  스플릿을 수행하는 데 필요한 최소 게인. 훈련 속도를 높이는 데 사용할 수 있습니다. 유효한 값: 정수, 부동 소수점: 음수가 아닌 부동 소수점. 기본값: `0.0`.  | 
| scale\$1pos\$1weight |  포지티브 클래스가 있는 레이블의 가중치. 바이너리 분류 작업에만 사용됩니다. `is_unbalance`가 `"True"`로 설정된 경우 `scale_pos_weight`를 사용할 수 없습니다. 유효한 값: 부동 소수점, 범위: 양의 부동 소수점. 기본값: `1.0`.  | 
| tree\$1learner |  트리 훈련자 유형. 유효한 값: 문자열, 다음 중 하나: (`"serial"`, `"feature"`, `"data"` 또는 `"voting"`). 기본값: `"serial"`.  | 
| feature\$1fraction\$1bynode |  각 트리 노드에서 무작위 기능의 하위 집합을 선택합니다. 예를 들어 `feature_fraction_bynode`가 `0.8`인 경우 기능의 80% 가 선택됩니다. 오버피팅을 처리하는 데 사용할 수 있습니다. 유효한 값: 정수, 범위: (`0.0`, `1.0`]. 기본값: `1.0`.  | 
| is\$1unbalance |  훈련 데이터가 불균형한 경우 `"True"`로 설정합니다. 바이너리 분류 작업에만 사용됩니다. `is_unbalance`를 `scale_pos_weight`와 함께 사용할 수 없습니다. 유효한 값: 문자열, 다음 중 하나: (`"True"` 또는 `"False"`). 기본값: `"False"`.  | 
| max\$1bin |  기능 값을 버킷화하는 데 사용되는 최대 빈 수입니다. 빈 수가 적으면 훈련 정확도가 떨어질 수 있지만 전반적인 성능은 향상될 수 있습니다. 오버피팅을 처리하는 데 사용할 수 있습니다. 유효한 값: 정수, 범위: (1, ∞) 기본값: `255`.  | 
| tweedie\$1variance\$1power |  Tweedie 분포의 분산을 제어합니다. 감마 분포로 전환하려면 이 값을 `2.0`에 더 가깝게 설정하세요 푸아송 분포로 전환하려면 이 값을 `1.0`에 더 가깝게 설정하세요 회귀 작업에만 사용됩니다. 유효한 값: 부동 소수점, 범위: [`1.0`, `2.0`). 기본값: `1.5`.  | 
| num\$1threads |  LightGBM 실행에 사용되는 병렬 스레드의 수. 값 0은 OpenMP의 기본 스레드 수를 의미합니다. 유효한 값: 정수, 범위: 음수가 아닌 정수. 기본값: `0`.  | 
| verbosity |  인쇄 메시지의 장황함. `verbosity`가 `0`보다 작으면 인쇄 메시지에는 치명적 오류만 표시됩니다. `verbosity`를 `0`으로 설정하면 인쇄 메시지에 오류 및 경고가 포함됩니다. `verbosity`가 `1`로 설정된 경우 인쇄 메시지에 추가 정보가 표시됩니다. `1`보다 큰 `verbosity`는 인쇄 메시지에서 가장 많은 정보를 나타내며 디버깅에 사용할 수 있습니다. 유효한 값: 정수. 기본값: `1`.  | 

# LightGBM 모델을 튜닝하세요.
<a name="lightgbm-tuning"></a>

자동 모델 튜닝은 하이퍼파라미터 튜닝이라고도 하며, 훈련 데이터세트 및 검증 데이터세트에 대한 다양한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾는 기능입니다.** 모델 튜닝은 다음과 같은 하이퍼파라미터에 초점을 맞춥니다.

**참고**  
훈련 목표 함수는 레이블 열의 고유 정수 수에 따라 결정되는 분류 작업 유형에 따라 자동으로 할당됩니다. 자세한 내용은 [라이트GBM 하이퍼파라미터](lightgbm-hyperparameters.md) 섹션을 참조하세요.
+ 모델 훈련 중에 최적화하기 위한 학습 목표 함수
+ 검증 중에 모델 성능을 평가하는 데 사용되는 평가 지표
+ 모델을 자동으로 튜닝할 때 사용하기 쉬운 하이퍼파라미터 세트와 일정한 범위의 값

자동 모델 튜닝은 지정된 하이퍼파라미터를 검색하여 선택한 평가 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

**참고**  
LightGBM의 자동 모델 튜닝은 SageMaker AI 콘솔이 아닌 Amazon SageMaker SDK에서만 사용할 수 있습니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## LightGBM 알고리즘으로 계산되는 평가 지표
<a name="lightgbm-metrics"></a>

SageMaker AI LightGBM 알고리즘은 모델 검증에 사용할 다음 지표를 계산합니다. 평가 지표는 분류 작업 유형(레이블 열에 표시된 고유 정수의 개수로 결정됨)에 따라 자동으로 할당됩니다.


| 지표 이름 | 설명 | 최적화 방향 | 정규식 패턴 | 
| --- | --- | --- | --- | 
| rmse | 평균 제곱근 오차 | 최소화 | "rmse: ([0-9\$1\$1.]\$1)" | 
| l1 | 평균 절대 오차 | 최소화 | "l1: ([0-9\$1\$1.]\$1)" | 
| l2 | 평균 제곱 오차 | 최소화 | "l2: ([0-9\$1\$1.]\$1)" | 
| huber | Huber 손실 | 최소화 | "huber: ([0-9\$1\$1.]\$1)" | 
| fair | 공정 손실 | 최소화 | "fair: ([0-9\$1\$1.]\$1)" | 
| binary\$1logloss | 바이너리 크로스 엔트로피 | 최대화 | "binary\$1logloss: ([0-9\$1\$1.]\$1)" | 
| binary\$1error | 바이너리 오류 | 최소화 | "binary\$1error: ([0-9\$1\$1.]\$1)" | 
| auc | AUC | 최대화 | "auc: ([0-9\$1\$1.]\$1)" | 
| average\$1precision | 평균 정밀도 점수 | 최대화 | "average\$1precision: ([0-9\$1\$1.]\$1)" | 
| multi\$1logloss | 멀티클래스 교차 엔트로피 | 최대화 | "multi\$1logloss: ([0-9\$1\$1.]\$1)" | 
| multi\$1error | 다중 클래스 오류 점수 | 최소화 | "multi\$1error: ([0-9\$1\$1.]\$1)" | 
| auc\$1mu | AUC-MU | 최대화 | "auc\$1mu: ([0-9\$1\$1.]\$1)" | 
| cross\$1entropy | 교차 엔트로피 | 최소화 | "cross\$1entropy: ([0-9\$1\$1.]\$1)" | 

## 튜닝 가능한 LightGBM 하이퍼파라미터
<a name="lightgbm-tunable-hyperparameters"></a>

다음 하이퍼파라미터를 사용하여 LightGBM 모델을 튜닝합니다. LightGBM 평가 지표를 최적화하는데 가장 큰 영향을 미치는 하이퍼파라미터는 `learning_rate`, `num_leaves`, `feature_fraction`, `bagging_fraction`, `bagging_freq`, `max_depth`, `min_data_in_leaf`입니다. 모든 LightGbm 하이퍼파라미터 목록은 [라이트GBM 하이퍼파라미터](lightgbm-hyperparameters.md) 섹션을 참조하세요.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| learning\$1rate | ContinuousParameterRanges | MinValue: 0.001, MaxValue: 0.01 | 
| num\$1leaves | IntegerParameterRanges | MinValue: 10, MaxValue: 100 | 
| feature\$1fraction | ContinuousParameterRanges | MinValue: 0.1, MaxValue: 1.0 | 
| bagging\$1fraction | ContinuousParameterRanges | MinValue: 0.1, MaxValue: 1.0 | 
| bagging\$1freq | IntegerParameterRanges | MinValue: 0, MaxValue: 10 | 
| max\$1depth | IntegerParameterRanges | MinValue: 15, MaxValue: 100 | 
| min\$1data\$1in\$1leaf | IntegerParameterRanges | MinValue: 10, MaxValue: 200 | 

# 선형 학습자 알고리즘
<a name="linear-learner"></a>

선형 모델은 분류 또는 회귀 문제를 해결하는 데 사용되는 지도 학습 알고리즘입니다.** 입력을 위해 라벨링된 모델 예제를 제공합니다(*x*, *y*). *x* 는 고차원 벡터이고, *y*는 숫자 레이블입니다. 바이너리 분류 문제의 경우 레이블이 0 또는 1이어야 합니다. 멀티클래스 분류 문제의 경우 레이블이 0 또는 `num_classes` - 1이어야 합니다. 회귀 문제의 경우 *y*는 실수입니다. 이 알고리즘은 선형 함수 또는 선형 임계 함수(분류 문제의 경우)를 학습하여 벡터 *x*를 레이블 *y*의 근사치로 매핑합니다.

Amazon SageMaker AI 선형 학습자 알고리즘은 분류 및 회귀 문제에 대한 솔루션을 제공합니다. SageMaker AI 알고리즘을 사용하면 다양한 훈련 목표를 동시에 탐색할 수 있고 검증 세트에서 최적의 솔루션을 선택할 수 있습니다. 또한 많은 수의 모델을 탐색하여 최적의 모델을 선택할 수 있습니다. 최적의 모델은 다음 중 하나를 최적화합니다.
+ 지속적 목표(예: 평균 제곱근 오차, 교차 엔트로피 손실, 절대 오차).
+ 분류에 맞는 별도 목표(예: F1 측정, 정밀도, 재현율 또는 정확도) 

지속적인 목표에 대한 솔루션만을 제공하는 방법과 비교했을 때 SageMaker AI 선형 학습자 알고리즘은 단순한 하이퍼파라미터 최적화 기법에 비해 속도를 크게 높입니다. 뿐만 아니라 훨씬 더 편리합니다.

Linear Learner 알고리즘은 데이터 매트릭스를 예상합니다. 매트릭스에서 행은 관측치를 나타내고 열은 특징의 차원을 나타냅니다. 또한 데이터 지점과 일치하는 레이블을 포함하는 추가 열을 필요로 합니다. 최소한 Amazon SageMaker AI 선형 학습자의 경우 입력 및 출력 데이터 위치와 목표 유형(분류 또는 회귀)을 인수로 지정해야 합니다. 특징 차원 또한 필요합니다. 자세한 내용은 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 섹션을 참조하세요. 요청 본문의 `HyperParameters` 문자열 맵에서 추가 파라미터를 지정할 수 있습니다. 이러한 파라미터는 최적화 절차를 제어하거나 훈련시킬 목표 함수를 지정합니다. epoch의 수, 정규화 및 손실 유형이 그 예입니다.

[관리형 스팟 훈련](https://docs.aws.amazon.com/sagemaker/latest/dg/model-managed-spot-training.html)을 사용하는 경우 선형 학습자 알고리즘은 [모델 상태의 스냅샷을 찍을 수 있는 체크포인트](https://docs.aws.amazon.com/sagemaker/latest/dg/model-checkpoints.html) 사용을 지원합니다.

**Topics**
+ [선형 학습자 알고리즘에 대한 입력/출력 인터페이스](#ll-input_output)
+ [선형 학습자 알고리즘에 대한 EC2 인스턴스 권장 사항](#ll-instances)
+ [선형 학습자 샘플 노트북](#ll-sample-notebooks)
+ [선형 학습자 작동 방식](ll_how-it-works.md)
+ [선형 학습자 하이퍼파라미터](ll_hyperparameters.md)
+ [선형 학습자 모델 튜닝](linear-learner-tuning.md)
+ [선형 학습자 응답 형식](LL-in-formats.md)

## 선형 학습자 알고리즘에 대한 입력/출력 인터페이스
<a name="ll-input_output"></a>

Amazon SageMaker AI 선형 학습자 알고리즘은 훈련, 검증(선택 사항) 및 테스트(선택 사항)라는 3가지 데이터 채널을 지원합니다. 검증 데이터를 제공하는 경우 `S3DataDistributionType`은 `FullyReplicated`여야 합니다. 이 알고리즘은 epoch마다 검증 손실을 로깅하고, 검증 데이터의 샘플을 사용해 최적의 모델을 보정 및 선택합니다. 검증 데이터를 제공하지 않는 경우 이 알고리즘은 훈련 데이터 샘플을 사용하여 모델을 보정 및 선택합니다. 테스트 데이터가 제공된 경우 알고리즘 로그에는 최종 모델에 대한 테스트 점수가 포함됩니다.

**훈련의 경우** 선형 학습자 알고리즘은 `recordIO-wrapped protobuf` 및 `CSV` 형식을 지원합니다. `application/x-recordio-protobuf` 입력 유형의 경우 Float32 텐서만 지원됩니다. `text/csv` 입력 유형의 경우 첫 번째 열은 레이블(예측에 대한 대상 변수)로 간주됩니다. 파일 모드 또는 파이프 모드를 사용하여 `recordIO-wrapped-protobuf` 또는 `CSV`로 형식이 지정된 데이터에 대해 선형 학습자 모델을 훈련할 수 있습니다.

**추론의 경우** 선형 학습자 알고리즘은 `application/json`, `application/x-recordio-protobuf`, 및 `text/csv` 형식을 지원합니다. 새로운 데이터에 대해 예측할 경우 응답 형식은 모델 유형에 따라 달라집니다. **회귀의 경우** (`predictor_type='regressor'`) `score`는 모델에 의해 생성된 예측입니다. **분류의 경우** (`predictor_type='binary_classifier'` 또는 `predictor_type='multiclass_classifier'`) 모델은 `score`를 반환하고 `predicted_label`도 반환합니다. `predicted_label`은 모델이 예측한 클래스이고, `score`는 해당 예측의 강도를 측정합니다.
+ **바이너리 분류의 경우** `predicted_label`은 `0`이나 `1` 및 `score`이며 레이블이 1이어야 한다고 알고리즘에서 간주하는 정도를 나타내는 단일 부동 소수점 숫자입니다.
+ **멀티클래스 분류의 경우** `predicted_class`는 `0`\$1`num_classes-1` 사이의 정수이고, `score`는 클래스당 단일 부동 소수점 숫자의 목록입니다.

분류 문제에서 `score`를 해석하려면 사용된 손실 함수를 고려해야 합니다. `loss` 하이퍼파라미터 값이 `logistic`(바이너리 분류) 또는 `softmax_loss` 멀티클래스 분류인 경우 `score`는 해당 클래스의 확률로 해석할 수 있습니다. 이들은 `loss` 값이 `auto` 기본값일 때 선형 학습자가 사용하는 손실 값입니다. 하지만 손실이 `hinge_loss`로 설정된 경우 점수를 확률로 해석할 수 없습니다. 이는 Hinge 손실이 확률 추정치를 생산하지 않는 Support Vector 분류자에 해당하기 때문입니다.

입력 및 출력 파일 형식에 대한 자세한 내용은 [선형 학습자 응답 형식](LL-in-formats.md) 섹션을 참조하세요. 추론 형식에 대한 자세한 내용은 [선형 학습자 샘플 노트북](#ll-sample-notebooks) 섹션을 참조하세요.

## 선형 학습자 알고리즘에 대한 EC2 인스턴스 권장 사항
<a name="ll-instances"></a>

선형 학습자 알고리즘은 훈련 및 추론을 위해 CPU 및 GPU 인스턴스를 모두 지원합니다. GPU의 경우 선형 학습자 알고리즘은 P2, P3, G4dn 및 G5 GPU 패밀리를 지원합니다.

테스트 과정에서 다중 GPU 인스턴스가 단일 GPU 인스턴스에 비해 빠르다는 확실한 증거는 발견되지 않았습니다. 결과는 특정 사용 사례에 따라 다를 수 있습니다.

## 선형 학습자 샘플 노트북
<a name="ll-sample-notebooks"></a>

 다음 테이블에는 Amazon SageMaker AI 선형 학습자 알고리즘의 다양한 사용 사례를 다루는 다양한 샘플 노트북이 요약되어 있습니다.


| **노트북 제목** | **설명** | 
| --- | --- | 
|  [MNIST 데이터 세트 소개](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/linear_learner_mnist/linear_learner_mnist.html)  |   MNIST 데이터 세트를 사용하여 한 자릿수를 예측하도록 바이너리 분류자를 훈련시킵니다.  | 
|  [멀티클래스 분류자를 구축하는 방법은 무엇입니까?](https://sagemaker-examples.readthedocs.io/en/latest/scientific_details_of_algorithms/linear_learner_multiclass_classification/linear_learner_multiclass_classification.html)  |   UCI의 Covertype 데이터 세트를 사용하여 멀티클래스 분류자를 훈련하는 방법을 보여줍니다.  | 
|  [추론을 위한 기계 학습(ML) 파이프라인을 구축하는 방법은 무엇입니까?](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-python-sdk/scikit_learn_inference_pipeline/Inference%20Pipeline%20with%20Scikit-learn%20and%20Linear%20Learner.html)  |   Scikit-Learn 컨테이너를 사용하여 엔드-투-엔드 ML 파이프라인을 구축하는 방법을 보여줍니다.  | 

 SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 액세스하는 방법은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열고 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인하세요. 선형 학습 알고리즘을 사용하는 주제 모델링 예제 노트북은 **Amazon 알고리즘 소개** 섹션에 있습니다. 노트북을 열려면 **사용** 탭을 선택한 후 **사본 생성**을 선택합니다.

# 선형 학습자 작동 방식
<a name="ll_how-it-works"></a>

선형 학습자 알고리즘의 구현에는 사전 처리, 훈련 및 검증의 세 단계가 포함됩니다.

## 1단계: 사전 처리
<a name="step1-preprocessing"></a>

정규화 또는 특징 확장은 특정 손실 함수의 중요한 사전 처리 단계이며 데이터 세트에서 학습되는 모델이 단일 특징의 가중치에 따라 관리되지 않게 합니다. Amazon SageMaker AI Linear Learner 알고리즘에는 이 사전 처리 단계를 지원하는 정규화 옵션이 있습니다. 정규화를 사용 중인 경우 알고리즘은 먼저 데이터의 작은 샘플을 검토하여 각 특징 및 레이블의 평균 값과 표준 편차를 학습합니다. 전체 데이터 세트의 각 특징은 0의 평균 값을 갖도록 이동하며 단위 표준 편차를 갖도록 크기가 조정됩니다.

**참고**  
최상의 결과를 얻으려면 훈련 전에 데이터가 섞여 있는지 확인하세요. 섞여 있지 않은 데이터로 훈련하면 실패할 수 있습니다.

Linear Learner 알고리즘이 `normalize_data` 및 `normalize_label` 하이퍼파라미터를 각각 사용하여 특징 데이터 및 레이블을 정규화하는지 여부를 구성할 수 있습니다. 정규화는 특징 및 회귀 레이블에 대해 기본적으로 활성화됩니다. 바이너리 분류에서는 특징만 정규화할 수 있으며 이것이 기본 동작입니다.

## 2단계: 훈련
<a name="step2-training"></a>

Linear Learner 알고리즘을 사용하면 확률 그라디언트 하강(SGD)의 분산 구현을 통해 훈련합니다. 최적화 알고리즘을 선택하여 최적화 프로세스를 제어할 수 있습니다. 예를 들어, Adam, AdaGrad, 확률 그라디언트 하강 또는 기타 최적화 알고리즘을 사용하도록 선택할 수 있습니다. 또한 모멘텀, 학습률 및 학습률 일정 등과 같은 하이퍼파라미터를 지정할 수도 있습니다. 어떤 알고리즘 또는 하이퍼파라미터 값을 사용할지 잘 모르는 경우 대부분 데이터 세트에 작동하는 기본값을 선택합니다.

훈련 중 각 목표가 조금씩 다른 여러 모델을 동시에 최적화합니다. 예를 들어 L1 또는 L2 정규화를 다르게 한 다음 각기 다른 옵티마이저 설정을 시도합니다.

## 3단계: 검증 및 임곗값 설정
<a name="step3-validation"></a>

여러 모델을 병렬로 훈련할 때, 훈련이 완료되면 검증 세트에 대해 모델을 평가하여 가장 적합한 모델을 선택합니다. 회귀의 경우 가장 적합한 모델은 검증 세트에서 가장 큰 손실을 얻는 모델입니다. 분류의 경우 검증 세트의 샘플은 분류 임계값을 교정하는 데 사용됩니다. 가장 적합한 모델은 검증 세트에서 가장 높은 바이너리 분류 선택 기준을 충족하는 모델입니다. 이러한 기준의 예에는 F1 측정, 정확도 및 교차 엔트로피 손실이 있습니다.

**참고**  
알고리즘에 검증 세트가 제공되지 않으면 가장 적합한 모델을 평가 및 선택할 수 없습니다. 병렬 훈련 및 모델 선택을 활용하려면 알고리즘에 검증 세트를 제공하세요.

# 선형 학습자 하이퍼파라미터
<a name="ll_hyperparameters"></a>

다음 표에는 선형 학습자 알고리즘에 대한 하이퍼파라미터가 나와 있습니다. 이들은 사용자가 데이터로부터 모델 파라미터의 예측을 촉진하기 위해 설정하는 파라미터입니다. 먼저 반드시 설정해야 하는 필수 하이퍼파라미터가 알파벳 순으로 나열되어 있습니다. 그 다음에 설정할 수 있는 선택적 하이퍼파라미터가 알파벳 순으로 나열되어 있습니다. 하이퍼파라미터를 `auto`로 설정하면 Amazon SageMaker AI에서 자동으로 해당 하이퍼파라미터의 값을 계산하고 설정합니다.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| num\$1classes |  응답 변수의 클래스 수. 이 알고리즘에서는 클래스에 `0`, ..., `num_classes - 1` 레이블이 지정되어 있다고 가정합니다. `predictor_type`이 `multiclass_classifier`인 경우 **필요함**. 그렇지 않으면 알고리즘에서 무시됩니다. 유효한 값: 정수(3\$11,000,000)  | 
| predictor\$1type |  대상 변수 유형을 바이너리 분류, 멀티클래스 분류 또는 회귀로 지정합니다. **필수** 유효값: `binary_classifier`, `multiclass_classifier` 또는 `regressor`  | 
| accuracy\$1top\$1k |  멀티클래스 분류의 top-k 정확도 지표를 계산하는 경우 *k*의 값. 모델이 실제 레이블에 top-k 점수 중 하나를 할당하면 예제의 점수가 정답으로 매겨집니다. **선택 사항** 유효한 값: 양수 기본값: 3   | 
| balance\$1multiclass\$1weights |  손실 함수에서 각 클래스에 동일한 중요도를 제공하는 클래스 가중치를 사용할지 여부를 지정합니다. `predictor_type`이 `multiclass_classifier`인 경우에만 사용합니다. **선택 사항** 유효값: `true`, `false`  기본값: `false`  | 
| beta\$11 |  1차 추정치에 대한 지수 감소율. `optimizer` 값이 `adam`일 경우에만 해당됩니다. **선택 사항** 유효한 값: `auto` 또는 0부터 1.0 사이의 부동 소수점 기본값: `auto`  | 
| beta\$12 |  2차 추정치에 대한 지수 감소율. `optimizer` 값이 `adam`일 경우에만 해당됩니다. **선택 사항** 유효한 값: `auto` 또는 0부터 1.0 사이의 부동 소수점 정수  기본값: `auto`  | 
| bias\$1lr\$1mult |  편향항에 대한 다른 학습률을 허용. 편이에 대한 실제 학습률은 `learning_rate` \$1 `bias_lr_mult`입니다. **선택 사항** 유효한 값: `auto` 또는 양의 부동 소수점 정수 기본값: `auto`  | 
| bias\$1wd\$1mult |  편향항에 대한 다른 정규화 허용. 편이에 대한 실제 L2 정규화 가중치는 `wd` \$1 `bias_wd_mult`입니다. 기본적으로 편향항에 대한 정규화는 없습니다. **선택 사항** 유효한 값: `auto` 또는 음수가 아닌 부동 소수점 정수 기본값: `auto`  | 
| binary\$1classifier\$1model\$1selection\$1criteria |  `predictor_type`이 `binary_classifier`로 설정된 경우 검증 데이터 세트에 대한 모델 평가 기준. 검증 데이터 세트를 제공하지 않은 경우에는 훈련 데이터 세트에 대한 모델 평가 기준입니다. 기준은 다음과 같습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/ll_hyperparameters.html) **선택 사항** 유효한 값: `accuracy`, `f_beta`, `precision_at_target_recall`, `recall_at_target_precision` 또는 `loss_function` 기본값: `accuracy`  | 
| early\$1stopping\$1patience | 관련 지표에서 개선 사항이 없는 경우 훈련 완료 전 epoch 수. binary\$1classifier\$1model\$1selection\$1criteria에 값을 제공한 경우 지표는 해당 값입니다. 그렇지 않으면 지표는 loss 하이퍼파라미터에 대해 지정된 값과 동일합니다.지표는 검증 데이터에 따라 검증됩니다. 검증 데이터를 제공하지 않은 경우 지표는 항상 `loss` 파라미터에 지정된 값과 동일하고 훈련 데이터에 대해 평가됩니다. 조기 중지를 비활성화하려면 `early_stopping_patience`를 `epochs`에 대해 지정된 값보다 높은 값으로 설정하세요.**선택 사항**유효한 값: 양수기본값: 3 | 
| early\$1stopping\$1tolerance |  손실의 개선을 측정하는 상대 공차. 이전 최적 손실로 나눈 손실의 개선율이 이 값보다 작은 경우 조기 중지 시 개선이 0인 것으로 간주합니다. **선택 사항** 유효한 값: 양의 부동 소수점 정수 기본값: 0.001  | 
| epochs |  훈련 데이터의 최대 전달 횟수. **선택 사항** 유효한 값: 양수 기본 값: 15  | 
| f\$1beta |  바이너리 또는 멀티클래스 분류에 대한 F 점수 지표를 계산하는 경우 사용할 베타 값. `binary_classifier_model_selection_criteria`에 대해 지정된 값이 `f_beta`인 경우에도 사용됩니다. **선택 사항** 유효한 값: 양의 부동 소수점 정수 기본값: 1.0   | 
| feature\$1dim |  입력 데이터의 특징 수. **선택 사항** 유효한 값: `auto` 또는 양의 정수 기본값: `auto`  | 
| huber\$1delta |  Huber 손실에 대한 파라미터. 훈련 및 지표 검증 도중 델타보다 작은 오차에 대해서는 컴퓨팅 L2 손실, 델타보다 큰 오차에 대해서는 L1 손실. **선택 사항** 유효한 값: 양의 부동 소수점 정수 기본값: 1.0   | 
| init\$1bias |  편향항에 대한 초기 가중치. **선택 사항** 유효한 값: 부동 소수점 정수 기본값: 0  | 
| init\$1method |  모델 가중치에 사용되는 초기 분포 함수를 설정합니다. 함수는 다음과 같습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/ll_hyperparameters.html) **선택 사항** 유효한 값: `uniform` 또는 `normal` 기본값: `uniform`  | 
| init\$1scale |  모델 가중치에 대한 최초 균등 분포를 조정합니다. `init_method` 하이퍼파라미터가 `uniform`으로 설정된 경우에만 적용됩니다. **선택 사항** 유효한 값: 양의 부동 소수점 정수 기본값: 0.07  | 
| init\$1sigma |  정규 분포에 대한 초기화 표준편차. `init_method` 하이퍼파라미터가 `normal`으로 설정된 경우에만 적용됩니다. **선택 사항** 유효한 값: 양의 부동 소수점 정수 기본 값: 0.01  | 
| l1 |  L1 정규화 파라미터. L1 정규화를 사용하지 않으려면 이 값을 0으로 설정합니다. **선택 사항** 유효한 값: `auto` 또는 음수가 아닌 부동 소수점 기본값: `auto`  | 
| learning\$1rate |  파라미터 업데이트를 위해 옵티마이저에서 사용하는 단계 크기. **선택 사항** 유효한 값: `auto` 또는 양의 부동 소수점 정수 기본값: `auto`, 이 값은 선택한 옵티마이저에 따라 달라집니다.  | 
| loss |  손실 함수를 지정합니다. 사용 가능한 손실 함수와 그 기본값은 `predictor_type`의 값에 따라 달라집니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/ll_hyperparameters.html) 유효한 값: `auto`, `logistic`, `squared_loss`, `absolute_loss`, `hinge_loss`, `eps_insensitive_squared_loss`, `eps_insensitive_absolute_loss`, `quantile_loss` 또는 `huber_loss`  **선택 사항** 기본값: `auto`  | 
| loss\$1insensitivity |  엡실론의 영향을 받지 않는 손실 유형에 대한 파라미터. 훈련 및 지표 검증 도중 이 값보다 작은 모든 오차는 0으로 간주됩니다. **선택 사항** 유효한 값: 양의 부동 소수점 정수 기본 값: 0.01   | 
| lr\$1scheduler\$1factor |  매 `lr_scheduler_step` 하이퍼파라미터마다 학습률은 이 수치만큼 감소합니다. `use_lr_scheduler` 하이퍼파라미터가 `true`으로 설정된 경우에만 적용됩니다. **선택 사항** 유효한 값: `auto` 또는 0부터 1 사이의 양의 부동 소수점 정수 기본값: `auto`  | 
| lr\$1scheduler\$1minimum\$1lr |  학습률은 `lr_scheduler_minimum_lr`에 대해 설정된 값 미만으로 절대 감소하지 않습니다. `use_lr_scheduler` 하이퍼파라미터가 `true`으로 설정된 경우에만 적용됩니다. **선택 사항** 유효한 값: `auto` 또는 양의 부동 소수점 정수 기본값: `auto`  | 
| lr\$1scheduler\$1step |  학습률 감소 사이의 단계 수. `use_lr_scheduler` 하이퍼파라미터가 `true`으로 설정된 경우에만 적용됩니다. **선택 사항** 유효한 값: `auto` 또는 양의 정수 기본값: `auto`  | 
| margin |  `hinge_loss` 함수의 마진. **선택 사항** 유효한 값: 양의 부동 소수점 정수 기본값: 1.0  | 
| mini\$1batch\$1size |  데이터 반복자의 미니 배치당 관측치의 수. **선택 사항** 유효한 값: 양수 기본값: 1000  | 
| momentum |  `sgd` 옵티마이저의 모멘텀. **선택 사항** 유효한 값: `auto` 또는 0부터 1.0 사이의 부동 소수점 정수 기본값: `auto`  | 
| normalize\$1data |  훈련 전에 특징 데이터를 정규화합니다. 데이터 정규화는 각 특징에 대해 평균 값 0을 갖도록 이동하고 단위 표준편차를 갖도록 조정합니다. **선택 사항** 유효값: `auto`, `true` 또는 `false` 기본값: `true`  | 
| normalize\$1label |  레이블을 정규화합니다. 레이블 정규화는 평균 값 0을 갖도록 레이블을 이동하고 단위 표준편차를 갖도록 조정합니다. `auto` 기본값은 회귀 문제에서 레이블을 정규화하지만 분류 문제에서는 정규화하지 않습니다. 분류 문제의 경우 `normalize_label` 하이퍼파라미터를 `true`로 설정하면 알고리즘에서 무시됩니다. **선택 사항** 유효값: `auto`, `true` 또는 `false` 기본값: `auto`  | 
| num\$1calibration\$1samples |  (최적의 임계값을 찾은 경우) 모델 보정에 사용할 검증 데이터 세트의 관측치 수. **선택 사항** 유효한 값: `auto` 또는 양의 정수 기본값: `auto`  | 
| num\$1models |  병렬로 훈련할 모델 수. 기본값 `auto`의 경우 알고리즘이 훈련할 병렬 모델의 수를 결정합니다. 주어진 훈련 파라미터(정규화, 옵티마이저, 손실)에 따라 한 모델이 훈련되고, 나머지는 근접 파라미터에 따라 훈련됩니다. **선택 사항** 유효한 값: `auto` 또는 양의 정수 기본값: `auto`  | 
| num\$1point\$1for\$1scaler |  정규화 또는 비편향항 계산에 사용할 데이터 포인트의 수. **선택 사항** 유효한 값: 양수 기본값: 10,000  | 
| optimizer |  사용할 최적화 알고리즘. **선택 사항** 유효한 값: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/ll_hyperparameters.html) 기본값: `auto`. `auto`의 기본 설정은 `adam`입니다.  | 
| positive\$1example\$1weight\$1mult |  바이너리 분류자 훈련 시 양수 예제에 할당된 가중치. 음수 예제 가중치는 1로 고정됩니다. 이 알고리즘에서 음수 대 양수 예제 분류의 오차가 훈련 손실에 동일한 영향을 미치도록 가중치를 선택하려는 경우 `balanced`를 지정합니다.** 이 알고리즘이 성능을 최적화하는 가중치를 선택하도록 하려는 경우 `auto`를 지정합니다. **선택 사항** 유효한 값: `balanced`, `auto` 또는 양의 부동 소수점 정수 기본값: 1.0  | 
| quantile |  분위 손실에 대한 분위. 분위 q의 경우 이 모델은 `true_label`의 값을 가능성 q를 사용한 예측보다 크도록 예측을 생성하려고 합니다. **선택 사항** 유효한 값: 0부터 1 사이의 부동 소수점 정수 기본 값: 0.5  | 
| target\$1precision |  대상 정밀도. `binary_classifier_model_selection_criteria`가 `recall_at_target_precision`인 경우 재현율이 최대화된 상태에서는 정밀도가 이 값에서 유지됩니다. **선택 사항** 유효한 값: 0부터 1.0 사이의 부동 소수점 정수 기본값: 0.8  | 
| target\$1recall |  대상 재현율. `binary_classifier_model_selection_criteria`가 `precision_at_target_recall`인 경우 정밀도가 최대화된 상태에서는 재현율이 이 값에서 유지됩니다. **선택 사항** 유효한 값: 0부터 1.0 사이의 부동 소수점 정수 기본값: 0.8  | 
| unbias\$1data |  평균이 0이 되도록 훈련 전 특징을 비편향화합니다. `use_bias` 하이퍼파라미터가 `true`로 설정되어 있으므로 기본적으로 데이터는 비편향화됩니다. **선택 사항** 유효값: `auto`, `true` 또는 `false` 기본값: `auto`  | 
| unbias\$1label |  평균이 0이 되도록 훈련 전 레이블을 비편향화합니다. `use_bias` 하이퍼파라미터가 `true`로 설정된 경우에만 회귀에 적용됩니다. **선택 사항** 유효값: `auto`, `true` 또는 `false` 기본값: `auto`  | 
| use\$1bias |  모델이 편향항을 포함해야 할지 여부를 지정합니다. 편향항은 선형 방정식의 절편항입니다. **선택 사항** 유효한 값: `true` 또는 `false` 기본값: `true`  | 
| use\$1lr\$1scheduler |  학습률에 대한 스케줄러를 사용할지 여부. 스케줄러를 사용하려는 경우 `true`를 지정합니다. **선택 사항** 유효한 값: `true` 또는 `false` 기본값: `true`  | 
| wd |  가중치 감소 파라미터(L2 정규화 파라미터라고도 함). L2 정규화를 사용하지 않으려면 이 값을 0으로 설정합니다. **선택 사항** 유효한 값: `auto` 또는 음수가 아닌 부동 소수점 정수 기본값: `auto`  | 

# 선형 학습자 모델 튜닝
<a name="linear-learner-tuning"></a>

하이퍼파라미터 튜닝이라고도 하는 자동 모델 튜닝은 데이터세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 알고리즘에서 계산하는 지표 중에서 목표 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 목표 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

또한 Linear Learner 알고리즘은 여기서 설명하는 자동 모델 튜닝 기능과 별도로 하이퍼파라미터 튜닝을 위한 내부 메커니즘을 가지고 있습니다. 기본적으로 Linear Learner 알고리즘은 여러 모델을 병렬로 훈련해 하이퍼파라미터를 튜닝합니다. 자동 모델 튜닝을 사용하는 경우 Linear Learner 내부 튜닝 메커니즘은 자동으로 꺼집니다. 병렬 모델 수 `num_models`는 1로 설정됩니다. 이 알고리즘에서는 `num_models`에 대해 설정한 모든 값이 무시됩니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## 선형 학습자 알고리즘으로 계산되는 지표
<a name="linear-learner-metrics"></a>

선형 학습자 알고리즘은 다음 표에 나오는 지표를 보고합니다. 이들 지표는 훈련 중 계산됩니다. 이러한 지표 중 하나를 목표 지표로 선택합니다. 과적합을 피하기 위해 훈련 지표 대신 검증 지표를 기준으로 모델을 튜닝하는 것이 좋습니다.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| test:absolute\$1loss |  테스트 데이터 세트에 대한 최종 모델의 절대 손실. 이 목표 지표는 회귀에만 유효합니다.  |  최소화  | 
| test:binary\$1classification\$1accuracy |  테스트 데이터 세트에 대한 최종 모델의 정확도. 이 목표 지표는 바이너리 분류에만 유효합니다.  |  최대화  | 
| test:binary\$1f\$1beta |  테스트 데이터 세트에 대한 최종 모델의 F-베타 점수. 기본적으로, 이 점수는 정밀도와 재현율의 조화 평균인 F1 점수입니다. 이 목표 지표는 바이너리 분류에만 유효합니다.  |  최대화  | 
| test:dcg |  테스트 데이터 세트에서 최종 모델의 할인된 누적 이득입니다. 이 목표 지표는 멀티클래스 분류에만 유효합니다.  |  최대화  | 
| test:macro\$1f\$1beta |  테스트 데이터 세트에 대한 최종 모델의 F-베타 점수. 이 목표 지표는 멀티클래스 분류에만 유효합니다.  |  최대화  | 
| test:macro\$1precision |  테스트 데이터 세트에 대한 최종 모델의 정밀도 점수. 이 목표 지표는 멀티클래스 분류에만 유효합니다.  |  최대화  | 
| test:macro\$1recall |  테스트 데이터 세트에 대한 최종 모델의 재현율 점수. 이 목표 지표는 멀티클래스 분류에만 유효합니다.  |  최대화  | 
| test:mse |  테스트 데이터 세트에 대한 최종 모델의 평균 제곱 오차. 이 목표 지표는 회귀에만 유효합니다.  |  최소화  | 
| test:multiclass\$1accuracy |  테스트 데이터 세트에 대한 최종 모델의 정확도. 이 목표 지표는 멀티클래스 분류에만 유효합니다.  |  최대화  | 
| test:multiclass\$1top\$1k\$1accuracy |  테스트 데이터 세트에서 예측된 상위 k개 레이블 간의 정확도입니다. 이 측정치를 목표로 선택하는 경우 `accuracy_top_k` 하이퍼파라미터를 사용하여 k 값을 설정하는 것이 좋습니다. 이 목표 지표는 멀티클래스 분류에만 유효합니다.  |  최대화  | 
| test:objective\$1loss |  모델 훈련 후 테스트 데이터 세트에 대한 목표 손실 함수의 평균값. 기본적으로 이러한 손실은 바이너리 분류의 경우 로지스틱 손실이고, 회귀의 경우 제곱 손실입니다. 이러한 손실을 다른 유형으로 설정하려면 `loss` 하이퍼파라미터를 사용하세요.  |  최소화  | 
| test:precision |  테스트 데이터 세트에 대한 최종 모델의 정밀도. 이 지표를 목표 지표로 선택한 경우에는 `binary_classifier_model_selection` 하이퍼파라미터를 `precision_at_target_recall`로 설정하고 `target_recall` 하이퍼파라미터에 대한 값을 설정하여 목표 재현율을 설정하는 것이 좋습니다. 이 목표 지표는 바이너리 분류에만 유효합니다.  |  최대화  | 
| test:recall |  테스트 데이터 세트에 대한 최종 모델의 재현율. 이 지표를 목표 지표로 선택한 경우에는 `binary_classifier_model_selection` 하이퍼파라미터를 `recall_at_target_precision`으로 설정하고 `target_precision` 하이퍼파라미터에 대한 값을 설정하여 목표 정밀도를 설정하는 것이 좋습니다. 이 목표 지표는 바이너리 분류에만 유효합니다.  |  최대화  | 
| test:roc\$1auc\$1score |  테스트 데이터 세트에서 최종 모델의 수신 작동 특성 곡선(ROC 곡선) 아래 영역. 이 목표 지표는 바이너리 분류에만 유효합니다.  |  최대화  | 
| validation:absolute\$1loss |  검증 데이터 세트에 대한 최종 모델의 절대 손실. 이 목표 지표는 회귀에만 유효합니다.  |  최소화  | 
| validation:binary\$1classification\$1accuracy |  검증 데이터 세트에 대한 최종 모델의 정확도. 이 목표 지표는 바이너리 분류에만 유효합니다.  |  최대화  | 
| validation:binary\$1f\$1beta |  검증 데이터 세트에 대한 최종 모델의 F-베타 점수. 기본적으로, F-베타 점수는 `validation:precision` 및 `validation:recall` 지표의 조화 평균인 F1 점수입니다. 이 목표 지표는 바이너리 분류에만 유효합니다.  |  최대화  | 
| validation:dcg |  검증 데이터 세트에서 최종 모델의 할인된 누적 이득입니다. 이 목표 지표는 멀티클래스 분류에만 유효합니다.  |  최대화  | 
| validation:macro\$1f\$1beta |  검증 데이터 세트에 대한 최종 모델의 F-베타 점수. 이 목표 지표는 멀티클래스 분류에만 유효합니다.  |  최대화  | 
| validation:macro\$1precision |  검증 데이터 세트에 대한 최종 모델의 정밀도 점수. 이 목표 지표는 멀티클래스 분류에만 유효합니다.  |  최대화  | 
| validation:macro\$1recall |  검증 데이터 세트에 대한 최종 모델의 재현율 점수. 이 목표 지표는 멀티클래스 분류에만 유효합니다.  |  최대화  | 
| validation:mse |  검증 데이터 세트에 대한 최종 모델의 평균 제곱 오차. 이 목표 지표는 회귀에만 유효합니다.  |  최소화  | 
| validation:multiclass\$1accuracy |  검증 데이터 세트에 대한 최종 모델의 정확도. 이 목표 지표는 멀티클래스 분류에만 유효합니다.  |  최대화  | 
| validation:multiclass\$1top\$1k\$1accuracy |  검증 데이터 세트에서 예측된 상위 k개 레이블 간의 정확도입니다. 이 측정치를 목표로 선택하는 경우 `accuracy_top_k` 하이퍼파라미터를 사용하여 k 값을 설정하는 것이 좋습니다. 이 목표 지표는 멀티클래스 분류에만 유효합니다.  |  최대화  | 
| validation:objective\$1loss |  매 epoch마다 검증 데이터 세트에 대한 목표 손실 함수의 평균값. 기본적으로 이러한 손실은 바이너리 분류의 경우 로지스틱 손실이고, 회귀의 경우 제곱 손실입니다. 이러한 손실을 다른 유형으로 설정하려면 `loss` 하이퍼파라미터를 사용하세요.  |  최소화  | 
| validation:precision |  검증 데이터 세트에 대한 최종 모델의 정확도. 이 지표를 목표 지표로 선택한 경우에는 `binary_classifier_model_selection` 하이퍼파라미터를 `precision_at_target_recall`로 설정하고 `target_recall` 하이퍼파라미터에 대한 값을 설정하여 목표 재현율을 설정하는 것이 좋습니다. 이 목표 지표는 바이너리 분류에만 유효합니다.  |  최대화  | 
| validation:recall |  검증 데이터 세트에 대한 최종 모델의 재현율. 이 지표를 목표 지표로 선택한 경우에는 `binary_classifier_model_selection` 하이퍼파라미터를 `recall_at_target_precision`으로 설정하고 `target_precision` 하이퍼파라미터에 대한 값을 설정하여 목표 정밀도를 설정하는 것이 좋습니다. 이 목표 지표는 바이너리 분류에만 유효합니다.  |  최대화  | 
| validation:rmse |  검증 데이터 세트에 대한 최종 모델의 평균 제곱근 오차. 이 목표 지표는 회귀에만 유효합니다.  |  최소화  | 
| validation:roc\$1auc\$1score |  검증 데이터 세트에서 최종 모델의 수신 작동 특성 곡선(ROC 곡선) 아래 영역. 이 목표 지표는 바이너리 분류에만 유효합니다.  |  최대화  | 

## 선형 학습자 하이퍼파라미터 튜닝
<a name="linear-learner-tunable-hyperparameters"></a>

다음 하이퍼파라미터를 사용하여 Linear Learner 모델을 튜닝할 수 있습니다.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| wd |  `ContinuousParameterRanges`  |  `MinValue: ``1e-7`, `MaxValue`: `1`  | 
| l1 |  `ContinuousParameterRanges`  |  `MinValue`: `1e-7`, `MaxValue`: `1`  | 
| learning\$1rate |  `ContinuousParameterRanges`  |  `MinValue`: `1e-5`, `MaxValue`: `1`  | 
| mini\$1batch\$1size |  `IntegerParameterRanges`  |  `MinValue`: `100`, `MaxValue`: `5000`  | 
| use\$1bias |  `CategoricalParameterRanges`  |  `[True, False]`  | 
| positive\$1example\$1weight\$1mult |  `ContinuousParameterRanges`  |  `MinValue`: 1e-5, `MaxValue`: `1e5`  | 

# 선형 학습자 응답 형식
<a name="LL-in-formats"></a>

## JSON 응답 형식
<a name="LL-json"></a>

모든 Amazon SageMaker AI 기본 제공 알고리즘은 [공통 데이터 형식 - 추론](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)에서 설명하는 공통 입력 추론 형식을 따릅니다. 다음은 SageMaker AI 선형 학습자 알고리즘에 사용 가능한 출력 형식입니다.

**바이너리 분류**

```
let response =   {
    "predictions":    [
        {
            "score": 0.4,
            "predicted_label": 0
        } 
    ]
}
```

**멀티클래스 분류**

```
let response =   {
    "predictions":    [
        {
            "score": [0.1, 0.2, 0.4, 0.3],
            "predicted_label": 2
        } 
    ]
}
```

**회귀**

```
let response =   {
    "predictions":    [
        {
            "score": 0.4
        } 
    ]
}
```

## JSONLINES 응답 형식
<a name="LL-jsonlines"></a>

**바이너리 분류**

```
{"score": 0.4, "predicted_label": 0}
```

**멀티클래스 분류**

```
{"score": [0.1, 0.2, 0.4, 0.3], "predicted_label": 2}
```

**회귀**

```
{"score": 0.4}
```

## RECORDIO 응답 형식
<a name="LL-recordio"></a>

**바이너리 분류**

```
[
    Record = {
        features = {},
        label = {
            'score': {
                keys: [],
                values: [0.4]  # float32
            },
            'predicted_label': {
                keys: [],
                values: [0.0]  # float32
            }
        }
    }
]
```

**멀티클래스 분류**

```
[
    Record = {
    "features": [],
    "label":    {
            "score":  {
                    "values":   [0.1, 0.2, 0.3, 0.4]   
            },
            "predicted_label":  {
                    "values":   [3]
            }
       },
    "uid":  "abc123",
    "metadata": "{created_at: '2017-06-03'}"
   }
]
```

**회귀**

```
[
    Record = {
        features = {},
        label = {
            'score': {
                keys: [],
                values: [0.4]  # float32
            }   
        }
    }
]
```

# TabTransformer
<a name="tabtransformer"></a>

[TabTransformer](https://arxiv.org/abs/2012.06678)는 새로운 심층 표 형식의 지도 학습용 데이터 모델링 아키텍처입니다. TabTransformer 아키텍처는 자가 주의 기반 Transformer로 빌드되었습니다. Transformer 계층은 범주형 기능의 임베딩을 강력한 컨텍스트 임베딩으로 변환하여 예측 정확도를 높입니다. 뿐만 아니라 TabTransformer에서 학습한 컨텍스트 임베딩은 누락된 데이터 기능과 잡음이 많은 데이터 기능 모두에 대해 매우 강력하며, 더 우수한 해석력을 제공합니다. 이 페이지에는 Amazon EC2 인스턴스 권장 사항 및 TabTransformer용 샘플 노트북에 대한 정보가 포함되어 있습니다.

# SageMaker AI TabTransformer 사용 방법
<a name="tabtransformer-modes"></a>

TabTransformer를 Amazon SageMaker AI 기본 제공 알고리즘으로 사용할 수 있습니다. 다음 섹션에서는 SageMaker Python SDK로 TabTransformer를 사용하는 방법을 설명합니다. Amazon SageMaker Studio Classic UI에서 TabTransformer를 사용하는 방법에 대한 자세한 내용은 [SageMaker JumpStart 사전 훈련된 모델](studio-jumpstart.md) 섹션을 참조하세요.
+ **TabTransformer를 기본 제공 알고리즘으로 사용**

  TabTransformer 기본 제공 알고리즘을 사용하여 다음 코드 예제와 같이 TabTransformer 훈련 컨테이너를 빌드하세요. SageMaker AI `image_uris.retrieve` API(또는 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 버전 2를 사용할 경우 `get_image_uri` API)를 사용하여 TabTransformer 내장 알고리즘 이미지 URI를 자동으로 찾아낼 수 있습니다.

  TabTransformer 이미지 URI를 지정한 후, TabTransformer 컨테이너를 사용하여 SageMaker AI Estimator API를 사용하는 예측기를 구문화하고 훈련 작업을 시작할 수 있습니다. TabTransformer 기본 제공 알고리즘은 스크립트 모드로 실행됩니다. 하지만 훈련 스크립트는 자동으로 제공되므로 교체할 필요가 없습니다. 스크립트 모드를 이용하여 SageMaker 훈련 작업을 생성한 경험이 많다면 사용자 본인의 TabTransformer 훈련 스크립트를 포함시킬 수 있습니다.

  ```
  from sagemaker import image_uris, model_uris, script_uris
  
  train_model_id, train_model_version, train_scope = "pytorch-tabtransformerclassification-model", "*", "training"
  training_instance_type = "ml.p3.2xlarge"
  
  # Retrieve the docker image
  train_image_uri = image_uris.retrieve(
      region=None,
      framework=None,
      model_id=train_model_id,
      model_version=train_model_version,
      image_scope=train_scope,
      instance_type=training_instance_type
  )
  
  # Retrieve the training script
  train_source_uri = script_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, script_scope=train_scope
  )
  
  train_model_uri = model_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, model_scope=train_scope
  )
  
  # Sample training data is available in this bucket
  training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
  training_data_prefix = "training-datasets/tabular_binary/"
  
  training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/train"
  validation_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/validation"
  
  output_bucket = sess.default_bucket()
  output_prefix = "jumpstart-example-tabular-training"
  
  s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"
  
  from sagemaker import hyperparameters
  
  # Retrieve the default hyperparameters for training the model
  hyperparameters = hyperparameters.retrieve_default(
      model_id=train_model_id, model_version=train_model_version
  )
  
  # [Optional] Override default hyperparameters with custom values
  hyperparameters[
      "n_epochs"
  ] = "50"
  print(hyperparameters)
  
  from sagemaker.estimator import Estimator
  from sagemaker.utils import name_from_base
  
  training_job_name = name_from_base(f"built-in-algo-{train_model_id}-training")
  
  # Create SageMaker Estimator instance
  tabular_estimator = Estimator(
      role=aws_role,
      image_uri=train_image_uri,
      source_dir=train_source_uri,
      model_uri=train_model_uri,
      entry_point="transfer_learning.py",
      instance_count=1,
      instance_type=training_instance_type,
      max_run=360000,
      hyperparameters=hyperparameters,
      output_path=s3_output_location
  )
  
  # Launch a SageMaker Training job by passing the S3 path of the training data
  tabular_estimator.fit(
      {
          "training": training_dataset_s3_path,
          "validation": validation_dataset_s3_path,
      }, logs=True, job_name=training_job_name
  )
  ```

  TabTransformer를 기본 제공 알고리즘으로 설정하는 방법에 대한 자세한 내용은 다음 노트북 예제를 참조하세요.
  + [Amazon SageMaker AI TabTransformer 알고리즘을 이용한 테이블 형식 분류](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/tabtransformer_tabular/Amazon_Tabular_Classification_TabTransformer.ipynb)
  + [Amazon SageMaker AI TabTransformer 알고리즘을 이용한 테이블 형식 회귀](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/tabtransformer_tabular/Amazon_Tabular_Regression_TabTransformer.ipynb)

# TabTransformer 알고리즘의 입력 및 출력 인터페이스
<a name="InputOutput-TabTransformer"></a>

TabTransformer는 표 형식 데이터에서 작동합니다. 행은 관측치를 나타내고, 1개 열은 대상 변수 또는 레이블을 나타내며, 나머지 열은 특징을 나타냅니다.

TabTransformer의 SageMaker AI 실행 기능은 다음과 같은 훈련 및 추론용 CSV를 지원합니다.
+ **훈련 ContentType**의 경우 유효한 입력은 *text/csv*여야 합니다.
+ **추론 ContentType**의 경우 유효한 입력은 *text/csv*여야 합니다.

**참고**  
CSV 훈련의 경우 알고리즘은 대상 변수가 첫 번째 열에 있고 CSV에는 헤더 레코드가 없다고 추정합니다.  
CSV 추론의 경우 알고리즘은 CSV 입력에 레이블 열이 없다고 추정합니다.

**훈련 데이터, 검증 데이터 및 범주형 기능의 입력 형식**

TabTransformer 모델에 입력할 훈련 데이터의 형식을 지정하는 방법을 기억해 두세요. 훈련 데이터 및 검증 데이터를 포함하는 Amazon S3 버킷의 경로를 제공해야 합니다. 범주형 기능 목록을 포함시킬 수도 있습니다. `training` 및 `validation` 채널을 모두 사용하여 입력 데이터를 제공하세요 또는 `training` 채널만 사용해도 됩니다.

**`training` 및 `validation` 채널을 모두 사용**

`training` 채널용과 `validation` 채널용 두 개의 S3 경로를 통해 입력 데이터를 제공할 수 있습니다. 각 S3 경로는 하나 이상의 CSV 파일을 가리키는 S3 접두사이거나 특정 CSV 파일 하나를 가리키는 전체 S3 경로일 수 있습니다. 대상 변수는 CSV 파일의 첫 번째 열에 있어야 합니다. 나머지 열에는 예측 변수(특징)가 표시되어야 합니다. `training` 채널 또는 `validation` 채널에 대해 여러 개의 CSV 파일이 제공되는 경우, TabTransformer 알고리즘이 해당 파일들을 서로 연결합니다. 검증 데이터는 각 부스팅 반복 종료 시 검증 점수를 계산하는 데 사용됩니다. 유효성 검증 점수가 더 이상 향상되지 않으면 조기 중지가 적용됩니다.

예측 변수에 범주형 기능이 포함된 경우 훈련 데이터 파일 또는 파일이 있는 위치에 이름이 `categorical_index.json`인 JSON 파일을 제공할 수 있습니다. 범주형 기능을 위한 JSON 파일을 제공하는 경우 `training` 채널은 특정 CSV 파일이 아닌 S3 접두사를 가리켜야 합니다. 이 파일은 키가 문자열 `"cat_index_list"`이고 값이 고유 정수 목록인 Python 사전을 포함해야 합니다. 값 목록의 각 정수는 훈련 데이터 CSV 파일에 있는 해당 범주형 기능의 열 인덱스를 나타내야 합니다. 각 값은 양의 정수(0은 목표 값을 나타내므로 0보다 커야 함), `Int32.MaxValue`(2147483647) 미만, 총 열 수보다 작아야 합니다. 범주형 인덱스 JSON 파일은 하나만 있어야 합니다.

**`training` 채널만 사용**:

`training` 채널의 단일 S3 경로를 통해 입력 데이터를 제공할 수도 있습니다. 이 S3 경로는 하나 이상의 CSV 파일이 들어 있는 `training/`이라는 이름의 하위 디렉터리가 있는 디렉터리를 가리켜야 합니다. 선택적으로 `validation/`이라는 동일한 위치에 하나 이상의 CSV 파일이 있는 다른 하위 디렉토리를 포함할 수 있습니다. 검증 데이터가 제공되지 않는 경우 훈련 데이터의 20%가 무작위로 샘플링되어 검증 데이터로 사용됩니다. 예측 변수에 범주형 기능이 포함되어 있다면 데이터 하위 디렉터리와 같은 위치에 `categorical_index.json`이라는 이름의 JSON 파일을 제공할 수 있습니다.

**참고**  
CSV 훈련 입력 모드의 경우, 알고리즘에 대해 사용 가능한 전체 메모리(인스턴스 수 \$1 `InstanceType`의 가용 메모리)가 훈련 데이터세트를 담을 수 있어야 합니다.

## TabTransformer 알고리즘에 대한 Amazon EC2 인스턴스 권장 사항
<a name="Instance-TabTransformer"></a>

SageMaker AI TabTransformer는 단일 인스턴스 CPU 및 단일 인스턴스 GPU 훈련을 지원합니다. 높은 인스턴스당 비용에도 불구하고 GPU는 더욱 빠르게 교육하여 더욱 효율적입니다. GPU 훈련을 활용하려면 인스턴스 유형을 GPU 인스턴스 중 하나로 지정하세요. (예: P3) SageMaker AI TabTransformer는 현재 여러 GPU 훈련을 지원하지 않습니다.

## TabTransformer 샘플 노트북
<a name="tabtransformer-sample-notebooks"></a>

다음 표에는 Amazon SageMaker AI TabTransformer 알고리즘의 다양한 사용 사례를 다루는 여러 가지 샘플 노트북이 요약되어 있습니다.


****  

| **노트북 제목** | **설명** | 
| --- | --- | 
|  [Amazon SageMaker AI TabTransformer 알고리즘을 이용한 테이블 형식 분류](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/tabtransformer_tabular/Amazon_Tabular_Classification_TabTransformer.ipynb)  |  이 노트북은 Amazon SageMaker AI TabTransformer 알고리즘을 이용하여 테이블 형식 분류 모델을 훈련하고 호스팅하는 방법을 보여줍니다.  | 
|  [Amazon SageMaker AI TabTransformer 알고리즘을 이용한 테이블 형식 회귀](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/tabtransformer_tabular/Amazon_Tabular_Regression_TabTransformer.ipynb)  |  이 노트북은 Amazon SageMaker AI TabTransformer 알고리즘을 이용하여 테이블 형식 회귀 모델을 훈련하고 호스팅하는 방법을 보여줍니다.  | 

SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 액세스하는 방법은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열고 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인하세요. 노트북을 열려면 **사용** 탭을 선택한 후 **사본 생성**을 선택합니다.

# TabTransformer의 작동 방식
<a name="tabtransformer-HowItWorks"></a>

TabTransformer는 새로운 심층 표 형식의 지도 학습용 데이터 모델링 아키텍처입니다. TabTransformer는 자가 주의 기반 Transformer로 빌드되었습니다. Transformer 계층은 범주형 기능의 임베딩을 강력한 컨텍스트 임베딩으로 변환하여 예측 정확도를 높입니다. 뿐만 아니라 TabTransformer에서 학습한 컨텍스트 임베딩은 누락된 데이터 기능과 잡음이 많은 데이터 기능 모두에 대해 매우 강력하며, 더 우수한 해석력을 제공합니다.

TabTransformer는 다양한 데이터 유형, 관계, 분포, 미세 조정이 가능한 다수의 하이퍼파라미터를 강력하게 처리하기 때문에 기계 학습 경쟁에서 우수한 성능을 발휘합니다. 회귀, 분류(바이너리 및 멀티클래스) 및 순위 결정 문제에 TabTransformer를 사용할 수 있습니다.

다음 다이어그램은 TabTransformer 아키텍처를 나타냅니다.

![\[TabTransformer의 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/tabtransformer_illustration.png)


자세한 내용은 *[TabTransformer: 컨텍스트 임베딩을 이용한 표 형식 데이터 모델링](https://arxiv.org/abs/2012.06678)*을 참조하세요.

# TabTransformer 하이퍼파라미터
<a name="tabtransformer-hyperparameters"></a>

다음 표에는 Amazon SageMaker AI TabTransformer 알고리즘에 필요하거나 가장 흔하게 사용되는 하이퍼파라미터의 하위 세트가 포함되어 있습니다. 이들은 사용자가 데이터를 통해 모델 파라미터를 쉽게 예측하기 위해 설정하는 파라미터입니다. SageMaker AI TabTransformer 알고리즘은 오픈 소스 [TabTransformer](https://github.com/jrzaurin/pytorch-widedeep) 패키지를 구현한 것입니다.

**참고**  
기본 하이퍼파라미터는 [TabTransformer 샘플 노트북](tabtransformer.md#tabtransformer-sample-notebooks)의 예제 데이터세트를 기준으로 정해집니다.

SageMaker AI TabTransformer 알고리즘은 분류 문제의 유형에 따라 평가 지표와 목표 함수를 자동으로 선택합니다. TabTransformer 알고리즘은 데이터의 레이블 수에 따라 분류 문제의 유형을 감지합니다. 회귀 문제의 경우 평가 지표는 r 제곱이고, 목표 함수는 평균제곱오차입니다. 바이너리 분류 문제의 경우 평가 지표와 목표 함수 둘 다 바이너리 교차 엔트로피입니다. 멀티클래스 분류 문제의 경우 평가 지표와 목표 함수 둘 다 멀티클래스 교차 엔트로피입니다.

**참고**  
TabTransformer 평가 지표 및 목표 함수는 현재 하이퍼파라미터로 사용할 수 없습니다. 대신 SageMaker AI TabTransformer 내장 알고리즘은 레이블 열에 표시된 고유 정수의 개수에 따라 분류 작업 유형(회귀, 바이너리 또는 멀티클래스)을 자동으로 감지하고 평가 지표와 목표 함수를 할당합니다.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| n\$1epochs |  심층 신경망을 훈련시키는 데 필요한 에포크의 수. 유횻값: 정수, 범위: 양의 정수. 기본값: `5`.  | 
| patience |  마지막 `patience` 라운드에서 한 검증 데이터 포인트 중 하나의 지표가 개선되지 않으면 훈련이 중단됩니다. 유횻값: 정수, 범위: (`2`, `60`). 기본값: `10`.  | 
| learning\$1rate |  각 훈련 예제 배치를 검토한 후 모델 가중치가 업데이트되는 비율입니다. 유횻값: 부동 소수점, 범위: 양의 부동 소수점 숫자. 기본값: `0.001`.  | 
| batch\$1size |  네트워크를 통해 전파된 예제의 수. 유횻값: 정수, 범위: (`1`, `2048`). 기본값: `256`.  | 
| input\$1dim |  범주형 열 및/또는 연속형 열을 인코딩하기 위한 임베딩의 차원. 유횻값: 문자열, 다음 중 하나: `"16"`, `"32"`, `"64"`, `"128"`, `"256"` 또는 `"512"`. 기본값: `"32"`.  | 
| n\$1blocks |  Transformer 인코더 블록의 수. 유횻값: 정수, 범위: (`1`, `12`). 기본값: `4`.  | 
| attn\$1dropout |  멀티 헤드 어텐션 계층에 적용되는 드롭아웃 비율. 유효한 값: 부동 소수점, 범위: (`0`, `1`). 기본값: `0.2`.  | 
| mlp\$1dropout |  인코더 계층 이내의 FeedForward 네트워크와 Transformer 인코더 상단의 최종 MLP 계층에 적용되는 드롭아웃 비율. 유횻값: 부동 소수점, 범위: (`0`, `1`). 기본값: `0.1`.  | 
| frac\$1shared\$1embed |  하나의 특정 열에 대해 서로 다른 모든 범주에서 공유하는 임베딩의 비율. 유효한 값: 부동 소수점, 범위: (`0`, `1`). 기본값: `0.25`.  | 

# TabTransformer 모델 튜닝
<a name="tabtransformer-tuning"></a>

자동 모델 튜닝은 하이퍼파라미터 튜닝이라고도 하며, 훈련 데이터세트 및 검증 데이터세트에 대한 다양한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾는 기능입니다.** 모델 튜닝은 다음 하이퍼파라미터에 초점을 맞춥니다.

**참고**  
학습 목표 함수 및 평가 지표는 둘 다 분류 작업 유형(레이블 열에 표시된 고유 정수의 개수로 결정됨)에 따라 자동으로 할당됩니다. 자세한 내용은 [TabTransformer 하이퍼파라미터](tabtransformer-hyperparameters.md) 섹션을 참조하세요.
+ 모델 훈련 중에 최적화하기 위한 학습 목표 함수
+ 검증 중에 모델 성능을 평가하는 데 사용되는 평가 지표
+ 모델을 자동 튜닝할 때 사용할 하이퍼파라미터 세트와 각 값의 범위

자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 선택된 평가 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

**참고**  
TabTransformer용 자동 모델 튜닝은 Amazon SageMaker SDK에서만 사용할 수 있으며, SageMaker AI 콘솔에서는 사용할 수 없습니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## TabTransformer 알고리즘으로 계산한 평가 지표
<a name="tabtransformer-metrics"></a>

SageMaker AI TabTransformer 알고리즘은 모델 검증에 사용할 다음 지표를 계산합니다. 평가 지표는 분류 작업 유형(레이블 열에 표시된 고유 정수의 개수로 결정됨)에 따라 자동으로 할당됩니다.


| 지표 이름 | 설명 | 최적화 방향 | Regex 패턴 | 
| --- | --- | --- | --- | 
| r2 | r 제곱 | 최대화 | "metrics=\$1'r2': (\$1\$1S\$1)\$1" | 
| f1\$1score | 바이너리 교차 엔트로피 | 최대화 | "metrics=\$1'f1': (\$1\$1S\$1)\$1" | 
| accuracy\$1score | 멀티클래스 교차 엔트로피 | 최대화 | "metrics=\$1'accuracy': (\$1\$1S\$1)\$1" | 

## 튜닝 가능한 TabTransformer 하이퍼파라미터
<a name="tabtransformer-tunable-hyperparameters"></a>

다음 하이퍼파라미터를 사용하여 TabTransformer 모델을 튜닝하세요. TabTransformer 평가 지표의 최적화에 가장 큰 영향을 미치는 하이퍼파라미터는 `learning_rate`, `input_dim`, `n_blocks`, `attn_dropout`, `mlp_dropout`, `frac_shared_embed`입니다. 모든 TabTransformer 하이퍼파라미터의 목록은 [TabTransformer 하이퍼파라미터](tabtransformer-hyperparameters.md)를 참조하세요.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| learning\$1rate | ContinuousParameterRanges | 최솟값: 0.001, 최댓값: 0.01 | 
| input\$1dim | CategoricalParameterRanges | [16, 32, 64, 128, 256, 512] | 
| n\$1blocks | IntegerParameterRanges | 최솟값: 1, 최댓값: 12 | 
| attn\$1dropout | ContinuousParameterRanges | 최솟값: 0.0, 최댓값: 0.8 | 
| mlp\$1dropout | ContinuousParameterRanges | 최솟값: 0.0, 최댓값: 0.8 | 
| frac\$1shared\$1embed | ContinuousParameterRanges | MinValue: 0.0, MaxValue: 0.5 | 

# Amazon SageMaker AI를 사용한 XGBoost 알고리즘
<a name="xgboost"></a>

[XGBoost](https://github.com/dmlc/xgboost)(eXtreme Gradient Boosting)는 그라디언트 부스팅 트리 알고리즘에서 유명하고 효율적인 오픈 소스 구현입니다. 그라디언트 부스팅은 더욱 단순한 모델 세트의 여러 추정치를 결합하여 대상 변수를 정확하게 예측하려 시도하는 지도 학습 알고리즘입니다. XGBoost 알고리즘은 다음과 같은 이유로 기계 학습 경쟁에서 잘 작동합니다.
+ 다양한 데이터 유형, 관계, 배포를 강력하게 처리합니다.
+ 미세 조정할 수 있는 다양한 하이퍼파라미터입니다.

회귀, 분류(바이너리 및 멀티클래스) 및 순위 결정 관련 문제에 XGBoost를 사용할 수 있습니다.

XGBoost 알고리즘의 새 릴리스를 다음 중 하나로 사용할 수 있습니다.
+ Amazon SageMaker AI 기본 제공 알고리즘.
+ 로컬 환경에서 훈련 스크립트를 실행하는 프레임워크.

이 구현은 원래 버전보다 더 작은 메모리 풋 프린트, 더 나은 로깅, 향상된 하이퍼파라미터 검증 및 더 큰 지표 세트를 갖습니다. 관리형 XGBoost 환경에서 훈련 스크립트를 실행하는 XGBoost `estimator`를 제공합니다. SageMaker AI XGBoost의 현재 릴리스는 원래 XGBoost 버전 1.0, 1.2, 1.3, 1.5, 1.7 및 3.0을 기반으로 합니다.

Amazon SageMaker AI XGBoost 알고리즘에 대한 자세한 내용은 다음 블로그 게시물을 참조하세요.
+ [오픈 소스 Amazon SageMaker AI XGBoost 알고리즘 컨테이너 소개](https://aws.amazon.com/blogs/machine-learning/introducing-the-open-source-amazon-sagemaker-xgboost-algorithm-container/)
+ [이제 완전 분산 GPU 훈련을 제공하는 Amazon SageMaker AI XGBoost](https://aws.amazon.com/blogs/machine-learning/amazon-sagemaker-xgboost-now-offers-fully-distributed-gpu-training/)

## 지원되는 버전
<a name="xgboost-supported-versions"></a>

자세한 내용은 [지원 정책을](https://docs.aws.amazon.com/sagemaker/latest/dg/pre-built-containers-support-policy.html#pre-built-containers-support-policy-ml-framework) 참조하세요.
+ 프레임워크(오픈 소스) 모드: 1.2-1, 1.2-2, 1.3-1, 1.5-1, 1.7-1, 3.0-5
+ 알고리즘 모드: 1.2-1, 1.2-2, 1.3-1, 1.5-1, 1.7-1, 3.0-5

**주의**  
필요한 컴퓨팅 용량으로 인해 SageMaker AI XGBoost 버전 3.0-5는 훈련 또는 추론을 위해 P3 인스턴스 패밀리의 GPU 인스턴스와 호환되지 않습니다.

**주의**  
패키지와 호환되므로 SageMaker AI XGBoost 버전 3.0-5는 SageMaker 디버거를 지원하지 않습니다.

**주의**  
필요한 연산 용량으로 인해 SageMaker AI XGBoost 버전 1.7-1은 훈련 또는 추론을 위한 P2 인스턴스 패밀리의 GPU 인스턴스와 호환되지 않습니다.

**주의**  
네트워크 격리 모드: 버전 25.2를 초과하여 pip를 업그레이드하지 마십시오. 최신 버전은 모듈 설치 중에 PyPI에서 setuptools를 가져오려고 할 수 있습니다.

**중요**  
SageMaker AI XGBoost 이미지 URI를 검색할 때 이미지 URI 태그에는 `:latest` 또는 `:1`을 사용하지 마세요. 사용하려는 네이티브 XGBoost 패키지 버전이 포함된 SageMaker AI 관리 XGBoost 컨테이너를 선택하려면 [지원되는 버전](#xgboost-supported-versions) 중 하나를 지정해야 합니다. SageMaker AI XGBoost 컨테이너로 마이그레이션된 패키지 버전을 찾으려면 [Docker Registry Paths and Example Code](https://docs.aws.amazon.com/sagemaker/latest/dg-ecr-paths/sagemaker-algo-docker-registry-paths.html) 섹션을 참조하세요. 그런 다음 AWS 리전를 선택하고 **XGBoost(알고리즘)** 섹션으로 이동합니다.

**주의**  
XGBoost 0.90 버전은 더 이상 사용되지 않습니다. XGBoost 0.90에 대한 보안 업데이트 또는 버그 수정에 대한 지원이 중단되었습니다. XGBoost 버전을 최신 버전으로 업그레이드할 것을 적극 권장합니다.

**참고**  
XGBoost v1.1은 SageMaker AI에서 지원되지 않습니다. XGBoost 1.1은 테스트 입력의 기능이 LIBSVM 입력의 훈련 데이터보다 적을 때 예측을 실행하는 기능이 손상되었기 때문입니다. 이 기능은 XGBoost v1.2에서 복원되었습니다. SageMaker AI XGBoost 1.2-2 이상을 사용하세요.

**참고**  
XGBoost v1.0-1을 사용할 수 있지만 공식적으로 지원되지는 않습니다.

## XGBoost 알고리즘을 위한 EC2 인스턴스 권장 사항
<a name="Instance-XGBoost"></a>

SageMaker AI XGBoost는 CPU 및 GPU 훈련 및 추론을 지원합니다. 인스턴스 권장 사항은 훈련 및 추론 요구 사항과 XGBoost 알고리즘 버전에 따라 달라집니다. 자세한 내용은 다음 옵션 중 하나를 참조하세요.
+ [CPU 훈련](#Instance-XGBoost-training-cpu)
+ [GPU 훈련](#Instance-XGBoost-training-gpu)
+ [분산 CPU 훈련](#Instance-XGBoost-distributed-training-cpu)
+ [분산 GPU 훈련](#Instance-XGBoost-distributed-training-gpu)
+ [Inference](#Instance-XGBoost-inference)

### 학습
<a name="Instance-XGBoost-training"></a>

SageMaker AI XGBoost 알고리즘은 CPU 및 GPU 훈련을 지원합니다.

#### CPU 훈련
<a name="Instance-XGBoost-training-cpu"></a>

SageMaker AI XGBoost 1.0-1 이하 버전은 CPU를 사용해서만 훈련합니다. 메모리 바운드(컴퓨팅 파운드와는 반대) 알고리즘입니다. 따라서 컴퓨팅 최적화 인스턴스(예: C4)보다 범용 컴퓨팅 인스턴스(예: M5)를 선택하는 것이 좋습니다. 또한 훈련 데이터를 보유하기 위해 선택한 인스턴스에 총 메모리가 충분한 것이 좋습니다. 디스크 공간을 사용하여 기본 메모리에 맞지 않는 데이터를 처리할 수 있도록 지원합니다. 이는 libsvm 입력 모드에서 사용할 수 있는 코어 외 기능의 결과입니다. 그럼에도 불구하고 캐시 파일을 디스크에 쓰면 알고리즘 처리 시간이 느려집니다.

#### GPU 훈련
<a name="Instance-XGBoost-training-gpu"></a>

SageMaker AI XGBoost 버전 1.2-2 이상은 GPU 훈련을 지원합니다. 높은 인스턴스당 비용에도 불구하고 GPU는 더욱 빠르게 교육하여 더욱 효율적입니다.

SageMaker AI XGBoost 버전 1.2-2 이상은 P2, P3, G4dn 및 G5 GPU 인스턴스 패밀리를 지원합니다.

SageMaker AI XGBoost 버전 1.7-1 이상은 P3, G4dn 및 G5 GPU 인스턴스 패밀리를 지원합니다. 연산 용량 요구 사항으로 인해 버전 1.7-1 이상은 P2 인스턴스 패밀리를 지원하지 않는다는 점에 유의하세요.

SageMaker AI XGBoost 버전 3.0-5 이상은 G4dn 및 G5 GPU 인스턴스 패밀리를 지원합니다. 컴퓨팅 용량 요구 사항으로 인해 버전 3.0-5 이상은 P3 인스턴스 패밀리를 지원하지 않습니다.

GPU 훈련을 활용하려면:
+ 인스턴스 유형을 GPU 인스턴스 중 하나로 지정합니다(예: G4dn).
+ 기존 XGBoost 스크립트에서 `tree_method` 하이퍼파라미터를 `gpu_hist`로 설정

### 분산 훈련
<a name="Instance-XGBoost-distributed-training"></a>

SageMaker AI XGBoost는 분산 훈련을 위한 CPU 및 GPU 인스턴스를 지원합니다.

#### 분산 CPU 훈련
<a name="Instance-XGBoost-distributed-training-cpu"></a>

여러 인스턴스에서 CPU 훈련을 실행하려면 예측기의 `instance_count` 파라미터를 1보다 큰 값으로 설정하세요. 입력 데이터를 총 인스턴스 수로 나누어야 합니다.

##### 입력 데이터를 여러 인스턴스로 나눕니다.
<a name="Instance-XGBoost-distributed-training-divide-data"></a>

다음 단계를 사용하여 입력 데이터를 나눕니다.

1. 입력 데이터를 작은 파일로 나눕니다. 파일 수는 적어도 분산 훈련에 사용되는 인스턴스 수와 같아야 합니다. 하나의 큰 파일이 아닌 작은 파일을 여러 개 사용하면 훈련 작업의 데이터 다운로드 시간도 줄어듭니다.

1. [TrainingInput](https://sagemaker.readthedocs.io/en/stable/api/utility/inputs.html)을 생성할 때는 분산 파라미터를 `ShardedByS3Key`로 설정하세요. 이를 사용하여 훈련 작업에 *n*개의 인스턴스가 지정되어 있는 경우, 각 인스턴스가 S3에 있는 파일 수의 약 *1/n*을 획득할 수 있습니다.

#### 분산 GPU 훈련
<a name="Instance-XGBoost-distributed-training-gpu"></a>

단일 GPU 또는 다중 GPU 인스턴스에서 분산 훈련을 사용할 수 있습니다.

**단일 GPU 인스턴스를 사용한 분산 훈련**

SageMaker AI XGBoost 버전 1.2-2부터 1.3-1까지는 단일 GPU 인스턴스 훈련만 지원합니다. 즉, 다중 GPU 인스턴스를 선택하더라도 인스턴스당 하나의 GPU만 사용된다는 의미입니다.

다음의 경우 입력 데이터를 총 인스턴스 수로 나누어야 합니다.
+ XGBoost 버전 1.2-2\$11.3-1을 사용합니다.
+ 다중 GPU 인스턴스를 사용할 필요는 없습니다.

 자세한 내용은 [입력 데이터를 여러 인스턴스로 나눕니다.](#Instance-XGBoost-distributed-training-divide-data) 단원을 참조하십시오.

**참고**  
SageMaker AI XGBoost 버전 1.2-2부터 1.3-1까지는 다중 GPU 인스턴스를 선택하더라도 인스턴스당 하나의 GPU만 사용합니다.

**다중 GPU 인스턴스를 사용한 분산 훈련**

SageMaker AI XGBoost는 버전 1.5-1부터 [Dask](https://www.dask.org/)를 통한 분산 GPU 훈련을 제공합니다. Dask를 사용하면 하나 이상의 다중 GPU 인스턴스를 사용할 때 모든 GPU를 활용할 수 있습니다. Dask는 단일 GPU 인스턴스를 사용할 때도 작동합니다.

다음 단계를 사용하여 Dask를 훈련시킵니다.

1. [TrainingInput](https://sagemaker.readthedocs.io/en/stable/api/utility/inputs.html)에서 `distribution` 파라미터를 생략하거나 `FullyReplicated`로 설정하세요.

1. 하이퍼파라미터를 정의할 때는 `use_dask_gpu_training`을 `"true"` 값으로 설정하세요.

**중요**  
Dask를 사용한 분산 훈련은 CSV 및 Parquet 입력 형식만 지원합니다. LIBSVM 또는 PROTOBUF와 같은 다른 데이터 형식을 사용하는 경우 훈련 작업이 실패합니다.  
Parquet 데이터의 경우, 열 이름을 문자열로 저장해야 합니다. 다른 데이터 유형의 이름을 가진 열은 로드되지 않습니다.

**중요**  
Dask를 사용한 분산 훈련은 파이프 모드를 지원하지 않습니다. 파이프 모드를 지정하면 훈련 작업이 실패합니다.

Dask를 사용하여 SageMaker AI XGBoost를 훈련할 때 고려해야 할 몇 가지 사항이 있습니다. 데이터를 작은 파일로 분할해야 합니다. Dask는 각 Parquet 파일을 파티션으로 읽습니다. 모든 GPU에는 Dask 작업자가 있습니다. 이에 따라 파일 수는 총 GPU 수(인스턴스 수 \$1 인스턴스당 GPU 수) 보다 커야 합니다. 파일 수가 너무 많으면 성능이 저하될 수도 있습니다. 자세한 내용은 [Dask 모범 사례](https://docs.dask.org/en/stable/best-practices.html)를 참조하세요.

#### 출력의 변화
<a name="Instance-XGBoost-distributed-training-output"></a>

지정된 `tree_method` 하이퍼파라미터에 따라 XGBoost 훈련에 사용되는 알고리즘이 결정됩니다. 트리 메소드 `approx`, `hist` 및 `gpu_hist`는 모두 근사 메소드이며 분위수 계산에는 스케칭을 사용합니다. 자세한 내용은 XGBoost 설명서의 [트리 메서드](https://xgboost.readthedocs.io/en/stable/treemethod.html)를 참조하세요. 스케칭은 근사 알고리즘입니다. 따라서 분산 훈련을 위해 선택한 작업자 수와 같은 요인에 따라 모형에 변동이 있을 것으로 예상할 수 있습니다. 변동의 중요성은 데이터에 따라 달라집니다.

### Inference
<a name="Instance-XGBoost-inference"></a>

SageMaker AI XGBoost는 추론을 위한 CPU 및 GPU 인스턴스를 지원합니다. 추론을 위한 인스턴스 유형에 대한 자세한 내용은 [Amazon SageMaker AI ML 인스턴스 유형](https://aws.amazon.com/sagemaker/pricing/)을 참조하세요.

# SageMaker AI XGBoost 사용 방법
<a name="xgboost-how-to-use"></a>

SageMaker AI를 사용하면 XGBoost를 내장된 알고리즘 또는 프레임워크로 사용할 수 있습니다. XGBoost를 프레임워크로 사용할 때 고유한 훈련 스크립트를 사용자 지정할 수 있으므로 고급 시나리오에 더 유연하게 액세스할 수 있습니다. 다음 섹션에서는 SageMaker Python SDK와 함께 XGBoost를 사용하는 방법과 XGBoost 알고리즘의 입력/출력 인터페이스를 설명합니다. Amazon SageMaker Studio Classic UI에서 XGBoost를 사용하는 방법에 대한 자세한 내용은 [SageMaker JumpStart 사전 훈련된 모델](studio-jumpstart.md) 섹션을 참조하세요.

**Topics**
+ [XGBoost를 프레임워크로 사용](#xgboost-how-to-framework)
+ [XGBoost를 내장 알고리즘으로 사용](#xgboost-how-to-built-in)
+ [XGBoost 알고리즘에 대한 입력/출력 인터페이스](#InputOutput-XGBoost)

## XGBoost를 프레임워크로 사용
<a name="xgboost-how-to-framework"></a>

XGBoost를 프레임워크로 사용하여 추가 데이터 처리를 훈련 작업에 통합할 수 있는 사용자 지정 훈련 스크립트를 실행합니다. 다음 코드 예제에서 SageMaker Python SDK는 XGBoost API를 프레임워크로 제공합니다. 이 기능은 SageMaker AI가 TensorFlow, MXNet 및 PyTorch 같은 다른 프레임워크 API를 제공하는 방식과 비슷합니다.

```
import boto3
import sagemaker
from sagemaker.xgboost.estimator import XGBoost
from sagemaker.session import Session
from sagemaker.inputs import TrainingInput

# initialize hyperparameters
hyperparameters = {
        "max_depth":"5",
        "eta":"0.2",
        "gamma":"4",
        "min_child_weight":"6",
        "subsample":"0.7",
        "verbosity":"1",
        "objective":"reg:squarederror",
        "num_round":"50"}

# set an output path where the trained model will be saved
bucket = sagemaker.Session().default_bucket()
prefix = 'DEMO-xgboost-as-a-framework'
output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-framework')

# construct a SageMaker AI XGBoost estimator
# specify the entry_point to your xgboost training script
estimator = XGBoost(entry_point = "your_xgboost_abalone_script.py", 
                    framework_version='1.7-1',
                    hyperparameters=hyperparameters,
                    role=sagemaker.get_execution_role(),
                    instance_count=1,
                    instance_type='ml.m5.2xlarge',
                    output_path=output_path)

# define the data type and paths to the training and validation datasets
content_type = "libsvm"
train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type)
validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type)

# execute the XGBoost training job
estimator.fit({'train': train_input, 'validation': validation_input})
```

SageMaker AI XGBoost를 프레임워크로 사용하는 전체 예시는 [Amazon SageMaker AI XGBoost를 사용한 회귀](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_abalone_dist_script_mode.html)를 참조하세요.

## XGBoost를 내장 알고리즘으로 사용
<a name="xgboost-how-to-built-in"></a>

XGBoost 기본 제공 알고리즘을 사용하여 다음 코드 예제와 같이 XGBoost 훈련 컨테이너를 빌드합니다. SageMaker AI `image_uris.retrieve` API를 사용하여 XGBoost 내장된 알고리즘 이미지 URI를 자동으로 찾을 수 있습니다. [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 버전 1을 사용하는 경우 `get_image_uri` API를 사용합니다. `image_uris.retrieve` API가 올바른 URI를 찾도록 하려면 [기본 제공 알고리즘 에 대한 공통 파라미터](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html)를 참조하세요. 그런 다음 기본 제공 알고리즘 이미지 URI 및 사용 가능한 리전의 `xgboost` 전체 목록에서 조회합니다.

XGBoost 이미지 URI를 지정한 후 XGBoost 컨테이너를 사용하여 SageMaker AI Estimator API를 사용하는 예측기를 구성하고 훈련 작업을 시작할 수 있습니다. 이 XGBoost 기본 제공 알고리즘 모드는 고유한 XGBoost 훈련 스크립트를 통합하지 않으며 입력 데이터세트에서 직접 실행됩니다.

**중요**  
SageMaker AI XGBoost 이미지 URI를 검색할 때 이미지 URI 태그에는 `:latest` 또는 `:1`을 사용하지 마세요. 사용하려는 네이티브 XGBoost 패키지 버전이 포함된 SageMaker AI 관리 XGBoost 컨테이너를 선택하려면 [지원되는 버전](xgboost.md#xgboost-supported-versions) 중 하나를 지정해야 합니다. SageMaker AI XGBoost 컨테이너로 마이그레이션된 패키지 버전을 찾으려면 [Docker Registry Paths and Example Code](https://docs.aws.amazon.com/sagemaker/latest/dg-ecr-paths/sagemaker-algo-docker-registry-paths.html) 섹션을 참조하세요. 그런 다음 AWS 리전를 선택하고 **XGBoost(알고리즘)** 섹션으로 이동합니다.

```
import sagemaker
import boto3
from sagemaker import image_uris
from sagemaker.session import Session
from sagemaker.inputs import TrainingInput

# initialize hyperparameters
hyperparameters = {
        "max_depth":"5",
        "eta":"0.2",
        "gamma":"4",
        "min_child_weight":"6",
        "subsample":"0.7",
        "objective":"reg:squarederror",
        "num_round":"50"}

# set an output path where the trained model will be saved
bucket = sagemaker.Session().default_bucket()
prefix = 'DEMO-xgboost-as-a-built-in-algo'
output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-built-in-algo')

# this line automatically looks for the XGBoost image URI and builds an XGBoost container.
# specify the repo_version depending on your preference.
xgboost_container = sagemaker.image_uris.retrieve("xgboost", region, "1.7-1")

# construct a SageMaker AI estimator that calls the xgboost-container
estimator = sagemaker.estimator.Estimator(image_uri=xgboost_container, 
                                          hyperparameters=hyperparameters,
                                          role=sagemaker.get_execution_role(),
                                          instance_count=1, 
                                          instance_type='ml.m5.2xlarge', 
                                          volume_size=5, # 5 GB 
                                          output_path=output_path)

# define the data type and paths to the training and validation datasets
content_type = "libsvm"
train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type)
validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type)

# execute the XGBoost training job
estimator.fit({'train': train_input, 'validation': validation_input})
```

XGBoost를 기본 제공 알고리즘으로 설정하는 방법에 대한 자세한 내용은 다음 노트북 예제를 참조하세요.
+ [XGBoost를 위한 관리형 스팟 훈련](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_managed_spot_training.html)
+ [Amazon SageMaker AI XGBoost를 사용한 회귀(Parquet 입력)](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_parquet_input_training.html)

## XGBoost 알고리즘에 대한 입력/출력 인터페이스
<a name="InputOutput-XGBoost"></a>

그라디언트 부스팅은 테이블형 데이터에서 작동합니다. 행은 관측치를 나타내고 1개 열은 대상 변수 또는 레이블을 나타내며, 나머지 열은 특징을 나타냅니다.

SageMaker AI의 XGBoost 구현은 훈련 및 추론을 위해 다음 데이터 형식을 지원합니다.
+  *text/libsvm*(기본값) 
+  *text/csv*
+  *application/x-parquet*
+  *application/x-recordio-protobuf*

**참고**  
훈련 및 추론 입력과 관련하여 알아두어야 할 몇 가지 고려 사항이 있습니다.  
성능을 높이려면 Amazon S3의 데이터가 훈련 인스턴스 볼륨에 저장되는 *파일 모드*와 함께 XGBoost를 사용하는 것이 좋습니다.
열 형식 입력값을 사용한 훈련의 경우, 알고리즘은 대상 변수(label) 가 첫 번째 열이라고 가정합니다. 추론의 경우 알고리즘은 입력에 레이블 열이 없다고 추정합니다.
CSV 데이터의 경우 입력값에 헤더 레코드가 없어야 합니다.
LIBSVM 훈련의 경우 알고리즘은 레이블 열 뒤의 후속 열에 기능에 대한 0부터 시작하는 인덱스 값 쌍이 포함되어 있다고 가정합니다. 그래서 각 행은 <label> <index0>:<value0> <index1>:<value1> ... 형식을 가집니다.
인스턴스 유형 및 분산 훈련에 대한 자세한 내용은 [XGBoost 알고리즘을 위한 EC2 인스턴스 권장 사항](xgboost.md#Instance-XGBoost) 섹션을 참조하세요.

CSV 훈련 입력 모드의 경우 알고리즘에 대해 사용 가능한 전체 메모리(인스턴스 수 \$1 의 가용 메모리)는 교육 데이터세트를 담을 수 있어야 합니다. 사용 가능한 총 메모리는 `Instance Count * the memory available in the InstanceType`로 계산됩니다. libsvm 훈련 입력 모드의 경우 요구 사항은 아니지만 권장 사항입니다.

v1.3-1 이상의 경우, SageMaker AI XGBoost는 `Booster.save_model`을 사용하여 모델을 XGBoost 내부 바이너리 형식으로 저장합니다. 이전 버전에서는 Python pickle 모듈을 사용하여 모델을 직렬화/역직렬합니다.

**참고**  
오픈 소스 XGBoost에서 SageMaker AI XGBoost 모델을 사용할 때는 버전에 유의하세요. 버전 1.3-1 이상에서는 XGBoost 내부 바이너리 형식을 사용하는 반면 이전 버전에서는 Python 피클 모듈을 사용합니다.

**오픈 소스 XGBoost에서 v1.3-1 이상의 SageMaker AI XGBoost로 훈련된 모델을 사용하려면 다음과 같이 합니다.**
+ 다음 Python 코드를 사용합니다.

  ```
  import xgboost as xgb
  
  xgb_model = xgb.Booster()
  xgb_model.load_model(model_file_path)
  xgb_model.predict(dtest)
  ```

**오픈 소스 XGBoost에서 이전 버전의 SageMaker AI XGBoost로 훈련된 모델을 사용하려면 다음과 같이 합니다.**
+ 다음 Python 코드를 사용합니다.

  ```
  import pickle as pkl 
  import tarfile
  
  t = tarfile.open('model.tar.gz', 'r:gz')
  t.extractall()
  
  model = pkl.load(open(model_file_path, 'rb'))
  
  # prediction with test data
  pred = model.predict(dtest)
  ```

**인스턴스 가중치 지원을 사용하는 라벨링된 데이터 포인트의 중요도를 구분하려면**
+ SageMaker AI XGBoost를 사용하면 고객은 각 인스턴스에 가중치 값을 할당하여 레이블이 지정된 데이터 포인트의 중요도를 구분할 수 있습니다. *text/libsvm* 입력의 경우 고객은 레이블 뒤에 가중치 값을 연결하여 데이터 인스턴스에 가중치 값을 할당할 수 있습니다. 예를 들어 `label:weight idx_0:val_0 idx_1:val_1...`입니다. *text/csv* 입력의 경우 고객은 파라미터에서 `csv_weights` 플래그를 설정하고 레이블 다음 열에 가중치 값을 연결해야 합니다. 예제: `label,weight,val_0,val_1,...`.

# XGBoost 샘플 노트북
<a name="xgboost-sample-notebooks"></a>

다음 목록에는 Amazon SageMaker AI XGBoost 알고리즘의 다양한 사용 사례를 다루는 다양한 샘플 Jupyter Notebook이 포함되어 있습니다.
+ [How to Create a Custom XGBoost container](https://sagemaker-examples.readthedocs.io/en/latest/aws_sagemaker_studio/sagemaker_studio_image_build/xgboost_bring_your_own/Batch_Transform_BYO_XGB.html) – 이 노트북은 Amazon SageMaker AI Batch Transform을 사용하여 사용자 지정 XGBoost 컨테이너를 빌드하는 방법을 보여줍니다.
+ [Regression with XGBoost using Parquet](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_parquet_input_training.html) – 이 노트북은 Parquet의 Abalone 데이터세트를 사용하여 XGBoost 모델을 훈련시키는 방법을 보여줍니다.
+ [How to Train and Host a Multiclass Classification Model](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_mnist/xgboost_mnist.html) – 이 노트북에서는 MNIST 데이터세트를 사용하여 다중 클래스 분류 모델을 훈련 및 호스팅하는 방법을 보여줍니다.
+ [How to train a Model for Customer Churn Prediction](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_applying_machine_learning/xgboost_customer_churn/xgboost_customer_churn.html) – 이 노트북은 불만이 있는 고객을 식별하기 위해 모바일 고객 이탈을 예측하도록 모델을 훈련시키는 방법을 보여줍니다.
+ [An Introduction to Amazon SageMaker AI Managed Spot infrastructure for XGBoost Training](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_managed_spot_training.html) – 이 노트북에서는 XGBoost 컨테이너를 사용한 훈련에 스팟 인스턴스를 사용하는 방법을 보여줍니다.
+ [How to use Amazon SageMaker Debugger to debug XGBoost Training Jobs](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/xgboost_census_explanations/xgboost-census-debugger-rules.html) – 이 노트북은 Amazon SageMaker Debugger를 통한 훈련 작업 모니터링으로 내장된 디버깅 규칙을 사용하여 불일치를 감지하는 방법을 보여줍니다.

SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 액세스하는 방법은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열고 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인하세요. 선형 학습 알고리즘을 사용하는 주제 모델링 예제 노트북은 **Amazon 알고리즘 소개** 섹션에 있습니다. 노트북을 열려면 **사용** 탭을 선택한 후 **사본 생성**을 선택합니다.

# SageMaker AI XGBoost 알고리즘의 작동 방식
<a name="xgboost-HowItWorks"></a>

[XGBoost](https://github.com/dmlc/xgboost)는 그라디언트 부스팅 트리 알고리즘에서 유명하고 효율적인 오픈 소스 구현입니다. 그라디언트 부스팅은 더욱 단순하고 약한 모델 세트의 추정치를 결합하여 대상 변수를 정확하게 예측하려 시도하는 지도 학습 알고리즘입니다.

회귀에 대해 [그라디언트 부스팅](https://en.wikipedia.org/wiki/Gradient_boosting)을 사용할 때 약한 학습기는 회귀 트리이고, 각 회귀 트리는 입력 데이터 지점을 여러 점수가 포함된 리프로 매핑합니다. XGBoost는 볼록 손실 함수(예측과 대상 결과의 차이를 기반으로 함)와 모델 복잡성의 벌점항(회귀 트리 함수)을 결합하는 정규화된(L1 및 L2) 객체 함수를 최소화합니다. 훈련은 반복적으로 진행되어 이전 트리의 잔차 또는 오류를 예측하는 새 트리를 추가하고 앞선 트리들과 결합하여 최종 예측을 생성합니다. 경사 하강 알고리즘을 사용하여 새 모델을 추가할 때 손실을 최소화하기 때문에 이를 그라디언트 부스팅이라고 합니다.

 아래는 그래디언트 트리 부스팅의 작동 방식에 대한 간략한 그림입니다.

![\[그라데이션 트리 부스팅을 보여주는 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/xgboost_illustration.png)


**XGBoost에 대한 자세한 정보는 다음을 참조하세요.**
+ [XGBoost: A Scalable Tree Boosting System](https://arxiv.org/pdf/1603.02754.pdf)
+ [그래디언트 트리 부스팅](https://www.sas.upenn.edu/~fdiebold/NoHesitations/BookAdvanced.pdf#page=380)
+ [Introduction to Boosted Trees](https://xgboost.readthedocs.io/en/latest/tutorials/model.html)

# XGBoost 하이퍼파라미터
<a name="xgboost_hyperparameters"></a>

다음 표에는 Amazon SageMaker AI XGBoost 알고리즘에 필요하거나 가장 일반적으로 사용되는 하이퍼파라미터 하위 세트가 포함되어 있습니다. 이들은 사용자가 데이터로부터 모델 파라미터의 예측을 촉진하기 위해 설정하는 파라미터입니다. 먼저 반드시 설정해야 하는 필수 하이퍼파라미터가 알파벳 순으로 나열되어 있습니다. 그 다음에 설정할 수 있는 선택적 하이퍼파라미터가 알파벳 순으로 나열되어 있습니다. SageMaker AI XGBoost 알고리즘은 오픈 소스 DMLC XGBoost 패키지의 구현입니다. 이 버전의 XGBoost에 대해 구성할 수 있는 전체 하이퍼파라미터 집합에 대한 자세한 내용은 [XGBoost 매개 변수](https://xgboost.readthedocs.io/en/release_1.2.0/)를 참조하세요.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| num\$1class |  클래스의 수. **필수**, `objective`가 multi:softmax 또는 multi:softprob으로 설정된 경우.**** 유효한 값: 정수.  | 
| num\$1round |  훈련을 실행할 라운드의 수. **필수** 유효한 값: 정수.  | 
| alpha |  가중치의 L1 정규화 항. 이 값이 증가하면 더욱 보수적인 모델이 됩니다. **선택 사항** 유효한 값: 부동 소수점. 기본값: 0  | 
| base\$1score |  모든 인스턴스의 초기 예측 점수, 전역 편향. **선택 사항** 유효한 값: 부동 소수점. 기본 값: 0.5  | 
| booster |  사용할 부스터. `gbtree` 및 `dart` 값은 트리 기반 모델을 사용하는 반면 `gblinear`는 선형 함수를 사용합니다. **선택 사항** 유효한 값: 문자열. `"gbtree"`, `"gblinear"` 또는 `"dart"`. 기본값: `"gbtree"`  | 
| colsample\$1bylevel |  각 수준의 각 분할에 대한 열의 하위 샘플 비율. **선택 사항** 유효한 값: 부동 소수점. 범위: [0,1]. 기본값: 1  | 
| colsample\$1bynode |  각 노드에서 열의 서브 샘플링 비율. **선택 사항** 유효한 값: 부동 소수점. 범위: [0,1]. 기본값: 1  | 
| colsample\$1bytree |  각 트리 생성 시 열의 하위 샘플 비율. **선택 사항** 유효한 값: 부동 소수점. 범위: [0,1]. 기본값: 1  | 
| csv\$1weights |  이 플래그가 활성화되면 XGBoost는 훈련 데이터의 두 번째 열(레이블 다음 열)을 인스턴스 가중치로 가져와 csv 입력에 대한 인스턴스 중요도를 구분합니다. **선택 사항** 유효한 값: 0 또는 1 기본값: 0  | 
| deterministic\$1histogram |  이 플래그가 활성화되면 XGBoost는 GPU에 결정적으로 히스토그램을 작성합니다. `tree_method`가 `gpu_hist`로 설정된 경우에만 사용됩니다. 유효한 입력의 전체 목록은 [XGBoost 파라미터](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst)를 참조하세요. **선택 사항** 유효한 값: 문자열. 범위: `"true"` 또는 `"false"`. 기본값: `"true"`  | 
| early\$1stopping\$1rounds |  모델은 검증 점수가 증가하지 않을 때까지 훈련합니다. 훈련을 계속하려면 검증 오류를 최소한 `early_stopping_rounds`씩 줄여야 합니다. SageMaker AI 호스팅은 추론에 가장 적합한 모델을 사용합니다. **선택 사항** 유효한 값: 정수. 기본값: -  | 
| eta |  과적합 방지 업데이트에 사용되는 단계 크기 축소입니다. 각 부스팅 단계 이후 직접 새 특징의 가중치를 직접 가져옵니다. `eta` 파라미터는 실제로 특징 가중치를 축소하여 부스팅 프로세스를 더욱 보수적으로 만듭니다. **선택 사항** 유효한 값: 부동 소수점. 범위: [0,1]. 기본 값: 0.3  | 
| eval\$1metric |  검증 데이터에 대한 평가 지표. 기본 지표는 목표에 따라 할당됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/xgboost_hyperparameters.html) 유효한 입력의 목록은 [XGBoost 학습 작업 파라미터](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters) 섹션을 참조하세요. **선택 사항** 유효한 값: 문자열. 기본값: 목표에 따른 기본값.  | 
| gamma |  트리의 리프 노드에 추가 파티션을 생성하는 데 필요한 최소 손실 감소. 값이 클수록 알고리즘이 더욱 보수적입니다. **선택 사항** 유효한 값: 부동 소수점. 범위: [0,∞). 기본값: 0  | 
| grow\$1policy |  트리에 새 노드가 추가되는 방법을 제어합니다. 현재는 `tree_method`가 `hist`로 설정된 경우에만 지원됩니다. **선택 사항** 유효한 값: 문자열. `"depthwise"` 또는 `"lossguide"`입니다. 기본값: `"depthwise"`  | 
| interaction\$1constraints |  상호 작용이 허용되는 변수 그룹을 지정하세요. **선택 사항** 유효한 값: 중첩된 정수 목록. 각 정수는 하나의 기능을 나타내며, 각 중첩 목록에는 상호 작용이 허용되는 기능(예: [[1,2], [3,4,5]])이 포함됩니다. 기본값: 없음  | 
| lambda |  가중치의 L2 정규화 항. 이 값이 증가하면 더욱 보수적인 모델이 됩니다. **선택 사항** 유효한 값: 부동 소수점. 기본값: 1  | 
| lambda\$1bias |  편향의 L2 정규화 항. **선택 사항** 유효한 값: 부동 소수점. 범위: [0.0, 1.0]. 기본값: 0  | 
| max\$1bin |  버킷 지속 특징에 대한 별도 빈의 최대 수. `tree_method`가 `hist`로 설정된 경우에만 사용됩니다. **선택 사항** 유효한 값: 정수. 기본값: 256  | 
| max\$1delta\$1step |  각 트리의 가중치 추정에 허용되는 최대 델타 단계. 양수가 사용될 경우 업데이트가 더욱 보수적인 데 도움이 됩니다. 선호 옵션은 로지스틱 회귀에서 사용하는 것입니다. 1\$110으로 설정하는 경우 업데이트 제어에 도움이 됩니다. **선택 사항** 유효한 값: 정수. 범위: [0,∞). 기본값: 0  | 
| max\$1depth |  트리의 최대 깊이. 이 값이 증가하면 모델이 더욱 복잡해지고 과적합의 가능성이 높습니다. 0은 제한 없음을 나타냅니다. `grow_policy`=`depth-wise`의 경우 제한이 필요합니다. **선택 사항** 유효한 값: 정수. 범위: [0,∞) 기본값: 6  | 
| max\$1leaves |  추가할 최대 노드 수. `grow_policy`가 `lossguide`로 설정된 경우에만 관련이 있습니다. **선택 사항** 유효한 값: 정수. 기본값: 0  | 
| min\$1child\$1weight |  하위에 필요한 인스턴스 가중치(헤시안)의 최소 합. 트리 파티션 단계로 리프 노드의 인스턴스 가중치 합이 `min_child_weight`보다 작은 경우 빌드 프로세스는 추가 파티셔닝을 포기합니다. 선형 회귀 모델에서 이는 각 노드에 필요한 최소 인스턴스 수를 반영합니다. 값이 클수록 알고리즘이 더욱 보수적입니다. **선택 사항** 유효한 값: 부동 소수점. 범위: [0,∞). 기본값: 1  | 
| monotone\$1constraints |  모든 기능에 대한 단조성 제약 조건을 지정합니다. **선택 사항** 유효한 값: 정수 튜플. 유효한 정수: -1(감소 제약), 0(제약 없음), 1 (증가 제약). 예: (0, 1): 첫 번째 예측기에는 제약이 없고 두 번째 예측기에는 증가 제약이 있습니다. (-1, 1): 첫 번째 예측기에는 감소 제약이 있고, 두 번째 예측기에는 증가 제약이 있습니다. 기본값: (0, 0)  | 
| normalize\$1type |  정규화 알고리즘의 유형. **선택 사항** 유효한 값: *tree* 또는 *forest*. 기본값: tree**  | 
| nthread |  *xgboost* 실행에 사용되는 병렬 스레드의 수. **선택 사항** 유효한 값: 정수. 기본값: 스레드의 최대 수.  | 
| objective |  학습 작업 및 해당 학습 목표를 지정합니다. 예: `reg:logistic`, `multi:softmax`, `reg:squarederror`. 유효한 입력의 전체 목록은 [XGBoost 학습 작업 파라미터](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)를 참조하세요. **선택 사항** 유효값: 문자열 기본값: `"reg:squarederror"`  | 
| one\$1drop |  이 플래그가 활성화될 때 최소 1개의 트리가 드롭아웃 도중 항상 드롭됩니다. **선택 사항** 유효한 값: 0 또는 1 기본값: 0  | 
| process\$1type |  실행하는 부스팅 프로세스 유형. **선택 사항** 유효한 값: 문자열. `"default"` 또는 `"update"`입니다. 기본값: `"default"`  | 
| rate\$1drop |  드롭아웃 동안 드롭하는 이전 트리의 조각을 지정하는 드롭아웃 비율 **선택 사항** 유효한 값: 부동 소수점. 범위: [0.0, 1.0]. 기본 값: 0.0  | 
| refresh\$1leaf |  'refresh' 업데이터 플러그인의 파라미터. `true`(1)로 설정되면 트리 리프 및 트리 노드 통계가 업데이트됩니다. `false`(0)로 설정되면 트리 노드 통계만 업데이트됩니다. **선택 사항** 유효한 값: 0/1 기본값: 1  | 
| sample\$1type |  샘플링 알고리즘의 유형. **선택 사항** 유효한 값: `uniform` 또는 `weighted`. 기본값: `uniform`  | 
| scale\$1pos\$1weight |  양수 및 음수 가중치의 균형을 제어합니다. 불균형 클래스에 유용합니다. 고려할 유효한 값: `sum(negative cases)` / `sum(positive cases)`. **선택 사항** 유효한 값: 부동 소수점 기본값: 1  | 
| seed |  난수 시드. **선택 사항** 유효한 값: 정수 기본값: 0  | 
| single\$1precision\$1histogram |  이 플래그가 활성화되면 XGBoost는 배정밀도 대신 단정밀도를 사용하여 히스토그램을 작성합니다. `tree_method`가 `hist` 또는 `gpu_hist`로 설정된 경우에만 사용됩니다. 유효한 입력의 전체 목록은 [XGBoost 파라미터](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst)를 참조하세요. **선택 사항** 유효한 값: 문자열. 범위: `"true"` 또는 `"false"` 기본값: `"false"`  | 
| sketch\$1eps |  대략적인 그리디 알고리즘에 대해서만 사용됩니다. 이는 O(1 / `sketch_eps`) 빈의 수로 전환됩니다. 직접 선택한 빈의 수와 비교하여 대략적인 정확성을 통해 이론적 보장이 담보됩니다. **선택 사항** 유효한 값: 부동 소수점, 범위: [0, 1]. 기본값: 0.03  | 
| skip\$1drop |  부스팅 반복 도중 드롭아웃 과정을 건너뛸 확률. **선택 사항** 유효한 값: 부동 소수점. 범위: [0.0, 1.0]. 기본 값: 0.0  | 
| subsample |  훈련 인스턴스의 하위 샘플 비율. 0.5로 설정한 경우 XGBoost가 데이터 인스턴스 절반을 무작위로 수집하여 트리를 확장함을 나타냅니다. 이는 과적합을 방지합니다. **선택 사항** 유효한 값: 부동 소수점. 범위: [0,1]. 기본값: 1  | 
| tree\$1method |  XGBoost에서 사용되는 트리 생성 알고리즘. **선택 사항** 유효한 값: `auto`, `exact`, `approx`, `hist` 또는 `gpu_hist` 중 하나. 기본값: `auto`  | 
| tweedie\$1variance\$1power |  Tweedie 분포의 분산을 제어하는 파라미터. **선택 사항** 유효한 값: 부동 소수점. 범위: (1, 2). 기본값: 1.5  | 
| updater |  트리 업데이터의 실행 순서를 정의하는 쉼표로 구분된 문자열. 트리의 생성 및 수정을 위한 모듈형 방식을 제공합니다. 유효한 입력의 전체 목록은 [XGBoost 파라미터](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst)를 참조하세요. **선택 사항** 유효한 값: 쉼표로 구분된 문자열. 기본값: `grow_colmaker`, prune  | 
| use\$1dask\$1gpu\$1training |  Dask를 사용하여 분산 GPU 훈련을 실행하려는 경우 `use_dask_gpu_training`을 `"true"`로 설정하세요. Dask GPU 훈련은 버전 1.5-1 이상에서만 지원됩니다. 1.5-1 이전 버전에서는 이 값을 `"true"`로 설정하지 마세요. 자세한 내용은 [분산 GPU 훈련](xgboost.md#Instance-XGBoost-distributed-training-gpu) 섹션을 참조하세요. **선택 사항** 유효한 값: 문자열. 범위: `"true"` 또는 `"false"` 기본값: `"false"`  | 
| verbosity | 자세한 인쇄 메시지. 유효한 값: 0(자동), 1(경고), 2(정보), 3(디버그). **선택 사항** 기본값: 1  | 

# XGBoost 모델 튜닝
<a name="xgboost-tuning"></a>

자동 모델 튜닝, 하이퍼파라미터 튜닝이라고도 하며, 훈련과 검증 데이터 세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 세 가지 유형의 하이퍼파라미터를 선택합니다.
+ 모델 훈련 중에 최적화하는 학습 `objective` 함수
+ 검증 중에 모델 성능을 평가하는 데 사용하는 `eval_metric`
+ 모델을 자동으로 튜닝할 때 사용하기 쉬운 하이퍼파라미터 세트와 일정한 범위의 값

알고리즘이 계산하는 평가 지표 집합에서 평가 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 평가 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

**참고**  
XGBoost 0.90의 자동 모델 튜닝은 SageMaker AI 콘솔이 아닌 Amazon SageMaker SDK에서만 사용할 수 있습니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## XGBoost 알고리즘으로 계산되는 평가 지표
<a name="xgboost-metrics"></a>

XGBoost 알고리즘은 모델 검증에 사용할 다음 지표를 계산합니다. 모델을 튜닝할 때 모델을 평가하려면 이러한 지표 중 하나를 선택합니다. 유효한 `eval_metric` 값의 전체 목록은 [XGBoost 학습 작업 파라미터](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)를 참조하세요.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| validation:accuracy |  분류 비율은 \$1(오른쪽)/\$1(모든 경우)로 계산됩니다.  |  최대화  | 
| validation:auc |  곡선 아래 면적  |  최대화  | 
| validation:error |  바이너리 분류 오류율, 잘못된 케이스 수를 모든 케이스 수로 나눠 계산됩니다.  |  최소화  | 
| validation:f1 |  분류 정확도의 지표로, 고조파 정밀도 및 리콜 평균으로 계산됩니다.  |  최대화  | 
| validation:logloss |  네거티브 로그 가능도  |  최소화  | 
| validation:mae |  평균 절대 오차  |  최소화  | 
| validation:map |  평균 정밀도  |  최대화  | 
| validation:merror |  멀티클래스 분류 오류율, 잘못된 케이스 수를 모든 케이스 수로 나눠 계산됩니다.  |  최소화  | 
| validation:mlogloss |  멀티클래스 분류를 위한 네거티브 로그 가능도  |  최소화  | 
| validation:mse |  평균 제곱 오차.  |  최소화  | 
| validation:ndcg |  정규화된 할인 누적 이득  |  최대화  | 
| validation:rmse |  평균 제곱근 오차  |  최소화  | 

## 튜닝 가능한 XGBoost 하이퍼파라미터
<a name="xgboost-tunable-hyperparameters"></a>

다음 하이퍼파라미터를 사용하여 XGBoost 모델을 튜닝합니다. XGBoost 평가 지표를 최적화하는데 가장 큰 영향을 미치는 하이퍼파라미터는 `alpha`, `min_child_weight`, `subsample`, `eta` 및 `num_round`입니다.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| alpha |  ContinuousParameterRanges  |  MinValue: 0, MaxValue: 1000  | 
| colsample\$1bylevel |  ContinuousParameterRanges  |  MinValue: 0.1, MaxValue: 1  | 
| colsample\$1bynode |  ContinuousParameterRanges  |  MinValue: 0.1, MaxValue: 1  | 
| colsample\$1bytree |  ContinuousParameterRanges  |  MinValue: 0.5, MaxValue: 1  | 
| eta |  ContinuousParameterRanges  |  MinValue: 0.1, MaxValue: 0.5  | 
| gamma |  ContinuousParameterRanges  |  MinValue: 0, MaxValue: 5  | 
| lambda |  ContinuousParameterRanges  |  MinValue: 0, MaxValue: 1000  | 
| max\$1delta\$1step |  IntegerParameterRanges  |  [0, 10]  | 
| max\$1depth |  IntegerParameterRanges  |  [0, 10]  | 
| min\$1child\$1weight |  ContinuousParameterRanges  |  MinValue: 0, MaxValue: 120  | 
| num\$1round |  IntegerParameterRanges  |  [1, 4000]  | 
| subsample |  ContinuousParameterRanges  |  MinValue: 0.5, MaxValue: 1  | 

# 사용 중단된 XGBoost 버전 및 업그레이드
<a name="xgboost-previous-versions"></a>

이 주제에는 아직 사용 가능하지만 사용 중단된 이전 버전의 Amazon SageMaker AI XGBoost에 대한 설명서가 포함되어 있습니다. 또한 사용 중단된 XGBoost 버전을 가능한 경우 최신 버전으로 업그레이드하는 방법에 대한 지침도 제공합니다.

**Topics**
+ [XGBoost 버전 0.90을 버전 1.5로 업그레이드](xgboost-version-0.90.md)
+ [XGBoost 버전 0.72](xgboost-72.md)

# XGBoost 버전 0.90을 버전 1.5로 업그레이드
<a name="xgboost-version-0.90"></a>

SageMaker Python SDK를 사용하는 경우 기존 XGBoost 0.90 작업을 버전 1.5로 업그레이드하려면 SDK 버전 2.x가 설치되어 있고 XGBoost `version` 및 `framework_version` 파라미터를 1.5-1로 변경해야 합니다. Boto3를 사용하는 경우 도커 이미지와 몇 가지 하이퍼파라미터 및 학습 목표를 업데이트해야 합니다.

**Topics**
+ [SageMaker AI Python SDK 버전 1.x를 버전 2.x로 업그레이드](#upgrade-xgboost-version-0.90-sagemaker-python-sdk)
+ [이미지 태그를 1.5-1로 변경하세요.](#upgrade-xgboost-version-0.90-change-image-tag)
+ [Boto3의 도커 이미지 변경하기](#upgrade-xgboost-version-0.90-boto3)
+ [하이퍼파라미터 및 학습 목표 업데이트](#upgrade-xgboost-version-0.90-hyperparameters)

## SageMaker AI Python SDK 버전 1.x를 버전 2.x로 업그레이드
<a name="upgrade-xgboost-version-0.90-sagemaker-python-sdk"></a>

SageMaker Python SDK 버전 1.x를 계속 사용하고 있다면 SageMaker Python SDK의 버전 2.x로 업그레이드해야 합니다. 최신 버전의 SageMaker Python SDK에 대한 자세한 내용은 [SageMaker Python SDK 버전 2.x 사용](https://sagemaker.readthedocs.io/en/stable/v2.html)을 참조하세요. 최신 버전을 설치하려면 다음을 실행하세요.

```
python -m pip install --upgrade sagemaker
```

## 이미지 태그를 1.5-1로 변경하세요.
<a name="upgrade-xgboost-version-0.90-change-image-tag"></a>

SageMaker Python SDK를 사용하고 XGBoost 기본 제공 알고리즘을 사용하는 경우 `image_uris.retrive`에서 버전 파라미터를 변경하세요.

```
from sagemaker import image_uris
image_uris.retrieve(framework="xgboost", region="us-west-2", version="1.5-1")

estimator = sagemaker.estimator.Estimator(image_uri=xgboost_container, 
                                          hyperparameters=hyperparameters,
                                          role=sagemaker.get_execution_role(),
                                          instance_count=1, 
                                          instance_type='ml.m5.2xlarge', 
                                          volume_size=5, # 5 GB 
                                          output_path=output_path)
```

SageMaker Python SDK를 사용하고 XGBoost를 프레임워크로 사용하여 사용자 지정 훈련 스크립트를 실행하는 경우 XGBoost API에서 `framework_version` 파라미터를 변경하세요.

```
estimator = XGBoost(entry_point = "your_xgboost_abalone_script.py", 
                    framework_version='1.5-1',
                    hyperparameters=hyperparameters,
                    role=sagemaker.get_execution_role(),
                    instance_count=1,
                    instance_type='ml.m5.2xlarge',
                    output_path=output_path)
```

SageMaker Python SDK 버전 1.x에서 `sagemaker.session.s3_input`이 `sagemaker.inputs.TrainingInput`으로 변경되었습니다. 다음 예제와 같이 `sagemaker.inputs.TrainingInput`을 사용하세요.

```
content_type = "libsvm"
train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type)
validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type)
```

 SageMaker Python SDK 버전 2.x 변경 사항의 전체 목록은 [SageMaker Python SDK 버전 2.x 사용](https://sagemaker.readthedocs.io/en/stable/v2.html)을 참조하세요.

## Boto3의 도커 이미지 변경하기
<a name="upgrade-xgboost-version-0.90-boto3"></a>

Boto3를 사용하여 모델을 훈련하거나 배포하는 경우 도커 이미지 태그(1, 0.72, 0.90-1 또는 0.90-2)를 1.5-1로 변경하세요.

```
{
    "AlgorithmSpecification":: {
        "TrainingImage": "746614075791.dkr.ecr.us-west-1.amazonaws.com/sagemaker-xgboost:1.5-1"
    }
    ...
}
```

SageMaker Python SDK를 사용하여 레지스트리 경로를 검색하는 경우 `image_uris.retrieve`에서 `version` 파라미터를 변경하세요.

```
from sagemaker import image_uris
image_uris.retrieve(framework="xgboost", region="us-west-2", version="1.5-1")
```

## 하이퍼파라미터 및 학습 목표 업데이트
<a name="upgrade-xgboost-version-0.90-hyperparameters"></a>

사일런트 파라미터는 사용 중지 되었으며 XGBoost 1.5 이상 버전에서는 더 이상 사용할 수 없습니다. 대신 `verbosity`을 사용하세요. `reg:linear` 학습 목표를 사용하고 계셨다면 이 역시 ` reg:squarederror`를 위해 사용 중단 되었습니다. 대신 `reg:squarederror`을 사용하세요.

```
hyperparameters = {
    "verbosity": "2",
    "objective": "reg:squarederror",
    "num_round": "50",
    ...
}

estimator = sagemaker.estimator.Estimator(image_uri=xgboost_container, 
                                          hyperparameters=hyperparameters,
                                          ...)
```

# XGBoost 버전 0.72
<a name="xgboost-72"></a>

**중요**  
Amazon SageMaker AI는 XGBoost 0.72를 사용 중단하였습니다. 다음 코드 샘플과 같이 이미지 URI를 가져와서 이 이전 버전의 XGBoost를 기본 제공 알고리즘으로 계속 사용할 수 있습니다. XGBoost의 경우 `:1`로 끝나는 이미지 URI는 이전 버전의 이미지입니다.  

```
import boto3
from sagemaker.amazon.amazon_estimator import get_image_uri

xgb_image_uri = get_image_uri(boto3.Session().region_name, "xgboost", repo_version="1")
```

```
import boto3
from sagemaker import image_uris

xgb_image_uri = image_uris.retrieve("xgboost", boto3.Session().region_name, "1")
```
최신 버전을 사용하려면 이미지 URI 태그를 명시적으로 지정해야 합니다. ([지원되는 버전](xgboost.md#xgboost-supported-versions) 참조)

Amazon SageMaker AI XGBoost 알고리즘의 이전 릴리스는 0.72 릴리스를 기준으로 합니다. [XGBoost](https://github.com/dmlc/xgboost)(eXtreme Gradient Boosting)는 그라디언트 부스팅 트리 알고리즘에서 유명하고 효율적인 오픈 소스 구현입니다. 그라디언트 부스팅은 더욱 단순하고 약한 모델 세트의 추정치를 결합하여 대상 변수를 정확하게 예측하려 시도하는 지도 학습 알고리즘입니다. XGBoost는 기계 학습 경쟁에서 이를 놀라운 수준으로 해냈습니다. 다양한 데이터 유형, 관계 및 분산을 강력하게 처리하기 때문이며 개선된 결과를 위해 수정 및 조정될 수 있는 다량의 하이퍼파라미터 때문입니다. 이러한 유연성 덕분에 XGBoost는 회귀, 분류(바이너리 및 멀티클래스) 및 순위 관련 문제에 있어 안정적인 선택이 됩니다.

고객은 [Amazon SageMaker AI를 사용한 XGBoost 알고리즘](xgboost.md)의 새 릴리스 사용을 고려해야 합니다. 예를 들어 TensorFlow 딥 러닝 프레임워크와 같이 로컬 환경에서 스크립트를 실행하기 위한 SageMaker AI 기본 제공 알고리즘 또는 프레임워크로 사용할 수 있습니다. 이 새로운 구현은 더 작은 메모리 풋 프린트, 더 나은 로깅, 향상된 하이퍼파라미터 유효성 검사 및 확장된 메트릭 세트를 갖습니다. XGBoost의 이전 구현은 고객이 새 버전으로 마이그레이션을 연기해야 하는 경우 계속 사용할 수 있습니다. 그러나 이 이전 구현은 XGBoost의 0.72 릴리스와 연결되어 있습니다.

## XGBoost Release 0.72에 대한 입력/출력 인터페이스
<a name="xgboost-72-InputOutput"></a>

그라디언트 부스팅은 테이블형 데이터에서 작동합니다. 행은 관측치를 나타내고 1개 열은 대상 변수 또는 레이블을 나타내며, 나머지 열은 특징을 나타냅니다.

XGBoost의 SageMaker AI 구현은 훈련 및 추론을 위해 CSV 및 libsvm 형식을 지원합니다.
+ Training ContentType의 경우 유효한 입력값은 *text/libsvm*(기본값) 또는 *text/csv*입니다.
+ Inference ContentType의 경우 유효한 입력값은 *text/libsvm* 또는 (기본값) *text/csv*입니다.

**참고**  
CSV 훈련의 경우 알고리즘은 대상 변수가 첫 번째 열에 있고 CSV에는 헤더 레코드가 없다고 추정합니다. CSV 추론의 경우 알고리즘은 CSV 입력에 레이블 열이 없다고 추정합니다.  
libsvm 훈련의 경우 이 알고리즘은 레이블이 첫 번째 열에 있다고 가정합니다. 후속 열에는 특징에 대한 0이 아닌 인덱스 값 페어가 포함되어 있습니다. 각 열은 <label> <index0>:<value0> <index1>:<value1> ... 형식입니다. libsvm에 대한 추론 요청에는 libsvm 형식의 레이블이 있을 수도 없을 수도 있습니다.

이는 protobuf 훈련 입력 형식을 사용하여 표준 XGBoost 데이터 형식을 통해 더욱 높은 일관성을 유지하는 다른 SageMaker AI 알고리즘과는 다릅니다.

CSV 훈련 입력 모드의 경우 알고리즘에 대해 사용 가능한 전체 메모리(인스턴스 수 \$1 `InstanceType`의 가용 메모리)는 교육 데이터 세트를 담을 수 있어야 합니다. libsvm 훈련 입력 모드의 경우 요구 사항은 아니지만 권장 사항입니다.

SageMaker AI XGBoost는 Python 피클을 사용하여 모델을 직렬화/역직렬화하고, 이는 모델 저장/로드에 사용될 수 있습니다.

**오픈 소스 XGBoost에서 SageMaker AI XGBoost로 훈련된 모델을 사용하려면 다음과 같이 합니다.**
+ 다음 Python 코드를 사용합니다.

  ```
  import pickle as pkl 
  import tarfile
  import xgboost
  
  t = tarfile.open('model.tar.gz', 'r:gz')
  t.extractall()
  
  model = pkl.load(open(model_file_path, 'rb'))
  
  # prediction with test data
  pred = model.predict(dtest)
  ```

**인스턴스 가중치 지원을 사용하는 라벨링된 데이터 포인트의 중요도를 구분하려면**
+ SageMaker AI XGBoost를 사용하면 고객은 각 인스턴스에 가중치 값을 할당하여 레이블이 지정된 데이터 포인트의 중요도를 구분할 수 있습니다. *text/libsvm* 입력의 경우 고객은 레이블 뒤에 가중치 값을 연결하여 데이터 인스턴스에 가중치 값을 할당할 수 있습니다. 예를 들어 `label:weight idx_0:val_0 idx_1:val_1...`입니다. *text/csv* 입력의 경우 고객은 파라미터에서 `csv_weights` 플래그를 설정하고 레이블 다음 열에 가중치 값을 연결해야 합니다. 예제: `label,weight,val_0,val_1,...`.

## XGBoost Release 0.72에 대한 EC2 인스턴스 권장 사항
<a name="xgboost-72-Instance"></a>

SageMaker AI XGBoost는 현재 CPU를 사용한 훈련만 가능합니다. 메모리 바운드(컴퓨팅 파운드와는 반대) 알고리즘입니다. 따라서 범용 컴퓨팅 인스턴스(예: M4)는 컴퓨팅 최적화 인스턴스(C4)에 비해 더 나은 선택입니다. 또한 훈련 데이터를 보유하기 위해 선택한 인스턴스에 총 메모리가 충분한 것이 좋습니다. 기본 메모리(libsvm 입력 모드로 이용 가능한 외부 메모리 처리 기능)에 들어가지 않는 디스크 공간의 사용을 지원하지만 디스크에 캐시 파일을 쓰면 알고리즘 처리 시간이 줄어듭니다.

## XGBoost Release 0.72 샘플 노트북
<a name="xgboost-72-sample-notebooks"></a>

회귀 모델을 훈련 및 호스팅하는 데 최신 버전의 SageMaker AI XGBoost를 내장된 알고리즘으로 사용하는 방법을 보여주는 샘플 노트북은 [Amazon SageMaker AI XGBoost 알고리즘을 사용한 회귀](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_abalone.html)를 참조하세요. XGBoost의 0.72 버전을 사용하려면 샘플 코드의 버전을 0.72로 변경해야 합니다. SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 이 인스턴스에 액세스하는 방법에 대한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열면 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인할 수 있습니다. XGBoost 알고리즘을 사용하는 주제 모델링 예제 노트북은 **Introduction to Amazon algorithms(Amazon 알고리즘 소개)** 섹션에 있습니다. 노트북을 열려면 **사용** 탭을 클릭하고 사본 생성을 선택합니다.

## XGBoost Release 0.72 하이퍼파라미터
<a name="xgboost-72-hyperparameters"></a>

다음 표에는 XGBoost 알고리즘의 하이퍼파라미터가 나와 있습니다. 이들은 사용자가 데이터로부터 모델 파라미터의 예측을 촉진하기 위해 설정하는 파라미터입니다. 먼저 반드시 설정해야 하는 필수 하이퍼파라미터가 알파벳 순으로 나열되어 있습니다. 그 다음에 설정할 수 있는 선택적 하이퍼파라미터가 알파벳 순으로 나열되어 있습니다. SageMaker AI XGBoost 알고리즘은 오픈 소스 XGBoost 패키지의 구현입니다. 현재 SageMaker AI는 버전 0.72를 지원합니다. 이 XGBoost 버전의 하이퍼파라미터 구성에 대한 자세한 정보는 [XGBoost Parameters](https://xgboost.readthedocs.io/en/release_0.72/parameter.html)를 참조하세요.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| num\$1class | 클래스의 수. **필수**, `objective`가 *multi:softmax* 또는 *multi:softprob* 설정된 경우. 유효한 값: 정수  | 
| num\$1round | 훈련을 실행할 라운드의 수. **필수** 유효한 값: 정수  | 
| alpha | 가중치의 L1 정규화 항. 이 값이 증가하면 더욱 보수적인 모델이 됩니다. **선택 사항** 유효한 값: 부동 소수점 기본값: 0  | 
| base\$1score | 모든 인스턴스의 초기 예측 점수, 전역 편향. **선택 사항** 유효한 값: 부동 소수점 기본 값: 0.5  | 
| booster | 사용할 부스터. `gbtree` 및 `dart` 값은 트리 기반 모델을 사용하는 반면 `gblinear`는 선형 함수를 사용합니다. **선택 사항** 유효한 값: 문자열. `gbtree`, `gblinear` 또는 `dart`. 기본값: `gbtree`  | 
| colsample\$1bylevel | 각 수준의 각 분할에 대한 열의 하위 샘플 비율. **선택 사항** 유효한 값: 부동 소수점. 범위: [0,1]. 기본값: 1  | 
| colsample\$1bytree | 각 트리 생성 시 열의 하위 샘플 비율. **선택 사항** 유효한 값: 부동 소수점. 범위: [0,1]. 기본값: 1 | 
| csv\$1weights | 이 플래그가 활성화되면 XGBoost는 훈련 데이터의 두 번째 열(레이블 다음 열)을 인스턴스 가중치로 가져와 csv 입력에 대한 인스턴스 중요도를 구분합니다. **선택 사항** 유효한 값: 0 또는 1 기본값: 0  | 
| early\$1stopping\$1rounds | 모델은 검증 점수가 증가하지 않을 때까지 훈련합니다. 훈련을 계속하려면 검증 오류를 최소한 `early_stopping_rounds`씩 줄여야 합니다. SageMaker AI 호스팅은 추론에 가장 적합한 모델을 사용합니다. **선택 사항** 유효한 값: 정수 기본값: -  | 
| eta | 과적합 방지 업데이트에 사용되는 단계 크기 축소입니다. 각 부스팅 단계 이후 직접 새 특징의 가중치를 직접 가져옵니다. `eta` 파라미터는 실제로 특징 가중치를 축소하여 부스팅 프로세스를 더욱 보수적으로 만듭니다. **선택 사항** 유효한 값: 부동 소수점. 범위: [0,1]. 기본 값: 0.3  | 
| eval\$1metric | 검증 데이터에 대한 평가 지표. 기본 지표는 목표에 따라 할당됩니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/xgboost-72.html) 유효한 입력의 목록은 [XGBoost 파라미터](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)를 참조하세요. **선택 사항** 유효한 값: 문자열 기본값: 목표에 따른 기본값.  | 
| gamma | 트리의 리프 노드에 추가 파티션을 생성하는 데 필요한 최소 손실 감소. 값이 클수록 알고리즘이 더욱 보수적입니다. **선택 사항** 유효한 값: 부동 소수점. 범위: [0,∞). 기본값: 0  | 
| grow\$1policy | 트리에 새 노드가 추가되는 방법을 제어합니다. 현재는 `tree_method`가 `hist`로 설정된 경우에만 지원됩니다. **선택 사항** 유효한 값: 문자열. `depthwise` 또는 `lossguide`입니다. 기본값: `depthwise`  | 
| lambda | 가중치의 L2 정규화 항. 이 값이 증가하면 더욱 보수적인 모델이 됩니다. **선택 사항** 유효한 값: 부동 소수점 기본값: 1  | 
| lambda\$1bias | 편향의 L2 정규화 항. **선택 사항** 유효한 값: 부동 소수점. 범위: [0.0, 1.0]. 기본값: 0  | 
| max\$1bin | 버킷 지속 특징에 대한 별도 빈의 최대 수. `tree_method`가 `hist`로 설정된 경우에만 사용됩니다. **선택 사항** 유효한 값: 정수 기본값: 256  | 
| max\$1delta\$1step | 각 트리의 가중치 추정에 허용되는 최대 델타 단계. 양수가 사용될 경우 업데이트가 더욱 보수적인 데 도움이 됩니다. 선호 옵션은 로지스틱 회귀에서 사용하는 것입니다. 1\$110으로 설정하는 경우 업데이트 제어에 도움이 됩니다. **선택 사항** 유효한 값: 정수. 범위: [0,∞). 기본값: 0  | 
| max\$1depth | 트리의 최대 깊이. 이 값이 증가하면 모델이 더욱 복잡해지고 과적합의 가능성이 높습니다. 0은 제한 없음을 나타냅니다. `grow_policy`=`depth-wise`의 경우 제한이 필요합니다. **선택 사항** 유효한 값: 정수. 범위: [0,∞) 기본값: 6  | 
| max\$1leaves | 추가할 최대 노드 수. `grow_policy`가 `lossguide`로 설정된 경우에만 관련이 있습니다. **선택 사항** 유효한 값: 정수 기본값: 0  | 
| min\$1child\$1weight | 하위에 필요한 인스턴스 가중치(헤시안)의 최소 합. 트리 파티션 단계로 리프 노드의 인스턴스 가중치 합이 `min_child_weight`보다 작은 경우 빌드 프로세스는 추가 파티셔닝을 포기합니다. 선형 회귀 모델에서 이는 각 노드에 필요한 최소 인스턴스 수를 반영합니다. 값이 클수록 알고리즘이 더욱 보수적입니다. **선택 사항** 유효한 값: 부동 소수점. 범위: [0,∞). 기본값: 1  | 
| normalize\$1type | 정규화 알고리즘의 유형. **선택 사항** 유효한 값: *tree* 또는 *forest*. 기본값: tree**  | 
| nthread | *xgboost* 실행에 사용되는 병렬 스레드의 수. **선택 사항** 유효한 값: 정수 기본값: 스레드의 최대 수.  | 
| objective | 학습 작업 및 해당 학습 목표를 지정합니다. 예: `reg:logistic`, `reg:softmax`, `multi:squarederror`. 유효한 입력의 전체 목록은 [XGBoost Parameters](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)를 참조하세요. **선택 사항** 유효한 값: 문자열 기본값: `reg:squarederror`  | 
| one\$1drop | 이 플래그가 활성화될 때 최소 1개의 트리가 드롭아웃 도중 항상 드롭됩니다. **선택 사항** 유효한 값: 0 또는 1 기본값: 0  | 
| process\$1type | 실행하는 부스팅 프로세스 유형. **선택 사항** 유효한 값: 문자열. `default` 또는 `update`입니다. 기본값: `default`  | 
| rate\$1drop | 드롭아웃 동안 드롭하는 이전 트리의 조각을 지정하는 드롭아웃 비율 **선택 사항** 유효한 값: 부동 소수점. 범위: [0.0, 1.0]. 기본 값: 0.0  | 
| refresh\$1leaf | 'refresh' 업데이터 플러그인의 파라미터. `true`(1)로 설정되면 트리 리프 및 트리 노드 통계가 업데이트됩니다. `false`(0)로 설정되면 트리 노드 통계만 업데이트됩니다. **선택 사항** 유효한 값: 0/1 기본값: 1  | 
| sample\$1type | 샘플링 알고리즘의 유형. **선택 사항** 유효한 값: `uniform` 또는 `weighted`. 기본값: `uniform`  | 
| scale\$1pos\$1weight | 양수 및 음수 가중치의 균형을 제어합니다. 불균형 클래스에 유용합니다. 고려할 유효한 값: `sum(negative cases)` / `sum(positive cases)`. **선택 사항** 유효한 값: 부동 소수점 기본값: 1  | 
| seed | 난수 시드. **선택 사항** 유효한 값: 정수 기본값: 0  | 
| silent | 0은 실행 메시지 출력, 1은 자동 모드를 의미합니다. 유효한 값: 0 또는 1 **선택 사항** 기본값: 0  | 
| sketch\$1eps | 대략적인 그리디 알고리즘에 대해서만 사용됩니다. 이는 O(1 / `sketch_eps`) 빈의 수로 전환됩니다. 직접 선택한 빈의 수와 비교하여 대략적인 정확성을 통해 이론적 보장이 담보됩니다. **선택 사항** 유효한 값: 부동 소수점, 범위: [0, 1]. 기본값: 0.03  | 
| skip\$1drop | 부스팅 반복 도중 드롭아웃 과정을 건너뛸 확률. **선택 사항** 유효한 값: 부동 소수점. 범위: [0.0, 1.0]. 기본 값: 0.0  | 
| subsample | 훈련 인스턴스의 하위 샘플 비율. 0.5로 설정한 경우 XGBoost가 데이터 인스턴스 절반을 무작위로 수집하여 트리를 확장함을 나타냅니다. 이는 과적합을 방지합니다. **선택 사항** 유효한 값: 부동 소수점. 범위: [0,1]. 기본값: 1  | 
| tree\$1method | XGBoost에서 사용되는 트리 생성 알고리즘. **선택 사항** 유효한 값: `auto`, `exact`, `approx` 또는 `hist` 중 하나 기본값: `auto`  | 
| tweedie\$1variance\$1power | Tweedie 분포의 분산을 제어하는 파라미터. **선택 사항** 유효한 값: 부동 소수점. 범위: (1, 2). 기본값: 1.5  | 
| updater | 트리 업데이터의 실행 순서를 정의하는 쉼표로 구분된 문자열. 트리의 생성 및 수정을 위한 모듈형 방식을 제공합니다. 유효한 입력의 전체 목록은 [XGBoost 파라미터](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst)를 참조하세요. **선택 사항** 유효한 값: 쉼표로 구분된 문자열. 기본값: `grow_colmaker`, prune  | 

## XGBoost Release 0.72 모델 튜닝
<a name="xgboost-72-tuning"></a>

자동 모델 튜닝, 하이퍼파라미터 튜닝이라고도 하며, 훈련과 검증 데이터 세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 세 가지 유형의 하이퍼파라미터를 선택합니다.
+ 모델 훈련 중에 최적화하는 학습 `objective` 함수
+ 검증 중에 모델 성능을 평가하는 데 사용하는 `eval_metric`
+ 모델을 자동으로 튜닝할 때 사용하기 쉬운 하이퍼파라미터 세트와 일정한 범위의 값

알고리즘이 계산하는 평가 지표 집합에서 평가 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 평가 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

모델 튜닝에 대한 자세한 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

### XGBoost Release 0.72 알고리즘으로 계산되는 지표
<a name="xgboost-72-metrics"></a>

버전 0.72를 기반으로 한 XGBoost 알고리즘은 모델 검증에 사용할 다음 아홉 가지 지표를 계산합니다. 모델을 튜닝할 때 모델을 평가하려면 이러한 지표 중 하나를 선택합니다. 유효한 `eval_metric` 값의 전체 목록은 [XGBoost 학습 작업 파라미터](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)를 참조하세요.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| validation:auc |  곡선 아래 면적  |  최대화  | 
| validation:error |  바이너리 분류 오류율, 잘못된 케이스 수를 모든 케이스 수로 나눠 계산됩니다.  |  최소화  | 
| validation:logloss |  네거티브 로그 가능도  |  최소화  | 
| validation:mae |  평균 절대 오차  |  최소화  | 
| validation:map |  평균 정밀도  |  최대화  | 
| validation:merror |  멀티클래스 분류 오류율, 잘못된 케이스 수를 모든 케이스 수로 나눠 계산됩니다.  |  최소화  | 
| validation:mlogloss |  멀티클래스 분류를 위한 네거티브 로그 가능도  |  최소화  | 
| validation:ndcg |  정규화된 할인 누적 이득  |  최대화  | 
| validation:rmse |  평균 제곱근 오차  |  최소화  | 

### 튜닝 가능한 XGBoost Release 0.72 하이퍼파라미터
<a name="xgboost-72-tunable-hyperparameters"></a>

다음 하이퍼파라미터를 사용하여 XGBoost 모델을 튜닝합니다. XGBoost 평가 지표를 최적화하는데 가장 큰 영향을 미치는 하이퍼파라미터는 `alpha`, `min_child_weight`, `subsample`, `eta` 및 `num_round`입니다.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| alpha |  ContinuousParameterRanges  |  MinValue: 0, MaxValue: 1000  | 
| colsample\$1bylevel |  ContinuousParameterRanges  |  MinValue: 0.1, MaxValue: 1  | 
| colsample\$1bytree |  ContinuousParameterRanges  |  MinValue: 0.5, MaxValue: 1  | 
| eta |  ContinuousParameterRanges  |  MinValue: 0.1, MaxValue: 0.5  | 
| gamma |  ContinuousParameterRanges  |  MinValue: 0, MaxValue: 5  | 
| lambda |  ContinuousParameterRanges  |  MinValue: 0, MaxValue: 1000  | 
| max\$1delta\$1step |  IntegerParameterRanges  |  [0, 10]  | 
| max\$1depth |  IntegerParameterRanges  |  [0, 10]  | 
| min\$1child\$1weight |  ContinuousParameterRanges  |  MinValue: 0, MaxValue: 120  | 
| num\$1round |  IntegerParameterRanges  |  [1, 4000]  | 
| subsample |  ContinuousParameterRanges  |  MinValue: 0.5, MaxValue: 1  | 

# 텍스트 데이터용 내장된 SageMaker AI 알고리즘
<a name="algorithms-text"></a>

SageMaker AI는 자연어 처리, 문서 분류 또는 요약, 주제 모델링 또는 분류, 언어 트랜스크립션 또는 번역에 사용되는 텍스트 문서의 분석에 맞게 조정된 알고리즘을 제공합니다.
+ [BlazingText 알고리즘](blazingtext.md) - 대규모 데이터세트로 쉽게 확장할 수 있는 Word2vec 및 텍스트 분류 알고리즘의 고도로 최적화된 구현. 많은 다운스트림 자연어 처리 (NLP) 작업에 유용합니다.
+ [Latent Dirichlet Allocation(LDA) 알고리즘](lda.md) - 여러 문서에서 주제를 결정하는 데 적합한 알고리즘. 비지도 알고리즘으로 훈련 중 답이 포함된 예제 데이터를 사용하지 않습니다.**
+ [Neural Topic Model(NTM) 알고리즘](ntm.md) - 신경망 접근 방식을 사용하여 여러 문서에서 주제를 결정하는 또 다른 비지도 기법.
+ [Object2Vec 알고리즘](object2vec.md) - 추천 시스템, 문서 분류 및 문장 임베딩에 사용할 수 있는 범용 신경 임베딩 알고리즘.
+ [Sequence-to-Sequence 알고리즘](seq-2-seq.md) - 신경망 기계 번역에 일반적으로 사용되는 감독형 알고리즘.
+ [텍스트 분류 - TensorFlow](text-classification-tensorflow.md) - 텍스트 분류에 사용할 수 있는 사전 훈련된 모델을 사용하여 전이 학습을 지원하는 지도 알고리즘.


| 알고리즘 이름 | 채널 이름 | 훈련 입력 모드 | 파일 유형 | 인스턴스 클래스 | 병렬화 가능 | 
| --- | --- | --- | --- | --- | --- | 
| BlazingText | train | 파일 또는 파이프 | 텍스트 파일(행당 공백으로 분류된 토큰이 포함된 하나의 문장)  | GPU(단일 인스턴스 전용) 또는 CPU | 아니요 | 
| LDA | train 및 (선택 사항) test | 파일 또는 파이프 | recordIO-protobuf 또는 CSV | CPU(단일 인스턴스 전용) | 아니요 | 
| Neural Topic Model | train 및 (선택 사항) validation, test 또는 모두 | 파일 또는 파이프 | recordIO-protobuf 또는 CSV | GPU 또는 CPU | 예 | 
| Object2Vec | train 및 (선택 사항) validation, test 또는 모두 | 파일 | JSON Lines  | GPU 또는 CPU(단일 인스턴스 전용) | 아니요 | 
| Seq2Seq Modeling | train, validation 및 vocab | 파일 | recordIO-protobuf | GPU(단일 인스턴스 전용) | 아니요 | 
| 텍스트 분류 - TensorFlow | 훈련 및 검증 | 파일 | CSV | CPU 또는 GPU | 예(단일 인스턴스의 여러 GPU에서만 가능) | 

# BlazingText 알고리즘
<a name="blazingtext"></a>

Amazon SageMaker AI BlazingText 알고리즘은 Word2Vec 및 텍스트 분류 알고리즘을 고도로 최적화해 구현합니다. Word2vec 알고리즘은 감정 분석, 명명된 엔터티 인식, 기계 번역 등 여러 가지 다운스트림 자연 언어 처리(NLP) 작업에 유용합니다. 텍스트 분류는 웹 검색, 정보 검색, 순위 지정 및 문서 분류를 수행하는 애플리케이션에 중요한 작업입니다.

Word2vec 알고리즘은 고품질 분산 벡터로 단어를 매핑합니다. 단어의 결과 벡터 표현은 단어 임베딩이라고 합니다.** 의미적으로 유사한 단어는 가까이 있는 벡터에 해당합니다. 이러한 방식으로 단어 임베딩은 단어 간 의미 관계를 파악합니다.

많은 자연 언어 처리(NLP) 애플리케이션이 다량의 문서 모음을 훈련해 단어 임베딩을 배웁니다. 사전 훈련된 벡터 표현은 이후에 보다 제한된 양의 데이터로 훈련된 다른 모델의 일반화 가능성을 개선하는 의미 및 단어 분포에 대한 정보를 제공합니다. 대부분의 Word2vec 알고리즘 구현은 멀티 코어 CPU 아키텍처에 대해 최적화되어 있습니다. 이로 인해 크기가 큰 데이터 세트로 크기 조정하기 어렵습니다.

BlazingText 알고리즘을 사용하면 대규모 데이터 세트로 쉽게 확장할 수 있습니다. Word2vec과 유사하게 Skip-gram 및 CBOW(Continuous Bag-Of-Words) 훈련 아키텍처를 제공합니다. BlazingText의 지도 멀티 클래스, 멀티 레이블 텍스트 분류 알고리즘 구현은 사용자 지정 [CUDA ](https://docs.nvidia.com/cuda/index.html) 커널과 함께 GPU 액셀러레이션을 사용하도록 fastText 텍스트 분류자를 확장합니다. 멀티 코어 CPU 또는 GPU를 사용하여 몇 분 내에 10억 개 이상의 단어를 모델에게 훈련시킬 수 있습니다. 그러면 최신 딥 러닝 텍스트 분류 알고리즘과 동등한 성능을 얻을 수 있습니다.

BlazingText 알고리즘은 병렬화할 수 없습니다. 훈련과 관련된 파라미터에 대한 추가 정보는 [SageMaker 기본 제공 알고리즘의 도커 레지스트리 경로](https://docs.aws.amazon.com/en_us/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html)를 참고하세요.

 SageMaker AI BlazingText 알고리즘은 다음과 같은 이점을 제공합니다.
+ 멀티 코어 CPU 또는 GPU의 fastText 텍스트 분류자 및 고도로 최적화된 CUDA 커널을 사용하는 GPU의 Word2Vec 훈련을 가속화합니다. 추가 정보는 [BlazingText: Scaling and Accelerating Word2Vec using Multiple GPUs](https://dl.acm.org/citation.cfm?doid=3146347.3146354)를 참고하세요.
+ character n-gram에 대한 벡터 표현을 학습하여 [형태소(subword) 정보로 풍부해진 단어 벡터](https://arxiv.org/abs/1607.04606). 이러한 접근 방식은 BlazingText가 벡터를 character n-gram(형태소) 벡터의 합계로 표시하도록 해 미등록(OOV) 단어에 대한 의미 있는 벡터를 생성하도록 합니다.
+ 여러 CPU 노드 간에 더욱 빠른 훈련 및 분산 컴퓨팅을 허용하는 Word2Vec 알고리즘을 위한 `batch_skipgram` `mode`. `batch_skipgram` `mode`에서는 Negative Sample Sharing 전략으로 미니 배치를 훈련하여 레벨 1 BLAS 작업을 레벨 3 BLAS 작업으로 변환합니다. 이렇게 하면 최신 아키텍처의 곱셈-누산 지침을 효율적을 활용할 수 있습니다. 추가 정보는 [Parallelizing Word2Vec in Shared and Distributed Memory](https://arxiv.org/pdf/1604.04661.pdf)를 참고하세요.

요약을 위해 BlazingText에서는 여러 유형의 인스턴스에서 다음 모드를 지원합니다.


| Modes |  Word2Vec (비지도 학습)  |  텍스트 분류 (지도 학습)  | 
| --- | --- | --- | 
|  단일 CPU 인스턴스  |  `cbow` `Skip-gram` `Batch Skip-gram`  |  `supervised`  | 
|  단일 GPU 인스턴스(GPU 1개 이상)  |  `cbow` `Skip-gram`  |  GPU 하나를 사용하는 `supervised`  | 
|  다중 CPU 인스턴스  | Batch Skip-gram  | 없음 | 

BlazingText의 수학적 계산에 대한 추가 정보는 [BlazingText: Scaling and Accelerating Word2Vec using Multiple GPUs](https://dl.acm.org/citation.cfm?doid=3146347.3146354)를 참고하세요.

**Topics**
+ [BlazingText 알고리즘을 위한 입력/출력 인터페이스](#bt-inputoutput)
+ [BlazingText 알고리즘을 위한 EC2 인스턴스 권장 사항](#blazingtext-instances)
+ [BlazingText 샘플 노트북](#blazingtext-sample-notebooks)
+ [BlazingText 하이퍼파라미터](blazingtext_hyperparameters.md)
+ [BlazingText 모델 튜닝](blazingtext-tuning.md)

## BlazingText 알고리즘을 위한 입력/출력 인터페이스
<a name="bt-inputoutput"></a>

BlazingText 알고리즘에는 공백으로 구분된 토큰이 포함된 사전 처리 텍스트 파일이 하나 필요합니다. 이 파일의 각 행에는 문장이 하나 포함되어 있어야 합니다. 여러 텍스트 파일에 대해 훈련해야 하는 경우 해당 텍스트 파일을 하나의 파일로 연결한 다음 각 채널에서 파일을 업로드합니다.

### 훈련 및 검증 데이터 형식
<a name="blazingtext-data-formats"></a>

#### Word2Vec 알고리즘에 대한 훈련 및 검증 데이터 형식
<a name="blazingtext-data-formats-word2vec"></a>

Word2Vec 훈련을 위해 *train* 채널에서 파일을 업로드합니다. 다른 채널은 지원되지 않습니다. 이 파일에는 행마다 훈련 문장이 포함되어 있어야 합니다.

#### 텍스트 분류 알고리즘에 대한 훈련 및 검증 데이터 형식
<a name="blazingtext-data-formats-text-class"></a>

지도 모드의 경우에는 파일 모드 또는 증강 매니페스트 텍스트 형식을 사용하여 훈련할 수 있습니다.

##### 파일 모드를 사용하여 훈련
<a name="blazingtext-data-formats-text-class-file-mode"></a>

`supervised` 모드의 경우 훈련/검증 파일에는 레이블과 함께 행마다 훈련 문장이 하나씩 포함되어 있어야 합니다. 레이블은 문자열 *\$1\$1label\$1\$1*로 시작하는 단어입니다. 다음은 훈련/검증 파일의 예입니다.

```
__label__4  linux ready for prime time , intel says , despite all the linux hype , the open-source movement has yet to make a huge splash in the desktop market . that may be about to change , thanks to chipmaking giant intel corp .

__label__2  bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly as the indian skippers return to international cricket was short lived .
```

**참고**  
문장 내 레이블의 순서는 중요하지 않습니다.

train 채널에서 훈련 파일을 업로드하고, validation 채널에서 검증 파일을 선택적으로 업로드합니다.

##### 증강 매니페스트 텍스트 형식으로 훈련
<a name="blazingtext-data-formats-text-class-augmented-manifest"></a>

또한 CPU 인스턴스의 지도 모드에서는 RecordIO 파일을 생성할 필요 없이 파이프 모드에서 훈련하도록 하는 증강 매니페스트 형식도 지원합니다. 이 형식을 사용하는 동안 문장 목록과 문장의 해당 레이블을 포함한 S3 매니페스트 파일을 생성해야 합니다. 매니페스트 파일 형식은 각 행이 샘플 하나를 나타내는 [JSON Lines](http://jsonlines.org/) 형식이어야 합니다. 문장은 `source` 태그를 사용하여 지정되고, 레이블은 `label` 태그를 사용하여 지정할 수 있습니다. `source` 및 `label` 태그는 둘 모두 요청으로 지정된 `AttributeNames` 파라미터 값 아래에서 제공되어야 합니다.

```
{"source":"linux ready for prime time , intel says , despite all the linux hype", "label":1}
{"source":"bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly", "label":2}
```

다중 레이블 훈련도 레이블의 JSON 배열을 지정하여 지원됩니다.

```
{"source":"linux ready for prime time , intel says , despite all the linux hype", "label": [1, 3]}
{"source":"bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly", "label": [2, 4, 5]}
```

증강 매니페스트 파일에 대한 추가 정보는 [훈련 작업용 증강 매니페스트 파일](augmented-manifest.md) 섹션을 참조하세요.

### 모델 아티팩트 및 추론
<a name="blazingtext-artifacts-inference"></a>

#### Word2Vec 알고리즘의 모델 아티팩트
<a name="blazingtext--artifacts-inference-word2vec"></a>

Word2Vec 훈련의 경우 모델 아티팩트는 단어-벡터 매핑이 포함된 vectors.txt와 BlazingText에서 호스팅, 추론 또는 둘 다에 사용하는 바이너리인 vectors.bin으로 구성되어 있습니다. vectors.txt는 Gensim 및 Spacy 등과 같은 기타 도구와 호환 가능한 형식으로 벡터를 저장합니다.****** 예를 들어, Gensim 사용자는 다음 명령을 실행하여 vectors.txt 파일을 로드할 수 있습니다.

```
from gensim.models import KeyedVectors
word_vectors = KeyedVectors.load_word2vec_format('vectors.txt', binary=False)
word_vectors.most_similar(positive=['woman', 'king'], negative=['man'])
word_vectors.doesnt_match("breakfast cereal dinner lunch".split())
```

평가 파라미터가 `True`로 설정된 경우에는 추가 파일인 eval.json이 생성됩니다.** 이 파일에는 WS-353 데이터 세트에 대한 유사성 검증 결과(Spearman 순위 상관 계수)가 포함되어 있습니다. 훈련 코퍼스에 없는 WS-353 데이터 세트의 단어 수가 보고됩니다.

추론 요청의 경우 이 모델은 문자열 목록이 포함된 JSON 파일을 수락하고 벡터 목록을 반환합니다. 단어가 어휘에 등록되지 않은 경우 추론에서는 0으로 구성된 벡터를 반환합니다. 훈련 중 형태소(subword)s가 `True`로 설정되면 모델이 미등록(OOV) 단어에 대한 벡터를 생성할 수 있습니다.

##### 샘플 JSON 요청
<a name="word2vec-json-request"></a>

Mime-type:` application/json`

```
{
"instances": ["word1", "word2", "word3"]
}
```

#### 텍스트 분류 알고리즘의 모델 아티팩트
<a name="blazingtext-artifacts-inference-text-class"></a>

지도 출력을 사용한 훈련에서는 BlazingText 호스팅에서 사용할 수 있는 model.bin 파일이 생성됩니다.** 추론을 위해 BlazingText 모델은 문장 목록이 포함된 JSON 파일을 수락하고 예상되는 해당 레이블 및 확률 점수 목록을 반환합니다. 각 문장은 공백으로 구분된 토큰, 단어 또는 둘 다가 포함된 문자열이어야 합니다.

##### 샘플 JSON 요청
<a name="text-class-json-request"></a>

Mime-type:` application/json`

```
{
 "instances": ["the movie was excellent", "i did not like the plot ."]
}
```

기본적으로 서버는 확률이 가장 높은 예측을 하나만 반환합니다. 상위 k 예측을 가져오기 위해 구성에서 k를 다음과 같이 설정할 수 있습니다.****

```
{
 "instances": ["the movie was excellent", "i did not like the plot ."],
 "configuration": {"k": 2}
}
```

BlazingText의 경우 ` content-type` 및 `accept` 파라미터는 동일해야 합니다. 배치 변환을 위해 이러한 파라미터는 둘 다 `application/jsonlines`여야 합니다. 다른 경우 `Accept` 필드가 무시됩니다. 입력 형식은 다음과 같습니다.

```
content-type: application/jsonlines

{"source": "source_0"}
{"source": "source_1"}

if you need to pass the value of k for top-k, then you can do it in the following way:

{"source": "source_0", "k": 2}
{"source": "source_1", "k": 3}
```

출력 형식은 다음과 같습니다.

```
accept: application/jsonlines


{"prob": [prob_1], "label": ["__label__1"]}
{"prob": [prob_1], "label": ["__label__1"]}

If you have passed the value of k to be more than 1, then response will be in this format:

{"prob": [prob_1, prob_2], "label": ["__label__1", "__label__2"]}
{"prob": [prob_1, prob_2], "label": ["__label__1", "__label__2"]}
```

지도(텍스트 분류) 및 비지도(Word2Vec) 모드의 경우 BlazingText에서 생성하는 바이너리(\$1.bin)는 fastText에서 교차 사용이 가능하고, 그 반대의 경우에도 마찬가지입니다.** BlazingText와 fastText에서 생성한 바이너리를 사용할 수 있습니다. 마찬가지로, BlazingText를 사용하여 fastText에서 생성한 모델 바이너리를 호스팅할 수 있습니다.

다음은 BlazingText로 생성된 모델을 FastText와 함께 사용하는 방법의 예제입니다.

```
#Download the model artifact from S3
aws s3 cp s3://<YOUR_S3_BUCKET>/<PREFIX>/model.tar.gz model.tar.gz

#Unzip the model archive
tar -xzf model.tar.gz

#Use the model archive with fastText
fasttext predict ./model.bin test.txt
```

그러나 바이너리는 CPU 및 단일 GPU에 대한 훈련인 경우에만 지원됩니다. 다중 GPU에 대한 훈련은 바이너리를 생성하지 않습니다.

## BlazingText 알고리즘을 위한 EC2 인스턴스 권장 사항
<a name="blazingtext-instances"></a>

`cbow` 및 `skipgram` 모드의 경우 BlazingText는 단일 CPU 및 단일 GPU 인스턴스를 지원합니다. 이러한 두 모드에서는 `subwords` 임베딩 학습을 지원합니다. 정확도의 저하 없이 속도를 최대한 높이려면 ml.p3.2xlarge 인스턴스를 사용하는 것이 좋습니다.

`batch_skipgram` 모드의 경우 BlazingText는 단일 또는 다중 CPU 인스턴스를 지원합니다. 여러 인스턴스에서 훈련 시 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)으로 전달하는 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html) 객체의 `S3DataDistributionType` 필드 값을 `FullyReplicated`로 설정합니다. BlazingText는 머신 간 데이터 분산을 처리합니다.

지도 텍스트 분류 모드의 경우 훈련 데이터 세트가 2GB 미만인 경우 C5 인스턴스가 권장됩니다. 대규모 데이터 세트의 경우 단일 GPU가 있는 인스턴스를 사용하세요. BlazingText는 훈련 및 추론을 위해 P2, P3, G4dn 및 G5 인스턴스를 지원합니다.

## BlazingText 샘플 노트북
<a name="blazingtext-sample-notebooks"></a>

SageMaker AI BlazingText 알고리즘을 훈련하고 배포하여 워드 벡터를 생성하는 샘플 노트북은 [Learning Word2Vec Word Representations using BlazingText](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/blazingtext_word2vec_text8/blazingtext_word2vec_text8.html)를 참조하세요. SageMaker AI에서 예시를 실행하는 데 사용할 수 있는 Jupyter Notebook 인스턴스를 만들어 해당 인스턴스에 액세스에 관한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만들어 연 다음, **SageMaker AI 예시** 탭을 선택하면 모든 SageMaker AI 예시 목록이 나타납니다. Blazing Text를 사용하는 주제 모델링 예제 노트북은 **Introduction to Amazon algorithms(Amazon 알고리즘 소개)** 섹션에 있습니다. 노트북을 열려면 노트북의 **사용** 탭을 선택하고 **복사본 생성**을 선택합니다.

# BlazingText 하이퍼파라미터
<a name="blazingtext_hyperparameters"></a>

`CreateTrainingJob` 요청을 사용하여 훈련 작업을 시작할 때 훈련 알고리즘을 지정합니다. 알고리즘별 하이퍼파라미터를 문자열-문자열 맵으로 지정할 수 있습니다. BlazingText 알고리즘에 대한 하이퍼파라미터는 사용하는 Word2Vec(비지도) 및 Text Classification(지도) 모드에 따라 다릅니다.

## Word2Vec 하이퍼파라미터
<a name="blazingtext_hyperparameters_word2vec"></a>

다음 표에는 Amazon SageMaker AI에서 제공하는 BlazingText Word2Vec 훈련 알고리즘에 대한 하이퍼파라미터가 나열되어 있습니다.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| mode |  훈련에 사용되는 Word2vec 아키텍처. **필수** 유효값: `batch_skipgram`, `skipgram` 또는 `cbow`  | 
| batch\$1size |  `mode`가 `batch_skipgram`으로 설정된 경우 각 배치의 크기. 10부터 20 사이의 숫자를 설정합니다. **선택 사항** 유효한 값: 양수 기본값: 11  | 
| buckets |  형태소(subword)에 사용할 해시 버킷 수입니다. **선택 사항** 유효한 값: 양수 기본값: 2000000  | 
| epochs |  훈련 데이터의 완료 통과 횟수. **선택 사항** 유효한 값: 양수 기본값: 5  | 
| evaluation |  훈련된 모델이 [WordSimilarity-353 테스트](http://www.gabrilovich.com/resources/data/wordsim353/wordsim353.html)를 사용하여 평가되는지 여부. **선택 사항** 유효한 값: (부울) `True` 또는 `False` 기본값: `True`  | 
| learning\$1rate |  파라미터 업데이트에 사용되는 단계 크기입니다. **선택 사항** 유효한 값: 양의 부동 소수점 기본값: 0.05  | 
| min\$1char |  형태소/문자 n-gram에 사용할 최소 문자 수입니다. **선택 사항** 유효한 값: 양수 기본값: 3  | 
| min\$1count |  `min_count`회 미만으로 표시되는 단어는 삭제됩니다. **선택 사항** 유효한 값: 음수가 아닌 정수 기본값: 5  | 
| max\$1char |  형태소/문자 n-gram에 사용할 최대 문자 수입니다. **선택 사항** 유효한 값: 양수 기본값: 6  | 
| negative\$1samples |  네거티브 샘플 공유 전략을 위한 네거티브 샘플 수입니다. **선택 사항** 유효한 값: 양수 기본값: 5  | 
| sampling\$1threshold |  단어 발생에 대한 임곗값입니다. 훈련 데이터에 보다 높은 빈도로 나타나고 무작위로 다운 샘플링되는 단어입니다. **선택 사항** 유효한 값: 양의 분수값. 권장되는 범위는 (0, 1e-3]입니다. 기본값: 0.0001  | 
| subwords |  형태소(subword) 임베딩 학습 여부 **선택 사항** 유효한 값: (부울) `True` 또는 `False` 기본값: `False`  | 
| vector\$1dim |  알고리즘이 학습하는 단어 벡터의 차원. **선택 사항** 유효한 값: 양수 기본 값: 100  | 
| window\$1size |  컨텍스트 창의 크기. 컨텍스트 창은 훈련에 사용되는 대상 단어 주변의 단어 수입니다. **선택 사항** 유효한 값: 양수 기본값: 5  | 

## 텍스트 분류 하이퍼파라미터
<a name="blazingtext_hyperparameters_text_class"></a>

다음 표에는 Amazon SageMaker AI에서 제공하는 텍스트 분류 훈련 알고리즘에 대한 하이퍼파라미터가 나열되어 있습니다.

**참고**  
일부 파라미터가 텍스트 분류 및 Word2Vec 모드 간에 공통되긴 하지만 컨텍스트에 따라 의미가 다를 수 있습니다.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| mode |  훈련 모드 **필수** 유효한 값: `supervised`  | 
| buckets |  word n-gram에 사용할 해시 버킷 수입니다. **선택 사항** 유효한 값: 양수 기본값: 2000000  | 
| early\$1stopping |  epoch의 `patience` 수 이후 검증 정확성이 개선되지 않는 경우 훈련을 중지할지 여부 초기 중지를 사용하는 경우 검증 채널이 필수 항목이라는 점에 유의하세요. **선택 사항** 유효한 값: (부울) `True` 또는 `False` 기본값: `False`  | 
| epochs |  훈련 데이터에 통해 과정을 이수한 최대 횟수입니다. **선택 사항** 유효한 값: 양수 기본값: 5  | 
| learning\$1rate |  파라미터 업데이트에 사용되는 단계 크기입니다. **선택 사항** 유효한 값: 양의 부동 소수점 기본값: 0.05  | 
| min\$1count |  `min_count`회 미만으로 표시되는 단어는 삭제됩니다. **선택 사항** 유효한 값: 음수가 아닌 정수 기본값: 5  | 
| min\$1epochs |  조기 중지 로직을 호출하기 전 훈련할 최소 epoch 수입니다. **선택 사항** 유효한 값: 양수 기본값: 5  | 
| patience |  검증 세트에 대해 개선이 이루어지지 않는 경우 조기 중지를 적용하기 전에 대기할 epoch 수입니다. `early_stopping`이 `True`인 경우에만 사용됩니다. **선택 사항** 유효한 값: 양수 기본값: 4  | 
| vector\$1dim |  임베딩 계층의 차원입니다. **선택 사항** 유효한 값: 양수 기본 값: 100  | 
| word\$1ngrams |  사용할 word n-gram 특징의 수입니다. **선택 사항** 유효한 값: 양수 기본값: 2  | 

# BlazingText 모델 튜닝
<a name="blazingtext-tuning"></a>

하이퍼파라미터 튜닝이라고도 하는 자동 모델 튜닝은 데이터세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 알고리즘에서 계산하는 지표 중에서 목표 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 목표 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## BlazingText 알고리즘에서 계산하는 지표
<a name="blazingtext-metrics"></a>

BlazingText Word2Vec 알고리즘(`skipgram`, `cbow` 및 `batch_skipgram` 모드)은 훈련 중 단일 지표(`train:mean_rho`)에 대해 보고합니다. 이 지표는 [WS-353 단어 유사성 데이터 세트](https://aclweb.org/aclwiki/WordSimilarity-353_Test_Collection_(State_of_the_art))에 대해 계산됩니다. Word2Vec 알고리즘에 대한 하이퍼파라미터 값을 튜닝할 때 이 지표를 목표값으로 사용합니다.

BlazingText 텍스트 분류 알고리즘(`supervised` 모드) 역시 훈련 중 단일 지표(`validation:accuracy`)에 대해 보고합니다. 텍스트 분류 알고리즘에 대한 하이퍼파라미터 값을 튜닝할 때 이러한 지표를 목표값으로 사용합니다.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| train:mean\$1rho |  [WS-353 단어 유사성 데이터 세트](http://alfonseca.org/pubs/ws353simrel.tar.gz)에 대한 중앙값 rho(Spearman 순위 상관 계수)  |  최대화  | 
| validation:accuracy |  사용자 지정 검증 데이터 세트에 대한 분류 정확성  |  최대화  | 

## 튜닝 가능한 BlazingText 하이퍼파라미터
<a name="blazingtext-tunable-hyperparameters"></a>

### Word2Vec 알고리즘의 튜닝 가능한 하이퍼파라미터
<a name="blazingtext-tunable-hyperparameters-word2vec"></a>

Amazon SageMaker AI BlazingText Word2Vec 모델은 다음 하이퍼파라미터를 사용하여 튜닝합니다. Word2Vec 목표 지표에 가장 큰 영향을 미치는 하이퍼파라미터는 `mode`, ` learning_rate`, `window_size`, `vector_dim` 및 `negative_samples`입니다.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 또는 값 | 
| --- | --- | --- | 
| batch\$1size |  `IntegerParameterRange`  |  [8-32]  | 
| epochs |  `IntegerParameterRange`  |  [5-15]  | 
| learning\$1rate |  `ContinuousParameterRange`  |  MinValue: 0.005, MaxValue: 0.01  | 
| min\$1count |  `IntegerParameterRange`  |  [0-100]  | 
| mode |  `CategoricalParameterRange`  |  [`'batch_skipgram'`, `'skipgram'`, `'cbow'`]  | 
| negative\$1samples |  `IntegerParameterRange`  |  [5-25]  | 
| sampling\$1threshold |  `ContinuousParameterRange`  |  MinValue: 0.0001, MaxValue: 0.001  | 
| vector\$1dim |  `IntegerParameterRange`  |  [32-300]  | 
| window\$1size |  `IntegerParameterRange`  |  [1-10]  | 

### 텍스트 분류 알고리즘의 튜닝 가능한 하이퍼파라미터
<a name="blazingtext-tunable-hyperparameters-text_class"></a>

Amazon SageMaker AI BlazingText 텍스트 분류 모델은 다음 하이퍼파라미터를 사용하여 튜닝합니다.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 또는 값 | 
| --- | --- | --- | 
| buckets |  `IntegerParameterRange`  |  [1000000-10000000]  | 
| epochs |  `IntegerParameterRange`  |  [5-15]  | 
| learning\$1rate |  `ContinuousParameterRange`  |  MinValue: 0.005, MaxValue: 0.01  | 
| min\$1count |  `IntegerParameterRange`  |  [0-100]  | 
| vector\$1dim |  `IntegerParameterRange`  |  [32-300]  | 
| word\$1ngrams |  `IntegerParameterRange`  |  [1-3]  | 

# Latent Dirichlet Allocation(LDA) 알고리즘
<a name="lda"></a>

Amazon SageMaker AI Latent Dirichlet Allocation(LDA) 알고리즘은 관측치 세트를 개별 범주의 혼합으로서 설명하려 하는 비지도 학습 알고리즘입니다. LDA는 텍스트 코퍼스 내에 있는 문서에서 공유하는 사용자별 주제를 찾는 데 가장 일반적으로 사용됩니다. 여기서 각 관측치는 문서이고, 특징은 단어의 존재(또는 출현 횟수), 범주는 주제입니다. 메서드가 비지도이기 때문에 주제는 선행하여 지정되지 않고, 인간이 자연적으로 문서를 범주화할 수 있는 방법과 연계되는 것이 보장되지 않습니다. 주제는 각 문서에 출현하는 단어에 걸친 가능성 분포로 학습됩니다. 결과적으로 각 문서는 주제의 혼합으로 설명됩니다.

주제 혼합이 동일한 2개의 다른 문서에 있는 동일한 콘텐츠는 동일하지 않습니다. 전체적으로 이러한 문서가 다른 주제 혼합의 문서와 비교한 것보다 공유된 단어의 서브셋을 더욱 자주 사용할 것으로 예상할 수 있습니다. 이를 통해 LDA는 단어 그룹을 찾고 이를 사용하여 주제를 형성할 수 있습니다. 극단적으로 단순한 예를 들어 문서 세트에서 다음 단어만 출현합니다. *eat*, *sleep*, *play*, *meow*, *bark*. 이 경우 LDA는 다음과 같은 주제를 생성할 수 있습니다.


| **주제** | *eat* | *sleep*  | *play* | *meow* | *bark* | 
| --- | --- | --- | --- | --- | --- | 
| 주제 1  | 0.1  | 0.3  | 0.2  | 0.4  | 0.0  | 
| 주제 2  | 0.2  | 0.1 | 0.4  | 0.0  | 0.3  | 

주제 1에 해당되는 문서는 고양이에 관한 것이라고 추론할 수 있습니다(*meow* 및 *sleep* 선호) 또한 주제 2에 해당되는 문서는 개에 관한 것이라고 추론할 수 있습니다(*play* 및 *bark* 선호). 이러한 주제는 텍스트 어디에서도 개와 고양이라는 단어가 등장하지 않아도 발견될 수 있습니다.

**Topics**
+ [LDA(잠재 디리클레 할당)와 NTM(뉴럴 토픽 모델) 중 선택하기](#lda-or-ntm)
+ [LDA 알고리즘의 입력/출력 인터페이스](#lda-inputoutput)
+ [LDA 알고리즘에 대한 EC2 인스턴스 권장 사항](#lda-instances)
+ [LDA 샘플 노트북](#LDA-sample-notebooks)
+ [LDA 작동 방식](lda-how-it-works.md)
+ [LDA 하이퍼파라미터](lda_hyperparameters.md)
+ [LDA 모델 튜닝](lda-tuning.md)

## LDA(잠재 디리클레 할당)와 NTM(뉴럴 토픽 모델) 중 선택하기
<a name="lda-or-ntm"></a>

주제 모델은 일반적으로 (1) 의미론적 의미를 조리있게 요약하고 (2) 문서를 잘 설명하는 코퍼스에서 주제를 생성하는 데 사용됩니다. 따라서 주제 모델은 복잡도를 최소화하고 주제 일관성을 극대화하는 것을 목표로 합니다.

복잡도 테스트 데이터에서 단어 당 가능도의 기하 평균의 역수를 측정하는 내부 언어 모델링 평가 지표입니다. 복잡도 점수가 낮을수록 일반화 성능이 더 우수하다는 것을 나타냅니다. 연구에 따르면 단어당 계산된 가능도는 인간의 판단과 일치하지 않는 경우가 많으며, 전혀 상관관계가 없을 수 있으므로 주제 일관성이 도입되었습니다. 모델에서 추론된 각 주제는 단어로 구성되며, 주제 일관성은 모델의 해당 특정 주제에 대해 상위 N개 단어까지 계산됩니다. 이는 종종 해당 주제에 있는 단어의 쌍별 단어 유사도 점수의 평균 또는 중앙값으로 정의됩니다(예: 점별 상호 정보(PMI). 유용한 모델은 일관된 주제 또는 주제 일관성 점수가 높은 주제를 생성합니다.

복잡도를 최소화하고 주제 일관성을 극대화하는 주제 모델을 훈련하는 것이 목표이지만 LDA와 NTM에는 상충 관계가 발생하는 경우가 많습니다. Amazon, Dinget 및 그외 다수(2018년)의 최근 연구에 따르면 NTM은 높은 주제 일관성을 달성하는 데 유용하지만 축소된 Gibbs 샘플링으로 LDA를 훈련하면 복잡도가 더 높은 것으로 나타났습니다. 복잡도와 주제 일관성 사이에는 상충 관계가 있습니다. 하드웨어 및 컴퓨팅 파워와 관련된 실용성 관점에서 SageMaker NTM 하드웨어는 LDA보다 유연하며, NTM은 CPU와 GPU에서 실행되고 여러 GPU 인스턴스에서 병렬화할 수 있는 반면 LDA는 단일 인스턴스 CPU 훈련만 지원하기 때문에 더 잘 확장할 수 있습니다.

**Topics**
+ [LDA(잠재 디리클레 할당)와 NTM(뉴럴 토픽 모델) 중 선택하기](#lda-or-ntm)
+ [LDA 알고리즘의 입력/출력 인터페이스](#lda-inputoutput)
+ [LDA 알고리즘에 대한 EC2 인스턴스 권장 사항](#lda-instances)
+ [LDA 샘플 노트북](#LDA-sample-notebooks)
+ [LDA 작동 방식](lda-how-it-works.md)
+ [LDA 하이퍼파라미터](lda_hyperparameters.md)
+ [LDA 모델 튜닝](lda-tuning.md)

## LDA 알고리즘의 입력/출력 인터페이스
<a name="lda-inputoutput"></a>

LDA는 교육 채널에 데이터가 제공될 것을 예상하고, 선택적으로 테스트 채널을 지원하고, 이는 최종 모델에서 점수가 계산됩니다. LDA는 `recordIO-wrapped-protobuf`(밀집 및 희소) 및 `CSV` 파일 형식을 모두 지원합니다. `CSV`의 경우 데이터가 밀집되어야 하고, 레코드 수 \$1 어휘 크기와 동일한 차원이 있어야 합니다.** recordIO-wrapped protobuf를 사용하는 경우 LDA는 파일 또는 파이프 모드에서 훈련할 수 있지만 `CSV` 형식을 사용하는 경우에는 파일 모드에서만 훈련이 가능합니다.

추론의 경우 `text/csv`, `application/json` 및 `application/x-recordio-protobuf` 콘텐츠 유형이 지원됩니다. 희소 데이터는 `application/json` 및 `application/x-recordio-protobuf`로 전달될 수 있습니다. LDA 추론은 `application/json` 또는 `application/x-recordio-protobuf` 예측을 반환하고, 여기에는 각 관측치에 대한 `topic_mixture` 벡터가 포함됩니다.**

훈련 및 추론 형식에 대한 자세한 정보는 [LDA 샘플 노트북](#LDA-sample-notebooks) 섹션을 참조하세요.

## LDA 알고리즘에 대한 EC2 인스턴스 권장 사항
<a name="lda-instances"></a>

LDA는 현재 단일 인스턴스 CPU 훈련만을 지원합니다. CPU 인스턴스는 호스팅/추론에 권장됩니다.

## LDA 샘플 노트북
<a name="LDA-sample-notebooks"></a>

데이터세트에 대해 SageMaker AI Latent Dirichlet Allocation 알고리즘을 훈련하는 방법과 입력 문서의 주제 혼합에 대한 추론을 수행하기 위해 훈련된 모델을 배포하는 방법을 보여주는 샘플 노트북은 [An Introduction to SageMaker AI LDA](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/lda_topic_modeling/LDA-Introduction.html)를 참조하세요. SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 이 인스턴스에 액세스하는 방법에 대한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열면 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인할 수 있습니다. NTM 알고리즘을 사용하는 주제 모델링 예제 노트북은 **Introduction to Amazon algorithms(Amazon 알고리즘 소개)** 섹션에 있습니다. 노트북을 열려면 **사용** 탭을 클릭하고 사본 생성을 선택합니다.

# LDA 작동 방식
<a name="lda-how-it-works"></a>

Amazon SageMaker AI LDA는 관측치 세트를 다른 범주의 혼합으로서 설명하려 하는 비지도 학습 알고리즘입니다. 이러한 범주는 특징에 대한 가능성 분포입니다. LDA는 발생적 가능성 모델로 잠재 변수를 기반으로 한 출력 및 입력의 분포에 대한 모델을 제공하려 함을 의미합니다. 이는 입력의 출력 매핑 방식을 학습하려 하는 차별적 모델과는 반대입니다.

제품 구매를 기반으로 한 고객 클러스터링부터 음악의 자동 화음 분석에 이르는 다양한 작업에 LDA를 사용할 수 있습니다. 하지만 일반적으로 텍스트 코퍼스의 주제 모델링과 관련이 있습니다. 관측치를 문서라고 합니다. 특징 세트를 어휘라고 합니다. 특징을 단어라고 합니다. 또한 결과 범주를 주제라고 합니다.

**참고**  
표제어 추출은 알고리즘 성능과 정확도를 크게 증가시킵니다. 모든 입력 텍스트 데이터에 대한 사전 처리를 고려하세요. 자세한 내용은 [어간 추출 및 표제어 추출](https://nlp.stanford.edu/IR-book/html/htmledition/stemming-and-lemmatization-1.html)을 참고하세요.

LDA 모델은 두 가지 파라미터로 정의됩니다.
+ α - 주제 가능성(해당 문서 내에 있는 각 주제가 발생하는 평균 빈도)의 이전 추정치.
+ β - 문서 코퍼스에서 사용되는 어휘에 대한 가능성 분포가 각 주제에 제공되는 k 주제의 컬렉션. "주제-단어 분포"라고도 합니다.

LDA는 "단어 주머니" 모델로 단어의 순서는 중요하지 않습니다. LDA는 발생적 모델로 각 문서는 주제 혼합 θ ∼ 디리클레(α)을 선택하여 단어별로 생성됩니다.

 문서의 각 단어: 
+  주제 z ∼ 다항(θ) 선택 
+  해당 주제-단어 분포 β\$1z 선택.
+  단어 w ∼ 다항(β\$1z) 가져오기.

모델 훈련 시 목표는 파라미터 α 및 β를 찾는 것입니다. 이는 모델에 의해 텍스트 코퍼스가 생성되는 가능성을 최대화합니다.

LDA 모델 추정에 대한 가장 유명한 메서드는 Gibbs 샘플링 또는 기댓값 최대화(EM) 기법을 사용합니다. Amazon SageMaker AI LDA는 텐서 스펙트럼 분해를 사용합니다. 이는 여러 이점을 제공합니다.
+  **결과에 대한 이론적 보장**. 표준 EM 메서드는 종종 품질이 좋지 않은 국부 최적값으로만 수렴하도록 보장합니다.
+  **쉬운 병렬 처리**. 훈련 및 추론의 입력 문서에 대해 간편하게 분할될 수 있습니다. EM 메서드 및 Gibbs 샘플링 접근 방식은 병렬화가 가능하지만 쉽지 않습니다.
+  **빠름**. EM 메서드의 반복 비용이 낮기는 하지만 수렴율이 느려지는 경향이 있습니다. Gibbs 샘플링은 또한 수렴율이 느리고 많은 수의 샘플을 필요로 합니다.

텐서 분해 알고리즘은 개괄적으로 이 프로세스를 따릅니다.

1.  목표는 코퍼스의 문서에 있는 모멘트를 요약하는 **V** x **V** x **V** 텐서를 계산하는 것입니다. **V**는 어휘 크기(모든 문서의 개별 단어 수)입니다. 이 텐서의 스펙트럼 구성 요소는 LDA 파라미터 α 및 β이고, 이는 문서 코퍼스의 전체 가능성을 최대화합니다. 하지만 단어 크기가 큰 편이기 때문에 이 **V** x **V** x **V** 텐서는 메모리에 저장하기에 매우 큽니다.

1.  대신 1단계 텐서의 2차원 아날로그인 **V** x **V** 모멘트 매트릭스를 사용하여 차원 **V** x **k**의 백색화 매트릭스를 찾습니다. 이 매트릭스는 **V** x **V** 모멘트 매트릭스를 **k** x **k** 단위 매트릭스로 변환하는 데 사용할 수 있습니다. **k**는 모델 내 주제 개수입니다.

1.  동일한 백색화 매트릭스를 사용하여 더욱 작은 **k** x **k** x **k** 텐서를 사용할 수 있습니다. 스펙트럼 분해 시 이 텐서의 구성 요소는 **V** x **V** x **V** 텐서의 구성 요소와 단순 관계에 있습니다.

1.  *Alternating Least Squares*는 더욱 작은 **k** x *k* x **k** 텐서를 분해하는 데 사용됩니다. 이는 메모리 소모 및 속도에 있어 크게 개선됩니다. 스펙트럼 분해의 출력을 "비백색화"함으로써 파라미터 α 및 β를 찾을 수 있습니다.

LDA 모델의 파라미터를 찾은 이후 각 문서에 대한 주제 혼합을 찾을 수 있습니다. 확률 경사 하강을 사용하여 이러한 데이터에 대한 주제 혼합 관측치의 가능성 함수를 최대화합니다.

훈련에서 찾을 주제의 수를 늘리고 결과가 좋지 않은 것을 필터링함으로써 주제의 품질을 개선할 수 있습니다. 이는 실제로 SageMaker AI LDA에서 자동으로 완료됩니다. 25% 더 많은 주제가 컴퓨팅되고 관련성이 가장 높은 디리클레 사전이 반환됩니다. 주제 필터링 및 분석을 수행하려면 주제 수를 늘리고 결과 LDA 모델을 다음과 같이 수정합니다.

```
> import mxnet as mx
> alpha, beta = mx.ndarray.load(‘model.tar.gz’)
> # modify alpha and beta
> mx.nd.save(‘new_model.tar.gz’, [new_alpha, new_beta])
> # upload to S3 and create new SageMaker model using the console
```

LDA 알고리즘과 SageMaker AI 구현에 대한 자세한 내용은 다음 내용을 참조하세요.
+ Animashree Anandkumar, Rong Ge, Daniel Hsu, Sham M Kakade, and Matus Telgarsky. *Tensor Decompositions for Learning Latent Variable Models*, Journal of Machine Learning Research, 15:2773–2832, 2014.
+  David M Blei, Andrew Y Ng, and Michael I Jordan. *Latent Dirichlet Allocation*. Journal of Machine Learning Research, 3(Jan):993–1022, 2003.
+  Thomas L Griffiths and Mark Steyvers. *Finding Scientific Topics*. Proceedings of the National Academy of Sciences, 101(suppl 1):5228–5235, 2004.
+  Tamara G Kolda and Brett W Bader. *Tensor Decompositions and Applications*. SIAM Review, 51(3):455–500, 2009.

# LDA 하이퍼파라미터
<a name="lda_hyperparameters"></a>

`CreateTrainingJob` 요청에서 훈련 알고리즘을 지정합니다. 알고리즘별 하이퍼파라미터를 문자열-문자열 맵으로 지정할 수 있습니다. 다음 표에는 Amazon SageMaker AI에서 제공되는 LDA 훈련 알고리즘에 대한 하이퍼파라미터가 나열되어 있습니다. 자세한 내용은 [LDA 작동 방식](lda-how-it-works.md) 섹션을 참조하세요.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| num\$1topics |  데이터 내에서 찾을 LDA에 대한 주제 수. **필수** 유효한 값: 양수  | 
| feature\$1dim |  입력 문서 코퍼스의 어휘 크기. **필수** 유효한 값: 양수  | 
| mini\$1batch\$1size |  입력 문서 코퍼스의 전체 문서 수. **필수** 유효한 값: 양수  | 
| alpha0 |  집중 파라미터에 대한 초기 추측: 디리클레 사전 요소의 합. 값이 작으면 희소 주제 혼합을 생성할 가능성이 높고, 값이 높으면(1.0보다 큼) 더욱 균일한 조합을 생성합니다. **선택 사항** 유효한 값: 양의 부동 소수점 기본값: 1.0  | 
| max\$1restarts |  알고리즘의 Alternating Least Squares(ALS) 스펙트럼 분해 단계 도중 수행하는 재시작 횟수. 추가 컴퓨팅을 대가로 품질이 더욱 뛰어난 국부 최솟값을 찾는 데 사용될 수 있지만 일반적으로 조정될 수 없습니다. **선택 사항** 유효한 값: 양수 기본값: 10  | 
| max\$1iterations |  알고리즘의 ALS 단계 도중 수행하는 최대 반복 횟수. 추가 컴퓨팅을 대가로 품질이 더욱 뛰어난 최솟값을 찾는 데 사용될 수 있지만 일반적으로 조정될 수 없습니다. **선택 사항** 유효한 값: 양수 기본값: 1000  | 
| tol |  알고리즘의 ALS 단계에 대한 대상 오차 허용성. 추가 컴퓨팅을 대가로 품질이 더욱 뛰어난 최솟값을 찾는 데 사용될 수 있지만 일반적으로 조정될 수 없습니다. **선택 사항** 유효한 값: 양의 부동 소수점 기본값: 1e-8  | 

# LDA 모델 튜닝
<a name="lda-tuning"></a>

하이퍼파라미터 튜닝이라고도 하는 자동 모델 튜닝은 데이터세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 알고리즘에서 계산하는 지표 중에서 목표 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 목표 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

LDA는 관측치 세트(문서)를 다른 범주(주제)의 혼합으로서 설명하려 하는 비지도 주제 모델링 알고리즘입니다. “Per-Word Log-Likelihood”(PWLL) 지표는 학습한 주제 세트(LDA 모델)가 테스트 문서 데이터 세트를 정확하게 설명할 가능성을 측정합니다. PWLL의 값이 클수록 LDA 모델이 테스트 데이터를 설명할 가능성이 커집니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## LDA 알고리즘으로 계산되는 지표
<a name="lda-metrics"></a>

LDA 알고리즘은 훈련 중 단일 지표 `test:pwll`에 대해 보고합니다. 모델을 튜닝할 때 목표 지표로 이 지표를 선택합니다.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| test:pwll | 테스트 데이터 세트에 대한 Per-Word Log-Likelihood. 학습한 LDA 모델이 테스트 데이터 세트를 정확하게 설명할 가능성. | 최대화 | 

## 튜닝 가능한 LDA 하이퍼파라미터
<a name="lda-tunable-hyperparameters"></a>

LDA 알고리즘에 대한 다음 하이퍼파라미터를 튜닝할 수 있습니다. 하이퍼파라미터 `alpha0` 및 `num_topics`은 LDA 목표 지표(`test:pwll`)에 영향을 미칠 수 있습니다. per-word log-likelihood를 최대화하고 정확한 LDA 모델을 생성하는 이러한 하아퍼파라미터의 최적 값을 아직 모르는 경우 자동 모델 튜닝을 통해 최적 값을 찾을 수 있습니다.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| alpha0 | ContinuousParameterRanges | MinValue: 0.1, MaxValue: 10 | 
| num\$1topics | IntegerParameterRanges | MinValue: 1, MaxValue: 150 | 

# Neural Topic Model(NTM) 알고리즘
<a name="ntm"></a>

Amazon SageMaker AI NTM은 통계적 분포를 기반으로 한 단어 그룹이 포함된 *주제*로 문서의 코퍼스를 구성하는 데 사용되는 비지도 학습 알고리즘입니다. 예를 들어, "오토바이", "자동차", "기차", "주행 거리" 및 "속도" 등과 같은 단어가 자주 발생하는 문서는 "운송"에 대한 주제를 공유할 가능성이 큽니다. 주제 모델링은 감지된 주제를 기반으로 문서를 분류 또는 요약하거나, 주제의 유사성을 기반으로 정보를 검색하거나 콘텐츠를 추천하는 데 사용할 수 있습니다. NTM이 학습하는 문서의 주제는 코퍼스 내에서 관측되는 단어 분포에서 추론되기 때문에 이러한 주제는 잠재 표상으로 특징이 지정됩니다.** 주제의 의미는 주로 포함된 상위 단어를 검사하여 추론됩니다. 비지도 메서드이기 때문에 주제 자체가 아닌 주제의 수만이 사전 지정됩니다. 추가로 주제는 인간이 자연적으로 문서를 범주화할 수 있는 방법과 연계되는 것이 보장되지 않습니다.

주제 모델링은 학습된 주제 측면에서 대량의 문서 코퍼스의 콘텐츠를 시각화하는 방법을 제공합니다. 각 주제와 관련이 있는 문서는 소프트 주제 레이블을 기반으로 인덱싱 또는 검색될 수 있습니다. 문서의 잠재 표상을 사용하여 주제 공간 내 유사한 문서를 찾을 수 있습니다. 또한 누제 모델이 학습하는 문서의 잠재 표상을 문서 분류자와 같은 다른 지도 알고리즘의 입력으로 사용할 수 있습니다. 문서의 잠재 표상이 이러한 표상을 일부 기반으로 하는 기본 문서 알고리즘의 의미를 포착할 것으로 예상되기 때문에 어휘 특징만을 기반으로 하는 것에 비해 성능이 더 뛰어날 것으로 예상됩니다.

주제 모델링에 대해 Amazon SageMaker AI NTM 및 LDA 알고리즘 모두 사용할 수 있지만 둘은 별도의 알고리즘이고 동일한 입력 데이터에 대해 다른 결과를 낼 것으로 예상할 수 있습니다.

NTM의 수학적 계산에 대한 자세한 정보는 [Neural Variational Inference for Text Processing](https://arxiv.org/pdf/1511.06038.pdf)을 참조하세요.

**Topics**
+ [NTM 알고리즘의 입력/출력 인터페이스](#NTM-inputoutput)
+ [NTM 알고리즘에 대한 EC2 인스턴스 권장 사항](#NTM-instances)
+ [NTM 샘플 노트북](#NTM-sample-notebooks)
+ [NTM 하이퍼파라미터](ntm_hyperparameters.md)
+ [NTM 모델 튜닝](ntm-tuning.md)
+ [NTM 응답 형식](ntm-in-formats.md)

## NTM 알고리즘의 입력/출력 인터페이스
<a name="NTM-inputoutput"></a>

Amazon SageMaker AI Neural Topic Model은 훈련, 검증, 테스트 및 보조라는 4가지 데이터 채널을 지원합니다. validation, test 및 auxiliary data 채널은 선택 사항입니다. 이러한 선택적 채널 중 하나를 지정한 경우 해당 채널의 `S3DataDistributionType` 파라미터 값을 `FullyReplicated`로 설정합니다. 검증 데이터를 제공하는 경우 모든 epoch마다 이 데이터가 로깅되고, 모델은 검증 손실이 개선되는 것을 감지하는 대로 훈련을 중지합니다. 검증 데이터를 제공하지 않는 경우 알고리즘은 훈련 데이터를 기반으로 조기 중지하지만 이는 효율성이 떨어질 수 있습니다. 테스트 데이터를 제공한 경우 알고리즘은 최종 모델에서 테스트 손실을 보고합니다.

NTM의 train, validation 및 test data 채널은 `recordIO-wrapped-protobuf`(밀집 및 희소) 및 `CSV` 파일 형식을 둘 다 지원합니다. `CSV` 형식의 경우 각 행은 해당 문서에서 존재하지 않는 단어는 0개로 계산해 조밀하게 표현되어야 하고, (레코드 수) \$1 (어휘 크기)와 동일한 차원을 가져야 합니다. 파일 모드 또는 파이프 모드를 사용하여 `recordIO-wrapped-protobuf` 또는 `CSV`로 형식이 지정된 데이터에 대해 모델을 훈련할 수 있습니다. auxiliary 채널은 어휘가 포함된 텍스트 파일을 제공하는 데 사용됩니다. 사용자는 어휘 파일을 제공하여 정수 ID 대신 로그에 출력된 각 주제에 대한 상위 단어를 볼 수 있습니다. 또한 어휘 파일이 있으면 NTM이 각 주제의 상위 단어 간 유사성을 효율적으로 캡처하는, 로그에 표시되는 새로운 지표인 Word Embedding Topic Coherence(WETC) 점수를 계산할 수 있습니다. auxiliary 채널의 `ContentType`은 `text/plain`이고, 각 행에는 단일 단어가 포함되어 있으며 데이터에 제공되는 정수 ID에 해당하는 순서로 정렬됩니다. 어휘 파일의 이름은 `vocab.txt`여야 하고 현재 UTF-8 인코딩만 지원됩니다.

추론의 경우, `text/csv`, `application/json`, `application/jsonlines` 및 `application/x-recordio-protobuf` 콘텐츠 유형이 지원됩니다. 희소 데이터는 `application/json` 및 `application/x-recordio-protobuf`로 전달될 수 있습니다. NTM 추론은 `application/json` 또는 `application/x-recordio-protobuf` 예측을 반환하고, 여기에는 각 관측치에 대한 `topic_weights` 벡터가 포함됩니다.**

보조 채널 및 WETC 점수 사용에 대한 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/machine-learning/amazon-sagemaker-neural-topic-model-now-supports-auxiliary-vocabulary-channel-new-topic-evaluation-metrics-and-training-subsampling/)을 참조하세요. WETC 점수 계산 방법에 대한 자세한 정보는 [Coherence-Aware Neural Topic Modeling](https://arxiv.org/pdf/1809.02687.pdf)을 참조하세요. Amazon SageMaker AI Neural Topic Model에는 이 문서에서 설명한 쌍으로 이루어진 WETC를 사용했습니다.

입력 및 출력 파일 형식에 대한 자세한 정보는 [NTM 응답 형식](ntm-in-formats.md)(추론의 경우) 및 [NTM 샘플 노트북](#NTM-sample-notebooks) 섹션을 참조하세요.

## NTM 알고리즘에 대한 EC2 인스턴스 권장 사항
<a name="NTM-instances"></a>

NTM 훈련은 GPU 및 CPU 인스턴스 유형을 모두 지원합니다. GPU 인스턴스를 권장하지만 특정 워크로드의 경우 CPU 인스턴스의 훈련 비용이 더 낮을 수 있습니다. CPU 인스턴스는 추론에 효율적입니다. NTM 훈련은 훈련 및 추론을 위한 P2, P3, G4dn 및 G5 GPU 인스턴스 패밀리를 지원합니다.

## NTM 샘플 노트북
<a name="NTM-sample-notebooks"></a>

주제 분포가 알려진 합성 데이터 소스에서 문서의 주제를 찾는 데 SageMaker AI NTM 알고리즘을 사용하는 샘플 노트북은 [Introduction to Basic Functionality of NTM](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/ntm_synthetic/ntm_synthetic.html)을 참조하세요. SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 이 인스턴스에 액세스하는 방법에 대한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열면 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인할 수 있습니다. NTM 알고리즘을 사용하는 주제 모델링 예제 노트북은 **Introduction to Amazon algorithms(Amazon 알고리즘 소개)** 섹션에 있습니다. 노트북을 열려면 **사용** 탭을 클릭하고 사본 생성을 선택합니다.

# NTM 하이퍼파라미터
<a name="ntm_hyperparameters"></a>

다음 표에는 Amazon SageMaker AI Neural Topic Model(NTM) 알고리즘에 대해 설정할 수 있는 하이퍼파라미터가 나열되어 있습니다.


| 파라미터 이름 | 설명 | 
| --- | --- | 
|  `feature_dim`  |  데이터세트의 어휘 크기. **필수** 유효한 값: 양의 정수(최소: 1, 최대 1,000,000)  | 
| num\$1topics |  필수 주제의 수. **필수** 유효한 값: 양의 정수(최소: 2, 최대 1000)  | 
| batch\$1norm |  훈련 도중 배치 정규화 사용 여부. **선택 사항** 유효한 값: *true* 또는 *false* 기본값: *false*  | 
| clip\$1gradient |  각 그라디언트 구성 요소에 대한 최대 크기 **선택 사항** 유효한 값: 부동 소수점(최소: 1e-3) 기본값: 무제한  | 
| encoder\$1layers |  인코더에 있는 계층의 수와 각 계층의 출력 크기. *auto*로 설정된 경우 알고리즘은 3 x `num_topics` 및 2 x `num_topics` 크기의 계층 2개를 사용합니다. **선택 사항** 유효한 값: 쉼표로 구분된 양의 정수 또는 *auto* 기본값: *auto*  | 
| encoder\$1layers\$1activation |  인코더 계층에서 사용할 활성화 함수. **선택 사항** 유효한 값:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/ntm_hyperparameters.html) 기본값: `sigmoid`  | 
| epochs |  훈련 데이터의 최대 전달 횟수. **선택 사항** 유효한 값: 양의 정수(최소: 1) 기본값: 50  | 
| learning\$1rate |  옵티마이저에 대한 학습률. **선택 사항** 유효한 값: 부동 소수점(최소: 1e-6, 최대: 1.0) 기본값: 0.001  | 
| mini\$1batch\$1size |  각 미니 배치에 있는 예제의 수. **선택 사항** 유효한 값: 양의 정수(최소: 1, 최대 10000) 기본값: 256  | 
| num\$1patience\$1epochs |  조기 중지 기준이 평가되는 연속적 epoch 수. 마지막 `num_patience_epochs`개의 epoch 수 내에서 손실 함수의 변화가 지정된 `tolerance` 미만으로 떨어지면 조기 중지가 트리거됩니다. 조기 중지를 비활성화하려면 `num_patience_epochs`를 `epochs`보다 높은 값으로 설정하세요. **선택 사항** 유효한 값: 양의 정수(최소: 1) 기본값: 3  | 
| optimizer |  훈련에 사용할 옵티마이저 **선택 사항** 유효한 값: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/ntm_hyperparameters.html) 기본값: `adadelta`  | 
| rescale\$1gradient |  그라디언트에 대한 크기 재조정 요소. **선택 사항** 유효한 값: 부동 소수점(최소: 1e-3, 최대: 1.0) 기본값: 1.0  | 
| sub\$1sample |  훈련을 위해 epoch당 샘플링할 훈련 데이터의 일부. **선택 사항** 유효한 값: 부동 소수점(최소: 0.0, 최대: 1.0) 기본값: 1.0  | 
| tolerance |  손실 함수의 최대 상대 변화. 마지막 `num_patience_epochs`개의 epoch 수 내에서 손실 함수의 변화가 이 값 미만으로 떨어지면 조기 중지가 트리거됩니다. **선택 사항** 유효한 값: 부동 소수점(최소: 1e-6, 최대: 0.1) 기본값: 0.001  | 
| weight\$1decay |   가중치 감소 계수. L2 정규화를 추가합니다. **선택 사항** 유효한 값: 부동 소수점(최소: 0.0, 최대: 1.0) 기본 값: 0.0  | 

# NTM 모델 튜닝
<a name="ntm-tuning"></a>

하이퍼파라미터 튜닝이라고도 하는 자동 모델 튜닝은 데이터세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 알고리즘에서 계산하는 지표 중에서 목표 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 목표 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

Amazon SageMaker AI NTM은 문서의 코퍼스와 같은 대량의 별도 데이터 모음의 잠재 표상을 학습하는 비지도 학습 알고리즘입니다. 잠재 표상은 직접 측정되지 않고 추론된 변수를 사용하여 데이터세트의 관측치를 모델링합니다. NTM에 대한 자동 모델 튜닝을 통해 훈련 또는 검증 데이터에 대한 손실을 최소화하는 모델을 찾을 수 있습니다. 훈련 손실은 모델이 훈련 데이터에 잘 맞는 정도를 측정합니다.** 검증 손실은 훈련되지 않은 데이터에 대해 모델을 일반화할 수 있는 정도를 측정합니다.** 훈련 손실이 낮으면 모델이 훈련 데이터에 잘 맞는 것입니다. 검증 손실이 낮으면 모델이 훈련 데이터에 과적합되지 않아 훈련하지 않은 문서를 성공적으로 모델링할 수 있어야 합니다. 일반적으로, 두 손실 모두 작은 것이 바람직합니다. 그러나 훈련 손실을 너무 최소화하면 과적합이 발생하여 검증 손실이 커져 모델의 일반성이 줄어들 수 있습니다.

모델 튜닝에 대한 자세한 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## NTM 알고리즘으로 계산되는 지표
<a name="ntm-metrics"></a>

NTM 알고리즘은 훈련 중 계산되는 단일 지표 `validation:total_loss`를 보고합니다. 총 손실은 재구성 손실과 Kullback-Leibler 발산의 합입니다. 하이퍼파라미터 값을 튜닝할 때 목표 지표로 이 지표를 선택합니다.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| validation:total\$1loss |  검증 세트에 대한 총 손실  |  최소화  | 

## 튜닝 가능한 NTM 하이퍼파라미터
<a name="ntm-tunable-hyperparameters"></a>

NTM 알고리즘에 대한 다음 하이퍼파라미터를 튜닝할 수 있습니다. 일반적으로 `mini_batch_size`를 낮게 설정하고, `learning_rate` 값을 작게 설정하면 훈련 시간이 길어질 수 있긴 하지만 검증 손실이 작아집니다. 검증 손실이 낮다고 해서 반드시 인간이 해석하는 것처럼 더욱 일관된 주제가 생성되는 것은 아닙니다. 훈련 및 검증 손실에 대한 다른 하이퍼파라미터의 영향은 데이터세트마다 다를 수 있습니다. 호환 가능한 값을 확인하려면 [NTM 하이퍼파라미터](ntm_hyperparameters.md) 섹션을 참조하세요.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| encoder\$1layers\$1activation |  CategoricalParameterRanges  |  ['sigmoid', 'tanh', 'relu']  | 
| learning\$1rate |  ContinuousParameterRange  |  MinValue: 1e-4, MaxValue: 0.1  | 
| mini\$1batch\$1size |  IntegerParameterRanges  |  MinValue: 16, MaxValue:2048  | 
| optimizer |  CategoricalParameterRanges  |  ['sgd', 'adam', 'adadelta']  | 
| rescale\$1gradient |  ContinuousParameterRange  |  MinValue: 0.1, MaxValue: 1.0  | 
| weight\$1decay |  ContinuousParameterRange  |  MinValue: 0.0, MaxValue: 1.0  | 

# NTM 응답 형식
<a name="ntm-in-formats"></a>

모든 Amazon SageMaker AI 기본 제공 알고리즘은 [공통 데이터 형식 - 추론](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)에서 설명하는 공통 입력 추론 형식을 따릅니다. 이 주제에는 SageMaker AI NTM 알고리즘에 사용 가능한 출력 형식 목록이 포함되어 있습니다.

## JSON 응답 형식
<a name="ntm-json"></a>

```
{
    "predictions":    [
        {"topic_weights": [0.02, 0.1, 0,...]},
        {"topic_weights": [0.25, 0.067, 0,...]}
    ]
}
```

## JSONLINES 응답 형식
<a name="ntm-jsonlines"></a>

```
{"topic_weights": [0.02, 0.1, 0,...]}
{"topic_weights": [0.25, 0.067, 0,...]}
```

## RECORDIO 응답 형식
<a name="ntm-recordio"></a>

```
[
    Record = {
        features = {},
        label = {
            'topic_weights': {
                keys: [],
                values: [0.25, 0.067, 0, ...]  # float32
            }
        }
    },
    Record = {
        features = {},
        label = {
            'topic_weights': {
                keys: [],
                values: [0.25, 0.067, 0, ...]  # float32
            }
        }
    }  
]
```

# Object2Vec 알고리즘
<a name="object2vec"></a>

Amazon SageMaker AI Object2Vec 알고리즘은 고도로 사용자 지정 가능한 사용자 범용 신경망 임베딩 알고리즘입니다. 고차원 객체의 저차원 밀도 임베딩을 학습할 수 있습니다. 임베딩은 원래 스페이스에서 객체 쌍 간 관계의 의미를 임베딩 스페이스에 저장하는 방식으로 학습됩니다. 학습된 임베딩을 사용하여 예를 들어 객체의 가장 가까운 이웃을 효율적으로 계산하고 저차원 스페이스에서 관련 객체의 자연 클러스터를 시각화할 수 있습니다. 또한 다운스트림 지도 작업(예: 분류 또는 회귀)에서 해당 객체의 특징으로 임베딩을 사용할 수도 있습니다.

Object2Vec은 SageMaker AI [BlazingText 알고리즘](blazingtext.md)에서 최적화되는 단어에 대해 잘 알려진 Word2Vec 임베딩 기법을 일반화합니다. 일부 특정 사용 사례에 Object2Vec를 적용하는 방법을 설명하는 블로그 게시물을 보려면 [Introduction to Amazon SageMaker AI Object2Vec](https://aws.amazon.com/blogs/machine-learning/introduction-to-amazon-sagemaker-object2vec/)를 참조하세요.

**Topics**
+ [Object2Vec 알고리즘에 대한 입력/출력 인터페이스](#object2vec-inputoutput)
+ [Object2Vec 알고리즘에 대한 EC2 인스턴스 권장 사항](#object2vec--instances)
+ [Object2Vec 샘플 노트북](#object2vec-sample-notebooks)
+ [Object2Vec 작동 방식](object2vec-howitworks.md)
+ [Object2Vec 하이퍼파라미터](object2vec-hyperparameters.md)
+ [Object2Vec 모델 튜닝](object2vec-tuning.md)
+ [Object2Vec 훈련을 위한 데이터 형식](object2vec-training-formats.md)
+ [Object2Vec 추론을 위한 데이터 형식](object2vec-inference-formats.md)
+ [Object2Vec에 대한 인코더 임베딩](object2vec-encoder-embeddings.md)

## Object2Vec 알고리즘에 대한 입력/출력 인터페이스
<a name="object2vec-inputoutput"></a>

Object2Vec은 다음 예를 포함해 여러 가지 입력 데이터 형식에 사용할 수 있습니다.


| 입력 데이터 형식 | 예제 | 
| --- | --- | 
|  문장-문장 페어  | “여러 명의 수컷이 경기하는 축구 경기.” 그리고 “몇몇 남자들이 스포츠를 하고 있어요.” | 
|  레이블-시퀀스 페어  | 영화 "타이타닉"의 장르 태그(예: "로맨스", "드라마")와 간단한 설명: "제임스 카메론 감독의 타이타닉은 R.M.S. 타이타닉 호의 비운의 첫 항해를 무대로 펼쳐지는 액션으로 가득한 서사. 당시 가장 호화로운 꿈의 여객선 타이타닉 호는 1912년 4월 15일 새벽 침몰하여 1,500명이 차디찬 북해 바다에서 목숨을 잃었다." | 
|  고객-고객 페어  |  Jane의 고객 ID와 Jackie의 고객 ID.  | 
|  제품-제품 페어  |  축구의 제품 ID와 농구의 제품 ID.  | 
|  항목 검토 사용자-항목 페어  |  사용자의 ID와 그녀가 구매한 아이템(예: 사과, 배, 오렌지).  | 

입력 데이터를 지원되는 형식으로 변환하려면 사전 처리해야 합니다. 현재, Object2Vec은 기본적으로 두 가지 입력 유형을 지원합니다.
+ 단일 `integer-id`의 목록으로 표시되는 이산 토큰. 예를 들어 `[10]`입니다.
+ `integer-ids`의 목록으로 표시되는 이산 토큰의 시퀀스. 예를 들어 `[0,12,10,13]`입니다.

각 페어의 객체는 비대칭일 수 있습니다. 예를 들어 페어는 (토큰, 시퀀스) 또는 (토큰, 토큰) 또는 (시퀀스, 시퀀스)일 수 있습니다. 토큰 입력을 위해 이 알고리즘을 호환 가능한 인코더로 간단한 임베딩을 지원합니다. 토큰 벡터의 시퀀스를 위해 이 알고리즘은 인코더로 다음을 지원합니다.
+  평균 풀링 임베딩
+  계층적 컨볼루션 신경망(CNN)
+  Multi-layered bidirectional long short-term memory(BiLSTM) 

각 페어의 입력 레이블은 다음 중 하나일 수 있습니다.
+ 페어 내 객체 간 관계를 표현하는 카테고리 레이블 
+ 두 객체 간의 유사성 강도를 표현하는 점수 

분류에 사용되는 범주형 레이블에 대해 이 알고리즘은 교차 엔트로피 손실 함수를 지원합니다. 회귀에 사용되는 순위/점수 기반 레이블에 대해 이 알고리즘은 평균 제곱근 오차(MSE) 손실 함수를 지원합니다. 모델 훈련 작업을 생성할 때 `output_layer` 하이퍼파라미터를 사용하여 이러한 손실 함수를 지정합니다.

## Object2Vec 알고리즘에 대한 EC2 인스턴스 권장 사항
<a name="object2vec--instances"></a>

사용하는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 유형은 훈련 또는 추론 실행 여부에 따라 달라집니다.

CPU에서 Object2Vec 알고리즘을 사용하여 모델을 훈련하는 경우 ml.m5.2xlarge 인스턴스로 시작합니다. GPU에서 훈련하는 경우 ml.p2.xlarge 인스턴스로 시작합니다. 이 인스턴스에서 훈련이 너무 오래 걸리면 더 큰 인스턴스를 사용할 수 있습니다. 현재 Object2Vec 알고리즘은 단일 머신에서만 훈련할 수 있습니다. 여러 GPU에 대한 지원을 제공합니다. Object2Vec은 훈련 및 추론을 위한 P2, P3, G4dn 및 G5 GPU 인스턴스 패밀리를 지원합니다.

딥 신경망을 가진 훈련된 Object2Vec 모델을 사용한 추론의 경우, ml.p3.2xlarge GPU 인스턴스를 사용하는 것이 좋습니다. GPU 메모리 희소성으로 인해 `INFERENCE_PREFERRED_MODE` 환경 변수를 지정하여 [GPU 최적화: 분류 또는 회귀](object2vec-inference-formats.md#object2vec-inference-gpu-optimize-classification) 또는 [GPU 최적화: 인코더 임베딩](object2vec-encoder-embeddings.md#object2vec-inference-gpu-optimize-encoder-embeddings) 추론 네트워크가 GPU에 로드되는지 여부를 최적화할 수 있습니다.

## Object2Vec 샘플 노트북
<a name="object2vec-sample-notebooks"></a>
+ [Object2Vec을 사용하여 문장을 고정 길이 임베딩으로 인코딩하기](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/object2vec_sentence_similarity/object2vec_sentence_similarity.html)

# Object2Vec 작동 방식
<a name="object2vec-howitworks"></a>

Amazon SageMaker AI Object2Vec 알고리즘을 사용할 때 데이터 처리, 모델 훈련, 추론 생성의 표준 워크플로를 따릅니다.

**Topics**
+ [1단계: 데이터 처리](#object2vec-step-1-data-preprocessing)
+ [2단계: 모델 훈련](#object2vec-step-2-training-model)
+ [3단계: 추론 생성](#object2vec-step-3-inference)

## 1단계: 데이터 처리
<a name="object2vec-step-1-data-preprocessing"></a>

사전 처리 중에 데이터를 [Object2Vec 훈련을 위한 데이터 형식](object2vec-training-formats.md)에서 지정한 [JSON 행](http://jsonlines.org/) 텍스트 파일 형식으로 변환하세요. 또한 훈련 중 최고의 정확도를 얻기 위해서는 모델에 데이터를 제공하기 전에 데이터를 무작위로 섞으세요. 어떻게 무작위 순열을 생성하는지는 언어에 따라 다릅니다. Python의 경우 `np.random.shuffle`을 사용할 수 있고, Unix의 경우 `shuf`를 사용할 수 있습니다.

## 2단계: 모델 훈련
<a name="object2vec-step-2-training-model"></a>

SageMaker AI Object2Vec 알고리즘에는 다음과 같은 주요 구성 요소가 있습니다.
+ **입력 채널 2개** - 입력 채널은 동일하거나 다른 유형의 객체 쌍을 입력으로 가져와 독립적이고 사용자 지정 가능한 인코더에 전달합니다.
+ **인코더 2개** - 2개의 인코더 enc0 및 enc1이 각 객체를 고정된 길이의 임베딩 벡터로 변환합니다. 페어 내 객체의 인코딩된 임베딩은 비교기로 전달됩니다.
+ **비교기** - 비교기는 임베딩을 여러 방식으로 비교하여 페어 객체 간의 관계 강도를 나타내는 점수를 출력합니다. 문장 페어의 출력 점수에서 예를 들어 1은 문장 페어 간의 강한 관계를 나타내고, 0은 약한 관계를 나타냅니다.

훈련 중 이 알고리즘은 객체 쌍 및 그 관계 레이블이나 점수를 입력으로 수락합니다. 앞서 설명한 대로 각 페어의 객체는 유형이 다를 수 있습니다. 두 인코더 모두의 입력이 동일한 토큰 수준 단위로 구성된 경우 훈련 작업을 생성할 때 `tied_token_embedding_weight` 하이퍼파라미터를 `True`로 설정하여 공유 토큰 임베딩 계층을 사용할 수 있습니다. 예를 들어 모두가 단어 토큰 수준 단위를 가지는 문장을 비교할 때 이것이 가능합니다. 지정된 비율로 음수 샘플을 생성하려면 `negative_sampling_rate` 하이퍼파라미터를 원하는 양수 샘플 대비 음수 샘플 비율로 설정합니다. 이 하이퍼파라미터는 훈련 데이터에서 관찰되는 양수 샘플과 관찰될 가능성이 없는 음수 샘플을 구별하는 학습을 촉진합니다.

객체 페어는 해당 객체의 입력 유형과 호환되는 사용자 지정 가능한 독립적 인코더를 통해 전달됩니다. 인코더는 페어의 각 객체를 길이가 같은 고정된 길이의 임베딩 벡터로 변환합니다. 벡터 페어는 비교기 연산자로 전달되고, 여기서 `comparator_list` 하이퍼파라미터에 지정된 값을 사용하여 단일 벡터로 연산됩니다. 연산된 벡터는 다중 계층 퍼셉트론(MLP) 계층을 통해 전달되고, 여기서 손실 함수가 생성된 출력을 제공된 레이블과 비교합니다. 이 비교는 모델이 예측한 페어 객체 간 강도를 평가합니다. 다음 그림은 이 워크플로를 보여 줍니다.

![\[Object2Vec 알고리즘 아키텍처 - 데이터 입력에서 점수까지\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/object2vec-training-image.png)


## 3단계: 추론 생성
<a name="object2vec-step-3-inference"></a>

모델 훈련 후, 훈련된 인코더를 사용하여 입력 객체를 사전 처리하거나 두 가지 유형의 추론을 수행할 수 있습니다.
+ 해당 인코더를 사용하여 singleton 입력 객체를 길이가 고정된 임베딩으로 변환
+ 쌍을 이루는 입력 객체 간 관계 레이블 또는 점수 예측

추론 서버는 입력 데이터를 기반으로 어떤 유형이 요청되는지 자동으로 파악합니다. 임베딩을 출력으로 가져오려면 입력을 하나만 제공합니다. 관계 레이블 또는 점수를 예측하려면 두 입력을 페어로 제공합니다.

# Object2Vec 하이퍼파라미터
<a name="object2vec-hyperparameters"></a>

`CreateTrainingJob` 요청에서 훈련 알고리즘을 지정합니다. 알고리즘별 하이퍼파라미터를 문자열-문자열 맵으로 지정할 수 있습니다. 다음 표에는 Object2Vec 훈련 알고리즘의 하이퍼파라미터가 나와 있습니다.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| enc0\$1max\$1seq\$1len |  enc0 인코더에 대한 최대 시퀀스 길이. **필수** 유효한 값: 1 ≤ 정수 ≤ 5000  | 
| enc0\$1vocab\$1size |  enc0 토큰의 어휘 크기. **필수** 유효한 값: 2 ≤ 정수 ≤ 3000000  | 
| bucket\$1width |  버킷팅이 활성화된 경우 데이터 시퀀스 길이 간에 허용되는 차이. 버킷팅을 활성화하려면 이 파라미터에 0이 아닌 값을 지정합니다. **선택 사항** 유효한 값: 0 ≤ 정수 ≤ 100 기본값: 0(버킷팅 없음)  | 
| comparator\$1list |  두 임베딩을 비교하는 방식을 사용자 지정하는 데 사용되는 목록. Object2Vec 비교기 연산자 계층은 두 인코더 모두로부터 임베딩을 입력으로 취하여 단일 벡터를 출력합니다. 이 벡터는 하위 벡터의 결합입니다. `comparator_list`에 전달되는 값과 전달되는 순서가 이들 하위 벡터가 연산되는 방법을 결정합니다. 예를 들어 `comparator_list="hadamard, concat"`일 경우, 비교기 연산자가 연속적인 두 인코딩과 그들의 아다마르 곱(Hadamard product)을 연쇄하여 벡터를 구성합니다. 한편, `comparator_list="hadamard"`일 경우 비교기 연산자는 두 인코딩만의 아다마르 곱(Hadamard product)으로 벡터를 구성합니다. **선택 사항** 유효한 값: 세가지 바이너리 연산자 `hadamard`, `concat` 또는 `abs_diff`의 임의의 이름 조합을 포함하는 문자열. Object2Vec 알고리즘에서는 현재 두 벡터 인코딩이 동일한 차원을 가져야 합니다. 이러한 연산자는 다음과 같이 하위 벡터를 산출합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/object2vec-hyperparameters.html) 기본값: `"hadamard, concat, abs_diff"`  | 
| dropout |  네트워크 계층에 대한 드롭아웃 비율. *드롭아웃*은 공동 의존 뉴런을 잘라내 과적합을 줄이는, 신경망에 사용되는 정규화의 한 가지 형태입니다. **선택 사항** 유효한 값: 0.0 ≤ 부동 소수점 ≤ 1.0 기본 값: 0.0  | 
| early\$1stopping\$1patience |  조기 중지 전에 허용되는 개선 없는 연속 epoch 수가 적용됩니다. 개선은 `early_stopping_tolerance` 하이퍼파라미터를 사용하여 정의됩니다. **선택 사항** 유효한 값: 1 ≤ 정수 ≤ 5 기본값: 3  | 
| early\$1stopping\$1tolerance |  `early_stopping_patience` 하이퍼파라미터 concludes에 지정된 연속된 epoch 개수 이후 조기 중지를 피하기 위해 알고리즘이 연속 epoch 간에 획득해야 하는 손실 함수의 감소 **선택 사항** 유효한 값: 0.000001 ≤ 부동 소수점 ≤ 0.1 기본 값: 0.01  | 
| enc\$1dim |  임베딩 계층의 출력 차원 **선택 사항** 유효한 값: 4 ≤ 정수 ≤ 10000 기본값: 4096  | 
| enc0\$1network |  enc0 인코더의 네트워크 모델 **선택 사항** 유효값: `hcnn`, `bilstm` 또는 `pooled_embedding` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/object2vec-hyperparameters.html) 기본값: `hcnn`  | 
| enc0\$1cnn\$1filter\$1width |  컨볼루션 신경망(CNN) enc0 인코더의 필터 너비 **조건** 유효한 값: 1 ≤ 정수 ≤ 9 기본값: 3  | 
| enc0\$1freeze\$1pretrained\$1embedding |  사전 훈련된 임베딩 가중치로 enc0을 동결할지 여부 **조건** 유효한 값: `True` 또는 `False` 기본값: `True`  | 
| enc0\$1layers  |  enc0 인코더의 계층 수. **조건** 유효한 값: `auto` 또는 1 ≤ 정수 ≤ 4 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/object2vec-hyperparameters.html) 기본값: `auto`  | 
| enc0\$1pretrained\$1embedding\$1file |  보조 데이터 채널 내 사전 훈련된 enc0 토큰 임베딩 파일의 파일 이름 **조건** 유효한 값: 영숫자 문자, 밑줄 또는 마침표가 포함된 문자열. [A-Za-z0-9\$1.\$1\$1]  기본값: ""(빈 문자열)  | 
| enc0\$1token\$1embedding\$1dim |  enc0 토큰 임베딩 계층의 출력 차원 **조건** 유효한 값: 2 ≤ 정수 ≤ 1000 기본값: 300  | 
| enc0\$1vocab\$1file |  사전 훈련된 enc0 토큰 임베딩 벡터를 숫자 어휘 ID로 매핑하기 위한 어휘 파일 **조건** 유효한 값: 영숫자 문자, 밑줄 또는 마침표가 포함된 문자열. [A-Za-z0-9\$1.\$1\$1]  기본값: ""(빈 문자열)  | 
| enc1\$1network |  enc1 인코더의 네트워크 모델. enc1 인코더가 동일한 네트워크 모델을 enc0으로 사용하기 원할 경우(하이퍼파라미터 값을 포함) 값을 `enc0`으로 설정합니다.  enc0 및 enc1 인코더 네트워크가 대칭 아키텍처를 갖는 경우에도 이들 네트워크의 파라미터 값을 공유할 수 없습니다.  **선택 사항** 유효한 값: `enc0`, `hcnn`, `bilstm` 또는 `pooled_embedding` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/object2vec-hyperparameters.html) 기본값: `enc0`  | 
| enc1\$1cnn\$1filter\$1width |  CNN enc1 인코더의 필터 너비 **조건** 유효한 값: 1 ≤ 정수 ≤ 9 기본값: 3  | 
| enc1\$1freeze\$1pretrained\$1embedding |  사전 훈련된 임베딩 가중치로 enc1을 동결할지 여부 **조건** 유효한 값: `True` 또는 `False` 기본값: `True`  | 
| enc1\$1layers  |  enc1 인코더의 계층 수 **조건** 유효한 값: `auto` 또는 1 ≤ 정수 ≤ 4 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/object2vec-hyperparameters.html) 기본값: `auto`  | 
| enc1\$1max\$1seq\$1len |  enc1 인코더에 대한 최대 시퀀스 길이. **조건** 유효한 값: 1 ≤ 정수 ≤ 5000  | 
| enc1\$1pretrained\$1embedding\$1file |  보조 데이터 채널 내 사전 훈련된 enc1 토큰 임베딩 파일의 이름 **조건** 유효한 값: 영숫자 문자, 밑줄 또는 마침표가 포함된 문자열. [A-Za-z0-9\$1.\$1\$1]  기본값: ""(빈 문자열)  | 
| enc1\$1token\$1embedding\$1dim |  enc1 토큰 임베딩 계층의 출력 차원 **조건** 유효한 값: 2 ≤ 정수 ≤ 1000 기본값: 300  | 
| enc1\$1vocab\$1file |  사전 훈련된 enc1 토큰 임베딩을 어휘 ID로 매핑하기 위한 어휘 파일 **조건** 유효한 값: 영숫자 문자, 밑줄 또는 마침표가 포함된 문자열. [A-Za-z0-9\$1.\$1\$1]  기본값: ""(빈 문자열)  | 
| enc1\$1vocab\$1size |  enc0 토큰의 어휘 크기. **조건** 유효한 값: 2 ≤ 정수 ≤ 3000000  | 
| epochs |  훈련을 위해 실행할 epoch 수  **선택 사항** 유효한 값: 1 ≤ 정수 ≤ 100 기본값: 30  | 
| learning\$1rate |  훈련에 대한 학습률 **선택 사항** 유효한 값: 1.0E-6 ≤ 부동 소수점 ≤ 1.0 기본값: 0.0004  | 
| mini\$1batch\$1size |  훈련 중 `optimizer`에 대해 데이터세트가 분할되는 배치 크기 **선택 사항** 유효한 값: 1 ≤ 정수 ≤ 10000 기본 값: 32  | 
| mlp\$1activation |  다중 계층 퍼셉트론(MLP) 계층에 대한 활성화 함수 유형 **선택 사항** 유효값: `tanh`, `relu` 또는 `linear` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/object2vec-hyperparameters.html) 기본값: `linear`  | 
| mlp\$1dim |  MLP 계층의 출력 차원. **선택 사항** 유효한 값: 2 ≤ 정수 ≤ 10000 기본값: 512  | 
| mlp\$1layers |  네트워크의 MLP 계층 수. **선택 사항** 유효한 값: 0 ≤ 정수 ≤ 10 기본값: 2  | 
| negative\$1sampling\$1rate |  사용자가 제공하는 양수 샘플 대비 알고리즘 훈련을 촉진하기 위해 생성되는 음수 샘플의 비율. 음수 샘플은 실제 발생할 가능성이 없는 데이터를 나타내며 훈련에서 음수로 레이블이 지정됩니다. 이들은 모델이 관찰되는 양수 샘플과 그렇지 않은 음수 샘플을 구별하는 훈련을 촉진합니다. 훈련에 사용되는 양수 샘플 대비 음수 샘플의 비율을 지정하려면 값을 양의 정수로 설정합니다. 예를 들어 모든 샘플이 양수인 입력 데이터에 대해 알고리즘을 훈련할 때 `negative_sampling_rate`를 2로 설정할 경우, Object2Vec 알고리즘은 내부적으로 양수 샘플당 2개의 음수 샘플을 생성합니다. 훈련 중 음수 샘플을 생성하지 않으려면 값을 0으로 설정합니다. **선택 사항** 유효한 값: 0 ≤ 정수 기본값: 0(끄기)  | 
| num\$1classes |  분류 훈련을 위한 클래스 수. Amazon SageMaker AI는 회귀 문제의 경우 이 하이퍼파라미터를 무시합니다. **선택 사항** 유효한 값: 2 ≤ 정수 ≤ 30 기본값: 2  | 
| optimizer |  옵티마이저 유형. **선택 사항** 유효한 값: `adadelta`, `adagrad`, `adam`, `sgd` 또는 `rmsprop` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/object2vec-hyperparameters.html) 기본값: `adam`  | 
| output\$1layer |  작업이 회귀 또는 분류인지 지정하는 출력 계층의 유형. **선택 사항** 유효한 값: `softmax` 또는 `mean_squared_error` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/object2vec-hyperparameters.html) 기본값: `softmax`  | 
| tied\$1token\$1embedding\$1weight |  두 인코더 모두에 공유 임베딩 계층을 사용할지 여부. 두 인코더 모두의 입력이 동일한 토큰 수준 단위를 사용하는 경우 공유 토큰 임베딩 계층을 사용합니다. 예를 들어 문서 모음의 경우 한 인코더는 문장을 인코딩하고 다른 인코더는 전체 문서를 인코딩할 경우 공유 토큰 임베딩 계층을 사용할 수 있습니다. 문장과 문서 모두 동일한 어휘의 단어로 구성되기 때문입니다. **선택 사항** 유효한 값: `True` 또는 `False` 기본값: `False`  | 
| token\$1embedding\$1storage\$1type |  훈련 중 사용되는 그래디언트 업데이트의 모드: `dense` 모드가 사용되는 경우 그래디언트의 행 대부분의 값이 0이 아니더라도 옵티마이저가 토큰 임베딩 계층에 대해 전체 그래디언트 행렬을 계산합니다. `sparse` 모드가 사용되는 경우 옵티마이저가 실제로 미니 배치에서 사용되는 그래디언트의 행만 저장합니다. 알고리즘이 0이 아닌 행에 대해서만 그래디언트를 계산하는 희소 그래디언트 업데이트를 수행하도록 하여 훈련 속도를 높이려면 `row_sparse`를 지정합니다. 값을 `row_sparse`로 지정하면 다음과 같은 다른 하이퍼파라미터에 사용할 수 있는 값이 제한됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/object2vec-hyperparameters.html) **선택 사항** 유효한 값: `dense` 또는 `row_sparse` 기본값: `dense`  | 
| weight\$1decay |  최적화에 사용되는 가중치 감소 파라미터 **선택 사항** 유효한 값: 0 ≤ 부동 소수점 ≤ 10000 가본값: 0(감퇴 없음)  | 

# Object2Vec 모델 튜닝
<a name="object2vec-tuning"></a>

하이퍼파라미터 튜닝이라고도 하는 자동 모델 튜닝은 데이터세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 목표 지표에는 알고리즘에서 계산하는 지표 중 하나를 선택합니다. 자동 모델 튜닝은 선택된 하이퍼파라미터를 검색해 목표 지표를 최적화하는 모델을 생성하는 값 조합을 찾습니다.

모델 튜닝에 대한 자세한 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## Object2Vec 알고리즘으로 계산되는 지표
<a name="object2vec-metrics"></a>

Object2Vec 알고리즘에는 분류 및 회귀 지표가 둘 다 있습니다. `output_layer` 유형은 자동 모델 튜닝에 사용할 수 있는 지표를 결정합니다.

### Object2Vec 알고리즘으로 계산되는 Regressor 지표
<a name="object2vec-regressor-metrics"></a>

이 알고리즘은 테스트 및 검증 중 계산되는 평균 제곱근 오차 regressor 지표를 보고합니다. 회귀 작업을 위한 모델을 튜닝하는 경우 이 지표를 목표 지표로 선택합니다.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| test:mean\$1squared\$1error | 평균 제곱 오차 | 최소화 | 
| validation:mean\$1squared\$1error | 평균 제곱 오차 | 최소화 | 

### Object2Vec 알고리즘으로 계산되는 분류 지표
<a name="object2vec-classification-metrics"></a>

Object2Vec 알고리즘은 테스트 및 검증 중 계산되는 정확도 및 교차 엔트로피 분류 지표를 보고합니다. 분류 작업을 위한 모델을 튜닝할 때 이러한 지표 중 하나를 목표로 선택합니다.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| test:accuracy | 정확도 | 최대화 | 
| test:cross\$1entropy | 교차 엔트로피 | 최소화 | 
| validation:accuracy | 정확도 | 최대화 | 
| validation:cross\$1entropy | 교차 엔트로피 | 최소화 | 

## 튜닝 가능한 Object2Vec 하이퍼파라미터
<a name="object2vec-tunable-hyperparameters"></a>

Object2Vec 알고리즘에 대한 다음 하이퍼파라미터를 튜닝할 수 있습니다.


| 하이퍼파라미터 이름 | 하이퍼파라미터 유형 | 권장 범위 및 값 | 
| --- | --- | --- | 
| dropout | ContinuousParameterRange | MinValue: 0.0, MaxValue: 1.0 | 
| early\$1stopping\$1patience | IntegerParameterRange | MinValue: 1, MaxValue: 5 | 
| early\$1stopping\$1tolerance | ContinuousParameterRange | MinValue: 0.001, MaxValue: 0.1 | 
| enc\$1dim | IntegerParameterRange | MinValue: 4, MaxValue: 4096 | 
| enc0\$1cnn\$1filter\$1width | IntegerParameterRange | MinValue: 1, MaxValue: 5 | 
| enc0\$1layers | IntegerParameterRange | MinValue: 1, MaxValue: 4 | 
| enc0\$1token\$1embedding\$1dim | IntegerParameterRange | MinValue: 5, MaxValue: 300 | 
| enc1\$1cnn\$1filter\$1width | IntegerParameterRange | MinValue: 1, MaxValue: 5 | 
| enc1\$1layers | IntegerParameterRange | MinValue: 1, MaxValue: 4 | 
| enc1\$1token\$1embedding\$1dim | IntegerParameterRange | MinValue: 5, MaxValue: 300 | 
| epochs | IntegerParameterRange | MinValue: 4, MaxValue: 20 | 
| learning\$1rate | ContinuousParameterRange | MinValue: 1e-6, MaxValue: 1.0 | 
| mini\$1batch\$1size | IntegerParameterRange | MinValue: 1, MaxValue: 8192 | 
| mlp\$1activation | CategoricalParameterRanges |  [`tanh`, `relu`, `linear`]  | 
| mlp\$1dim | IntegerParameterRange | MinValue: 16, MaxValue: 1024 | 
| mlp\$1layers | IntegerParameterRange | MinValue: 1, MaxValue: 4 | 
| optimizer | CategoricalParameterRanges | [`adagrad`, `adam`, `rmsprop`, `sgd`, `adadelta`] | 
| weight\$1decay | ContinuousParameterRange | MinValue: 0.0, MaxValue: 1.0 | 

# Object2Vec 훈련을 위한 데이터 형식
<a name="object2vec-training-formats"></a>

Object2Vec 알고리즘으로 훈련할 때 요청의 입력 데이터가 JSON Lines 형식인지 확인합니다. 여기서 각 줄은 단일 데이터 포인트를 나타냅니다.

## 입력: JSON 라인 요청 형식
<a name="object2vec-in-training-data-jsonlines"></a>

Content-type: application/jsonlines

```
{"label": 0, "in0": [6, 17, 606, 19, 53, 67, 52, 12, 5, 10, 15, 10178, 7, 33, 652, 80, 15, 69, 821, 4], "in1": [16, 21, 13, 45, 14, 9, 80, 59, 164, 4]}
{"label": 1, "in0": [22, 1016, 32, 13, 25, 11, 5, 64, 573, 45, 5, 80, 15, 67, 21, 7, 9, 107, 4], "in1": [22, 32, 13, 25, 1016, 573, 3252, 4]}
{"label": 1, "in0": [774, 14, 21, 206], "in1": [21, 366, 125]}
```

“in0” 및 “in1”은 각각 encoder0 및 encoder1에 대한 입력입니다. 분류 및 회귀 문제 둘 다에 동일한 형식이 유효합니다. 회귀의 경우 필드 `"label"`은 실제 값 입력을 수락할 수 있습니다.

# Object2Vec 추론을 위한 데이터 형식
<a name="object2vec-inference-formats"></a>

다음 페이지에서는 Amazon SageMaker AI Object2Vec 모델에서 스코어링 추론을 가져오기 위한 입력 요청 및 출력 응답 형식을 설명합니다.

## GPU 최적화: 분류 또는 회귀
<a name="object2vec-inference-gpu-optimize-classification"></a>

GPU 메모리 희소성으로 인해 `INFERENCE_PREFERRED_MODE` 환경 변수를 지정하여 분류/회귀 또는 [출력: 인코더 임베딩](object2vec-encoder-embeddings.md#object2vec-out-encoder-embeddings-data) 추론 네트워크가 GPU에 로드되는지 여부를 최적화할 수 있습니다. 대부분의 추론이 분류 또는 회귀에 사용되는 경우 `INFERENCE_PREFERRED_MODE=classification`을 지정합니다. 다음은 4개의 p3.2xlarge 인스턴스를 사용하는 분류/회귀 추론에 최적화된 배치 변환의 예제입니다.

```
transformer = o2v.transformer(instance_count=4,
                              instance_type="ml.p2.xlarge",
                              max_concurrent_transforms=2,
                              max_payload=1,  # 1MB
                              strategy='MultiRecord',
                              env={'INFERENCE_PREFERRED_MODE': 'classification'},  # only useful with GPU
                              output_path=output_s3_path)
```

## 입력: 분류 또는 회귀 요청 형식
<a name="object2vec-in-inference-data"></a>

Content-type: application/json

```
{
  "instances" : [
    {"in0": [6, 17, 606, 19, 53, 67, 52, 12, 5, 10, 15, 10178, 7, 33, 652, 80, 15, 69, 821, 4], "in1": [16, 21, 13, 45, 14, 9, 80, 59, 164, 4]},
    {"in0": [22, 1016, 32, 13, 25, 11, 5, 64, 573, 45, 5, 80, 15, 67, 21, 7, 9, 107, 4], "in1": [22, 32, 13, 25, 1016, 573, 3252, 4]},
    {"in0": [774, 14, 21, 206], "in1": [21, 366, 125]}
  ]
}
```

Content-type: application/jsonlines

```
{"in0": [6, 17, 606, 19, 53, 67, 52, 12, 5, 10, 15, 10178, 7, 33, 652, 80, 15, 69, 821, 4], "in1": [16, 21, 13, 45, 14, 9, 80, 59, 164, 4]}
{"in0": [22, 1016, 32, 13, 25, 11, 5, 64, 573, 45, 5, 80, 15, 67, 21, 7, 9, 107, 4], "in1": [22, 32, 13, 25, 1016, 573, 3252, 4]}
{"in0": [774, 14, 21, 206], "in1": [21, 366, 125]}
```

분류 문제의 경우 점수 벡터의 길이는 `num_classes`에 해당합니다. 회귀 문제의 경이 이 길이는 1입니다.

## 출력: 분류 또는 회귀 응답 형식
<a name="object2vec-out-inference-data"></a>

적용: application/json

```
{
    "predictions": [
        {
            "scores": [
                0.6533935070037842,
                0.07582679390907288,
                0.2707797586917877
            ]
        },
        {
            "scores": [
                0.026291321963071823,
                0.6577019095420837,
                0.31600672006607056
            ]
        }
    ]
}
```

적용: application/jsonlines

```
{"scores":[0.195667684078216,0.395351558923721,0.408980727195739]}
{"scores":[0.251988261938095,0.258233487606048,0.489778339862823]}
{"scores":[0.280087798833847,0.368331134319305,0.351581096649169]}
```

분류 및 회귀 형식 모두 점수가 개별 레이블에 적용됩니다.

# Object2Vec에 대한 인코더 임베딩
<a name="object2vec-encoder-embeddings"></a>

다음 페이지에는 Amazon SageMaker AI Object2Vec 모델에서 인코더 임베딩 추론을 가져오기 위한 입력 요청 및 출력 응답 형식이 나열되어 있습니다.

## GPU 최적화: 인코더 임베딩
<a name="object2vec-inference-gpu-optimize-encoder-embeddings"></a>

임베딩은 단어 같은 개별 객체에서 실수 벡터로의 매핑을 뜻합니다.

GPU 메모리 희소성으로 인해 `INFERENCE_PREFERRED_MODE` 환경 변수를 지정하여 [Object2Vec 추론을 위한 데이터 형식](object2vec-inference-formats.md) 또는 인코더 임베딩 추론 네트워크가 GPU에 로드되는지 여부를 최적화할 수 있습니다. 대부분의 추론이 인코더 임베딩에 사용되는 경우 `INFERENCE_PREFERRED_MODE=embedding`을 지정합니다. 다음은 4개의 p3.2xlarge 인스턴스를 사용하는 인코더 임베딩 추론에 최적화된 배치 변환의 예제입니다.

```
transformer = o2v.transformer(instance_count=4,
                              instance_type="ml.p2.xlarge",
                              max_concurrent_transforms=2,
                              max_payload=1,  # 1MB
                              strategy='MultiRecord',
                              env={'INFERENCE_PREFERRED_MODE': 'embedding'},  # only useful with GPU
                              output_path=output_s3_path)
```

## 입력: 인코더 임베딩
<a name="object2vec-in-encoder-embeddings-data"></a>

Content-type: application/json; infer\$1max\$1seqlens=<FWD-LENGTH>,<BCK-LENGTH>

여기서 <FWD-LENGTH> 및 <BCK-LENGTH>는 [1,5000] 범위의 정수이며 순방향 및 역방향 인코더의 최대 시퀀스 길이를 정의합니다.

```
{
  "instances" : [
    {"in0": [6, 17, 606, 19, 53, 67, 52, 12, 5, 10, 15, 10178, 7, 33, 652, 80, 15, 69, 821, 4]},
    {"in0": [22, 1016, 32, 13, 25, 11, 5, 64, 573, 45, 5, 80, 15, 67, 21, 7, 9, 107, 4]},
    {"in0": [774, 14, 21, 206]}
  ]
}
```

Content-type: application/jsonlines; infer\$1max\$1seqlens=<FWD-LENGTH>,<BCK-LENGTH>

여기서 <FWD-LENGTH> 및 <BCK-LENGTH>는 [1,5000] 범위의 정수이며 순방향 및 역방향 인코더의 최대 시퀀스 길이를 정의합니다.

```
{"in0": [6, 17, 606, 19, 53, 67, 52, 12, 5, 10, 15, 10178, 7, 33, 652, 80, 15, 69, 821, 4]}
{"in0": [22, 1016, 32, 13, 25, 11, 5, 64, 573, 45, 5, 80, 15, 67, 21, 7, 9, 107, 4]}
{"in0": [774, 14, 21, 206]}
```

이러한 형식 둘 다에서는 `“in0”` 또는 `“in1.”` 중 한 가지 입력 형식만 지정합니다. 그러면 추론 서비스에서 해당하는 인코더를 호출해 각 인스턴스에 대한 임베딩을 호출합니다.

## 출력: 인코더 임베딩
<a name="object2vec-out-encoder-embeddings-data"></a>

Content-type: application/json

```
{
  "predictions": [
    {"embeddings":[0.057368703186511,0.030703511089086,0.099890425801277,0.063688032329082,0.026327300816774,0.003637571120634,0.021305780857801,0.004316598642617,0.0,0.003397724591195,0.0,0.000378780066967,0.0,0.0,0.0,0.007419463712722]},
    {"embeddings":[0.150190666317939,0.05145975202322,0.098204270005226,0.064249359071254,0.056249320507049,0.01513972133398,0.047553978860378,0.0,0.0,0.011533712036907,0.011472506448626,0.010696629062294,0.0,0.0,0.0,0.008508535102009]}
  ]
}
```

Content-type: application/jsonlines

```
{"embeddings":[0.057368703186511,0.030703511089086,0.099890425801277,0.063688032329082,0.026327300816774,0.003637571120634,0.021305780857801,0.004316598642617,0.0,0.003397724591195,0.0,0.000378780066967,0.0,0.0,0.0,0.007419463712722]}
{"embeddings":[0.150190666317939,0.05145975202322,0.098204270005226,0.064249359071254,0.056249320507049,0.01513972133398,0.047553978860378,0.0,0.0,0.011533712036907,0.011472506448626,0.010696629062294,0.0,0.0,0.0,0.008508535102009]}
```

추론 서비스에서 출력한 임베딩의 벡터 길이는 훈련 시 지정한 `enc0_token_embedding_dim`, `enc1_token_embedding_dim` 또는 `enc_dim` 하이퍼파라미터 중 하나와 동일합니다.

# Sequence-to-Sequence 알고리즘
<a name="seq-2-seq"></a>

Amazon SageMaker AI Sequence-Sequence는 입력이 토큰 시퀀스(예: 텍스트, 오디오)이고 생성된 출력이 또 다른 토큰 시퀀스인 지도 학습 알고리즘입니다. 애플리케이션의 예로는 기계 번역(한 언어의 문장을 입력하고 다른 언어에서 어떤 문장이 나올지 예측), 텍스트 요약(길이가 긴 단어 문자열을 입력하고 길이가 짧은 요약 단어 문자열을 예측), 음성-텍스트 변환(오디오 클립이 토큰으로 된 출력 문장으로 변환됨)이 있습니다. 최근 이 도메인의 문제는 심층 신경망을 사용하여 성공적으로 모델링되었으며, 이는 이전 방법론에 비해 성능이 크게 향상되었습니다. Amazon SageMaker AI seq2seq는 인코더-디코더 아키텍처로 주목받는 순환 신경망(RNN) 및 합성곱 신경망(CNN) 모델을 사용합니다.

**Topics**
+ [Sequence-to-Sequence 알고리즘에 대한 입력/출력 인터페이스](#s2s-inputoutput)
+ [Sequence-to-Sequence 알고리즘에 대한 EC2 인스턴스 권장 사항](#s2s-instances)
+ [Sequence-to-Sequence 샘플 노트북](#seq-2-seq-sample-notebooks)
+ [Sequence-to-Sequence 작동 방식](seq-2-seq-howitworks.md)
+ [Sequence-to-Sequence 하이퍼파라미터](seq-2-seq-hyperparameters.md)
+ [Sequence-to-Sequence 모델 튜닝](seq-2-seq-tuning.md)

## Sequence-to-Sequence 알고리즘에 대한 입력/출력 인터페이스
<a name="s2s-inputoutput"></a>

**훈련**

SageMaker AI seq2seq에는 RecordIO-Protobuf 형식의 데이터가 필요합니다. 그러나 토큰은 일반적인 경우처럼 부동 소수점이 아니라 정수여야 합니다.

토큰화된 텍스트 파일에서 protobuf 형식으로 데이터를 변환하는 스크립트가 [seq2seq 예제 노트북](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/seq2seq_translation_en-de/SageMaker-Seq2Seq-Translation-English-German.html)에 포함되어 있습니다. 일반적으로 32비트 정수 텐서에 데이터를 담고, 필요한 어휘 파일을 생성하는데, 이는 지표 계산 및 추론에 필요합니다.

사전 처리가 완료된 이후 훈련을 위해 이 알고리즘을 호출할 수 있으며, 이 알고리즘에는 다음 3가지 채널이 필요합니다.
+ `train`: 훈련 데이터(예: 사전 처리 스크립트에 의해 생성된 `train.rec` 파일)가 포함되어 있어야 합니다.
+ `validation`: 검증 데이터(예: 사전 처리 스크립트에 의해 생성된 `val.rec` 파일)가 포함되어 있어야 합니다.
+ `vocab`: 2개의 어휘 파일(`vocab.src.json` 및 `vocab.trg.json`)이 포함되어 있어야 합니다.

알고리즘이 이 세 채널에서 데이터를 찾지 못하는 경우 훈련 결과는 오류가 됩니다.

**추론**

호스팅 엔드포인트의 경우 추론은 두 가지 데이터 형식을 지원합니다. 공백으로 구분된 텍스트 토큰을 사용하여 추론을 수행하려면 `application/json` 형식을 사용합니다. 그렇지 않은 경우 `recordio-protobuf` 형식을 사용하여 정수 인코딩된 데이터로 작업합니다. 두 모드는 입력 데이터의 일괄 처리를 지원합니다. 또한 `application/json` 형식을 사용하면 주의 매트릭스를 시각화할 수 있습니다.
+ `application/json`: JSON 형식의 입력을 예상하고 JSON 형식의 출력을 반환합니다. 콘텐츠 및 허용 유형은 `application/json`이어야 합니다. 각 시퀀스는 공백으로 구분된 토큰이 포함된 문자열로 예상됩니다. 이 형식은 배치의 소스 시퀀스 수가 적을 때 권장됩니다. 또한 다음 추가 구성 옵션을 지원합니다.

  `configuration`: \$1`attention_matrix`: `true`\$1: 특정 입력 시퀀스에 대한 주목 매트릭스를 반환합니다.
+ `application/x-recordio-protobuf`: `recordio-protobuf` 형식의 입력을 예상하고 `recordio-protobuf format`의 출력을 반환합니다. 콘텐츠 및 허용 유형은 `applications/x-recordio-protobuf`이어야 합니다. 이 형식의 경우 소스 시퀀스는 후속 protobuf 인코딩에 대한 정수 목록으로 변환되어야 합니다. 이 형식은 대령 추론에 권장됩니다.

배치 변환을 위해 추론은 JSON Lines 형식을 지원합니다. 배치 변환은 JSON Lines 형식의 입력을 필요로 하고 출력을 JSON Lines 형식으로 반환합니다. 콘텐츠 및 허용 유형은 `application/jsonlines`이어야 합니다. 입력 형식은 다음과 같습니다.

```
content-type: application/jsonlines

{"source": "source_sequence_0"}
{"source": "source_sequence_1"}
```

응답 형식은 다음과 같습니다.

```
accept: application/jsonlines

{"target": "predicted_sequence_0"}
{"target": "predicted_sequence_1"}
```

추론을 위한 특정 형식으로 입력 및 출력을 직렬화 및 역직렬화하는 방법에 대한 자세한 정보는 [Sequence-to-Sequence 샘플 노트북](#seq-2-seq-sample-notebooks) 섹션을 참조하세요.

## Sequence-to-Sequence 알고리즘에 대한 EC2 인스턴스 권장 사항
<a name="s2s-instances"></a>

Amazon SageMaker AI seq2seq 알고리즘은 GPU 인스턴스 유형에서만 지원되며 단일 머신에서만 훈련할 수 있습니다. 하지만 여러 GPU가 있는 인스턴스를 사용할 수 있습니다. seq2seq 알고리즘은 P2, P3, G4dn 및 G5 GPU 인스턴스 패밀리를 지원합니다.

## Sequence-to-Sequence 샘플 노트북
<a name="seq-2-seq-sample-notebooks"></a>

영어-독일어 번역 모델을 훈련하는 데 SageMaker AI Sequence-Sequence 알고리즘을 사용하는 방법을 보여주는 샘플 노트북은 [Machine Translation English-German Example Using SageMaker AI Seq2Seq](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/seq2seq_translation_en-de/SageMaker-Seq2Seq-Translation-English-German.html)를 참조하세요. SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 이 인스턴스에 액세스하는 방법에 대한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열면 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인할 수 있습니다. NTM 알고리즘을 사용하는 주제 모델링 예제 노트북은 **Introduction to Amazon algorithms(Amazon 알고리즘 소개)** 섹션에 있습니다. 노트북을 열려면 **사용** 탭을 클릭하고 사본 생성을 선택합니다.

# Sequence-to-Sequence 작동 방식
<a name="seq-2-seq-howitworks"></a>

일반적으로 시퀀스-시퀀스 모델링에 대한 신경망에는 다음을 포함한 몇 가지 계층이 포함됩니다.
+ **임베딩 계층**. 이 계층에서 입력 토큰이 희소 방식(예: one-hot 인코딩)으로 인코딩된 입력 매트릭스는 밀도가 높은 특징 계층으로 매핑됩니다. 고차원 특징 벡터가 단순한 one-hot 인코딩 벡터 대신 특정 토큰(단어-텍스트 말뭉치) 관련 정보 인코딩이 더욱 뛰어나기 때문에 이는 필수 사항입니다. 또한 [FastText](https://fasttext.cc/) 또는 [Glove](https://nlp.stanford.edu/projects/glove/)와 같은 사전 훈련된 단어 벡터가 포함된 이 임베딩 계층을 초기화하거나 이를 무작위로 초기화한 다음 훈련 도중 파라미터를 학습하는 데 있어 표준 사례입니다.
+ **인코더 계층**. 입력 토큰이 고차원 특징 공간으로 매핑된 이후 시퀀스가 인코더 계층을 통해 전달되어 (전체 시퀀스의) 입력 임베딩 계층에 있는 모든 정보를 고정 길이 특징 벡터로 압축합니다. 일반적으로 인코더는 장단기 메모리(LSTM) 또는 게이트된 순환 유닛(GRU)과 같은 RNN 유형 네트워크로 이루어집니다. ([Colah의 블로그](http://colah.github.io/posts/2015-08-Understanding-LSTMs/)는 LSTM을 자세하게 설명합니다.) 
+ **디코더 계층**. 디코더 계층은 인코딩된 특징 벡터를 가져와 토큰을 출력 시퀀스를 생산합니다. 이 계층은 또한 주로 RNN 아키텍처(LSTM 및 GRU)로 빌드됩니다.

전체 모델은 공동으로 교육되어 주어진 소스 시퀀스레 대한 대상 시퀀스의 가능성을 최대화합니다. 이 모델은 2014년 [Sutskever 등](https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf)이 처음으로 소개했습니다.

**어텐션 메커니즘**. 인코더-디코더 프레임워크의 단점은 소스 시퀀스의 길이가 증가함에 따라 모델 성능이 감소하는 것인데, 이는 고정 길이 인코딩된 특징 벡터가 수용할 수 있는 정보의 제한 때문입니다. 이 문제를 해결하기 위해 2015년 Bahdanau 등은 [어텐션 메커니즘](https://arxiv.org/pdf/1409.0473.pdf)을 제안했습니다. 주목 메커니즘에서 디코더는 가장 중요한 정보가 위치할 수 있는 인코더 시퀀스의 위치를 찾으려 하고, 해당 정보와 이전에 디코딩된 단어를 사용하여 시퀀스의 다음 토큰을 예측합니다.

자세한 정보는 Luong 등이 작성한 백서인 [Effective Approaches to Attention-based Neural Machine Translation](https://arxiv.org/abs/1508.04025)을 참조하세요. 여기에는 다양한 어텐션 메커니즘에 대한 계산이 간단하게 설명되어 있습니다. 또한 Wu 등이 작성한 백서인 [Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation](https://arxiv.org/abs/1609.08144)에서는 인코더 및 디코더 계층 사이의 스킵 연결을 사용하는 Google의 기계 번역 아키텍처에 대해 설명합니다.

# Sequence-to-Sequence 하이퍼파라미터
<a name="seq-2-seq-hyperparameters"></a>

다음 표에는 Amazon SageMaker AI Sequence-Sequence(seq2seq) 알고리즘으로 훈련할 때 설정할 수 있는 하이퍼파라미터가 나열되어 있습니다.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| batch\$1size | 경사 하강에 대한 미니 배치 크기. **선택 사항** 유효한 값: 양수 기본값: 64 | 
| beam\$1size | 빔 검색에 대한 빔의 길이. 컴퓨팅 `bleu`에 대한 훈련 중 사용되고, 추론 중 사용됩니다. **선택 사항** 유효한 값: 양수 기본값: 5 | 
| bleu\$1sample\$1size | 검증 데이터세트에서 선택하여 훈련 도중 `bleu` 점수를 디코딩 및 컴퓨팅하는 인스턴스의 수. -1로 설정하면 전체 검증 세트를 사용합니다(`bleu`가 `optimized_metric`으로 선택된 경우). **선택 사항** 유효한 값: 정수 기본값: 0 | 
| bucket\$1width | 최대 (`max_seq_len_source`, `max_seq_len_target`)개의 (소스,대상) 버킷을 반환합니다. 데이터에서 길이가 긴 측은 `bucket_width` 단계를 사용하는 반면 짧은 측은 평균 대상/소스 길이 비율로 축소된 단계를 사용합니다. 한 측에서 다른 측보다 먼저 최대 길이에 도달한 경우 해당 측의 추가 버킷 너비는 `max_len`으로 고정됩니다. **선택 사항** 유효한 값: 양수 기본값: 10 | 
| bucketing\$1enabled | `false`로 설정되면 버킷을 비활성화하고 최대 길이로 펼쳐집니다. **선택 사항** 유효한 값: `true` 또는 `false` 기본값: `true` | 
| checkpoint\$1frequency\$1num\$1batches | x회의 배치마다 체크포인트 및 검증. 이 체크포인트 하이퍼파라미터는 SageMaker AI의 seq2seq 알고리즘으로 전달되어 최적의 모델을 초기에 중지하고 검색할 수 있습니다. 알고리즘의 체크포인트는 알고리즘의 훈련 컨테이너에서 로컬로 실행되며 SageMaker AI 체크포인트와 호환되지 않습니다. 알고리즘은 체크포인트를 로컬 경로에 일시적으로 저장하고 훈련 작업이 중지된 후 최상의 모델 아티팩트를 S3의 모델 출력 경로에 저장합니다. **선택 사항** 유효한 값: 양수 기본값: 1000 | 
| checkpoint\$1threshold | 훈련 중지 전에 검증 데이터세트의 `optimized_metric`이 개선되지 않도록 하는 체크포인트 모델의 최대 수. 이 체크포인트 하이퍼파라미터는 SageMaker AI의 seq2seq 알고리즘으로 전달되어 최적의 모델을 초기에 중지하고 검색할 수 있습니다. 알고리즘의 체크포인트는 알고리즘의 훈련 컨테이너에서 로컬로 실행되며 SageMaker AI 체크포인트와 호환되지 않습니다. 알고리즘은 체크포인트를 로컬 경로에 일시적으로 저장하고 훈련 작업이 중지된 후 최상의 모델 아티팩트를 S3의 모델 출력 경로에 저장합니다. **선택 사항** 유효한 값: 양수 기본값: 3 | 
| clip\$1gradient | 이보다 더 큰 절대 하강 값을 고정합니다. 음수로 설정하면 비활성화합니다. **선택 사항** 유효한 값: 부동 소수점 기본값: 1 | 
| cnn\$1activation\$1type | 사용할 `cnn` 활성화 유형. **선택 사항** 유효한 값: 문자열. `glu`, `relu`, `softrelu`, `sigmoid` 또는 `tanh` 중 하나입니다. 기본값: `glu` | 
| cnn\$1hidden\$1dropout | 컨볼루션 계층 사이 드롭아웃에 대한 드롭아웃 가능성. **선택 사항** 유효한 값: 부동 소수점. 범위: [0,1]. 기본값: 0 | 
| cnn\$1kernel\$1width\$1decoder | `cnn` 디코더에 대한 커널 너비. **선택 사항** 유효한 값: 양수 기본값: 5 | 
| cnn\$1kernel\$1width\$1encoder | `cnn` 인코더에 대한 커널 너비. **선택 사항** 유효한 값: 양수 기본값: 3 | 
| cnn\$1num\$1hidden | 인코더 및 디코더에 대한 `cnn` 숨겨진 유닛 수. **선택 사항** 유효한 값: 양수 기본값: 512 | 
| decoder\$1type | 디코더 유형. **선택 사항** 유효한 값: 문자열. `rnn` 또는 `cnn`입니다. 기본값: *rnn* | 
| embed\$1dropout\$1source | 소스 측 임베딩에 대한 드롭아웃 가능성. **선택 사항** 유효한 값: 부동 소수점. 범위: [0,1]. 기본값: 0 | 
| embed\$1dropout\$1target | 대상 측 임베딩에 대한 드롭아웃 가능성. **선택 사항** 유효한 값: 부동 소수점. 범위: [0,1]. 기본값: 0 | 
| encoder\$1type | 인코더 유형. `rnn` 아키텍처는 Bahdanau 등의 어텐션 메커니즘을 기반으로 하며, *cnn* 아키텍처는 Gehring 등의 메커니즘을 기반으로 합니다. **선택 사항** 유효한 값: 문자열. `rnn` 또는 `cnn`입니다. 기본값: `rnn` | 
| fixed\$1rate\$1lr\$1half\$1life | `fixed_rate_`\$1 스케줄러에 대한 체크포인트 수의 측면에서 학습률의 반주기. **선택 사항** 유효한 값: 양수 기본값: 10 | 
| learning\$1rate | 초기 학습률. **선택 사항** 유효한 값: 부동 소수점 기본값: 0.0003 | 
| loss\$1type | 훈련에 대한 손실 함수. **선택 사항** 유효한 값: 문자열. `cross-entropy`  기본값: `cross-entropy` | 
| lr\$1scheduler\$1type | 학습률 스케줄러 유형. `plateau_reduce`는 `validation_accuracy`에 대한 `optimized_metric`이 변화가 없을 때마다 학습률일 감소함을 의미합니다. `inv_t`는 반한시 감소입니다. `learning_rate`/(1\$1`decay_rate`\$1t) **선택 사항** 유효한 값: 문자열. `plateau_reduce`, `fixed_rate_inv_t` 또는 `fixed_rate_inv_sqrt_t`. 기본값: `plateau_reduce` | 
| max\$1num\$1batches | 처리할 업데이트/배치의 최대 수. 무제한은 -1로 설정합니다. **선택 사항** 유효한 값: 정수 기본값: -1 | 
| max\$1num\$1epochs | 적합이 중지되기 전에 훈련 데이터를 통해 전달할 epoch의 최대 수. 검증 정확도가 개선되지 않고 이 파라미터가 통과된 경우에도 epoch의 수까지 훈련은 계속됩니다. 통과되지 않은 경우 무시됩니다. **선택 사항** 유효한 값: max\$1num\$1epochs보다 작거나 같은 양의 정수 기본값: none | 
| max\$1seq\$1len\$1source | 소스 시퀀스의 최대 길이. 이 길이보다 더 긴 시퀀스의 경우 이 길이로 잘립니다. **선택 사항** 유효한 값: 양수 기본 값: 100  | 
| max\$1seq\$1len\$1target | 대상 시퀀스의 최대 길이. 이 길이보다 더 긴 시퀀스의 경우 이 길이로 잘립니다. **선택 사항** 유효한 값: 양수 기본 값: 100 | 
| min\$1num\$1epochs | `early_stopping` 조건을 통해 중지되기 전 훈련에서 실행해야 할 최소 epoch 수. **선택 사항** 유효한 값: 양수 기본값: 0 | 
| momentum | `sgd`에 대해 사용되는 모멘텀 상수. `adam` 또는 `rmsprop`를 사용하는 경우 이 파라미터를 전달하지 마세요. **선택 사항** 유효한 값: 부동 소수점 기본값: none | 
| num\$1embed\$1source | 소스 토큰에 대한 임베딩 크기. **선택 사항** 유효한 값: 양수 기본값: 512 | 
| num\$1embed\$1target | 대상 토큰에 대한 임베딩 크기. **선택 사항** 유효한 값: 양수 기본값: 512 | 
| num\$1layers\$1decoder | 디코더 *rnn* 또는 *cnn*에 대한 계층 수. **선택 사항** 유효한 값: 양수 기본값: 1 | 
| num\$1layers\$1encoder | 인코더 `rnn` 또는 `cnn`에 대한 계층 수. **선택 사항** 유효한 값: 양수 기본값: 1 | 
| optimized\$1metric | 조기 중지에 최적화된 지표. **선택 사항** 유효한 값: 문자열. `perplexity`, `accuracy` 또는 `bleu`. 기본값: `perplexity` | 
| optimizer\$1type | 옵티마이저 선택. **선택 사항** 유효한 값: 문자열. `adam`, `sgd` 또는 `rmsprop`. 기본값: `adam` | 
| plateau\$1reduce\$1lr\$1factor | 학습률을 곱하는 팩터(`plateau_reduce`의 경우). **선택 사항** 유효한 값: 부동 소수점 기본 값: 0.5 | 
| plateau\$1reduce\$1lr\$1threshold | `plateau_reduce` 스케줄러의 경우 `optimized_metric`이 체크포인트에 대해 개선되지 않은 경우 감소 팩터로 학습률을 곱합니다. **선택 사항** 유효한 값: 양수 기본값: 3 | 
| rnn\$1attention\$1in\$1upper\$1layers | 어텐션을  Google NMT paper와 같은 *rnn*의 상위 계층으로 전달합니다. 2개 이상의 계층이 사용되는 경우에만 해당됩니다. **선택 사항** 유효한 값: 부울(`true` 또는 `false`) 기본값: `true` | 
| rnn\$1attention\$1num\$1hidden | 어텐션 계층에 대한 숨겨진 유닛 수(기본값: `rnn_num_hidden`) **선택 사항** 유효한 값: 양수 기본값: `rnn_num_hidden` | 
| rnn\$1attention\$1type | 인코더의 어텐션 모델. Luong et al. 백서에 따르면 `mlp`는 concat를, bilinear는 general을 가리킵니다. **선택 사항** 유효한 값: 문자열. `dot`, `fixed`, `mlp` 또는 `bilinear` 중 하나 기본값: `mlp` | 
| rnn\$1cell\$1type | 특정 유형의 `rnn` 아키텍처 **선택 사항** 유효한 값: 문자열. `lstm` 또는 `gru`입니다. 기본값: `lstm` | 
| rnn\$1decoder\$1state\$1init | 인코더로부터 `rnn` 디코더 상태를 초기화하는 방법 **선택 사항** 유효한 값: 문자열. `last`, `avg` 또는 `zero`. 기본값: `last` | 
| rnn\$1first\$1residual\$1layer | 잔류 연결을 보유하는 첫 번째 *rnn* 계층으로, 인코더 또는 디코더의 계층 수가 2개 이상인 경우에만 해당됩니다. **선택 사항** 유효한 값: 양수 기본값: 2 | 
| rnn\$1num\$1hidden | 인코더 및 디코더에 대한 *rnn* 숨겨진 유닛 수. 이는 2의 배수여야 합니다. 알고리즘이 기본적으로 양방향 Long Term Short Term Memory(LSTM)를 사용하기 때문입니다. **선택 사항** 유효한 값: 양의 짝수. 기본값: 1024 | 
| rnn\$1residual\$1connections | 누적된 *rnn*에 잔류 연결을 추가합니다. 계층의 수는 2개 이상이어야 합니다. **선택 사항** 유효한 값: 부울(`true` 또는 `false`) 기본값: `false` | 
| rnn\$1decoder\$1hidden\$1dropout | 컨텍스트를 디코더의 *rnn* 숨겨진 상태와 결합한 숨겨진 상태에 대한 드롭아웃 가능성. **선택 사항** 유효한 값: 부동 소수점. 범위: [0,1]. 기본값: 0 | 
| training\$1metric | 평가 데이터에 대한 훈련 추적 지표. **선택 사항** 유효한 값: 문자열. `perplexity` 또는 `accuracy`입니다. 기본값: `perplexity` | 
| weight\$1decay | 가중치 감퇴 상수. **선택 사항** 유효한 값: 부동 소수점 기본값: 0 | 
| weight\$1init\$1scale | 가중치 초기화 규모(`uniform` 및 `xavier` 초기화의 경우). **선택 사항** 유효한 값: 부동 소수점 기본값: 2.34 | 
| weight\$1init\$1type | 가중치 초기화 유형. **선택 사항** 유효한 값: 문자열. `uniform` 또는 `xavier`입니다. 기본값: `xavier` | 
| xavier\$1factor\$1type | Xavier 팩터 유형. **선택 사항** 유효한 값: 문자열. `in`, `out` 또는 `avg`. 기본값: `in` | 

# Sequence-to-Sequence 모델 튜닝
<a name="seq-2-seq-tuning"></a>

하이퍼파라미터 튜닝이라고도 하는 자동 모델 튜닝은 데이터세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 알고리즘에서 계산하는 지표 중에서 목표 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 목표 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## Sequence-to-Sequence 알고리즘으로 계산되는 분류 지표
<a name="seq-2-seq-metrics"></a>

Sequence-to-Sequence 알고리즘은 훈련 중 계산되는 3가지 지표를 보고합니다. 하이퍼파라미터 값을 튜닝하는 경우 최적화하려면 이러한 지표 중 하나를 목표 지표로 선택해야 합니다.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| validation:accuracy |  검증 데이터세트에 대해 계산된 정확도  |  최대화  | 
| validation:bleu |  검증 세트에 대해 계산된 [Bleu﻿](https://en.wikipedia.org/wiki/BLEU) 점수 BLEU 계산에는 비용이 많이 들기 때문에 전체 훈련 프로세스의 속도를 높이기 위해 검증 데이터세트의 무작위 하위 샘플에 대한 BLEU를 계산하도록 선택할 수 있습니다. `bleu_sample_size` 파라미터를 사용하여 하위 샘플을 지정합니다.  |  최대화  | 
| validation:perplexity |  [Perplexity](https://en.wikipedia.org/wiki/Perplexity)는 검증 데이터세트에 대해 계산되는 손실 함수입니다. Perplexity는 경험적 샘플과 모델이 예측한 분포 간 교차 엔트로피를 측정하고, 모델이 샘플 값을 얼마나 잘 예측했는지를 측정합니다. 샘플을 정확하게 예측하는 모델은 perplexity가 낮습니다.  |  최소화  | 

## 튜닝 가능한 Sequence-to-Sequence 하이퍼파라미터
<a name="seq-2-seq-tunable-hyperparameters"></a>

SageMaker AI Sequence-Sequence 알고리즘에 대한 다음 하이퍼파라미터를 튜닝할 수 있습니다. Sequence to Sequence 목표 지표에 가장 큰 영향을 미치는 하이퍼파라미터는 `batch_size`, `optimizer_type`, `learning_rate`, `num_layers_encoder` 및 `num_layers_decoder`입니다.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| num\$1layers\$1encoder |  IntegerParameterRange  |  [1-10]  | 
| num\$1layers\$1decoder |  IntegerParameterRange  |  [1-10]  | 
| batch\$1size |  CategoricalParameterRange  |  [16,32,64,128,256,512,1024,2048]  | 
| optimizer\$1type |  CategoricalParameterRange  |  ['adam', 'sgd', 'rmsprop']  | 
| weight\$1init\$1type |  CategoricalParameterRange  |  ['xavier', 'uniform']  | 
| weight\$1init\$1scale |  ContinuousParameterRange  |  xavier 유형: MinValue: 2.0, MaxValue: 3.0, 균일한 유형: MinValue: -1.0, MaxValue: 1.0  | 
| learning\$1rate |  ContinuousParameterRange  |  MinValue: 0.00005, MaxValue: 0.2  | 
| weight\$1decay |  ContinuousParameterRange  |  MinValue: 0.0, MaxValue: 0.1  | 
| momentum |  ContinuousParameterRange  |  MinValue: 0.5, MaxValue: 0.9  | 
| clip\$1gradient |  ContinuousParameterRange  |  MinValue: 1.0, MaxValue: 5.0  | 
| rnn\$1num\$1hidden |  CategoricalParameterRange  |  반복적 신경망(RNN)에만 적용됨. [128,256,512,1024,2048]   | 
| cnn\$1num\$1hidden |  CategoricalParameterRange  |  컨벌루션 신경망(CNN)에만 적용됨. [128,256,512,1024,2048]   | 
| num\$1embed\$1source |  IntegerParameterRange  |  [256-512]  | 
| num\$1embed\$1target |  IntegerParameterRange  |  [256-512]  | 
| embed\$1dropout\$1source |  ContinuousParameterRange  |  MinValue: 0.0, MaxValue: 0.5  | 
| embed\$1dropout\$1target |  ContinuousParameterRange  |  MinValue: 0.0, MaxValue: 0.5  | 
| rnn\$1decoder\$1hidden\$1dropout |  ContinuousParameterRange  |  MinValue: 0.0, MaxValue: 0.5  | 
| cnn\$1hidden\$1dropout |  ContinuousParameterRange  |  MinValue: 0.0, MaxValue: 0.5  | 
| lr\$1scheduler\$1type |  CategoricalParameterRange  |  ['plateau\$1reduce', 'fixed\$1rate\$1inv\$1t', 'fixed\$1rate\$1inv\$1sqrt\$1t']  | 
| plateau\$1reduce\$1lr\$1factor |  ContinuousParameterRange  |  MinValue: 0.1, MaxValue: 0.5  | 
| plateau\$1reduce\$1lr\$1threshold |  IntegerParameterRange  |  [1-5]  | 
| fixed\$1rate\$1lr\$1half\$1life |  IntegerParameterRange  |  [10-30]  | 

# 텍스트 분류 - TensorFlow
<a name="text-classification-tensorflow"></a>

Amazon SageMaker AI 텍스트 분류 - TensorFlow 알고리즘은 [TensorFlow Hub](https://tfhub.dev/)에서 사전 훈련된 여러 모델로 전이 학습을 지원하는 지도 학습 알고리즘입니다. 대량의 텍스트 데이터를 사용할 수 없는 경우에도 전이 학습을 이용하여 자체 데이터세트에서 사용 가능한 사전 훈련 모델 중 하나를 미세 조정할 수 있습니다. 텍스트 분류 알고리즘은 텍스트 문자열을 입력 및 출력으로 받아 각 클래스 레이블에 대한 확률을 출력합니다. 훈련 데이터세트는 CSV 형식이어야 합니다. 이 페이지에는 Amazon EC2 인스턴스 권장 사항 및 텍스트 분류용 샘플 노트북 - TensorFlow 대한 정보가 포함되어 있습니다.

**Topics**
+ [SageMaker AI 텍스트 분류 - TensorFlow 알고리즘 사용 방법](text-classification-tensorflow-how-to-use.md)
+ [텍스트 분류 - TensorFlow 알고리즘의 입력/출력 인터페이스](text-classification-tensorflow-inputoutput.md)
+ [텍스트 분류 - TensorFlow 알고리즘에 대한 Amazon EC2 인스턴스 권장 사항](#text-classification-tensorflow-instances)
+ [텍스트 분류 - TensorFlow 샘플 노트북](#text-classification-tensorflow-sample-notebooks)
+ [텍스트 분류 - TensorFlow 작동 방식](text-classification-tensorflow-HowItWorks.md)
+ [TensorFlow Hub Models](text-classification-tensorflow-Models.md)
+ [텍스트 분류 - TensorFlow 하이퍼파라미터](text-classification-tensorflow-Hyperparameter.md)
+ [텍스트 분류 - TensorFlow 모델 튜닝](text-classification-tensorflow-tuning.md)

# SageMaker AI 텍스트 분류 - TensorFlow 알고리즘 사용 방법
<a name="text-classification-tensorflow-how-to-use"></a>

텍스트 분류 - TensorFlow는 Amazon SageMaker AI 기본 제공 알고리즘으로 사용할 수 있습니다. 다음 섹션에서는 SageMaker AI Python SDK로 텍스트 분류 - TensorFlow를 사용하는 방법에 대해 설명합니다. Amazon SageMaker Studio Classic UI로 텍스트 분류 - TensorFlow를 사용하는 방법에 대한 자세한 내용은 [SageMaker JumpStart 사전 훈련된 모델](studio-jumpstart.md) 섹션을 참조하세요.

텍스트 분류 - TensorFlow 알고리즘은 호환 가능한 사전 훈련 TensorFlow 모델을 사용하여 전이 학습을 지원합니다. 사용 가능한 모든 사전 훈련 모델의 목록은 [TensorFlow Hub Models](text-classification-tensorflow-Models.md)를 참조하세요. 모든 사전 훈련 모델에는 고유한 `model_id`가 있습니다. 다음 예제에서는 BERT Base Uncased(`model_id`: `tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2`)를 사용하여 사용자 지정 데이터세트에 대해 미세 조정을 수행합니다. 사전 훈련 모델 모두 TensorFlow Hub에서 사전 다운로드되고 Amazon S3 버킷에 저장되므로, 네트워크 격리 상태에서 훈련 작업을 실행할 수 있습니다. 이처럼 사전 생성된 모델 훈련 아티팩트를 사용하여 SageMaker AI Estimator를 구문화합니다.

먼저 도커 이미지 URI, 훈련 스크립트 URI, 사전 훈련 모델 URI를 검색하세요. 그런 다음 상황에 맞게 하이퍼파라미터를 변경하세요. `hyperparameters.retrieve_default`를 사용하면 모든 가용 하이퍼파라미터와 해당 하이퍼파라미터의 기본값으로 구성된 Python 사전을 볼 수 있습니다. 자세한 내용은 [텍스트 분류 - TensorFlow 하이퍼파라미터](text-classification-tensorflow-Hyperparameter.md) 단원을 참조하십시오. 이 값들을 사용하여 SageMaker AI Estimator를 구문화합니다.

**참고**  
하이퍼파라미터의 기본값은 모델마다 다릅니다. 그 예로 대형 모델일수록 기본 배치 크기가 작습니다.

이 예제에서는 긍정적인 영화 리뷰와 부정적인 영화 리뷰가 포함된 [https://www.tensorflow.org/datasets/catalog/glue#gluesst2](https://www.tensorflow.org/datasets/catalog/glue#gluesst2) 데이터세트를 사용합니다. 데이터세트를 사전 다운로드하여 Amazon S3로 사용할 수 있도록 했습니다. 모델을 미세 조정하려면 훈련 데이터세트의 Amazon S3 위치를 이용하여 `.fit`를 호출하세요. 노트북에 사용되는 모든 S3 버킷은 해당 버킷에 액세스하는 노트북 인스턴스와 동일한 AWS 리전에 있어야 합니다.

```
from sagemaker import image_uris, model_uris, script_uris, hyperparameters
from sagemaker.estimator import Estimator

model_id, model_version = "tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2", "*"
training_instance_type = "ml.p3.2xlarge"

# Retrieve the Docker image
train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None)

# Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training")

# Retrieve the pretrained model tarball for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

# Retrieve the default hyperparameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)

# [Optional] Override default hyperparameters with custom values
hyperparameters["epochs"] = "5"

# Sample training data is available in this bucket
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/SST2/"

training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"

output_bucket = sess.default_bucket()
output_prefix = "jumpstart-example-tc-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

# Create an Estimator instance
tf_tc_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,
)

# Launch a training job
tf_tc_estimator.fit({"training": training_dataset_s3_path}, logs=True)
```

사용자 지정 데이터세트로 SageMaker 텍스트 분류 - TensorFlow 알고리즘을 전이 학습에 사용하는 방법에 대한 자세한 내용은 [JumpStart 소개 - 텍스트 분류](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/jumpstart_text_classification/Amazon_JumpStart_Text_Classification.ipynb) 노트북을 참조하세요.

# 텍스트 분류 - TensorFlow 알고리즘의 입력/출력 인터페이스
<a name="text-classification-tensorflow-inputoutput"></a>

TensorFlow Hub Models에 나열된 각각의 사전 훈련 모델은 클래스의 개수에 관계없이 텍스트 문장으로 구성된 모든 데이터세트에 맞게 미세 조정할 수 있습니다. 사전 훈련 모델은 분류 계층을 텍스트 임베딩 모델에 연결하고 계층 파라미터를 무작위 값으로 초기화합니다. 분류 계층의 출력 차원은 입력 데이터에서 감지된 클래스의 수에 따라 결정됩니다.

텍스트 분류 - TensorFlow 모델에 입력할 수 있도록 훈련 데이터의 형식을 지정하는 방법을 기억해 두세요.
+ **훈련 데이터 입력 형식:** `data.csv` 파일이 포함된 디렉터리입니다. 첫 번째 열의 각 행에는 0과 클래스 개수 사이의 정수 클래스 레이블이 있어야 합니다. 두 번째 열의 각 행에는 해당하는 텍스트 데이터가 있어야 합니다.

다음 내용은 입력 CSV 파일의 예제입니다. 이 파일에는 어떤 헤더도 없어야 합니다. 이 파일은 경로가 `s3://bucket_name/input_directory/`과 유사한 Amazon S3 버킷에 호스팅되어야 합니다. 단, `/`에 대한 후행은 필수입니다.

```
|   |  |
|---|---|
|0 |hide new secretions from the parental units|
|0 |contains no wit , only labored gags|
|1 |that loves its characters and communicates something rather beautiful about human nature|
|...|...|
```

## 증분 훈련
<a name="text-classification-tensorflow-incremental-training"></a>

이전에 SageMaker AI로 훈련시킨 모델의 아티팩트를 새 모델의 훈련을 위한 시드로 지정할 수 있습니다. 증분 훈련은 동일하거나 유사한 데이터로 새 모델을 훈련하려는 경우 훈련 시간을 절감시켜 줍니다.

**참고**  
SageMaker AI 텍스트 분류 - TensorFlow 모델에 대한 시드는 SageMaker AI로 훈련된 다른 텍스트 분류 - TensorFlow 모델로만 지정할 수 있습니다.

클래스 세트가 동일하게 유지되는 한 어떤 데이터세트라도 증분 훈련에 사용할 수 있습니다. 증분 훈련 단계는 미세 조정 단계와 비슷하지만, 사전 훈련 모델로 시작되는 대신 기존의 미세 조정 모델로 시작됩니다.

SageMaker AI 텍스트 분류 - TensorFlow 알고리즘으로 증분 훈련을 사용하는 방법에 대한 자세한 내용은 [Introduction to JumpStart - Text Classification](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/jumpstart_text_classification/Amazon_JumpStart_Text_Classification.ipynb) 샘플 노트북을 참조하세요.

## 텍스트 분류 - TensorFlow 알고리즘을 이용한 추론
<a name="text-classification-tensorflow-inference"></a>

추론용 TensorFlow 텍스트 분류 훈련의 결과인 미세 조정 모델을 호스팅할 수 있습니다. 추론용 원시 텍스트 형식은 `application/x-text` 콘텐츠 유형이어야 합니다.

추론을 실행하면 확률 값 및 모든 클래스의 클래스 레이블이 생성되고, 확률이 가장 높은 클래스 인덱스에 해당하는 예측 레이블이 JSON 형식으로 인코딩됩니다. 텍스트 분류 - TensorFlow 모델은 요청당 단일 문자열을 처리하고 한 줄만 출력합니다. 다음 내용은 JSON 형식 응답의 예제입니다.

```
accept: application/json;verbose

{"probabilities": [prob_0, prob_1, prob_2, ...],
"labels": [label_0, label_1, label_2, ...],
"predicted_label": predicted_label}
```

`accept`를 `application/json`으로 설정하면 해당 모델이 확률만 출력합니다.

## 텍스트 분류 - TensorFlow 알고리즘에 대한 Amazon EC2 인스턴스 권장 사항
<a name="text-classification-tensorflow-instances"></a>

텍스트 분류 - TensorFlow 알고리즘은 다음을 포함하는 모든 훈련용 CPU 인스턴스 및 GPU 인스턴스를 지원합니다.
+ `ml.p2.xlarge`
+ `ml.p2.16xlarge`
+ `ml.p3.2xlarge`
+ `ml.p3.16xlarge`
+ `ml.g4dn.xlarge`
+ `ml.g4dn.16.xlarge`
+ `ml.g5.xlarge`
+ `ml.g5.48xlarge`

배치 크기가 큰 훈련일수록 메모리가 많은 GPU 인스턴스를 사용하는 것이 좋습니다. CPU(예: M5) 인스턴스 및 GPU(P2, P3, G4dn 또는 G5) 인스턴스 둘 다 추론에 사용할 수 있습니다. AWS 리전 간 SageMaker 훈련 및 추론 인스턴스의 전체 목록은 [Amazon SageMaker 요금을](https://aws.amazon.com/sagemaker/pricing/) 참조하세요.

## 텍스트 분류 - TensorFlow 샘플 노트북
<a name="text-classification-tensorflow-sample-notebooks"></a>

사용자 지정 데이터세트로 전이 학습용 SageMaker AI 텍스트 분류 - TensorFlow 알고리즘을 사용하는 방법에 대한 자세한 내용은 [Introduction to JumpStart - Text Classification](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/jumpstart_text_classification/Amazon_JumpStart_Text_Classification.ipynb) 노트북을 참조하세요.

SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 이 인스턴스에 액세스하는 방법에 대한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만들고 연 후에는 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플의 목록을 확인합니다. 노트북을 열려면 **사용** 탭을 선택한 후 **사본 생성**을 선택합니다.

# 텍스트 분류 - TensorFlow 작동 방식
<a name="text-classification-tensorflow-HowItWorks"></a>

텍스트 분류 - TensorFlow 알고리즘은 텍스트를 분류된 대로 가져와서 출력 클래스 레이블 중 하나로 만듭니다. [BERT](https://arxiv.org/pdf/1810.04805.pdf) 등의 딥 러닝 네트워크는 텍스트 분류에 매우 정확합니다. 약 1만 1,000개의 범주로 구성된 텍스트가 1,100만 개를 초과하는 대규모 텍스트 데이터세트(예: TextNet)로 훈련되는 딥 러닝 네트워크도 있습니다. TextNet 데이터로 네트워크를 훈련시키고 나면 특정 초점을 맞춘 데이터세트로 네트워크를 미세 조정하여 보다 구체적인 텍스트 분류 작업을 수행할 수 있습니다. Amazon SageMaker AI 텍스트 분류 - TensorFlow 알고리즘은 TensorFlow Hub에서 사용할 수 있는 여러 사전 훈련 모델에 대한 전이 학습을 지원합니다.

훈련 데이터 내 클래스 레이블의 수에 따라 텍스트 분류 계층이 선택된 사전 훈련 TensorFlow 모델에 연결됩니다. 분류 계층은 드롭아웃 계층, 밀도 계층, 2표준 정규화가 적용된 완전 연결 계층으로 구성되며 무작위 가중치로 초기화됩니다. 드롭아웃 계층의 드롭아웃 비율에 대한 하이퍼파라미터 값과 밀도 계층의 L2 정규화 계수를 변경할 수 있습니다.

네트워크 전체(사전 훈련 모델 포함)를 미세 조정하거나 새 훈련 데이터로 상위 분류 계층만 미세 조정할 수 있습니다. 이 전이 학습 메서드를 사용하면 더 작은 데이터세트로 훈련할 수 있습니다.

# TensorFlow Hub Models
<a name="text-classification-tensorflow-Models"></a>

텍스트 분류 - TensorFlow 알고리즘과 함께 전이 학습에 사용할 수 있는 사전 훈련 모델은 다음과 같습니다.

다음 모델들은 제공된 데이터세트의 크기, 모델 파라미터의 수, 훈련 시간, 추론 지연 시간이 서로 크게 다릅니다. 사용 사례에 가장 적합한 모델은 미세 조정 데이터세트의 복잡도와 훈련 시간, 추론 지연 시간 또는 모델 정확도 관련 요건에 따라 달라집니다.


| 모델 이름 | `model_id` | 소스 | 
| --- | --- | --- | 
|  BERT Base Uncased  | `tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/bert_en_uncased_L-12_H-768_A-12/3) | 
|  BERT Base Cased  | `tensorflow-tc-bert-en-cased-L-12-H-768-A-12-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/bert_en_cased_L-12_H-768_A-12/3) | 
|  BERT Base Multilingual Cased  | `tensorflow-tc-bert-multi-cased-L-12-H-768-A-12-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/bert_multi_cased_L-12_H-768_A-12/3) | 
|  Small BERT L-2\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-2-H-128-A-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-2_H-128_A-2/1) | 
|  Small BERT L-2\$1H-256\$1A-4 | `tensorflow-tc-small-bert-bert-en-uncased-L-2-H-256-A-4` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-2_H-256_A-4/1) | 
|  Small BERT L-2\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-2-H-512-A-8` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-2_H-512_A-8/1) | 
|  Small BERT L-2\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-2-H-768-A-12` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-2_H-768_A-12/1) | 
|  Small BERT L-4\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-4-H-128-A-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-4_H-128_A-2/1) | 
|  Small BERT L-4\$1H-256\$1A-4  | `tensorflow-tc-small-bert-bert-en-uncased-L-4-H-256-A-4` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-4_H-256_A-4/1) | 
|  Small BERT L-4\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-4-H-512-A-8` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-4_H-512_A-8/1) | 
|  Small BERT L-4\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-4-H-768-A-12` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-4_H-768_A-12/1) | 
|  Small BERT L-6\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-6-H-128-A-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-6_H-128_A-2/1) | 
|  Small BERT L-6\$1H-256\$1A-4  | `tensorflow-tc-small-bert-bert-en-uncased-L-6-H-256-A-4` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-6_H-256_A-4/1) | 
|  Small BERT L-6\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-6-H-512-A-8` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-6_H-512_A-8/1) | 
|  Small BERT L-6\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-6-H-768-A-12` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-6_H-768_A-12/1) | 
|  Small BERT L-8\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-8-H-128-A-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-8_H-128_A-2/1) | 
|  Small BERT L-8\$1H-256\$1A-4  | `tensorflow-tc-small-bert-bert-en-uncased-L-8-H-256-A-4` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-8_H-256_A-4/1) | 
|  Small BERT L-8\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-8-H-512-A-8` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-8_H-512_A-8/1) | 
|  Small BERT L-8\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-8-H-768-A-12` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-8_H-768_A-12/1) | 
|  Small BERT L-10\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-10-H-128-A-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-10_H-128_A-2/1) | 
|  Small BERT L-10\$1H-256\$1A-4  | `tensorflow-tc-small-bert-bert-en-uncased-L-10-H-256-A-4` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-10_H-256_A-4/1) | 
|  Small BERT L-10\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-10-H-512-A-8` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-10_H-512_A-8/1) | 
|  Small BERT L-10\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-10-H-768-A-12` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-10_H-768_A-12/1) | 
|  Small BERT L-12\$1H-128\$1A-2  | `tensorflow-tc-small-bert-bert-en-uncased-L-12-H-128-A-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-12_H-128_A-2/1) | 
|  Small BERT L-12\$1H-256\$1A-4  | `tensorflow-tc-small-bert-bert-en-uncased-L-12-H-256-A-4` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-12_H-256_A-4/1) | 
|  Small BERT L-12\$1H-512\$1A-8  | `tensorflow-tc-small-bert-bert-en-uncased-L-12-H-512-A-8` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-12_H-512_A-8/1) | 
|  Small BERT L-12\$1H-768\$1A-12  | `tensorflow-tc-small-bert-bert-en-uncased-L-12-H-768-A-12` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-12_H-768_A-12/1) | 
|  BERT Large Uncased  | `tensorflow-tc-bert-en-uncased-L-24-H-1024-A-16-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/bert_en_uncased_L-24_H-1024_A-16/3) | 
|  BERT Large Cased  | `tensorflow-tc-bert-en-cased-L-24-H-1024-A-16-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/bert_en_cased_L-24_H-1024_A-16/3) | 
|  BERT Large Uncased Whole Word Masking  | `tensorflow-tc-bert-en-wwm-uncased-L-24-H-1024-A-16-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/bert_en_wwm_uncased_L-24_H-1024_A-16/3) | 
|  BERT Large Cased Whole Word Masking  | `tensorflow-tc-bert-en-wwm-cased-L-24-H-1024-A-16-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/bert_en_wwm_cased_L-24_H-1024_A-16/3) | 
|  ALBERT Base  | `tensorflow-tc-albert-en-base` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/albert_en_base/2) | 
|  ELECTRA Small\$1\$1  | `tensorflow-tc-electra-small-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/electra_small/2) | 
|  ELECTRA Base  | `tensorflow-tc-electra-base-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/electra_base/2) | 
|  BERT Base Wikipedia and BooksCorpus  | `tensorflow-tc-experts-bert-wiki-books-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/experts/bert/wiki_books/2) | 
|  BERT Base MEDLINE/PubMed  | `tensorflow-tc-experts-bert-pubmed-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/experts/bert/pubmed/2) | 
|  Talking Heads Base  | `tensorflow-tc-talking-heads-base` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/talkheads_ggelu_bert_en_base/1) | 
|  Talking Heads Large  | `tensorflow-tc-talking-heads-large` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/talkheads_ggelu_bert_en_large/1) | 

# 텍스트 분류 - TensorFlow 하이퍼파라미터
<a name="text-classification-tensorflow-Hyperparameter"></a>

하이퍼파라미터는 기계 학습 모델이 학습을 시작하기 전에 설정되는 파라미터입니다. Amazon SageMaker AI 기본 제공 객체 감지 - TensorFlow 알고리즘이 지원하는 하이퍼파라미터는 다음과 같습니다. 하이퍼파라미터 튜닝 관련 정보는 [텍스트 분류 - TensorFlow 모델 튜닝](text-classification-tensorflow-tuning.md) 섹션을 참조하세요.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| batch\$1size |  훈련용 배치 크기. GPU가 여러 개인 인스턴스로 훈련할 경우에는 이 배치 크기가 모든 GPU에서 사용됩니다. 유효한 값: 양수. 기본값: `32`.  | 
| beta\$11 |  `"adam"` 및 `"adamw"` 최적화 프로그램 전용 beta1. 1차 추정치의 지수 감소율을 나타냅니다. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.9`.  | 
| beta\$12 |  `"adam"` 및 `"adamw"` 최적화 프로그램 전용 beta2. 2차 추정치의 지수 감소율을 나타냅니다. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.999`.  | 
| dropout\$1rate | 최상위 분류 계층의 드롭아웃 계층에 대한 드롭아웃 비율. `reinitialize_top_layer`가 `"True"`로 설정된 경우에만 사용합니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.2` | 
| early\$1stopping |  훈련 중 조기 중지 로직을 사용하기 위한 `"True"` 설정 여부. `"False"`인 경우에는 조기 중지를 사용하지 않습니다. 유효한 값: 문자열, 다음 중 하나: (`"True"` 또는 `"False"`). 기본값: `"False"`.  | 
| early\$1stopping\$1min\$1delta | 개선으로 인정받는 데 필요한 최소 변화. early\$1stopping\$1min\$1delta의 값보다 작은 절대 변화는 개선으로 인정되지 않습니다. early\$1stopping이 "True"로 설정된 경우에만 사용합니다.유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`].기본값: `0.0`. | 
| early\$1stopping\$1patience |  개선이 없는 상태에서도 훈련을 계속할 수 있는 에포크의 수. `early_stopping`이 `"True"`로 설정된 경우에만 사용합니다. 유효한 값: 양수. 기본값: `5`.  | 
| epochs |  훈련 epoch의 수. 유효한 값: 양수. 기본값: `10`.  | 
| epsilon |  `"adam"`, `"rmsprop"`, `"adadelta"`, `"adagrad"` 최적화 프로그램 전용 엡실론. 0으로 나눠지지 않도록 대개 작은 값으로 설정됩니다. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `1e-7`.  | 
| initial\$1accumulator\$1value |  `"adagrad"` 최적화 프로그램 전용 누적기의 시작 값 또는 파라미터별 모멘텀 값. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.0001`.  | 
| learning\$1rate | 최적화 프로그램 학습률.유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`].기본값: `0.001`. | 
| momentum |  `"sgd"` 및 `"nesterov"` 최적화 프로그램의 모멘텀. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.9`.  | 
| optimizer |  옵티마이저 유형. 자세한 내용은 TensorFlow 설명서의 [최적화 프로그램](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers)을 참조하세요. 유효한 값: 문자열, 다음 중 하나: (`"adamw"`, `"adam"`, `"sgd"`, `"nesterov"`, `"rmsprop"`, ` "adagrad"`, `"adadelta"`). 기본값: `"adam"`.  | 
| regularizers\$1l2 |  분류 계층의 밀도 계층에 대한 L2 정규화 계수. `reinitialize_top_layer`가 `"True"`로 설정된 경우에만 사용합니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.0001`.  | 
| reinitialize\$1top\$1layer |  `"Auto"`로 설정하면 미세 조정 중에 최상위 분류 계층 파라미터가 다시 초기화됩니다. 증분 훈련에서 최상위 분류 계층 파라미터는 `"True"`로 설정된 경우를 제외하면 다시 초기화되지 않습니다. 유효한 값: 문자열, 다음 중 하나: (`"Auto"`, `"True"` 또는 `"False"`). 기본값: `"Auto"`.  | 
| rho |  `"adadelta"` 및 `"rmsprop"` 최적화 프로그램의 그라데이션에 대한 할인 계수입니다. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.95`.  | 
| train\$1only\$1on\$1top\$1layer |  `"True"`인 경우 최상위 분류 계층 파라미터만 미세 조정됩니다. `"False"`인 경우 모든 모델 파라미터가 미세 조정됩니다. 유효한 값: 문자열, 다음 중 하나: (`"True"` 또는 `"False"`). 기본값: `"False"`.  | 
| validation\$1split\$1ratio |  검증 데이터를 생성하기 위해 무작위로 분할되는 훈련 데이터의 비율입니다. `validation` 채널을 통해 검증 데이터가 제공되지 않는 경우에만 사용됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.2`.  | 
| warmup\$1steps\$1fraction |  그라데이션 업데이트 단계의 총 개수 중에서 차지하는 비율입니다. 여기서 학습률은 워밍업 시 0에서 초기 학습률까지 증가합니다. `adamw` 최적화 프로그램에서만 사용됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.1`.  | 

# 텍스트 분류 - TensorFlow 모델 튜닝
<a name="text-classification-tensorflow-tuning"></a>

하이퍼파라미터 튜닝이라고도 하는 자동 모델 튜닝은 데이터세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 알고리즘에서 계산하는 지표 중에서 목표 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 목표 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## 텍스트 분류 - TensorFlow 알고리즘으로 계산되는 지표
<a name="text-classification-tensorflow-metrics"></a>

텍스트 분류 - TensorFlow 알고리즘으로 계산되는 지표가 무엇인지 확인하려면 다음 차트를 참조하세요.


| 지표 이름 | 설명 | 최적화 방향 | Regex 패턴 | 
| --- | --- | --- | --- | 
| validation:accuracy | 올바른 예측 수 대 총 예측 수의 비율입니다. | 최대화 | `val_accuracy=([0-9\\.]+)` | 

## 튜닝 가능한 텍스트 분류 - TensorFlow 하이퍼파라미터
<a name="text-classification-tensorflow-tunable-hyperparameters"></a>

다음 하이퍼파라미터를 사용하여 텍스트 분류 모델을 튜닝하세요. 텍스트 분류 목표 지표에 가장 큰 영향을 미치는 하이퍼파라미터는 `batch_size`, `learning_rate`, `optimizer`입니다. 선택된 `optimizer`를 기준으로 최적화 프로그램 관련 하이퍼파라미터(예: `momentum`, `regularizers_l2`, `beta_1`, `beta_2`, `eps`)를 튜닝하세요. 예를 들어 `adamw` 또는 `adam`이 `optimizer`인 경우에만 `beta_1` 및 `beta_2`를 사용하세요.

각 `optimizer`에 사용되는 하이퍼파라미터의 종류에 대한 자세한 내용은 [텍스트 분류 - TensorFlow 하이퍼파라미터](text-classification-tensorflow-Hyperparameter.md)를 참조하세요.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| batch\$1size | IntegerParameterRanges | MinValue: 4, MaxValue: 128 | 
| beta\$11 | ContinuousParameterRanges | MinValue: 1e-6, MaxValue: 0.999 | 
| beta\$12 | ContinuousParameterRanges | MinValue: 1e-6, MaxValue: 0.999 | 
| eps | ContinuousParameterRanges | MinValue: 1e-8, MaxValue: 1.0 | 
| learning\$1rate | ContinuousParameterRanges | MinValue: 1e-6, MaxValue: 0.5 | 
| momentum | ContinuousParameterRanges | MinValue: 0.0, MaxValue: 0.999 | 
| optimizer | CategoricalParameterRanges | ['adamw', 'adam', 'sgd', 'rmsprop', 'nesterov', 'adagrad', 'adadelta'] | 
| regularizers\$1l2 | ContinuousParameterRanges | MinValue: 0.0, MaxValue: 0.999 | 
| train\$1only\$1on\$1top\$1layer | CategoricalParameterRanges | ['True', 'False'] | 

# 시계열 데이터용 내장된 SageMaker AI 알고리즘
<a name="algorithms-time-series"></a>

SageMaker AI는 시계열 데이터 분석에 맞게 조정된 알고리즘을 제공하여 제품 수요, 서버 부하, 웹 페이지 요청 등을 예측합니다.
+ [SageMaker AI DeepAR 예측 알고리즘 사용](deepar.md) - 반복 신경망(RNN)을 사용하여 스칼라(1차원) 시계열을 예상하는 지도 학습 알고리즘.


| 알고리즘 이름 | 채널 이름 | 훈련 입력 모드 | 파일 유형 | 인스턴스 클래스 | 병렬화 가능 | 
| --- | --- | --- | --- | --- | --- | 
| DeepAR Forecasting | train 및 (선택 사항) test | 파일 | JSON 라인 또는 Parquet | GPU 또는 CPU | 예 | 

# SageMaker AI DeepAR 예측 알고리즘 사용
<a name="deepar"></a>

Amazon SageMaker AI DeepAR 예측 알고리즘은 반복 신경망(RNN)을 사용하여 스칼라(1차원) 시계열을 예상하는 지도 학습 알고리즘입니다. 자동 회귀적 통합 이동 평균(ARIMA) 또는 지수 평활(ETS)과 같은 고전적 예측 방법은 단일 모델을 개별 시계열에 맞춥니다. 그런 다음 해당 모델을 사용하여 시계열을 미래로 추정합니다.

그러나 많은 애플리케이션에서 일련의 횡단적 단위에 걸쳐 비슷한 시계열이 많이 있습니다. 예를 들어, 다양한 제품, 서버 로드 및 웹페이지에 대한 요청을 위한 시계열 그룹화가 있을 수 있습니다. 이러한 유형의 애플리케이션의 경우 모든 시계열에 대해 단일 모델을 공동으로 훈련하는 것이 이로울 수 있습니다. DeepAR는 이러한 접근 방법을 사용합니다. 데이터세트에 수백 개의 관련 시계열이 포함되어 있는 경우, DeepAR이 표준 ARIMA 및 ETS 방법보다 우수합니다. 또한 훈련받은 모델과 유사한 새 시계열에 대한 예상을 생성하기 위해 훈련받은 모델을 사용할 수도 있습니다.

DeepAR 알고리즘에 대한 훈련 입력은 동일한 프로세스 또는 유사한 프로세스에 의해 생성된 하나 또는 그 이상의 `target` 시계열입니다. 알고리즘은 이 입력 데이터세트을 기반으로 이 프로세스/프로세스에 대한 근사치를 학습하는 모델을 훈련시키고 이를 사용하여 표적 시시계열이 어떻게 발전하는지를 예측합니다. 각 대상 시계열은 선택적으로 `cat` 필드에서 제공하는 정적(시간 독립) 범주형 형상의 벡터 및 `dynamic_feat` 필드가 제공하는 동적(시간 종속) 시계열의 벡터와 연관될 수 있습니다. SageMaker AI는 훈련 데이터세트의 각 시계열에서 훈련 예시를 무작위로 샘플링하여 DeepAR 모델을 훈련합니다. 각 훈련 예제는 미리 정의된 길이가 고정된 한 쌍의 인접 컨텍스트 및 예상 창으로 구성됩니다. 네트워크에서 과거를 어느 시점까지 볼 수 있는지 제어하려면 `context_length` 하이퍼파라미터를 사용합니다. 미래의 어느 시점까지 예측할 수 있는지 제어하려면 `prediction_length` 하이퍼파라미터를 사용합니다. 자세한 내용은 [DeepAR 알고리즘 작동 방법](deepar_how-it-works.md) 섹션을 참조하세요.

**Topics**
+ [DeepAR 알고리즘을 위한 입력/출력 인터페이스](#deepar-inputoutput)
+ [DeepAR 알고리즘 사용의 모범 사례](#deepar_best_practices)
+ [DeepAR 알고리즘을 위한 EC2 인스턴스 권장 사항](#deepar-instances)
+ [DeepAR 샘플 노트북](#deepar-sample-notebooks)
+ [DeepAR 알고리즘 작동 방법](deepar_how-it-works.md)
+ [DeepAR 하이퍼파라미터](deepar_hyperparameters.md)
+ [DeepAR 모델 튜닝](deepar-tuning.md)
+ [DeepAR 추론 형식](deepar-in-formats.md)

## DeepAR 알고리즘을 위한 입력/출력 인터페이스
<a name="deepar-inputoutput"></a>

DeepAR은 두 가지 데이터 채널을 지원합니다. 필수 `train` 채널은 훈련 데이터세트를 설명합니다. 선택적 `test` 채널은 알고리즘에서 훈련 후 모델 정확성을 평가하는 데 사용하는 데이터세트를 설명합니다. [JSON Lines](http://jsonlines.org/) 형식의 훈련 및 테스트 데이터세트를 제공할 수 있습니다. 파일은 gzip 또는 [Parquet](https://parquet.apache.org/) 형식일 수 있습니다.

훈련 및 테스트 데이터에 대한 경로를 지정할 때 단일 파일을 지정하거나 여러 파일이 포함된 디렉터리를 지정할 수 있습니다. 후자의 경우 여러 파일은 하위 디렉터리에 저장할 수 있습니다. 디렉터리를 지정하면 DeepAR에서는 이 디렉터리의 모든 파일을 해당 채널의 입력으로 사용할 수 있지만 마침표(.)로 시작하거나 \$1SUCCESS라고 이름이 지정된 파일은 예외입니다.** 그러면 Spark 작업에서 생성된 출력 폴더를 DeepAR 훈련 작업에 대한 입력 채널로 직접 사용할 수 있습니다.

기본적으로, DeepAR 모델은 지정된 입력 경로에 있는 파일 확장자(`.json`, `.json.gz` 또는 `.parquet`)를 통해 입력 형식을 확인합니다. 경로가 이러한 확장자 중 하나로 끝나지 않으면 SDK for Python에 형식을 명시적으로 지정해야 합니다. [s3\$1input](https://sagemaker.readthedocs.io/en/stable/session.html#sagemaker.session.s3_input) 클래스의 `content_type` 파라미터를 사용하세요.

입력 파일의 레코드에는 다음 필드가 포함되어 있어야 합니다.
+ `start` - `YYYY-MM-DD HH:MM:SS` 형식의 문자열. 시작 타임스탬프에는 시간대 정보가 포함될 수 없습니다.
+ `target` - 시계열을 나타내는 부동 소수점 값 또는 정수로 구성된 배열. 누락된 값은 `null` 리터럴, JSON 형식의 `"NaN"` 문자열 또는 Parquet 형식의 `nan` 부동 소수점 값으로 인코딩할 수 있습니다.
+ `dynamic_feat`(선택 사항) - 사용자 지정 기능 시계열(동적 특성)의 벡터를 나타내는 부동 소수점 값 또는 정수로 구성된 배열. 이 필드를 설정하면 모든 레코드에 동일한 수의 내측 배열이 있어야 합니다(요인(feature) 시계열과 동일한 수). 또한 각 내측 배열은 연결된 `target` 값에 `prediction_length`를 더한 것과 길이가 같아야 합니다. 누락된 값은 요인(feature)에서 지원되지 않습니다. 예를 들어, 표적 시계열이 서로 다른 제품의 수요를 나타낼 경우, 연결된 `dynamic_feat`는 특정 제품에 프로모션이 적용되었는지 여부(적용 1, 비적용 0)를 나타내는 부울 시계열일 수 있습니다.

  ```
  {"start": ..., "target": [1, 5, 10, 2], "dynamic_feat": [[0, 1, 1, 0]]}
  ```
+ `cat`(선택 사항) - 레코드가 속한 그룹을 인코딩하는 데 사용할 수 있는 범주형 기능의 배열입니다. 범주 요인(feature)은 양의 정수의 0부터 시작하는 시퀀스로 인코딩해야 합니다. 예를 들어, 범주형 도메인 \$1R, G, B\$1은 \$10, 1, 2\$1로 인코딩할 수 있습니다. 각 범주형 도메인의 모든 값이 훈련 데이터세트에 나타나야 합니다. 이는 DeepAR 알고리즘이 훈련 중 관찰된 범주에 대해서만 예측할 수 있기 때문입니다. 각 범주 요인(feature)은 차원이 `embedding_dimension` 하이퍼파라미터로 제어되는 저차원 공간에서 임베딩됩니다. 자세한 내용은 [DeepAR 하이퍼파라미터](deepar_hyperparameters.md) 섹션을 참조하세요.

JSON 파일을 사용하는 경우 이 파일은 [JSON Lines](http://jsonlines.org/) 형식이어야 합니다. 예제:

```
{"start": "2009-11-01 00:00:00", "target": [4.3, "NaN", 5.1, ...], "cat": [0, 1], "dynamic_feat": [[1.1, 1.2, 0.5, ...]]}
{"start": "2012-01-30 00:00:00", "target": [1.0, -5.0, ...], "cat": [2, 3], "dynamic_feat": [[1.1, 2.05, ...]]}
{"start": "1999-01-30 00:00:00", "target": [2.0, 1.0], "cat": [1, 4], "dynamic_feat": [[1.3, 0.4]]}
```

이 예에서 각 시계열에는 연결된 범주 요인(feature) 2개와 시계열 요인(feature) 하나가 있습니다.

Parquet의 경우 동일한 3개 필드를 열로 사용합니다. 추가로 `"start"`는 `datetime` 유형일 수 있습니다. Parquet 파일은 gzip(`gzip`) 또는 Snappy 압축 라이브러리(`snappy`)를 사용하여 압축할 수 있습니다.

알고리즘이 `cat` 필드와 `dynamic_feat` 필드 없이 훈련되면 추론 시간에 표적 시계열의 특정 ID에 구애받지 않고 그 형상에만 조건화되는 "global" 모델을 학습합니다.

모델이 각 시계열에 대해 제공된 `cat` 및 `dynamic_feat` 요인(feature) 데이터에 대해 조건화되면, 예측은 해당 `cat` 요인과 함께 시계열의 특성의 영향을 받을 것입니다. 예를 들어 `target` 시계열이 의류 품목의 수요를 나타낼 경우, 첫 구성 요소에 품목 유형(예 0 = 신발, 1 = 드레스)를 인코딩하고 두 번째 구성 요소에 품목 색상(예 0 = 빨간색, 1 = 파란색)을 인코딩하는 2차원 `cat` 벡터를 연결할 수 있습니다. 샘플 입력은 다음과 같습니다.

```
{ "start": ..., "target": ..., "cat": [0, 0], ... } # red shoes
{ "start": ..., "target": ..., "cat": [1, 1], ... } # blue dress
```

추론 시, 훈련 데이터에서 관찰된 `cat` 값의 조합인 `cat` 값으로 표적에 대한 예측을 요청할 수 있습니다.

```
{ "start": ..., "target": ..., "cat": [0, 1], ... } # blue shoes
{ "start": ..., "target": ..., "cat": [1, 0], ... } # red dress
```

훈련 데이터에는 다음 지침이 적용됩니다.
+ 시계열의 시작 시간과 길이는 다를 수 있습니다. 예를 들어 마케팅에서 제품은 서로 다른 날짜에 소매 카탈로그에 입력되는 경우가 많으므로 이에 따라 시작 날짜가 다릅니다. 하지만 모든 시계열은 빈도, 범주 요인(feature) 수 및 동적 요인 수가 동일해야 합니다.
+ 파일 내에서 시계열의 위치와 관련해 훈련 파일을 셔플합니다. 다시 말해 시계열이 파일에서 임의 순서로 발생해야 합니다.
+ `start` 필드를 올바르게 설정했는지 확인합니다. 이 알고리즘은 `start` 타임스탬프를 사용하여 내부 요인(feature)을 가져옵니다.
+ 범주 요인(feature)(`cat`)을 사용하는 경우 모든 시계열에 동일한 수의 범주 요인(feature)이 있어야 합니다. 데이터세트에 `cat` 필드가 있는 경우 이 알고리즘은 이 필드를 사용하여 데이터세트에서 여러 그룹의 카디널리티를 추출합니다. 기본적으로 `cardinality`는 `"auto"`입니다. 데이터세트에 `cat` 필드가 포함되어 있지만 사용하지 않으려는 경우 `cardinality`를 `""`으로 설정하여 비활성화할 수 있습니다. `cat` 요인(feature)을 사용하여 모델을 훈련한 경우에는 추론에 이 요인(feature)을 포함해야 합니다.
+ 데이터세트에 `dynamic_feat` 필드가 포함된 경우 이 알고리즘은 이 필드를 자동으로 사용합니다. 모든 시계열에는 동일한 수의 요인(feature) 시계열이 있어야 합니다. 각 요인(feature) 시계열의 시점은 대상의 시점과 일대일로 대응합니다. 또한 `dynamic_feat` 필드의 항목은 길이가 `target`과 동일해야 합니다. 데이터세트에 `dynamic_feat` 필드가 포함되어 있지만 사용하지 않으려는 경우 `num_dynamic_feat`를 `""`으로 설정하여 비활성화할 수 있습니다. `dynamic_feat` 필드를 사용하여 모델을 훈련한 경우 추론에 이 필드를 제공해야 합니다. 또한 각 요인(feature)은 제공된 대상의 길이와 `prediction_length`를 더한 것과 길이가 같아야 합니다. 즉, 향후 요인(feature) 값을 제공해야 합니다.

선택 사항인 test 채널 데이터를 지정하는 경우 DeepAR 알고리즘은 다른 정확도 지표를 사용하여 교육된 모델을 평가합니다. 알고리즘은 다음과 같이 테스트에 걸쳐 평균 제곱근 오차(RMSE)를 계산합니다.

![\[RMSE 공식: Sqrt(1/nT(Sum[i,t](y-hat(i,t)-y(i,t))^2))\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/deepar-1.png)


*y**i*,*t*는 시간 *t*에서 시계열 *i*의 참값입니다. *ŷ**i*,*t*는 평균 예측입니다. 합은 테스트 세트의 전체 *n* 시계열이고 각 시계열에 대한 마지막 T 시점입니다. 여기서 T는 예측 구간과 일치합니다. `prediction_length` 하이퍼파라미터를 설정하여 예측 구간의 길이를 지정합니다. 자세한 내용은 [DeepAR 하이퍼파라미터](deepar_hyperparameters.md) 섹션을 참조하세요.

또한 이 알고리즘은 가중 분위 손실을 사용하여 예측 배포의 정확성을 평가됩니다. 범위 [0, 1]의 분위에 대해 가중 분위 손실은 다음과 같이 정의됩니다.

![\[가중 분위수 손실 방정식.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/deepar-2.png)


 *q**i*,*t*(τ)는 모델이 예측한 배포의 τ-분위입니다. 손실을 계산할 분위를 지정하려면 `test_quantiles` 하이퍼파라미터를 설정합니다. 또한, 지정된 분위 손실 평균이 훈련 로그의 일부로 보고됩니다. 자세한 내용은 [DeepAR 하이퍼파라미터](deepar_hyperparameters.md) 단원을 참조하세요.

추론을 위해 DeepAR은 JSON 형식과 다음 필드를 수락합니다.
+  `"instances"`: 하나 이상의 시계열을 JSON Lines 형식으로 포함하고 있습니다.
+  `"configuration"`의 이름: 예측 생성을 위한 파라미터를 포함하고 있습니다.

자세한 내용은 [DeepAR 추론 형식](deepar-in-formats.md) 섹션을 참조하세요.

## DeepAR 알고리즘 사용의 모범 사례
<a name="deepar_best_practices"></a>

시계열 데이터를 준비할 때 최적의 결과를 얻으려면 다음 모범 사례를 따르세요.
+ 훈련 및 데이터를 위해 세트를 분리하는 경우를 제외하고는 훈련 및 테스트 시 그리고 추론을 위해 모델을 호출할 때 항상 전체 시계열을 제공합니다. `context_length`를 설정한 방법에 관계없이 시계열을 분할하거나 시계열 중 일부만 제공하지 마세요. 모델은 지연된 값 요인(feature)에 대해 `context_length`에 설정된 값보다 더 뒤쪽의 데이터 포인트를 사용합니다.
+ DeepAR 모델을 튜닝하는 경우 데이터세트를 분할해 훈련 데이터세트와 테스트 데이터세트를 생성할 수 있습니다. 일반적인 평가에서는 훈련에 사용된 것과 동일한 시계열에 대해 모델을 테스트하지만 이후에는 훈련 중에 표시된 마지막 시점 직후 `prediction_length` 시점에 대해 테스트합니다. 테스트 세트로 전체 데이터세트(사용 가능한 시계열의 전체 길이)를 사용하고 훈련에 대한 각 시계열에서 마지막 `prediction_length` 시점을 제거하여 이러한 기준을 충족하는 훈련 및 테스트 데이터세트를 생성할 수 있습니다 훈련 중에는 모델이 테스트 중에 평가된 시점의 대상 값을 볼 수 없습니다. 테스트 중 알고리즘은 테스트 세트 내 각 시계열의 마지막 `prediction_length` 지점을 보류하고 예측을 생성합니다. 그런 다음 예측을 보류된 값과 비교합니다. 테스트 세트에서 시계열을 여러 번 반복하면서 다른 엔드포인트에서 잘라내어 더 복잡한 평가를 생성할 수 있습니다. 이러한 접근 방식을 통해 여러 시점의 다양한 예측에 대해 정확도 지표가 평균화됩니다. 자세한 내용은 [DeepAR 모델 튜닝](deepar-tuning.md) 섹션을 참조하세요.
+ 모델이 느려지고 정확도가 떨어지므로 `prediction_length`에 매우 큰 값(> 400)을 사용하지 마세요. 향후 추가 예측을 원하는 경우 더 낮은 빈도로 데이터를 집계할 것을 고려하세요. 예를 들어 `1min` 대신 `5min`을 사용하세요.
+ 시차가 사용되기 때문에 모델은 `context_length`에 대해 지정된 값보다 시계열에서 훨씬 멀리 볼 수 있습니다. 따라서 이 파라미터 큰 값으로 설정할 필요가 없습니다. `prediction_length`에 사용한 값으로 시작하는 것이 좋습니다.
+ 가능한 많은 시계열로 DeepAR 모델을 훈련하는 것이 좋습니다. 단일 시계열에 대해 훈련한 DeepAR 모델이 잘 작동할지라도 ARIMA 또는 ETS 등과 같은 표준 예측 알고리즘이 더욱 정확한 결과를 제공할 수 있습니다. DeepAR 알고리즘은 데이터세트에 수백 개의 관련 시계열이 있을 때 표준 방법보다 성능이 더 크게 증가하기 시작합니다. 현재 DeepAR에는 모든 훈련 시계열에서 사용 가능한 총 관측 수가 최소 300개 이상 필요합니다.

## DeepAR 알고리즘을 위한 EC2 인스턴스 권장 사항
<a name="deepar-instances"></a>

단일 또는 다중 머신 설정의 GPU 및 CPU 인스턴스에서 DeepAR을 훈련할 수 있습니다. 단일 CPU 인스턴스(예: ml.c4.2xlarge 또는 ml.c4.4xlarge)로 시작한 다음 필요한 경우에만 GPU 인스턴스 및 다중 머신으로 전환하는 것이 좋습니다. 여러 개의 GPU와 머신을 사용하면 (계층마다 많은 셀이 있고 많은 수 계층이 있는) 큰 모델과 큰 미니 배치 크기(예: 512 이상)의 경우에만 처리량이 늘어납니다.

추론을 위해 DeepAR은 CPU 인스턴스만 지원합니다.

`context_length`, `prediction_length`, `num_cells`, `num_layers` 또는 `mini_batch_size`에 대해 큰 값을 지정하면 스몰 인스턴스에는 너무 큰 모델이 생성될 수 있습니다. 이러한 경우에는 더 큰 인스턴스 유형을 사용하거나 파라미터에 대한 값을 줄입니다. 이러한 문제는 하이퍼파라미터 튜닝 작업을 실행하는 경우 자주 발생합니다. 문제가 발생한 경우에는 작업 실패를 방지하기 위해 모델 튜닝 작업에 충분히 큰 인스턴스 유형을 사용하고 중요한 파라미터의 상한값을 제한할 것을 고려하세요.

## DeepAR 샘플 노트북
<a name="deepar-sample-notebooks"></a>

SageMaker AI DeepAR 알고리즘 훈련을 위한 시계열 데이터세트를 준비하는 방법과 추론을 수행하기 위해 훈련된 모델을 배포하는 방법을 보여주는 샘플 노트북은 실생활 데이터세트에 대한 DeepAR의 고급 기능을 보여주는 [DeepAR demo on electricity dataset](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/deepar_electricity/DeepAR-Electricity.html) 섹션을 확인하세요. SageMaker AI에서 예시를 실행하는 데 사용할 수 있는 Jupyter Notebook 인스턴스를 만들어 해당 인스턴스에 액세스하는 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만들어 연 다음, **SageMaker AI 예시** 탭을 선택하면 모든 SageMaker AI 예시 목록이 나타납니다. 노트북을 열려면 **사용** 탭을 선택한 후 **Create copy(사본 생성)**를 선택합니다.

Amazon SageMaker AI DeepAR 알고리즘에 대한 자세한 내용은 다음 블로그 게시물을 참조하세요.
+ [Now available in Amazon SageMaker AI: DeepAR algorithm for more accurate time series forecasting](https://aws.amazon.com/blogs/machine-learning/now-available-in-amazon-sagemaker-deepar-algorithm-for-more-accurate-time-series-forecasting/)
+ [Deep demand forecasting with Amazon SageMaker AI](https://aws.amazon.com/blogs/machine-learning/deep-demand-forecasting-with-amazon-sagemaker/)

# DeepAR 알고리즘 작동 방법
<a name="deepar_how-it-works"></a>

훈련 과정에서 DeepAR은 훈련 데이터세트 및 선택적 테스트 데이터세트를 수락합니다. 그리고 테스트 데이터세트를 사용하여 훈련받은 모델을 평가합니다. 일반적으로 데이터세트에는 동일한 시계열 집합이 포함될 필요가 없습니다. 주어진 훈련 세트에 대해 훈련된 모델을 사용하여 훈련 세트에서 미래의 시계열 및 기타 시계열에 대한 예상을 생성할 수 있습니다. 훈련 및 테스트 데이터세트는 모두 하나 또는 바람직하게는 그 이상의 대상 시계열로 구성됩니다. 각 대상 시계열은 선택적으로 요인(feature) 시계열의 벡터 및 범주 요인(feature)의 벡터와 선택적으로 연결할 수 있습니다. 자세한 내용은 [DeepAR 알고리즘을 위한 입력/출력 인터페이스](deepar.md#deepar-inputoutput) 섹션을 참조하세요.

예를 들어, 다음은 목표 시계열 *Zi,t*와 두 개의 관련 특징 시계열 *Xi,1,t*와 *Xi,2,t* 구성된 *i*로 인덱싱된 훈련 세트의 요소입니다.

![\[그림 1: 대상 시계열 및 연결된 요인(feature) 시계열\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/ts-full-159.base.png)


대상 시계열에 누락된 값이 있을 수 있습니다. 이러한 값은 시계열에서 선 끊김으로 표현됩니다. DeepAR은 미래에 알려지는 기능 시계열만 지원합니다. 따라서 "what if?"를 실행할 수 있습니다. 예: 제품의 가격을 어떤 식으로든 변경하면 어떻게 됩니까?

각 대상 시계열은 여러 가지 범주 요인(feature)과 연결될 수 있습니다. 이러한 요인(feature)을 사용하여 시계열이 속하는 그룹을 인코딩할 수 있습니다. 범주 요인(feature)을 사용하면 모델에서 그룹에 대한 일반적인 행동을 학습할 수 있으므로, 이를 통해 모델 정확성을 향상시킬 수 있습니다. DeepAR은 그룹의 모든 시계열의 공통 속성을 포착하는 각 그룹에 대한 임베딩 벡터를 학습하여 이를 구현합니다.

## DeepAR 알고리즘에서 요인(feature) 시계열이 작동하는 방법
<a name="deepar_under-the-hood"></a>

주말의 급증과 같이 시간에 따라 달라지는 패턴을 쉽게 학습할 수 있도록 DeepAR은 대상 시계열의 빈도를 기반으로 요인(feature) 시계열을 자동으로 생성합니다. 이 파생 요인(feature) 시계열을 훈련 및 추론 중에 제공하는 사용자 지정 요인(feature) 시계열과 함께 사용합니다. 다음 그림은 파생된 시계열 요인 중 두 가지를 보여주는데 *ui,1,t*는 시간을, *ui,2,t*는 요일을 나타냅니다.

![\[그림 2: 파생된 시계열\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/ts-full-159.derived.png)


DeepAR 알고리즘은 이러한 요인(feature) 시계열을 자동으로 생성합니다. 다음 표에는 지원되는 기본 시간 빈도에 대한 파생 요인(feature)이 나열되어 있습니다.


| 시계열의 빈도 | 파생 요인(feature) | 
| --- | --- | 
| Minute |  `minute-of-hour`, `hour-of-day`, `day-of-week`, `day-of-month`, `day-of-year`  | 
| Hour |  `hour-of-day`, `day-of-week`, `day-of-month`, `day-of-year`  | 
| Day |  `day-of-week`, `day-of-month`, `day-of-year`  | 
| Week |  `day-of-month`, `week-of-year`  | 
| Month |  month-of-year  | 

DeepAR은 훈련 데이터세트의 각 시계열에서 여러 훈련 예제를 무작위로 샘플링하여 모델을 훈련합니다. 각 훈련 예제는 미리 정의된 길이가 고정된 한 쌍의 인접 컨텍스트 및 예상 창으로 구성됩니다. `context_length` 하이퍼파라미터는 과거 네트워크에서 확인 가능한 거리를 제어하며, `prediction_length` 하이퍼파라미터는 향후 예상할 수 있는 범위를 제어합니다. 훈련 중 이 알고리즘은 지정된 예측 길이보다 짧은 시계열이 포함된 훈련 세트 요소를 무시합니다. 다음 그림은 *i*에서 얻은 12시간의 컨텍스트 길이와 6시간의 예측 길이를 갖는 5개의 샘플을 보여줍니다. 간략하게 설명하기 위해 요인 시계열 *xi,1,t* 및 *ui,2,t*는 생략했습니다.

![\[그림 3: 샘플링된 시계열\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/ts-full-159.sampled.png)


계절성 패턴을 캡처하기 위해 DeepAR은 또한 대상 시계열에서 지연된 값을 자동으로 공급합니다. 시간 기준 빈도가 적용된 이 예제에서는 각 시간 인덱스 *t = T*에 대해 모델이 과거에 약 1, 2, 3일 동안 발생했던 *zi,t* 값을 노출합니다.

![\[그림 4: 지연된 시계열\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/ts-full-159.lags.png)


추론을 위해 훈련된 모델은 훈련 중에 사용되었을 수도 있고 사용되지 않았을 수도 있는 대상 시계열을 입력으로 받아 다음 `prediction_length` 값에 대한 확률 분포를 예상합니다. DeepAR이 전체 데이터세트에 대해 훈련받았기 때문에 이 예상에는 비슷한 시계열의 학습 패턴이 고려됩니다.

DeepAR의 수학적 계산에 대한 자세한 정보는 [DeepAR: Probabilistic Forecasting with Autoregressive Recurrent Networks](https://arxiv.org/abs/1704.04110)를 참조하세요.

# DeepAR 하이퍼파라미터
<a name="deepar_hyperparameters"></a>

다음 표에는 Amazon SageMaker AI DeepAR 예측 알고리즘으로 훈련할 때 설정할 수 있는 하이퍼파라미터가 나열되어 있습니다.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| context\$1length |  예측 생성 전 모델이 확인하는 시간 지점의 수입니다. 이 파라미터의 값은 `prediction_length`와 동일해야 합니다. 모델은 또한 대상으로부터 시차가 발생한 입력을 수신하기 때문에 `context_length`는 일반적인 계절성보다 작을 수 있습니다. 예를 들어 일별 시계열은 연도별 계절성을 보유할 수 있습니다. 모델은 자동으로 1년의 시차를 포함시키기 때문에 컨텍스트 길이는 1년보다 짧을 수 있습니다. 모델이 고르는 시차 값은 시계열의 빈도에 따라 다릅니다. 예를 들어 일별 빈도의 시차 값은 1주, 2주, 3주, 4주 및 1년입니다. **필수** 유효한 값: 양수  | 
| epochs |  훈련 데이터의 최대 전달 횟수. 최적값은 데이터의 크기와 학습률에 따라 다릅니다. 또한 `early_stopping_patience` 섹션도 참조하세요. 일반적 값은 10\$11000입니다. **필수** 유효한 값: 양수  | 
| prediction\$1length |  모델이 예측을 위해 교육되는 시간 단계의 수이며, 예측 구간이라고도 합니다. 교육된 모델은 항상 이 길이로 예측을 생성합니다. 길이가 더 긴 예측은 생성할 수 없습니다. `prediction_length`는 모델 훈련 시 고정되어 나중에 변경할 수 없습니다. **필수** 유효한 값: 양수  | 
| time\$1freq |  데이터세트의 시계열 세부 수준. `time_freq`를 사용하여 적절한 날짜 요인(feature) 및 시차를 선택합니다. 모델은 다음 기본 빈도만 지원합니다. 또한 이러한 기본 빈도의 여러 번 반복도 지원합니다. 예를 들어, `5min`은 5분의 빈도를 지정합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/deepar_hyperparameters.html) **필수** 유효한 값: *M*, *W*, *D*, *H*, 또는 *min* 앞에 오는 정수. 예를 들어 `5min`.  | 
| cardinality |  범주 요인(feature)(`cat`)을 사용하는 경우 `cardinality`는 범주 요인(feature)당 범주(그룹) 수를 지정하는 배열입니다. 데이터로부터 카디널리티를 추론하려면 이 값을 `auto`로 설정합니다. 또한 `auto` 모드는 데이터세트에 범주 요인(feature)이 사용되지 않는 경우 작동합니다. 이는 파라미터에 대한 권장 설정입니다. 카디널리티를 `ignore`로 설정하면 데이터에 범주 요인(feature)이 있더라도 DeepAR에 해당 요인(feature)을 사용하지 않도록 강제합니다. 추가 데이터 검증을 수행하기 위해 이 파라미터를 실제 값으로 명시적으로 설정할 수 있습니다. 예를 들어, 범주 요인(feature) 2개가 제공되는데, 첫 번째 요인(feature)에는 가능한 값이 2개, 다른 요인(feature)에는 3개 있는 경우에는 [2, 3]으로 설정합니다. 범주 요인(feature) 사용 방법에 대한 자세한 정보는 DeepAR의 기본 설명 페이지에서 데이터 섹션을 참조하세요. **선택 사항** 유효한 값: `auto`, `ignore`, 양의 정수 배열, 빈 문자열 또는  기본값: `auto`  | 
| dropout\$1rate |  훈련 도중 사용할 드롭아웃 비율. 이 모델은 존아웃 정규화를 사용합니다. 각각의 반복에서 숨겨진 신경의 임의 하위 세트는 업데이트되지 않습니다. 일반적인 값은 0.2보다 작습니다. **선택 사항** 유효한 값: 부동 소수점 기본값: 0.1  | 
| early\$1stopping\$1patience |  이 파라미터가 설정된 경우 `epochs`에서 지정된 횟수 내에 진행이 이루어지지 않은 경우 훈련이 중단됩니다. 손실이 가장 적은 모델이 최종 모델로 반환됩니다. **선택 사항** 유효한 값: 정수  | 
| embedding\$1dimension |  범주 요인(feature)당 학습된 임베딩 벡터의 크기(모든 범주 요인(feature)에 대해 동일한 값이 사용됨). DeepAR 모델은 범주 그룹화 요인(feature)이 제공된 경우 그룹 수준 시계열 패턴을 학습할 수 있습니다. 이를 위해 모델은 각 그룹에 대해 크기가 `embedding_dimension`인 임베딩 벡터를 학습하여 그룹의 모든 시계열에 있는 공통 속성을 캡처합니다. `embedding_dimension`의 크기가 클수록 모델이 더욱 복잡한 패턴을 캡처할 수 있습니다. 하지만 `embedding_dimension`이 증가하면 모델의 패턴 수가 증가하므로 이 파라미터를 정확하게 학습하려면 더 많은 훈련 데이터가 필요합니다. 이 파라미터의 일반적인 값은 10\$1100입니다. **선택 사항** 유효한 값: 양수 기본값: 10  | 
| learning\$1rate |  훈련에 사용되는 학습률. 일반적 값은 1e-4에서 1e-1입니다. **선택 사항** 유효한 값: 부동 소수점 기본값: 1e-3  | 
| likelihood |  모델은 확률론적 예측을 생성하고, 분포의 분위를 제공하고 샘플을 반환할 수 있습니다. 데이터에 따라 불확실성 추정에 사용할 적절한 가능도(노이즈 모델)를 선택합니다. 다음 가능도를 선택할 수 있습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/deepar_hyperparameters.html) **선택 사항** 유효한 값: *gaussian*, *beta*, *negative-binomial*, *student-T* 또는 *deterministic-L1* 중 하나. 기본값: `student-T`  | 
| mini\$1batch\$1size |  훈련 도중 사용되는 미니 배치의 크기. 일반적 값은 32\$1512입니다. **선택 사항** 유효한 값: 양수 기본값: 128  | 
| num\$1cells |  RNN의 각 은닉층에서 사용할 셀의 수. 일반적 값은 30\$1100입니다. **선택 사항** 유효한 값: 양수 기본값: 40  | 
| num\$1dynamic\$1feat |  데이터에 제공된 `dynamic_feat`의 수. 데이터로부터 동적 요인(feature)의 수를 추론하려면 이 값을 `auto`로 설정합니다. 또한 `auto` 모드는 데이터세트에 동적 요인(feature)이 사용되지 않는 경우 작동합니다. 이는 파라미터에 대한 권장 설정입니다. 동적 요인(feature)이 데이터에 있더라도 DeepAR에서 동적 요인(feature)을 사용하지 않도록 강제하려면 `num_dynamic_feat`를 `ignore`로 설정합니다. 추가 데이터 검증을 수행하기 위해 이 파라미터를 실제 정수 값으로 명시적으로 설정할 수 있습니다. 예를 들어, 두 개의 동적 요인(feature)이 제공된 경우 2로 설정합니다. **선택 사항** 유효한 값: `auto`, `ignore`, 양의 정수 또는 빈 문자열 기본값: `auto`  | 
| num\$1eval\$1samples |  테스트 정확도 지표를 계산하는 데 시계열당 사용된 샘플 수. 이 파라미터는 훈련 또는 최종 모델에 대해 어떠한 영향도 미치지 않습니다. 특히, 여러 가지 다른 샘플을 사용해 모델을 쿼리할 수 있습니다. 이 파라미터는 훈련 후에 test 채널에서 보고된 정확도 점수에만 영향을 미칩니다. 값이 작을수록 평가 시간이 단축되지만 일반적으로 평가 점수가 더 좋지 않고 불확실성은 더 커집니다. 더 높은 분위수(예: 0.95)로 평가하는 경우에는 평가 샘플의 수를 늘리는 것이 중요할 수 있습니다. **선택 사항** 유효한 값: 정수 기본 값: 100  | 
| num\$1layers |  RNN의 은닉층 수. 일반적 값은 1\$14입니다. **선택 사항** 유효한 값: 양수 기본값: 2  | 
| test\$1quantiles |  test 채널에서 분위 손실을 계산할 분위. **선택 사항** 유효한 값: 부동 소수점 어레이 기본값: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]  | 

# DeepAR 모델 튜닝
<a name="deepar-tuning"></a>

하이퍼파라미터 튜닝이라고도 하는 자동 모델 튜닝은 데이터세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 알고리즘에서 계산하는 지표 중에서 목표 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 목표 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## DeepAR 알고리즘으로 계산되는 지표
<a name="deepar-metrics"></a>

DeepAR 알고리즘은 3가지 지표를 보고하며, 이러한 지표는 훈련 중 계산됩니다. 모델을 튜닝할 때 이러한 지표 중 하나를 목표로 선택합니다. 목표 지표에는 제공된 test 채널(권장) 또는 훈련 손실에 대한 예상 정확도를 사용합니다. DeepAR 알고리즘에 대한 훈련/테스트 분할에 대한 권장 사항은 [DeepAR 알고리즘 사용의 모범 사례](deepar.md#deepar_best_practices) 섹션을 참조하세요.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| test:RMSE |  테스트 세트에 대해 계산된 실제 대상 값과 예상 값 사이의 평균 제곱근 오차  |  최소화  | 
| test:mean\$1wQuantileLoss |  테스트 세트에 대해 계산된 평균 분위 손실. 사용되는 분위를 제어하려면 `test_quantiles` 하이퍼파라미터를 설정합니다.  |  최소화  | 
| train:final\$1loss |  모델에 대한 마지막 훈련 epoch에 대해 평균적으로 산출된 훈련 음수의 로그 가능도(log-likelihood)  |  최소화  | 

## DeepAR 알고리즘에 대한 튜닝 가능한 하이퍼파라미터
<a name="deepar-tunable-hyperparameters"></a>

다음 하이퍼파라미터를 사용하여 DeepAR 모델을 튜닝합니다. DeepAR 목표 지표에 가장 큰 영향을 미치는 하이퍼파라미터는 `epochs`, `context_length`, `mini_batch_size`, `learning_rate` 및 `num_cells`이며, 가장 큰 영향을 미치는 순서로 나열되어 있습니다.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| epochs |  `IntegerParameterRanges`  |  MinValue: 1, MaxValue: 1000  | 
| context\$1length |  `IntegerParameterRanges`  |  MinValue: 1, MaxValue: 200  | 
| mini\$1batch\$1size |  `IntegerParameterRanges`  |  MinValue: 32, MaxValue: 1028  | 
| learning\$1rate |  `ContinuousParameterRange`  |  MinValue: 1e-5, MaxValue: 1e-1  | 
| num\$1cells |  `IntegerParameterRanges`  |  MinValue: 30, MaxValue: 200  | 
| num\$1layers |  `IntegerParameterRanges`  |  MinValue: 1, MaxValue: 8  | 
| dropout\$1rate |  `ContinuousParameterRange`  |  MinValue: 0.00, MaxValue: 0.2  | 
| embedding\$1dimension |  `IntegerParameterRanges`  |  MinValue: 1, MaxValue: 50  | 

# DeepAR 추론 형식
<a name="deepar-in-formats"></a>

다음 페이지에서는 Amazon SageMaker AI DeepAR 모델을 사용한 추론에 대한 요청 및 응답 형식을 설명합니다.

## DeepAR JSON 요청 형식
<a name="deepar-json-request"></a>

모델의 엔드포인트를 사용하여 교육된 모델을 쿼리합니다. 엔드포인트는 다음 JSON 요청 형식을 취합니다.

요청에서 `instances` 필드는 모델이 예측해야 하는 시계열과 일치합니다.

범주를 사용하여 모델을 훈련한 경우 각 인스턴스에 `cat`을 제공해야 합니다. `cat` 필드 없이 모델을 훈련한 경우에는 해당 필드가 누락된 것입니다.

모델이 사용자 지정 요인(feature) 시계열(`dynamic_feat`)을 사용하여 훈련된 경우 각 인스턴스에 대해 동일한 수의 `dynamic_feat` 값을 제공해야 합니다. 각 값의 길이는 `length(target) + prediction_length`로 지정된 길이여야 하는데, 여기서 마지막 `prediction_length` 값은 예측할 미래의 시점에 해당합니다. 사용자 지정 요인(feature) 시계열을 사용하지 않고 모델을 훈련한 경우에는 요청에 이 필드를 포함하면 안 됩니다.

```
{
    "instances": [
        {
            "start": "2009-11-01 00:00:00",
            "target": [4.0, 10.0, "NaN", 100.0, 113.0],
            "cat": [0, 1],
            "dynamic_feat": [[1.0, 1.1, 2.1, 0.5, 3.1, 4.1, 1.2, 5.0, ...]]
        },
        {
            "start": "2012-01-30",
            "target": [1.0],
            "cat": [2, 1],
            "dynamic_feat": [[2.0, 3.1, 4.5, 1.5, 1.8, 3.2, 0.1, 3.0, ...]]
        },
        {
            "start": "1999-01-30",
            "target": [2.0, 1.0],
            "cat": [1, 3],
            "dynamic_feat": [[1.0, 0.1, -2.5, 0.3, 2.0, -1.2, -0.1, -3.0, ...]]
        }
    ],
    "configuration": {
         "num_samples": 50,
         "output_types": ["mean", "quantiles", "samples"],
         "quantiles": ["0.5", "0.9"]
    }
}
```

`configuration` 필드는 선택적입니다. `configuration.num_samples`는 중앙값 및 분위를 예측하기 위해 모델에서 생성하는 샘플 경로의 수를 설정하고, `configuration.output_types`는 요청에서 반환할 정보를 설명합니다. 유효 값은 `"mean"`, `"quantiles"` 및 `"samples"`입니다. `"quantiles"`를 지정한 경우 `configuration.quantiles`의 각 분위 값은 시계열로 반환됩니다. `"samples"`를 지정한 경우 모델은 또한 다른 출력을 계산하는 데 사용되는 원시 샘플을 반환합니다.

## DeepAR JSON 응답 형식
<a name="deepar-json-response"></a>

다음은 응답 형식으로, `[...]`는 어레이의 수입니다.

```
{
    "predictions": [
        {
            "quantiles": {
                "0.9": [...],
                "0.5": [...]
            },
            "samples": [...],
            "mean": [...]
        },
        {
            "quantiles": {
                "0.9": [...],
                "0.5": [...]
            },
            "samples": [...],
            "mean": [...]
        },
        {
            "quantiles": {
                "0.9": [...],
                "0.5": [...]
            },
            "samples": [...],
            "mean": [...]
        }
    ]
}
```

DeepAR의 응답 제한 시간은 60초입니다. 단일 요청에서 여러 시계열을 전달하는 경우에는 예상이 순차적으로 생성됩니다. 모델 크기에 따라 각 시계열에 대한 예상에는 일반적으로 약 300\$11000밀리초 이상이 걸리기 때문에 단일 요청에서 너무 많은 시계열을 전달하면 시간 초과가 발생할 수 있습니다. 따라서 요청당 가급적 적은 수의 시계열을 보내고 대신 요청 횟수를 늘리는 것이 더 낫습니다. DeepAR 알고리즘은 인스턴스당 여러 작업자를 사용하기 때문에 동시에 여러 요청을 보내면 처리량을 훨씬 더 높일 수 있습니다.

CPU당 충분한 메모리가 있는 경우 기본적으로 DeepAR에서는 추론을 위해 CPU당 작업자 하나를 사용합니다. 모델이 큰데 각 CPU에 모델을 실행할 충분한 메모리가 없는 경우 작업자의 수가 줄어듭니다. 추론에 사용되는 작업자 수는 환경 변수 `MODEL_SERVER_WORKERS`를 사용하여 덮어쓸 수 있습니다. 예를 들어 SageMaker AI [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) API를 직접적으로 호출할 때 `MODEL_SERVER_WORKERS=1`을 설정합니다.

## DeepAR 알고리즘과 배치 변환
<a name="deepar-batch"></a>

DeepAR 예측은 JSON Lines 형식을 사용하여 데이터에서 배치 변환을 통해 추론을 얻을 수 있도록 지원합니다. 이 형식에서 각 레코드는 단일 행의 JSON 객체로 표현되며 행은 줄 바꿈 문자로 구분됩니다. 이 형식은 모델 훈련에 사용되는 JSON Lines 형식과 동일합니다. 자세한 내용은 [DeepAR 알고리즘을 위한 입력/출력 인터페이스](deepar.md#deepar-inputoutput) 단원을 참조하세요. 예제:

```
{"start": "2009-11-01 00:00:00", "target": [4.3, "NaN", 5.1, ...], "cat": [0, 1], "dynamic_feat": [[1.1, 1.2, 0.5, ..]]}
{"start": "2012-01-30 00:00:00", "target": [1.0, -5.0, ...], "cat": [2, 3], "dynamic_feat": [[1.1, 2.05, ...]]}
{"start": "1999-01-30 00:00:00", "target": [2.0, 1.0], "cat": [1, 4], "dynamic_feat": [[1.3, 0.4]]}
```

**참고**  
[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)을 사용하여 변환 작업을 생성할 경우에는 기본값이 현재 실행 시간 오류를 일으키므로 `BatchStrategy` 값을 `SingleRecord`로 설정하고 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html) 구성의 `SplitType` 값을 `Line`으로 설정합니다.

호스팅 엔드포인트 추론 형식과 유사하게 다음과 같은 두 가지 경우에 해당하면 각 인스턴스의 `cat` 및 `dynamic_feat` 필드가 필요합니다.
+ 모델이 `cat` 및 `dynamic_feat` 필드가 모두 포함된 데이터세트에 대해 훈련된 경우
+ 훈련 작업에 사용된 해당하는 `cardinality` 및 `num_dynamic_feat` 값이 `"".`으로 설정되지 않은 경우

호스팅 엔드포인트 추론과 달리 구성 필드는 환경 변수 `DEEPAR_INFERENCE_CONFIG`를 사용하여 전체 배치 추론 작업에 대해 한 번만 설정됩니다. [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) API를 호출하여 모델이 생성되는 경우에는 `DEEPAR_INFERENCE_CONFIG`의 값을 전달할 수 있습니다. 컨테이너 환경에 `DEEPAR_INFERENCE_CONFIG`가 없으면 추론 컨테이너는 다음 기본값을 사용합니다.

```
{
    "num_samples": 100,
    "output_types": ["mean", "quantiles"],
    "quantiles": ["0.1", "0.2", "0.3", "0.4", "0.5", "0.6", "0.7", "0.8", "0.9"]
}
```

출력은 역시 JSON Lines 형식이고, 각 행은 예측 하나에 해당하고, 순서는 해당하는 입력 파일 내 인스턴스 순서와 동일합니다. 예측은 온라인 추론 모드에서 응답으로 반환되는 객체와 동일한 객체로 인코딩됩니다. 예제:

```
{ "quantiles": { "0.1": [...], "0.2": [...] }, "samples": [...], "mean": [...] }
```

SageMaker AI [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) 요청 클라이언트의 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html) 구성에서는 `AssembleWith` 값을 `Line`으로 명시적으로 설정해야 합니다. 기본값 `None`은 모든 JSON 객체를 같은 줄에 연결합니다.

예를 들어 다음은 사용자 지정 `DEEPAR_INFERENCE_CONFIG`를 사용하는 DeepAR 작업에 대한 SageMaker AI [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) 요청입니다.

```
{
   "BatchStrategy": "SingleRecord",
   "Environment": { 
      "DEEPAR_INFERENCE_CONFIG" : "{ \"num_samples\": 200, \"output_types\": [\"mean\"] }",
      ...
   },
   "TransformInput": {
      "SplitType": "Line",
      ...
   },
   "TransformOutput": { 
      "AssembleWith": "Line",
      ...
   },
   ...
}
```

# 비지도 내장 SageMaker AI 알고리즘
<a name="algorithms-unsupervised"></a>

Amazon SageMaker AI에는 클러스터링, 차원 축소, 패턴 인식 및 이상 탐지와 같은 다양한 비지도 학습 작업에 사용할 수 있는 여러 알고리즘이 내장되어 있습니다.
+ [IP Insights](ip-insights.md) - IPv4 주소의 사용 패턴을 학습합니다. IPv4 주소와 여러 엔터티(예: 사용자 ID 또는 계정 번호) 간 연결을 캡처하도록 설계되어 있습니다.
+ [k-means 알고리즘](k-means.md) - 데이터 내 별도의 그룹화를 찾습니다. 이 경우 그룹의 멤버는 가급적 다른 멤버와 유사하고 다른 그룹의 멤버와는 가급적 다릅니다.
+ [Principal Component Analysis(PCA) 알고리즘](pca.md) - 처음 몇 개의 주요 구성 요소에 데이터 포인트를 프로젝션하여 데이터 세트 내의 차원(특성 수)을 줄입니다. 목표는 가능한 한 많은 정보나 변형을 유지하는 것입니다. 수학자의 경우 주요 구성 요소은 데이터 공분산 행렬의 고유벡터입니다.
+ [Random Cut Forest(RCF) 알고리즘](randomcutforest.md) - 데이터 세트 내에서 제대로 구조화되거나 패턴이 있는 데이터와 다른 비정상적인 데이터 포인트를 탐지합니다.


| 알고리즘 이름 | 채널 이름 | 훈련 입력 모드 | 파일 유형 | 인스턴스 클래스 | 병렬화 가능 | 
| --- | --- | --- | --- | --- | --- | 
| IP Insights | 훈련 및 (선택적으로) 검증 | 파일 | CSV | CPU 또는 GPU | 예 | 
| K-Means | train 및 (선택 사항) test | 파일 또는 파이프 | recordIO-protobuf 또는 CSV | CPU 또는 GPUCommon(하나 이상의 인스턴스에 대한 단일 GPU 디바이스) | 아니요 | 
| PCA | train 및 (선택 사항) test | 파일 또는 파이프 | recordIO-protobuf 또는 CSV | GPU 또는 CPU | 예 | 
| Random Cut Forest | train 및 (선택 사항) test | 파일 또는 파이프 | recordIO-protobuf 또는 CSV | CPU | 예 | 

# IP Insights
<a name="ip-insights"></a>

Amazon SageMaker AI IP Insights는 IPv4 주소에 대한 사용 패턴을 학습하는 비지도 학습 알고리즘입니다. IPv4 주소와 여러 엔터티(예: 사용자 ID 또는 계정 번호) 간 연결을 캡처하도록 설계되어 있습니다. 이 알고리즘을 사용하여 예를 들어, 변칙적인 IP 주소에서 웹 서비스에 로그인하려고 하는 사용자를 식별할 수 있습니다. 또는 비정상적인 IP 주소에서 컴퓨팅 리소스를 생성하려고 하는 계정을 식별할 수도 있습니다. 훈련된 IP Insight 모델은 실시간 예측을 위해 엔드포인트에서 호스팅하거나 배치 변환 처리를 위해 사용할 수 있습니다.

SageMaker AI IP Insights는 과거 데이터(엔터티, IPv4 주소)를 페어로 수집하고 각 엔터티의 IP 사용량 패턴을 학습합니다. (엔터티, IPv4 주소) 이벤트로 쿼리하는 경우 SageMaker AI IP Insights 모델은 이벤트 패턴의 비정상성을 추론하는 점수를 반환합니다. 예를 들어, 사용자가 IP 주소에서 로그인하려고 하는 경우 IP Insights 점수가 충분히 높으면 웹 로그인 서버가 멀티 팩터 인증(Multi-Factor Authentication) 시스템을 트리거하도록 결정할 수 있습니다. 고급 솔루션에서는 다른 기계 학습 모델로 IP Insights 점수를 제공할 수 있습니다. 예를 들어, IP Insight 점수를 다른 특징과 결합해 다른 보안 시스템의 결과(예: [Amazon GuardDuty](https://docs.aws.amazon.com/guardduty/latest/ug/what-is-guardduty.html)의 결과) 순위를 지정할 수 있습니다.

또한 SageMaker AI IP Insights 알고리즘은 IP 주소의 벡터 표현(*임베딩*이라고 함)을 학습할 수 있습니다. IP 주소에서 관측 정보를 사용하는 다운스트림 기계 학습 작업에서 벡터 인코딩 임베딩을 특징으로 사용할 수 있습니다. 예를 들어, 벡터 인코딩 임베딩은 클러스터링 및 시각화 작업에서 IP 주소 간 유사성을 측정하는 등 여러 작업에서 사용할 수 있습니다.

**Topics**
+ [IP Insights 알고리즘의 입력/출력 인터페이스](#ip-insights-inputoutput)
+ [IP Insights 알고리즘에 대한 EC2 인스턴스 권장 사항](#ip-insights-instances)
+ [IP Insights 샘플 노트북](#ip-insights-sample-notebooks)
+ [IP Insights 작동 방식](ip-insights-howitworks.md)
+ [IP Insights 하이퍼파라미터](ip-insights-hyperparameters.md)
+ [IP Insights 모델 튜닝](ip-insights-tuning.md)
+ [IP Insights 데이터 형식](ip-insights-data-formats.md)

## IP Insights 알고리즘의 입력/출력 인터페이스
<a name="ip-insights-inputoutput"></a>

**훈련 및 검증**

SageMaker AI IP Insights 알고리즘은 훈련 및 검증 데이터 채널을 지원합니다. 이 알고리즘은 선택적 validation 채널을 사용하여 미리 정의된 네거티브 샘플링 전략에 대한 곡선 아래 면적(AUC) 점수를 계산합니다. AUC 지표는 모델이 포지티브 및 네거티브 및 포지티브 샘플 간에 얼마나 잘 구분하는지를 검증합니다. 훈련 및 검증 데이터 콘텐츠 유형은 `text/csv` 형식이어야 합니다. CSV 데이터의 첫 번째 열은 엔터티에 대한 고유한 식별자를 제공하는 불투명 문자열입니다. 두 번째 열은 10진수 점 표기법으로 표시된 IPv4 주소입니다. IP Insights는 현재 파일 모드만 지원합니다. 자세한 내용 및 몇 가지 예제는 [IP Insights 훈련 데이터 형식](ip-insights-training-data-formats.md) 섹션을 참조하세요.

**추론**

추론의 경우 IP Insights는 `text/csv`, `application/json` 및 `application/jsonlines` 데이터 콘텐츠 유형을 지원합니다. SageMaker AI에서 제공하는 추론의 공통 데이터 형식에 대한 자세한 내용은 [추론을 위한 공통 데이터 형식](cdf-inference.md) 섹션을 참조하세요. IP Insights 추론은 `application/json` 또는 `application/jsonlines` 형식의 출력을 반환합니다. 출력 데이터의 각 레코드에는 각 입력 데이터 포인트에 대한 해당 `dot_product`(또는 호환성 점수)가 포함되어 있습니다. 자세한 내용 및 몇 가지 예제는 [IP Insights 추론 데이터 형식](ip-insights-inference-data-formats.md) 섹션을 참조하세요.

## IP Insights 알고리즘에 대한 EC2 인스턴스 권장 사항
<a name="ip-insights-instances"></a>

SageMaker AI IP Insights 알고리즘은 GPU 및 CPU 인스턴스 둘 다에서 실행할 수 있습니다. 훈련 작업에는 GPU 인스턴스를 사용하는 것이 좋습니다. 그러나 큰 훈련 데이터 세트를 사용하는 특정 워크로드의 경우 분산된 CPU 인스턴스는 훈련 비용을 줄일 수 있습니다. 추론에는 CPU 인스턴스를 사용하는 것이 좋습니다. IP Insights는 P2, P3, G4dn 및 G5 GPU 패밀리를 지원합니다.

### IP Insights 알고리즘에 대한 GPU 인스턴스
<a name="ip-insights-instances-gpu"></a>

IP Insights는 사용 가능한 모든 GPU를 지원합니다. 훈련 속도를 높여야 하는 경우 단일 GPU 인스턴스(예: ml.p3.2xlarge)로 시작한 다음 다중 GPU 환경(예: ml.p3.8xlarge 및 ml.p3.16xlarge)으로 이전하는 것이 좋습니다. 다중 GPU는 자체 내에서 훈련 데이터의 미니 배치를 자동으로 나눕니다. 단일 GPU에서 다중 GPU로 전환하는 경우 `mini_batch_size`는 사용되는 GPU 수로 균일하게 나뉩니다. 이를 보상하기 위해 `mini_batch_size`의 값을 늘리려고 할 수 있습니다.

### IP Insights 알고리즘에 대한 CPU 인스턴스
<a name="ip-insights-instances-cpu"></a>

추천 CPU 인스턴스 유형은 주로 인스턴스의 사용 가능한 메모리 및 모델 크기에 따라 달라집니다. 모델 크기는 `vector_dim` 및 `num_entity_vectors` 이렇게 두 가지 하이퍼파라미터로 결정됩니다. 지원되는 최대 모델 크기는 8GB입니다. 다음 표에는 다양한 모델 크기에 대한 이러한 입력 파라미터를 기반으로 배포할 수 있는 일반적인 EC2 인스턴스 유형이 나열되어 있습니다. 표 1에서 첫 번째 열의 `vector_dim` 값 범위는 32\$12048이고 첫 번째 행의 `num_entity_vectors` 값 범위는 10,000\$150,000,000입니다.


| `vector_dim` \$1 `num_entity_vectors`. | 10,000 | 50,000 | 100,000 | 500,000 | 1,000,000 | 5,000,000 | 10,000,000 | 50,000,000 | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| 32 |  ml.m5.large  | ml.m5.large | ml.m5.large | ml.m5.large | ml.m5.large | ml.m5.xlarge | ml.m5.2xlarge | ml.m5.4xlarge | 
|  `64`  |  ml.m5.large  | ml.m5.large | ml.m5.large | ml.m5.large | ml.m5.large | ml.m5.2xlarge | ml.m5.2xlarge |  | 
|  `128`  |  ml.m5.large  | ml.m5.large | ml.m5.large | ml.m5.large | ml.m5.large | ml.m5.2xlarge | ml.m5.4xlarge |  | 
|  `256`  |  ml.m5.large  | ml.m5.large | ml.m5.large | ml.m5.large | ml.m5.xlarge | ml.m5.4xlarge |  |  | 
|  `512`  |  ml.m5.large  | ml.m5.large | ml.m5.large | ml.m5.large | ml.m5.2xlarge |  |  |  | 
|  `1024`  |  ml.m5.large  | ml.m5.large | ml.m5.large | ml.m5.xlarge | ml.m5.4xlarge |  |  |  | 
|  `2048`  |  ml.m5.large  | ml.m5.large | ml.m5.xlarge | ml.m5.xlarge |  |  |  |  | 

`mini_batch_size`, `num_ip_encoder_layers`, `random_negative_sampling_rate` 및 `shuffled_negative_sampling_rate` 하이퍼파라미터의 값 역시 필요한 메모리의 양에 영향을 줍니다. 이러한 값이 크면 일반 인스턴스 유형보다 더 큰 인스턴스 유형을 사용해야 할 수 있습니다.

## IP Insights 샘플 노트북
<a name="ip-insights-sample-notebooks"></a>

SageMaker AI IP Insights 알고리즘을 훈련시키고 이를 사용하여 추론을 수행하는 방법을 보여주는 샘플 노트북은 [An Introduction to the SageMaker AIIP Insights Algorithm](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/ipinsights_login/ipinsights-tutorial.html)을 참조하세요. SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 이 인스턴스에 액세스하는 방법에 대한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 예시 목록을 표시합니다. 노트북을 열려면 **사용** 탭을 선택한 후 **사본 생성**을 선택합니다.

# IP Insights 작동 방식
<a name="ip-insights-howitworks"></a>

Amazon SageMaker AI IP Insights는 엔터티를 IP 주소와 연결하는 (엔터티, IPv4 주소) 페어 형식의 관측 데이터를 사용하는 비지도 알고리즘입니다. IP Insights는 엔터티 및 IP 주소 둘 다에 대한 잠재 벡터 표현을 학습하여 엔터티가 특정 IP 주소를 사용할 가능성을 확인합니다. 두 표현 간의 거리는 이러한 연결 가능성에 대한 프록시의 역할을 할 수 있습니다.

IP Insights 알고리즘은 신경망을 사용하여 엔터티 및 IP 주소에 대한 잠재 벡터 표현을 학습합니다. 엔터티는 먼저 크지만 고정된 해시 공간으로 해시되 후 간단한 임베딩 계층에 의해 인코딩됩니다. 사용자 이름 또는 계정 ID 등과 같은 문자열은 로그 파일에 나타날 때 IP Insights에 직접 제공할 수 있습니다. 엔터티 식별자에 대한 데이터는 사전 처리할 필요가 없습니다. 훈련 및 추론 중 엔터티를 임의 문자열로 제공할 수 있습니다. 해시 크기는 별개의 여러 엔터티가 동일한 잠재 벡터로 매핑되는 경우 발행하는 충돌 횟수가 미미하게 유지될 수 있도록 충분히 큰 값으로 구성되어야 합니다.** 적절한 해시 크기를 선택하는 방법에 대한 자세한 정보는 [Feature Hashing for Large Scale Multitask Learning](https://alex.smola.org/papers/2009/Weinbergeretal09.pdf)을 참조하세요. 반면에 IP 주소를 표시하는 경우 IP Insights는 특수 설계된 인코더 네트워크를 사용하여 IP 주소의 접두사 구조를 바탕으로 각 IPv4 주소를 고유하게 나타냅니다.

훈련 중 IP Insights는 엔터티와 IP 주소를 무작위로 연결하여 네거티브 샘플을 자동으로 생성합니다. 이러한 네거티브 샘플은 실제 발생할 가능성이 낮은 데이터를 나타냅니다. 이 모델은 훈련 데이터에서 관측되는 포지티브 샘플과 이처럼 생성된 네거티브 샘플을 구분하도록 훈련됩니다. 보다 구체적으로 설명하자면, 모델은 다음과 같이 정의되는 크로스 엔트로피(로그 손실이라고도 함)를 최소화하도록 훈련되었습니다.****

![\[로그 손실에 대한 방정식이 포함된 이미지\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/ip-insight-image-cross-entropy.png)


yn은 샘플을 관측 데이터를 관리하는 실제 분포에서 가져왔는지(ynn=1) 아니면 네거티브 샘플을 생성하는 분포에서 가져왔는지(yn=0) 여부를 나타내는 레이블입니다. pn은 모델이 예측한 대로 샘플을 실제 분포에서 가져올 확률입니다.

네거티브 샘플 생성은 관측 데이터의 정확한 모델을 얻기 위해 사용되는 중요한 프로세스입니다. 네거티브 샘플이 발생할 가능성이 매우 낮은 경우 예를 들어, 네거티브 샘플 내 모든 IP 주소가 10.0.0.0인 경우 이 모델은 네거티브 샘플을 구분하도록 제대로 학습하지 못하고, 실제 관측 데이터 세트의 특성을 정확하게 정의하지 못합니다. 네거티브 샘플을 보다 현실적으로 유지하기 위해 IP Insights는 IP 주소를 무작위로 생성하고 훈련 데이터에서 IP 주소를 임의로 선택하는 두 가지 방법을 모두 사용해 네거티브 샘플을 생성합니다. `random_negative_sampling_rate` 및 `shuffled_negative_sampling_rate` 하이퍼파라미터를 사용하여 네거티브 샘플링 유형과 네거티브 샘플 생성 속도를 구성할 수 있습니다.

n번째(엔터티, IP 주소 페어)를 고려했을 때, IP Insights 모델은 엔터티가 IP 주소와 호환되는 정도를 나타내는 점수, Sn을 출력합니다.** 이 점수는 네거티브 분포에서 가져온 (엔터티, IP 주소) 대비 실제 분포에서 가져온 페어의 주어진 (엔터티, IP 주소)의 로그 승산비에 해당합니다. 다음과 같이 정의됩니다.

![\[점수 즉, 로그 승산비에 대한 방정식을 포함한 이미지\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/ip-insight-image-log-odds.png)


이 점수는 n 번째 엔터티 및 IP 주소의 벡터 표시 간 유사성을 측정한 값입니다. 이 값은 이러한 이벤트가 무작위로 생성된 데이터 세트에서 관측된 것에 비해 실제로 관측될 가능성으로 해석될 수 있습니다. 훈련 중 이 알고리즘은 이 점수를 사용하여 실제 분포 pn에서 가져온 샘플의 확률에 대한 예측치를 계산하여 교차 엔트로피 최소화에 사용합니다. 공식은 다음과 같습니다.

![\[샘플을 실제 분포에서 가져올 가능성에 대한 방정식을 보여주는 이미지\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/ip-insight-image-sample-probability.png)


# IP Insights 하이퍼파라미터
<a name="ip-insights-hyperparameters"></a>

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) 요청에서 훈련 알고리즘을 지정합니다. 알고리즘별 하이퍼파라미터를 문자열-문자열 맵으로 지정할 수 있습니다. 다음 표에는 Amazon SageMaker AI IP Insights 알고리즘에 대한 하이퍼파라미터가 나열되어 있습니다.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| num\$1entity\$1vectors | 훈련할 엔터티 벡터 표현(엔터티 임베딩 벡터) 수. 훈련 세트의 각 엔터티는 해시 함수를 사용하여 이러한 벡터 중 하나로 임의로 할당됩니다. 해시 충돌로 인해 동일한 벡터에 여러 엔터티가 할당될 수 있습니다. 이로 인해 동일한 벡터가 여러 엔터티를 나타낼 수 있습니다. 일반적으로 이러한 문제는 충돌 비율이 너무 심하게 높지 않는 한 모델 성능에 큰 영향을 미치지 않습니다. 충돌 비율을 낮게 유지하려면 이 값을 가급적 높게 설정합니다. 그러나 모델 크기 따라서 훈련 및 추론 둘 다에 필요한 메모리 요구 사항이 이 하이퍼파라미터로 선형적으로 조정됩니다. 이 값은 고유한 엔터티 식별자 수의 두 배로 설정하는 것이 좋습니다. **필수** 유효한 값: 1 ≤ 양수 ≤ 250,000,000  | 
| vector\$1dim | 엔터티 및 IP 주소를 나타내는 임베딩 벡터의 크기. 이 값이 클수록 이러한 표현을 사용하여 인코딩할 수 있는 정보가 많아집니다. 실제로, 모델 크기는 이 파라미터를 사용하여 선형적으로 조정되고 차원이 커질 수 있는 정도를 제한합니다. 또한 너무 큰 벡터 표현을 사용하면 모델이 특히 작은 훈련 데이터 세트에 대해 과적합할 수 있습니다. 과적합은 모델이 데이터에서 어떠한 패턴도 학습하지 않지만 훈련 데이터를 효율적으로 암기하기 때문에 제대로 일반화할 수 없고 추론 중 뛰어난 성능을 발휘하지 못하는 경우 발생합니다. 권장되는 값은 128입니다. **필수** 유효한 값: 4 ≤ 양수 ≤ 4096  | 
| batch\$1metrics\$1publish\$1interval | Apache MXNet Speedometer 함수가 네트워크의 훈련 속도(샘플 수/초)를 출력하는 간격(X개 배치마다). **선택 사항** 유효한 값: 양수 ≥ 1 기본값: 1,000 | 
| epochs | 훈련 데이터의 전달 횟수. 최적값은 데이터의 크기와 학습률에 따라 다릅니다. 일반적 값은 5\$1100입니다. **선택 사항** 유효한 값: 양수 ≥ 1 기본값: 10 | 
| learning\$1rate | 옵티마이저에 대한 학습률. IP Insights에서는 gradient-descent-based Adam 옵티마이저를 사용합니다. 학습률은 반복마다 모델 파라미터를 업데이트하도록 단계 크기를 효율적으로 제어합니다. 학습률이 너무 크면 훈련이 최솟값을 오버슈트할 수 있기 때문에 모델이 발산(divergence)될 수 있습니다. 다시 말해, 학습률이 너무 작으면 수렴 속도가 느려집니다. 일반적 값은 1e-4에서 1e-1입니다. **선택 사항** 유효한 값: 1e-6 ≤ 부동 소수점 ≤ 10.0 기본값: 0.001 | 
| mini\$1batch\$1size | 각 미니 배치에 있는 예제의 수. 훈련 프로시저에서는 미니 배치의 데이터를 처리합니다. 최적값은 데이터 세트 내 고유한 계정 식별자 수에 따라 달라집니다. 일반적으로, `mini_batch_size`가 클수록 훈련 속도가 빨라지고 가능한 shuffled-negative-sample 조합 수가 많아집니다. 그러나 `mini_batch_size`가 크면 훈련이 불량한 로컬 최솟값으로 수렴되고 추론 성능이 상대적으로 저하될 가능성이 높아집니다. **선택 사항** 유효한 값: 1 ≤ 양수 ≤ 500000 기본값: 10,000 | 
| num\$1ip\$1encoder\$1layers | IP 주소 임베딩을 인코딩하는 데 사용되는 완전히 연결된 계층 수. 계층 수가 많을수록 IP 주소 간 패턴을 캡처하기 위한 모델 용량이 커집니다. 그러나 많은 수의 계층을 사용하면 과적합 가능성이 커집니다. **선택 사항** 유효한 값: 0 ≤ 양수 ≤ 100 기본값: 1 | 
| random\$1negative\$1sampling\$1rate | 입력 예제당 생성할 무작위 네거티브 샘플 수 R. 훈련 프로시저에서는 네거티브 샘플을 사용하여 모델의 벡터 표현이 단일 지점으로 축소되지 않도록 합니다. 무작위 네거티브 샘플링은 미니 배치 내에서 각 입력 계정에 대한 무작위 IP 주소 수를 나타내는 R을 생성합니다. `random_negative_sampling_rate`(R) 및 `shuffled_negative_sampling_rate`(S)의 합계는 간격 1 ≤ R \$1 S ≤ 500 내에 있어야 합니다. **선택 사항** 유효한 값: 0 ≤ 양수 ≤ 500 기본값: 1 | 
| shuffled\$1negative\$1sampling\$1rate | 입력 예제당 생성할 셔플 네거티브 샘플 수 S. 경우에 따라 훈련 데이터 자체에서 무작위로 선택한 실제 네거티브 샘플을 더 많이 사용하는 것이 좋을 수 있습니다. 이러한 종류의 네거티브 샘플링은 미니 배치 내에서 데이터를 셔플해 얻습니다. 셔플 네거티브 샘플링은 미니 배치 내에서 IP 주소와 계정 페어를 셔플해 네거티브 IP 주소 수인 S를 생성합니다. `random_negative_sampling_rate`(R) 및 `shuffled_negative_sampling_rate`(S)의 합계는 간격 1 ≤ R \$1 S ≤ 500 내에 있어야 합니다. **선택 사항** 유효한 값: 0 ≤ 양수 ≤ 500 기본값: 1 | 
| weight\$1decay | 가중치 감소 계수. 이 파라미터는 모델에서 훈련 데이터 과적합이 발생하지 않도록 방지하는 데 필요한 L2 정규화 계수를 추가합니다. **선택 사항** 유효한 값: 0.0 ≤ 부동 소수점 ≤ 10.0 기본값: 0.00001 | 

# IP Insights 모델 튜닝
<a name="ip-insights-tuning"></a>

자동 모델 튜닝은 하이퍼파라미터 튜닝이라고도 하는데, 데이터 세트에 대해 광범위한 하이퍼파라미터 범위를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 알고리즘에서 계산하는 지표 중에서 목표 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 목표 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## IP Insights 알고리즘으로 계산되는 지표
<a name="ip-insights-metrics"></a>

Amazon SageMaker AI IP Insights 알고리즘은 IP 주소와 엔터티 간 연결을 학습하는 비지도 학습 알고리즘입니다. 이 알고리즘은 관측 데이터 포인트(포지티브 샘플)와 무작위로 생성된 데이터 포인트(네거티브 샘플)를 구분하도록 학습하는 판별자 모델을 훈련합니다.**** IP Insights에 대한 자동 모델 튜닝은 라벨링되지 않은 검증 데이터와 자동으로 생성된 네거티브 샘플을 가장 정확하게 구분할 수 있는 모델을 찾는데 도움을 줍니다. 유효성 검사 데이터 세트에 대한 모델 정확도는 Receiver Operating Characteristic(ROC) 곡선 아래의 면적으로 측정됩니다. 이 `validation:discriminator_auc` 지표는 0.0\$11.0의 값을 가질 수 있는데, 여기서 1.0은 완벽한 정확도를 나타냅니다.

IP Insights 알고리즘은 검증 중 `validation:discriminator_auc` 지표를 계산해, 이 지표의 값을 하이퍼파라미터 튜닝을 위해 최적화하기 위한 목표 함수로 사용합니다.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| validation:discriminator\$1auc |  유효성 검사 데이터 세트의 ROC 곡선 아래 영역. 검증 데이터 세트는 라벨링되지 않습니다. Area Under the Curve(AUC)는 유효성 검사 데이터 포인트와 무작위로 생성된 데이터 포인트를 구분할 수 있는 모델의 능력을 나타내는 지표입니다.  |  최대화  | 

## 튜닝 가능한 IP Insights 하이퍼파라미터
<a name="ip-insights-tunable-hyperparameters"></a>

SageMaker AI IP Insights 알고리즘에 대한 다음 하이퍼파라미터를 튜닝할 수 있습니다.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| epochs |  IntegerParameterRange  |  MinValue: 1, MaxValue: 100  | 
| learning\$1rate |  ContinuousParameterRange  |  MinValue: 1e-4, MaxValue: 0.1  | 
| mini\$1batch\$1size |  IntegerParameterRanges  |  MinValue: 100, MaxValue: 50000  | 
| num\$1entity\$1vectors |  IntegerParameterRanges  |  MinValue: 10000, MaxValue: 1000000  | 
| num\$1ip\$1encoder\$1layers |  IntegerParameterRanges  |  MinValue: 1, MaxValue: 10  | 
| random\$1negative\$1sampling\$1rate |  IntegerParameterRanges  |  MinValue: 0, MaxValue: 10  | 
| shuffled\$1negative\$1sampling\$1rate |  IntegerParameterRanges  |  MinValue: 0, MaxValue: 10  | 
| vector\$1dim |  IntegerParameterRanges  |  MinValue: 8, MaxValue: 256  | 
| weight\$1decay |  ContinuousParameterRange  |  MinValue: 0.0, MaxValue: 1.0  | 

# IP Insights 데이터 형식
<a name="ip-insights-data-formats"></a>

이 섹션에서는 훈련 및 추론 중 IP Insights 알고리즘에서 사용 가능한 입력 및 출력 데이터 형식의 예를 제공합니다.

**Topics**
+ [IP Insights 훈련 데이터 형식](ip-insights-training-data-formats.md)
+ [IP Insights 추론 데이터 형식](ip-insights-inference-data-formats.md)

# IP Insights 훈련 데이터 형식
<a name="ip-insights-training-data-formats"></a>

다음은 IP Insights 알고리즘에 사용할 수 있는 데이터 입력 형식입니다. Amazon SageMaker AI 기본 제공 알고리즘은 [훈련을 위한 공통 데이터 형식](cdf-training.md)에 설명된 일반적인 입력 훈련 형식을 준수합니다. 그러나 SageMaker AI IP Insights 알고리즘은 현재 CSV 데이터 입력 형식만 지원합니다.

## IP Insights 훈련 데이터 입력 형식
<a name="ip-insights-training-input-format-requests"></a>

### INPUT: CSV
<a name="ip-insights-input-csv"></a>

CSV 파일에는 두 개의 열이 있어야 합니다. 첫 번째 열은 엔터티의 고유한 식별자에 해당하는 불투명한 문자열입니다. 두 번째 열은 엔터티의 액세스 이벤트에 대한 IPv4 주소로, 10진수 점 표기법으로 표시됩니다.

content-type: text/csv

```
entity_id_1, 192.168.1.2
entity_id_2, 10.10.1.2
```

# IP Insights 추론 데이터 형식
<a name="ip-insights-inference-data-formats"></a>

다음은 IP Insights 알고리즘에 사용할 수 있는 입력 및 출력 형식입니다. Amazon SageMaker AI 기본 제공 알고리즘은 [추론을 위한 공통 데이터 형식](cdf-inference.md)에 설명된 일반적인 입력 추론 형식을 준수합니다. 그러나 SageMaker AI IP Insights 알고리즘은 현재 RecordIO 형식을 지원하지 않습니다.

## IP Insights 입력 요청 형식
<a name="ip-insights-input-format-requests"></a>

### INPUT: CSV 형식
<a name="ip-insights-input-csv-format"></a>

CSV 파일에는 두 개의 열이 있어야 합니다. 첫 번째 열은 엔터티의 고유한 식별자에 해당하는 불투명한 문자열입니다. 두 번째 열은 엔터티의 액세스 이벤트에 대한 IPv4 주소로, 10진수 점 표기법으로 표시됩니다.

content-type: text/csv

```
entity_id_1, 192.168.1.2
entity_id_2, 10.10.1.2
```

### INPUT: JSON 형식
<a name="ip-insights-input-json"></a>

JSON 데이터는 다른 형식으로 제공할 수 있습니다. IP Insights는 공통 SageMaker AI 형식을 따릅니다. 추론 형식에 대한 자세한 정보는 [추론을 위한 공통 데이터 형식](cdf-inference.md) 섹션을 참조하세요.

content-type: application/json

```
{
  "instances": [
    {"data": {"features": {"values": ["entity_id_1", "192.168.1.2"]}}},
    {"features": ["entity_id_2", "10.10.1.2"]}
  ]
}
```

### INPUT: JSONLINES 형식
<a name="ip-insights-input-jsonlines"></a>

JSON Lines 콘텐츠 유형은 실행 중인 배치 변환 작업에 유용합니다. SageMaker AI 추론 형식에 대한 자세한 내용은 [추론을 위한 공통 데이터 형식](cdf-inference.md) 섹션을 참조하세요. 배치 변환 작업 실행에 대한 자세한 정보는 [Amazon SageMaker AI를 사용한 추론용 배치 변환](batch-transform.md) 섹션을 참조하세요.

content-type: application/jsonlines

```
{"data": {"features": {"values": ["entity_id_1", "192.168.1.2"]}}},
{"features": ["entity_id_2", "10.10.1.2"]}]
```

## IP Insights 출력 응답 형식
<a name="ip-insights-ouput-format-response"></a>

### OUTPUT: JSON 응답 형식
<a name="ip-insights-output-json"></a>

SageMaker AI IP Insights 알고리즘의 기본 출력은 입력 엔터티 및 IP 주소 간의 `dot_product`입니다. dot\$1product는 모델이 엔터티와 IP 주소를 고려할 수 있는 호환성을 나타냅니다. `dot_product`는 무한합니다. 이벤트가 변칙적인지 여부를 예측하려면 정의한 분포를 기반으로 임계값을 설정해야 합니다. 이상 탐지에 `dot_product`를 사용하는 방법에 대한 자세한 내용은 [An Introduction to the SageMaker AIIP Insights Algorithm](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/ipinsights_login/ipinsights-tutorial.html)을 참조하세요.

accept: application/json

```
{
  "predictions": [
    {"dot_product": 0.0},
    {"dot_product": 2.0}
  ]
}
```

고급 사용자는 Accept 헤딩에 추가 콘텐츠 유형 파라미터인 `verbose=True`를 제공하여 모델의 학습된 엔터티 및 IP 임베딩에 액세스할 수 있습니다. 모델 디버깅, 시각화 및 이해에 `entity_embedding` 및 `ip_embedding`을 사용할 수 있습니다. 또한 분류 또는 클러스터링과 같은 다른 기계 학습 기법에 이러한 임베딩을 사용할 수 있습니다.

accept: application/json;verbose=True

```
{
  "predictions": [
    {
        "dot_product": 0.0,
        "entity_embedding": [1.0, 0.0, 0.0],
        "ip_embedding": [0.0, 1.0, 0.0]
    },
    {
        "dot_product": 2.0,
        "entity_embedding": [1.0, 0.0, 1.0],
        "ip_embedding": [1.0, 0.0, 1.0]
    }
  ]
}
```

### OUTPUT: JSONLINES 응답 형식
<a name="ip-insights-jsonlines"></a>

accept: application/jsonlines 

```
{"dot_product": 0.0}
{"dot_product": 2.0}
```

accept: application/jsonlines; verbose=True 

```
{"dot_product": 0.0, "entity_embedding": [1.0, 0.0, 0.0], "ip_embedding": [0.0, 1.0, 0.0]}
{"dot_product": 2.0, "entity_embedding": [1.0, 0.0, 1.0], "ip_embedding": [1.0, 0.0, 1.0]}
```

# k-means 알고리즘
<a name="k-means"></a>

k-means는 비지도 학습 알고리즘입니다. 데이터 내 별도의 그룹화를 찾으려 합니다. 이 경우 그룹의 멤버는 가급적 다른 멤버와 유사하고 다른 그룹의 멤버와는 가급적 다릅니다. 알고리즘이 유사성을 결정하는 데 사용하고자 하는 속성을 정의합니다.

Amazon SageMaker AI는 수정된 버전의 웹 스케일 k-means 클러스터링 알고리즘을 사용합니다. 기존 버전의 알고리즘과 비교했을 때, Amazon SageMaker AI에서 사용하는 버전의 정확도가 더 높습니다. 기존 알고리즘과 마찬가지로 대량의 데이터 세트로 크기 조정되고 훈련 시간이 개선됩니다. 이를 위해 Amazon SageMaker AI에서 사용하는 버전은 훈련 데이터의 미니 배치(소규모 임의 하위 세트)를 스트림합니다. 미니 배치 k-means에 대한 자세한 정보는 [Web-scale k-means Clustering](https://dl.acm.org/doi/10.1145/1772690.1772862)을 참조하세요.

k-means 알고리즘은 테이블형 데이터를 예상합니다. 여기에서 행은 클러스터링하고자 하는 관측치를 나타내고 열은 관측치의 속성을 나타냅니다. 각 행의 *n* 속성은 *n* 차원 공간의 지점을 나타냅니다. 지점 사이의 유클리드 거리는 해당 관측치의 유사성을 나타냅니다. 속성 값이 유사한 알고리즘 그룹 관측치(이러한 관측치를 나타내는 지점은 가까이에 있습니다). Amazon SageMaker AI에서 k-means가 작동하는 방식에 대한 자세한 내용은 [k-means 클러스터링 작동 방식](algo-kmeans-tech-notes.md) 섹션을 참조하세요.

**Topics**
+ [K-Means 알고리즘의 입/출력 인터페이스](#km-inputoutput)
+ [K-Means 알고리즘에 대한 EC2 인스턴스 권장 사항](#km-instances)
+ [K-Means 샘플 노트북](#kmeans-sample-notebooks)
+ [k-means 클러스터링 작동 방식](algo-kmeans-tech-notes.md)
+ [k-means 하이퍼파라미터](k-means-api-config.md)
+ [K-Means 모델 튜닝](k-means-tuning.md)
+ [K-Means 응답 형식](km-in-formats.md)

## K-Means 알고리즘의 입/출력 인터페이스
<a name="km-inputoutput"></a>

훈련을 위해 k-means 알고리즘은 데이터가 *train* 채널(권장 `S3DataDistributionType=ShardedByS3Key`)에서 제공되고, 선택적 *test* 채널(권장 `S3DataDistributionType=FullyReplicated`)을 사용하여 데이터에 대한 점수를 매긴다고 예상합니다. `recordIO-wrapped-protobuf` 형식과 `CSV` 형식 모두 훈련에 지원됩니다. 파일 모드 또는 파이프 모드를 사용하여 `recordIO-wrapped-protobuf` 또는 `CSV`로 형식이 지정된 데이터에 대해 모델을 훈련할 수 있습니다.

추론을 위해 `text/csv`, `application/json` 및 `application/x-recordio-protobuf`가 지원됩니다. k-means는 각 관측에 대해 `closest_cluster` 레이블 및 `distance_to_cluster`를 반환합니다.

입력 및 출력 파일 형식에 대한 자세한 정보는 [K-Means 응답 형식](km-in-formats.md)(추론의 경우) 및 [K-Means 샘플 노트북](#kmeans-sample-notebooks) 섹션을 참조하세요. k-means 알고리즘은 복수의 인스턴스 학습을 지원하지 않으며, 훈련 세트는 라벨링되지 않은 인스턴스 집합인 라벨링된 "백"으로 구성됩니다.

## K-Means 알고리즘에 대한 EC2 인스턴스 권장 사항
<a name="km-instances"></a>

CPU 인스턴스에서 훈련 k-means를 권장합니다. GPU 인스턴스에서 훈련할 수 있지만 GPU 훈련을 ml.g4dn.xlarge와 같은 단일 GPU 인스턴스로 제한해야 합니다. 인스턴스당 단 하나의 GPU만 사용되기 때문입니다. k-means 알고리즘은 훈련 및 추론을 위해 P2, P3, G4dn, G5 인스턴스를 지원합니다.

## K-Means 샘플 노트북
<a name="kmeans-sample-notebooks"></a>

주 구성 요소 분석을 사용하여 식별된 속성에 따라 미국 내 카운티의 인구를 분할하기 위해 SageMaker AI K-means 알고리즘을 사용하는 샘플 노트북은 [Analyze US census data for population segmentation using Amazon SageMaker AI](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_applying_machine_learning/US-census_population_segmentation_PCA_Kmeans/sagemaker-countycensusclustering.html)를 참조하세요. SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 이 인스턴스에 액세스하는 방법에 대한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열면 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인할 수 있습니다. 노트북을 열려면 **사용** 탭을 클릭하고 사본 생성을 선택합니다.

# k-means 클러스터링 작동 방식
<a name="algo-kmeans-tech-notes"></a>

k-means는 유사한 객체를 그룹화하는 모델을 교육하는 알고리즘입니다. k-means 알고리즘은 입력 데이터 세트의 각 관측치를 *n* 차원 공간(*n*은 관측치의 속성 수)의 지점으로 매핑하여 이를 달성합니다. 예를 들어 데이터 세트에는 특정 위치의 온도 및 습도 관측치가 포함될 수 있으며, 이는 2차원 공간의 지점(*t, h*)에 매핑됩니다.



**참고**  
클러스터링 알고리즘은 비지도 방식입니다. 비지도 학습에서 훈련 데이터 세트의 객체와 연결될 수 있는 레이블은 사용되지 않습니다. 자세한 내용은 [비지도 학습](algorithms-choose.md#algorithms-choose-unsupervised-learning) 섹션을 참조하세요.

k-means 클러스터링에서 각 클러스터에는 중심이 있습니다. 모델 훈련 도중 k-means 알고리즘은 클러스터링의 기반인 클러스터 중심까지 데이터 세트의 각 관측치에 해당하는 지점 거리를 사용합니다. 생성할 클러스터의 수(*k*)를 선택합니다.

예를 들어 수기 숫자를 인식하는 모델을 생성하고자 하는 경우 훈련용 MNIST 데이터 세트를 선택합니다. 데이터 세트는 수천 개의 수기 숫자 이미지를 제공합니다(0\$19). 이 예제에서 각 숫자별로(0, 1, …, 9) 하나씩 10개의 클러스터를 선택할 수 있습니다. 모델 훈련의 일환으로 k-means 알고리즘은 입력 이미지를 10개의 클러스터로 그룹화합니다.

MNIST 데이터 세트의 각 이미지는 28x28픽셀 이미지로, 총 784픽셀입니다. 각 이미지는 784차원 공간의 지점과 일치하고, 2차원 공간의 지점(x,y)과 유사합니다. 지점이 속하는 클러스터를 확인하기 위해 k-means 알고리즘은 모든 클러스터 중심으로부터 해당 지점의 거리를 확인합니다. 그리고 가장 근접한 중심이 포함된 클러스터를 이미지가 속하는 클러스터로 선택합니다.

**참고**  
Amazon SageMaker AI는 사용자 지정 버전의 알고리즘을 사용합니다. 해당 버전에서는 *k* 클러스터를 만드는 알고리즘을 지정하는 대신 추가 클러스터 중심*(K = k\$1x)*을 지정하여 모델 정확도를 개선시킬 수 있습니다. 하지만 알고리즘은 이를 *k* 클러스터로 줄입니다.

SageMaker AI에서 훈련 작업을 만들 때 클러스터의 수를 지정합니다. 자세한 내용은 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 단원을 참조하십시오. 요청 본문에서 `HyperParameters` 문자열 맵을 추가하여 `k` 및 `extra_center_factor` 문자열을 지정합니다.

다음은 SageMaker AI의 모델 훈련에 대한 k-means 작동 원리를 요약합니다.

1. 초기 *K* 클러스터 중심을 결정합니다.
**참고**  
다음 주제에서 *K* 클러스터는 *k \$1 x*를 참조합니다. 여기서 모델 훈련 작업 생성 시 *k* 및 *x*를 지정합니다.

1. 입력 훈련 데이터에 대해 반복하고 클러스터 중심을 다시 계산합니다.

1. 결과 클러스터를 *k*로 줄입니다(데이터 과학자가 요청에서 *k\$1x* 클러스터 생성을 지정한 경우).

다음 섹션은 데이터 과학자가 `HyperParameters` 문자열 맵의 일부로서 모델 훈련 작업을 구성하도록 지정할 수 있는 일부 파라미터를 설명합니다.

**Topics**
+ [1단계: 초기 클러스터 중심 결정](#kmeans-step1)
+ [2단계: 훈련 데이터 세트 반복 및 클러스터 중심 계산](#kmeans-step2)
+ [3단계: 클러스터를 *K*에서 *k*로 감소](#kmeans-step3)

## 1단계: 초기 클러스터 중심 결정
<a name="kmeans-step1"></a>

SageMaker AI에서 k-means를 사용할 때 초기 클러스터 중심은 소규모의 임의 샘플링된 배치의 관측치로부터 선택됩니다. 다음 전략 중 하나를 선택하여 초기 클러스터 중신의 선택 방법을 결정합니다.
+ 무작위 접근법 - 입력 데이터 세트에서 *K*개의 관측치를 클러스터 중심으로 무작위로 선택합니다. 예를 들어 MNIST 훈련 데이터 세트에 있는 10개의 이미지와 일치하는 784차원 공간을 가리키는 클러스터 중심을 선택할 수 있습니다.
+ k-means\$1\$1 접근 방식은 다음과 같이 작동합니다.

  1. 하나의 클러스터로 시작하고 중심을 결정합니다. 훈련 데이터 세트로부터 관측치를 임의적으로 선택하고 관측치와 일치하는 지점을 클러스터 중심으로 사용합니다. 예를 들어 MNIST 데이터 세트에서 수기 숫자 이미지를 임의적으로 선택합니다. 그런 다음 이미지와 일치하는 784차원 공간의 지점을 클러스터 중심으로 선택합니다. 이는 클러스터 중심 1입니다.

  1. 클러스터 2의 중심을 결정합니다. 훈련 데이터 세트의 남은 관측치에서 임의적으로 관측치를 선택합니다. 이전에 선택했던 것과는 다른 것을 선택합니다. 이 관측치는 클러스터 중심 1로부터 멀리 떨어진 지점과 일치합니다. MNIST를 예제로 사용하여 다음을 수행합니다.
     + 각각의 남은 이미지의 경우 클러스터 중심 1로부터 일치하는 지점의 거리를 확인합니다. 거리를 제곱하고 거리의 제곱에 비례하는 가능성을 할당합니다. 그러한 방식으로 이전에 선택했던 것과 다른 이미지는 클러스터 중심 2로 선택될 가능성이 더욱 높습니다.
     + 이전 단계에 할당된 가능성을 기반으로 이미지 중 하나를 임의적으로 선택합니다. 이미지와 일치하는 지점은 클러스터 중심 2입니다.

  1. 2단계를 반복하여 클러스터 중심 3을 찾습니다. 이번에는 클러스터 중심 2로부터 남은 이미지의 거리를 확인합니다.

  1. *K* 클러스터 중심을 확보할 때까지 프로세스를 반복합니다.

SageMaker AI에서 모델을 훈련하려면 훈련 작업을 만듭니다. 요청에서 다음 `HyperParameters` 문자열 맵을 지정하여 구성 정보를 제공합니다.
+ 생성할 클러스터의 수를 지정하려면 `k` 문자열을 추가합니다.
+ 더 높은 정확도를 위해 선택 사항으로 `extra_center_factor` 문자열을 추가합니다.
+ 초기 클러스터 중심을 결정할 때 사용하고자 하는 전략을 지정하려면 `init_method` 문자열을 추가하고 그 값을 `random` 또는 `k-means++`로 설정합니다.

SageMaker AI k-means 예측기에 대한 자세한 내용은 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 설명서에서 [K-means](https://sagemaker.readthedocs.io/en/stable/algorithms/unsupervised/kmeans.html)를 참조하세요.

이제 초기 클러스터 중심 세트를 보유합니다.

## 2단계: 훈련 데이터 세트 반복 및 클러스터 중심 계산
<a name="kmeans-step2"></a>

이전 단계에서 생성한 클러스터 중심은 대부분 임의적인 것으로 훈련 데이터 세트에 대한 일부 고려가 포함됩니다. 이 단계에서 훈련 데이터 세트를 사용하여 이 중심을 진짜 클러스터 중심으로 이동합니다. 알고리즘은 훈련 데이터 세트를 반복하고 *K* 클러스터 중심을 다시 계산합니다.

1. 훈련 데이터 세트에서 관측치의 미니 배치(모든 레코드에서 임의적으로 선택된 소형 서브셋)를 읽고 다음을 수행합니다.
**참고**  
모델 훈련 작업 생성 시 `mini_batch_size` 문자열 맵의 `HyperParameters` 문자열에서 배치 크기를 지정합니다.

   1. 미니 배치의 모든 관측치를 가장 가까이에 있는 클러스터 중심이 포함된 클러스터 중 하나로 할당합니다.

   1. 각 클러스터에 할당된 관측치의 수를 계산합니다. 그런 다음 클러스터당 할당된 새 지점의 비율을 계산합니다.

      예를 들어 다음 클러스터를 고려해 보세요.

      클러스터 c1 = 이전에 할당된 100개의 지점. 이 단계의 미니 배치에서 25개의 지점을 추가합니다.

      클러스터 c2 = 이전에 할당된 150개의 지점. 이 단계의 미니 배치에서 40개의 지점을 추가합니다.

      클러스터 c3 = 이전에 할당된 450개의 지점. 이 단계의 미니 배치에서 5개의 지점을 추가합니다.

      다음과 같이 각 클러스터에 할당된 새 지점의 비율을 계산합니다.

      ```
      p1 = proportion of points assigned to c1 = 25/(100+25)
      p2 = proportion of points assigned to c2 = 40/(150+40)
      p3 = proportion of points assigned to c3 = 5/(450+5)
      ```

   1. 각 클러스터에 추가된 새 지점의 중심 컴퓨팅:

      ```
      d1 = center of the new points added to cluster 1
      d2 = center of the new points added to cluster 2
      d3 = center of the new points added to cluster 3
      ```

   1. 다음과 같이 업데이트된 클러스터 중심을 찾는 가중치 평균 컴퓨팅:

      ```
      Center of cluster 1 = ((1 - p1) * center of cluster 1) + (p1 * d1)
      Center of cluster 2 = ((1 - p2) * center of cluster 2) + (p2 * d2)
      Center of cluster 3 = ((1 - p3) * center of cluster 3) + (p3 * d3)
      ```

1. 다음 미니 배치를 읽고 1단계를 반복하여 클러스터 중심을 다시 계산합니다.

1. 미니 배치 *k*-means에 대한 자세한 정보는 [웹 스케일 k-means 클러스터링](https://citeseerx.ist.psu.edu/document?repid=rep1type=pdf&doi=b452a856a3e3d4d37b1de837996aa6813bedfdcf)을 참조하세요.

## 3단계: 클러스터를 *K*에서 *k*로 감소
<a name="kmeans-step3"></a>

알고리즘이 *x*가 1보다 큰 경우 *K = k\$1x*인 *K* 클러스터를 생성하는 경우 이는 *K* 클러스터를 *k* 클러스터로 축소합니다. (자세한 정보는 이전 논의의 `extra_center_factor` 참조) Lloyd의 메서드를 `kmeans++` 초기화와 함께 *K* 클러스터 중심에 적용하여 이 작업을 수행합니다. Lloyd의 메서드에 대한 자세한 정보는 [k-means clustering](https://pdfs.semanticscholar.org/0074/4cb7cc9ccbbcdadbd5ff2f2fee6358427271.pdf)을 참조하세요.

# k-means 하이퍼파라미터
<a name="k-means-api-config"></a>

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청에서 사용하고자 하는 훈련 알고리즘을 지정합니다. 알고리즘별 하이퍼파라미터를 문자열-문자열 맵으로 지정할 수 있습니다. 다음 테이블에는 Amazon SageMaker AI에서 제공되는 k-means 훈련 알고리즘에 대한 하이퍼파라미터가 나열되어 있습니다. k-means 클러스터링 작동 방식에 대한 자세한 정보는 [k-means 클러스터링 작동 방식](algo-kmeans-tech-notes.md) 섹션을 참조하세요.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| feature\$1dim | 입력 데이터의 특징 수. **필수** 유효한 값: 양수  | 
| k |  필요한 클러스터 수. **필수** 유효한 값: 양수  | 
| epochs | 훈련 데이터에 대한 전달 횟수. **선택 사항** 유효한 값: 양수 기본값: 1  | 
| eval\$1metrics | 모델에 대한 점수를 보고하는 데 사용되는 지표 유형의 JSON 목록. 허용되는 값은 평균 제곱 편차의 경우 `msd`이고, 제곱 거리의 합의 경우 `ssd`입니다. 테스트 데이터가 제공된 경우에는 요청된 각 지표에 대해 점수가 보고됩니다. **선택 사항** 유효한 값: `[\"msd\"]`, `[\"ssd\"]` 또는 `[\"msd\",\"ssd\"]`. 기본값: `[\"msd\"]`  | 
| extra\$1center\$1factor | 이 알고리즘은 실행 시 K 중심 = `num_clusters` \$1 `extra_center_factor`를 생성하고 모델 완료 시 중심 수를 K에서 `k`로 줄입니다. **선택 사항** 유효한 값: 양의 정수 또는 `auto`. 기본값: `auto`  | 
| half\$1life\$1time\$1size | 클러스터 평균을 계산할 때 관측치에 지정할 가중치를 결정하는 데 사용됩니다. 더 많은 지점을 관측할수록 가중치는 급격하게 감소합니다. 지점이 처음으로 관측되는 경우 클러스터 평균을 계산할 때 해당 지점에는 가중치 1이 할당됩니다. `half_life_time_size` 지점을 관측한 이후 가중치는 1/2이 되도록 지수 감소 함수의 감소 상수를 선택합니다. 0으로 설정된 경우 감퇴가 없습니다. **선택 사항** 유효한 값: 음수가 아닌 정수 기본값: 0  | 
| init\$1method | 이 알고리즘이 초기 클러스터 중심을 선택하는 메서드. 표준 k-means 접근 방식은 이러한 메서드를 무작위로 선택합니다. 대체 k-means\$1\$1 메서드는 첫 번째 클러스터 중심을 무작위로 선택합니다. 그런 다음 기존 중심에서 남은 데이터 포인트까지 거리의 제곱에 비례하는 가능성 분포로 중심 선택에 가중치를 부여해 초기 클러스터의 위치를 분산시킵니다. **선택 사항** 유효한 값: `random` 또는 `kmeans++`. 기본값: `random`  | 
| local\$1lloyd\$1init\$1method | `k` 중심이 포함된 최종 모델을 빌드하기 위해 사용되는 Lloyd의 Expectation–Maximization(EM) 프로시저에 대한 초기화 메서드. **선택 사항** 유효한 값: `random` 또는 `kmeans++`. 기본값: `kmeans++`  | 
| local\$1lloyd\$1max\$1iter | `k` 중심이 포함된 최종 모델을 빌드하기 위해 사용되는 Lloyd의 Expectation–Maximization(EM) 프로시저에 대한 최대 반복 횟수. **선택 사항** 유효한 값: 양수 기본값: 300  | 
| local\$1lloyd\$1num\$1trials | `k` 중심이 포함된 최종 모델을 빌드하는 경우 손실이 가장 낮은 Lloyd의 Expectation–Maximization(EM) 프로시저가 실행되는 횟수. **선택 사항** 유효한 값: 양의 정수 또는 `auto`. 기본값: `auto`  | 
| local\$1lloyd\$1tol | `k` 중심이 포함된 최종 모델을 빌드하기 위해 사용되는 Lloyd의 Expectation–Maximization(EM) 프로시저의 조기 중지에 대한 손실 변화 내결함성. **선택 사항** 유효한 값: 부동 소수점. 범위: [0, 1]. 기본값: 0.0001  | 
| mini\$1batch\$1size | 데이터 반복자의 미니 배치당 관측치의 수. **선택 사항** 유효한 값: 양수 기본값: 5000  | 

# K-Means 모델 튜닝
<a name="k-means-tuning"></a>

하이퍼파라미터 튜닝이라고도 하는 자동 모델 튜닝은 데이터세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 알고리즘에서 계산하는 지표 중에서 목표 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 목표 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

Amazon SageMaker AI k-means 알고리즘은 가능한 한 구성원이 유사한 클러스터로 데이터를 그룹화하는 비지도 알고리즘입니다. 비지도 알고리즘이기 때문에 하이퍼파라미터가 최적화할 수 있는 기준이 되는 검증 데이터 세트를 사용하지 않습니다. 그러나 테스트 데이터 세트를 사용해 각 훈련 실행 종료 시 데이터 포인트와 최종 클러스터 중심 사이의 제곱 거리에 따라 달라지는 지표를 내보냅니다. 테스트 데이터 세트에 대해 밀집도가 가장 높은 클러스터를 보고하는 모델을 찾기 위해 하이퍼파라미터 튜닝 작업을 사용할 수 있습니다. 클러스터는 구성원의 유사성을 최적화합니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## K-Means 알고리즘으로 계산되는 지표
<a name="km-metrics"></a>

k-means 알고리즘은 훈련 중 다음 지표를 계산합니다. 모델을 튜닝할 때 목표 지표로 이러한 지표 중 하나를 선택합니다.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| test:msd | 테스트 세트의 각 레코드와 모델의 가장 가까운 중심 간 평균 제곱 거리. | 최소화 | 
| test:ssd | 테스트 세트의 각 레코드와 모델의 가장 가까운 중심 간 제곱 거리 합. | 최소화 | 



## 튜닝 가능한 K-Means 하이퍼파라미터
<a name="km-tunable-hyperparameters"></a>

다음 하이퍼파라미터를 사용하여 Amazon SageMaker AI k-means 모델을 튜닝합니다. k-means 목표 지표에 가장 큰 영향을 미치는 하이퍼파라미터는 `mini_batch_size`, `extra_center_factor` 및 `init_method`입니다. 하이퍼파라미터 `epochs`를 튜닝할 경우 일반적으로 개선 결과는 미미합니다.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| epochs | IntegerParameterRanges | MinValue: 1, MaxValue:10 | 
| extra\$1center\$1factor | IntegerParameterRanges | MinValue: 4, MaxValue: 10 | 
| init\$1method | CategoricalParameterRanges | ['kmeans\$1\$1', 'random'] | 
| mini\$1batch\$1size | IntegerParameterRanges | MinValue: 3000, MaxValue:15000 | 

# K-Means 응답 형식
<a name="km-in-formats"></a>

모든 SageMaker AI 기본 제공 알고리즘은 [공통 데이터 형식 - 추론](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)에서 설명하는 공통 입력 추론 형식을 따릅니다. 이 주제에는 SageMaker AI k-means 알고리즘에 사용 가능한 출력 형식 목록이 포함되어 있습니다.

## JSON 응답 형식
<a name="km-json"></a>

```
{
    "predictions": [
        {
            "closest_cluster": 1.0,
            "distance_to_cluster": 3.0,
        },
        {
            "closest_cluster": 2.0,
            "distance_to_cluster": 5.0,
        },

        ....
    ]
}
```

## JSONLINES 응답 형식
<a name="km-jsonlines"></a>

```
{"closest_cluster": 1.0, "distance_to_cluster": 3.0}
{"closest_cluster": 2.0, "distance_to_cluster": 5.0}
```

## RECORDIO 응답 형식
<a name="km-recordio"></a>

```
[
    Record = {
        features = {},
        label = {
            'closest_cluster': {
                keys: [],
                values: [1.0, 2.0]  # float32
            },
            'distance_to_cluster': {
                keys: [],
                values: [3.0, 5.0]  # float32
            },
        }
    }
]
```

## CSV 응답 형식
<a name="km-csv"></a>

각 행의 첫 번째 값은 `closest_cluster`에 해당됩니다.

각 행의 두 번째 값은 `distance_to_cluster`에 해당됩니다.

```
1.0,3.0
2.0,5.0
```

# Principal Component Analysis(PCA) 알고리즘
<a name="pca"></a>

PCA는 가급적 많은 정보를 보유하면서 데이터 세트 내의 차원(특징의 수)을 줄이려 하는 비지도 기계 학습 알고리즘입니다. 이는 성분이라고 하는 새로운 특징 세트를 찾음으로써 이루어집니다. 성분은 다른 특징과 상관 관계가 없는 기존 특징의 복합 객체입니다.** 또한 제약이 되어 있기 때문에 첫 번째 성분은 데이터에서 가능성이 가장 큰 변수를 처리하고, 두 번째 성분은 두 번째로 큰 변수를 처리합니다.

Amazon SageMaker AI에서 PCA는 시나리오에 따라 두 모드로 작동합니다.
+ **regular**: 희소 데이터와 적당한 수의 관측치 및 특징이 포함된 데이터 세트.
+ **randomized**: 많은 수의 관측치 및 특징이 포함된 데이터 세트. 이 모드는 근사치 알고리즘을 사용합니다.

PCA는 테이블형 데이터를 사용합니다.

행은 저차원 공간에 임베딩하고자 하는 관측치를 나타냅니다. 열은 축소된 근사치를 찾고자 하는 특징을 나타냅니다. 알고리즘은 공분산 매트릭스(또는 분산 방식의 근사치)를 계산한 다음 이 요약에 대해 단수 값 분해를 수행하여 주성분을 생산합니다.

**Topics**
+ [PCA 알고리즘의 입력/출력 인터페이스](#pca-inputoutput)
+ [PCA 알고리즘에 대한 EC2 인스턴스 권장 사항](#pca-instances)
+ [PCA 샘플 노트북](#PCA-sample-notebooks)
+ [PCA 작동 방식](how-pca-works.md)
+ [PCA 하이퍼파라미터](PCA-reference.md)
+ [PCA 응답 형식](PCA-in-formats.md)

## PCA 알고리즘의 입력/출력 인터페이스
<a name="pca-inputoutput"></a>

훈련을 위해 PCA는 훈련 채널에 데이터가 제공될 것을 예상하고, 선택적으로 테스트 데이터 세트에 전달된 데이터 세트를 지원하고, 이는 최종 알고리즘에서 점수가 계산됩니다. `recordIO-wrapped-protobuf` 형식과 `CSV` 형식 모두 훈련에 지원됩니다. 파일 모드 또는 파이프 모드를 사용하여 `recordIO-wrapped-protobuf` 또는 `CSV`로 형식이 지정된 데이터에 대해 모델을 훈련할 수 있습니다.

추론의 경우 PCA는 `text/csv`, `application/json` 및 `application/x-recordio-protobuf`를 지원합니다. 결과는 ‘프로젝션’의 벡터를 포함한 `application/json` 또는 `application/x-recordio-protobuf` 형식으로 반환됩니다.

입력 및 출력 파일 형식에 대한 자세한 정보는 [PCA 응답 형식](PCA-in-formats.md)(추론의 경우) 및 [PCA 샘플 노트북](#PCA-sample-notebooks) 섹션을 참조하세요.

## PCA 알고리즘에 대한 EC2 인스턴스 권장 사항
<a name="pca-instances"></a>

PCA는 훈련 및 추론을 위해 CPU 및 GPU 인스턴스를 지원합니다. 어떤 인스턴스 유형의 성능이 뛰어난지는 입력 데이터의 세부 사항에 따라 크게 다릅니다. GPU 인스턴스의 경우 PCA는 P2, P3, G4dn 및 G5를 지원합니다.

## PCA 샘플 노트북
<a name="PCA-sample-notebooks"></a>

MNIST 데이터세트에서 0\$19의 수기 숫자 이미지를 분석하는 데 SageMaker AI Principal Component Analysis 알고리즘을 사용하는 방법을 보여주는 샘플 노트북은 [An Introduction to PCA with MNIST](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/pca_mnist/pca_mnist.html)를 참조하세요. SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 이 인스턴스에 액세스하는 방법에 대한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열면 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인할 수 있습니다. NTM 알고리즘을 사용하는 주제 모델링 예제 노트북은 **Introduction to Amazon algorithms(Amazon 알고리즘 소개)** 섹션에 있습니다. 노트북을 열려면 **사용** 탭을 클릭하고 사본 생성을 선택합니다.

# PCA 작동 방식
<a name="how-pca-works"></a>

Principal Component Analysis(PCA)는 가급적 많은 정보를 보유하면서 데이터 세트 내의 차원(특징의 수)을 줄이는 비지도 기계 학습 알고리즘입니다.

PCA는 성분이라고 하는 새로운 특징 세트를 찾음으로써 차원을 줄입니다. 성분은 다른 특징과 상관 관계가 없는 기존 특징의 복합 객체입니다.** 첫 번째 성분은 데이터에서 가능성이 가장 큰 변수를 처리하고, 두 번째 성분은 두 번째로 큰 변수를 처리합니다.

비지도 차원 절감 알고리즘입니다. 비지도 학습에서 훈련 데이터 세트의 객체와 연결될 수 있는 레이블은 사용되지 않습니다.

각 차원 `1 * d`에 행 ![\[x_1,…,x_n\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-39b.png)이 있는 매트릭스 입력을 감안할 때 데이터는 행의 미니 배치로 분할되고 훈련 노드(작업자) 간에 분산됩니다. 각 작업자는 데이터의 요약을 컴퓨팅합니다. 각 작업자의 요약은 컴퓨팅 종료 시 단일 해결책으로 통합됩니다.

**모드**

Amazon SageMaker AI PCA 알고리즘은 상황에 따라 두 모드 중 하나를 사용하여 이러한 요약을 계산합니다.
+ **regular**: 희소 데이터와 적당한 수의 관측치 및 특징이 포함된 데이터 세트.
+ **randomized**: 많은 수의 관측치 및 특징이 포함된 데이터 세트. 이 모드는 근사치 알고리즘을 사용합니다.

알고리즘의 마지막 단계로 통합된 해결책에 단수 값 분해를 수행하면 주성분이 파생됩니다.

## 모드 1: Regular
<a name="mode-1"></a>

작업자가 ![\[Equation in text-form: \sum x_i^T x_i\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-1b.png) 및 ![\[Equation in text-form: \sum x_i\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-2b.png) 둘 다를 공동으로 컴퓨팅합니다.

**참고**  
![\[Equation in text-form: x_i\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-3b.png)가 `1 * d` 행 벡터가 아니기 때문에 ![\[Equation in text-form: x_i^T x_i\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-4b.png)는 (스칼라가 아니라) 매트릭스입니다. 코드 내 행 벡터를 사용하면 효율적인 캐싱을 얻을 수 있습니다.

공분산 매트릭스는 ![\[Equation in text-form: \sum x_i^T x_i - (1/n) (\sum x_i)^T \sum x_i\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-32b.png) 및 모델의 최상위 `num_components` 단수 벡터로 계산됩니다.

**참고**  
`subtract_mean`이 `False`인 경우 ![\[Equation in text-form: \sum x_i\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-2b.png) 계산 및 빼기를 피합니다.

벡터의 `d` 차원이 ![\[Equation in text-form: d^2\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-7b.png)이 메모리에 맞을 수 있도록 충분히 작은 경우 이 알고리즘을 사용합니다.

## 모드 2: Randomized
<a name="mode-2"></a>

입력 데이터 세트의 특징 수가 큰 경우 메서드를 사용하여 공분산 지표의 근사치를 계산합니다. 모든 미니 배치에서 차원 `b * d`의 ![\[Equation in text-form: X_t\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-23b.png)의 경우 각 미니 배치를 곱한 `(num_components + extra_components) * b` 매트릭스를 무작위로 초기화하여 `(num_components + extra_components) * d` 매트릭스를 생성합니다. 이러한 매트릭스의 합은 작업자에 의해 컴퓨팅되고, 서버는 최종 `(num_components + extra_components) * d` 매트릭스에서 SVD를 수행합니다. 최상위 `num_components` 단수 벡터는 입력 매트릭스의 최상위 단수 벡터의 근사치입니다.

![\[Equation in text-form: \ell\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-38b.png) ` = num_components + extra_components`를 허용합니다. 차원 `b * d`의 미니 배치 ![\[Equation in text-form: X_t\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-23b.png)를 감안해 작업자는 차원 ![\[Equation in text-form: \ell * b\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-38.png) 의 임의 매트릭스 ![\[Equation in text-form: H_t\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-24b.png)를 가져옵니다. 환경이 GPU 또는 CPU를 사용하는지 여부와 차원 크기에 따라 매트릭스는 각 입력이 `+-1` 또는 *FJLT*(fast Johnson Lindenstrauss transform, 자세한 정보는 [FJLT Transforms](https://www.cs.princeton.edu/~chazelle/pubs/FJLT-sicomp09.pdf) 및 후속 백서 참조)인 임의 신호 매트릭스입니다. 그런 다음 작업자는 ![\[Equation in text-form: H_t X_t\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-26b.png)를 계산하고 ![\[Equation in text-form: B = \sum H_t X_t\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-27b.png)을 보관합니다. 또한 작업자는 ![\[Equation in text-form: H_1,..,H_T\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-29b.png)(`T`: 미니 배치의 총 수) 열의 합계인 ![\[Equation in text-form: h^T\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-28b.png) 및 모든 입력 행의 합계인 `s`를 유지합니다. 전체 데이터 샤드를 처리한 이후 작업자는 서버 `B`, `h`, `s` 및 `n`을 전송합니다(입력 행의 수).

서버에 대한 여러 입력은 ![\[Equation in text-form: B^1, h^1, s^1, n^1,…\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-30b.png)으로 나타납니다. 서버는 `B`, `h`, `s`, `n`(각 입력의 합계)을 계산합니다. 그런 다음 ![\[Equation in text-form: C = B – (1/n) h^T s\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/PCA-31b.png)를 계산하고 단수 값 분해를 찾습니다. 최상위 단수 벡터 및 단수 값인 `C`는 문제에 대한 근사치 해결책으로 사용됩니다.

# PCA 하이퍼파라미터
<a name="PCA-reference"></a>

`CreateTrainingJob` 요청에서 훈련 알고리즘을 지정합니다. 알고리즘별 하이퍼파라미터를 문자열-문자열 맵으로 지정할 수 있습니다. 다음 표에는 Amazon SageMaker AI에서 제공되는 PCA 훈련 알고리즘에 대한 하이퍼파라미터가 나열되어 있습니다. PCA 작업 방법에 대한 자세한 정보는 [PCA 작동 방식](how-pca-works.md)을 참조하세요.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| feature\$1dim |  입력 차원. **필수** 유효한 값: 양수  | 
| mini\$1batch\$1size |  미니 배치에 있는 행의 수. **필수** 유효한 값: 양수  | 
| num\$1components |  컴퓨팅할 주성분의 수. **필수** 유효한 값: 양수  | 
| algorithm\$1mode |  주성분 컴퓨팅 모드. **선택 사항** 유효한 값: *regular* 또는 *randomized* 기본값: *regular*  | 
| extra\$1components |  값이 증가하면 해결책이 더욱 정확해지지만 실행 시간과 메모리 소모량이 선형으로 증가합니다. 기본값 -1은 최대 10 및 `num_components`를 의미합니다. *randomized* 모드에서만 유효합니다. **선택 사항** 유효한 값: 음수가 아닌 정수 또는 -1 기본값: -1  | 
| subtract\$1mean |  훈련 도중 및 추론 시 데이터가 비편이되어야 하는지 여부를 나타냅니다. **선택 사항** 유효한 값: *true* 또는 *false* 중 하나 기본값: *true*  | 

# PCA 응답 형식
<a name="PCA-in-formats"></a>

모든 Amazon SageMaker AI 기본 제공 알고리즘은 [공통 데이터 형식 - 추론](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)에서 설명하는 공통 입력 추론 형식을 따릅니다. 이 주제에는 SageMaker AI PCA 알고리즘에 사용 가능한 출력 형식 목록이 포함되어 있습니다.

## JSON 응답 형식
<a name="PCA-json"></a>

Accept - application/json

```
{
    "projections": [
        {
            "projection": [1.0, 2.0, 3.0, 4.0, 5.0]
        },
        {
            "projection": [6.0, 7.0, 8.0, 9.0, 0.0]
        },
        ....
    ]
}
```

## JSONLINES 응답 형식
<a name="PCA-jsonlines"></a>

Accept - application/jsonlines

```
{ "projection": [1.0, 2.0, 3.0, 4.0, 5.0] }
{ "projection": [6.0, 7.0, 8.0, 9.0, 0.0] }
```

## RECORDIO 응답 형식
<a name="PCA-recordio"></a>

Accept - application/x-recordio-protobuf

```
[
    Record = {
        features = {},
        label = {
            'projection': {
                keys: [],
                values: [1.0, 2.0, 3.0, 4.0, 5.0]
            }
        }
    },
    Record = {
        features = {},
        label = {
            'projection': {
                keys: [],
                values: [1.0, 2.0, 3.0, 4.0, 5.0]
            }
        }
    }  
]
```

# Random Cut Forest(RCF) 알고리즘
<a name="randomcutforest"></a>

Amazon SageMaker AI Random Cut Forest(RCF)는 데이터세트 내에서 변칙적인 데이터 지점을 감지하는 비지도 알고리즘입니다. 이는 구조화 또는 패턴화된 데이터로부터 벗어난 관측치입니다. 변칙은 시계열 데이터에서 예기치 않은 급증, 주기성 내의 끊어짐 또는 분류할 수 있는 데이터 지점으로 나타날 수 있습니다. 평면적으로 봤을 때 "정규" 데이터로부터 쉽게 구분할 수 있습니다. 데이터세트에 이러한 변칙이 포함되면 기계 학습 작업의 복잡성이 극적으로 증가할 수 있습니다. "정규" 데이터가 주로 단순한 모델로 설명될 수 있기 때문입니다.

각 데이터 지점을 통해 RCF는 변칙 점수를 연결합니다. 점수 값이 낮은 경우 데이터 지점이 "정상"으로 간주됩니다. 점수 값이 높은 경우 데이터 내에 변칙이 존재함을 나타냅니다. "낮음"과 "높음"의 정의는 애플리케이션에 따라 다릅니다. 하지만 일반적으로 평균 점수로부터 3의 표준편차를 초과하는 점수가 변칙으로 간주됩니다.

1차원 시계열 데이터에 대한 변칙 감지 알고리즘의 적용 사례가 많습니다(예: 트래픽 볼륨 분석 또는 음성 볼륨 급증 감지). RCF는 임의 차원 입력으로 작업하도록 설계되었습니다. Amazon SageMaker AI RCF는 특성의 수, 데이터 설정 크기 및 인스턴스 수에 따라 조정됩니다.

**Topics**
+ [RCF 알고리즘의 입력/출력 인터페이스](#rcf-input_output)
+ [RCF 알고리즘에 대한 인스턴스 권장 사항](#rcf-instance-recommend)
+ [RCF 샘플 노트북](#rcf-sample-notebooks)
+ [RCF 작동 방식](rcf_how-it-works.md)
+ [RCF 하이퍼파라미터](rcf_hyperparameters.md)
+ [RCF 모델 튜닝](random-cut-forest-tuning.md)
+ [RCF 응답 형식](rcf-in-formats.md)

## RCF 알고리즘의 입력/출력 인터페이스
<a name="rcf-input_output"></a>

Amazon SageMaker AI Random Cut Forest는 `train` 및 `test` 데이터 채널을 지원합니다. 레이블 지정된 데이터의 accuracy, precision, recall 및 F1-score 지표 컴퓨팅을 위해 선택 가능한 test 채널이 사용됩니다. train 및 test 데이터 콘텐츠 유형은 `application/x-recordio-protobuf` 또는 `text/csv` 형식일 수 있습니다. 테스트 데이터의 경우 text/csv 형식을 사용할 때 콘텐츠는 text/csv;label\$1size=1로 지정되어야 합니다. 여기서 각 행의 첫 번째 열은 변칙 레이블 나타냅니다. "1"은 변칙 데이터 지점을, "0"은 정상 데이터 지점을 나타냅니다. 파일 모드 또는 파이프 모드를 사용하여 `recordIO-wrapped-protobuf` 또는 `CSV`로 형식이 지정된 데이터에 대해 RCF 모델을 훈련할 수 있습니다.

train 채널은 `S3DataDistributionType=ShardedByS3Key`만을 지원하고, test 채널은 `S3DataDistributionType=FullyReplicated`만을 지원합니다. 다음 예제에서는 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/v2.html)를 사용하여 train 채널의 S3 배포 유형을 지정합니다.

**참고**  
이 `sagemaker.inputs.s3_input` 메서드는 [SageMaker Python SDK v2](https://sagemaker.readthedocs.io/en/stable/v2.html#s3-input)에서 `sagemaker.inputs.TrainingInput`으로 이름이 변경되었습니다.

```
  import sagemaker
    
  # specify Random Cut Forest training job information and hyperparameters
  rcf = sagemaker.estimator.Estimator(...)
    
  # explicitly specify "ShardedByS3Key" distribution type
  train_data = sagemaker.inputs.TrainingInput(
       s3_data=s3_training_data_location,
       content_type='text/csv;label_size=0',
       distribution='ShardedByS3Key')
    
  # run the training job on input data stored in S3
  rcf.fit({'train': train_data})
```

실행 역할과 관련된 일반적인 오류를 방지하려면 필요한 실행 역할, `AmazonSageMakerFullAccess` 및 `AmazonEC2ContainerRegistryFullAccess`가 있는지 확인하세요. 이미지가 존재하지 않거나 잘못된 권한과 관련된 일반적인 오류를 방지하려면 ECR 이미지가 훈련 인스턴스에 할당된 디스크 공간보다 크지 않은지 확인하세요. 이를 방지하려면 디스크 공간이 충분한 인스턴스에서 훈련 작업을 실행하세요. 또한 ECR 이미지가 다른 AWS 계정의 Elastic Container Service(ECS) 리포지토리에 있고 액세스 권한을 부여하도록 리포지토리 권한을 설정하지 않은 경우 오류가 발생합니다. 리포지토리 정책 설명 설정에 대한 자세한 내용은 [ECR 리포지토리 권한](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html)을 참조하세요.

S3 데이터 소스 속성을 사용자 지정하는 방법에 대한 자세한 내용은 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html)을 참조하세요. 마지막으로 여러 인스턴스를 활용하여 훈련하려면 훈련 데이터가 최소 인스턴스의 수만큼 여러 파일로 분할되어야 합니다.

추론의 경우 RCF는 `application/x-recordio-protobuf`, `text/csv` 및 `application/json` 입력 데이터 콘텐츠 유형을 지원합니다. 자세한 정보는 [기본 제공 알고리즘의 파라미터](common-info-all-im-models.md) 설명서를 참조하세요. RCF 추론은 `application/x-recordio-protobuf` 또는 `application/json` 형식의 출력을 반환합니다. 출력 데이터의 각 레코드에는 각 입력 데이터 지점에 대한 해당 변칙 점수가 포함되어 있습니다. 자세한 정보는 [공동 데이터 형식--추론](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html) 섹션을 참조하세요.

입력 및 출력 파일 형식에 대한 자세한 정보는 [RCF 응답 형식](rcf-in-formats.md)(추론의 경우) 및 [RCF 샘플 노트북](#rcf-sample-notebooks) 섹션을 참조하세요.

## RCF 알고리즘에 대한 인스턴스 권장 사항
<a name="rcf-instance-recommend"></a>

훈련을 위해 `ml.m4`, `ml.c4` 및 `ml.c5` 인스턴스 패밀리를 권장합니다. 추론에 대해 특히 최소의 사용 시간당 비용과 최대의 성능을 위해 `ml.c5.xl` 인스턴스 유형 사용을 권장합니다. 알고리즘은 GPU 인스턴스 유형에서 기술적으로 실행될 수 있지만 GPU 하드웨어를 활용하지는 않습니다.

## RCF 샘플 노트북
<a name="rcf-sample-notebooks"></a>

RCF 모델을 훈련한 다음 해당 모델을 사용하여 추론을 수행하는 방법을 보여주는 예시는 [An Introduction to SageMaker AI Random Cut Forests](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/random_cut_forest/random_cut_forest.html) 노트북을 참조하세요. SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 이 인스턴스에 액세스하는 방법에 대한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열면 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인할 수 있습니다. 노트북을 열려면 **사용** 탭을 클릭하고 사본 생성을 선택합니다.

RCF 알고리즘 사용에 대한 블로그 게시물은 [Use the built-in Amazon SageMaker AI Random Cut Forest algorithm for anomaly detection](https://aws.amazon.com/blogs/machine-learning/use-the-built-in-amazon-sagemaker-random-cut-forest-algorithm-for-anomaly-detection/)을 참조하세요.

# RCF 작동 방식
<a name="rcf_how-it-works"></a>

Amazon SageMaker AI Random Cut Forest(RCF)는 데이터세트 내에서 변칙적인 데이터 지점을 감지하는 비지도 알고리즘입니다. 이는 구조화 또는 패턴화된 데이터로부터 벗어난 관측치입니다. 변칙은 시계열 데이터에서 예기치 않은 급증, 주기성 내의 끊어짐 또는 분류할 수 있는 데이터 지점으로 나타날 수 있습니다. 평면적으로 봤을 때 "정규" 데이터로부터 쉽게 구분할 수 있습니다. 데이터세트에 이러한 변칙이 포함되면 기계 학습 작업의 복잡성이 극적으로 증가할 수 있습니다. "정규" 데이터가 주로 단순한 모델로 설명될 수 있기 때문입니다.

RCF 알고리즘의 기본 개념은 훈련 데이터의 샘플 분할을 사용하여 얻은 각각의 트리를 통해 하나의 포레스트로 만드는 것과 같습니다. 예를 들어 입력 데이터의 임의 샘플이 우선 결정됩니다. 임의 샘플은 이후 포레스트에 있는 트리의 수에 따라 분할됩니다. 각각의 트리에 이러한 분할이 제공되고, 트리는 지점의 하위 세트를 k-d 트리로 구성합니다. 트리별 데이터 지점에 할당된 변칙 점수는 트리의 복잡성에 대한 예상된 변경으로 정의되고 그에 따라 트리에 점수를 추가합니다. 이는 평균적으로 트리 지점의 결과 깊이에 반비례합니다. Random Cut Forest는 각각을 구성하는 트리로부터 평균 점수를 컴퓨팅하고 샘플 크기에 따라 결과를 조정함으로써 이상 점수를 할당합니다. RCF 알고리즘은 참조 [1]에 설명된 것을 기반으로 합니다.

## 무작위 데이터 샘플링
<a name="rcf-rndm-sample-data"></a>

RCF 알고리즘의 첫 번째 단계는 훈련 데이터의 임의 샘플을 얻는 것입니다. 특히 총 데이터 포인트 개수가 ![\[Equation in text-form: K\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/rcf13.jpg)\$1![\[Equation in text-form: N\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/rcf14.jpg)인 크기의 샘플을 원한다고 가정합니다. 훈련 데이터가 충분히 작은 경우 전체 데이터세트를 사용할 수 있고, 이 세트에서 ![\[Equation in text-form: K\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/rcf13.jpg)개 요소를 무작위로 가져올 수 있습니다. 하지만 주기적으로 훈련 데이터가 한 번에 일치시키기에 너무 큰 경우 이 접근 방식은 실현 가능하지 않습니다. 대신 리저버 샘플링이라는 기법을 사용합니다.

[리저버 샘플링](https://en.wikipedia.org/wiki/Reservoir_sampling)은 데이터세트 ![\[Equation in text-form: S={S_1,...,S_N}\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/rcf3.jpg)에서 무작위 샘플을 효율적으로 가져오기 위한 알고리즘으로, 여기서 데이터세트의 요소 수는 한 번에 하나씩 또는 배치로만 관측할 수 있습니다. 실제로 리저버 샘플링은 ![\[Equation in text-form: N\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/rcf14.jpg)이 *선험적*인 것으로 알려지지 않은 경우에도 작동합니다. 단 하나의 샘플만이 요청된 경우(예: ![\[Equation in text-form: K=1\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/rcf15.jpg)인 경우) 이 알고리즘은 다음과 같습니다.

**알고리즘: 리저버 샘플링**
+  입력: 데이터세트 또는 데이터 스트림 ![\[Equation in text-form: S={S_1,...,S_N}\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/rcf3.jpg) 
+  임의 샘플 초기화 ![\[Equation in text-form: X=S_1\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/rcf4.jpg) 
+  각 관측된 샘플 ![\[Equation in text-form: S_n,n=2,...,N\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/rcf5.jpg):
  +  균일한 난수 선택 ![\[Equation in text-form: \xi \in [0,1]\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/rcf6.jpg) 
  +  다음의 경우, ![\[Equation in text-form: \xi \less 1/n\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/rcf7.jpg) 
    +  ![\[Equation in text-form: X=S_n\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/rcf8.jpg) 설정 
+  ![\[Equation in text-form: X\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/rcf9.jpg) 반환 

이 알고리즘은 모든 ![\[Equation in text-form: n=1,...,N\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/rcf11.jpg)에 대해 ![\[Equation in text-form: P(X=S_n)=1/N\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/rcf10.jpg)처럼 무작위 샘플을 선택합니다. ![\[Equation in text-form: K>1\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/rcf12.jpg)인 경우 알고리즘이 더욱 복잡합니다. 추가로 교체 및 교체되지 않은 임의 샘플링 사이에서 구별해야 합니다. RCF는 [2]에서 설명된 알고리즘을 기반으로 훈련 데이터에서 교체 없이 증강된 리저버 샘플링을 수행합니다.

## RCF 모델 훈련 및 추론 생성
<a name="rcf-training-inference"></a>

RCF의 다음 단계는 임의 데이터 샘플을 사용하여 Random Cut Forest를 생성하는 것입니다. 우선 샘플은 포레스트에 있는 트리의 수와 동일한 파티션으로 분할됩니다. 이후 각 분할은 개별 트리로 전송됩니다. 트리는 데이터 도메인을 경계가 있는 상자로 분할하여 재귀적으로 분할을 하나의 바이너리 트리로 구성합니다.

이 절차가 예제와 함께 가장 잘 설명되었습니다. 트리에게 다음 2차원 데이터세트가 제공된다고 가정합니다. 해당 트리는 루트 노드로 초기화됩니다.

![\[2차원 데이터세트입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/RCF1.jpg)


그림: 대부분의 데이터는 클러스터(파란색)에 있지만 하나의 변칙 데이터 지점(주황색)이 있는 2차원 데이터세트. 트리는 루트 노드로 초기화됩니다.

RCF 알고리즘은 데이터의 경계 상자를 컴퓨팅하고, 임의 차원을 선택하고("변수"가 더 높은 차원에 더 많은 가중치 제공), 해당 차원을 통과하는 초평면의 위치를 임의로 결정하여 트리의 데이터를 구성합니다. 결과로 나온 두 가지 하위 공간은 고유한 하위 트리를 정의합니다. 이 예제에서 샘플의 나머지로부터 단일 지점이 분할됩니다. 결과로 나온 바이너리 트리의 첫 번째 층에는 2개의 노드가 있습니다. 하나는 최초 분할의 왼쪽을 가리키는 하위 트리를 포함하고, 다른 하나는 오른쪽에 있는 단일 지점을 나타냅니다.

![\[2차원 데이터세트의 임의 분할.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/RCF2.jpg)


그림: 2차원 데이터세트의 임의 분할. 변칙 데이터 지점은 다른 지점에 비해 작은 트리에 있는 경계 상자에 고립될 가능성이 높습니다.

경계 상자는 데이터의 왼쪽과 오른쪽 절반에 대해 컴퓨팅되고, 트리의 모든 리프가 샘플로부터 단일 데이터 지점을 나타낼 때까지 반복됩니다. 단일 지점이 효율적으로 멀리 떨어진 경우 임의 분할로 인해 지점 고립이 발생할 수 있습니다. 이 관측치는 트리의 깊이가 변칙 점수에 반비례한다는 직관을 제공합니다.

교육된 RCF 모델을 사용하여 추론을 수행할 때 최종 변칙 점수는 각 트리에 보고된 평균 점수에 따라 보고됩니다. 새 데이터 지점이 이미 트리 내에 존재하지 않는 경우도 있습니다. 새 지점과 연결된 점수를 확인하기 위해 데이터 지점이 특정 트리에 삽입됩니다. 그리고 트리는 효율적으로(그리고 일시적으로) 위에 설명한 훈련 프로세스와 동일한 방식으로 재결합됩니다. 결과로 나온 트리는 입력 데이터 지점이 처음 트리를 생성하는 데 사용하는 샘플의 멤버입니다. 보고된 점수는 트리 내 입력 지점의 깊이와 반비례합니다.

## 하이퍼파라미터 선택
<a name="rcf-choose-hyperparam"></a>

RCF 모델 조정에 사용되는 기본 하이퍼파라미터는 `num_trees` 및 `num_samples_per_tree`입니다. `num_trees`가 증가하면 변칙 점수에 관측된 노이즈가 감소합니다. 최종 점수가 각 트리에서 보고하는 점수의 평균이기 때문입니다. 최적값은 사례에 따라 다르기 때문에 점수 노이즈 및 모델 복잡성 사이의 균형을 위해 100개의 트리를 사용하여 시작하는 것이 좋습니다. 추론 시간은 트리의 수에 비례합니다. 훈련 시간이 영향을 받기는 하지만 위에 설명하는 리저버 샘플링 알고리즘이 주를 이룹니다.

파라미터 `num_samples_per_tree`는 데이터세트의 예상 변칙 밀도와 관련이 있습니다. 특히 `num_samples_per_tree`가 정상 데이터 대비 변칙 데이터의 비율을 계산하도록 `1/num_samples_per_tree`를 선택해야 합니다. 예를 들어 각 트리에서 256개의 샘플을 사용하는 경우 데이터에 1/256, 0.4%의 변칙이 있다고 예상합니다. 이번에도 이 하이퍼파라미터의 최적값은 애플리케이션에 따라 다릅니다.

## 참조
<a name="references"></a>

1.  Sudipto Guha, Nina Mishra, Gourav Roy, and Okke Schrijvers. "Robust random cut forest based anomaly detection on streams." In *International Conference on Machine Learning*, pp. 2712-2721. 2016.

1.  Byung-Hoon Park, George Ostrouchov, Nagiza F. Samatova, and Al Geist. "Reservoir-based random sampling with replacement from data stream." In *Proceedings of the 2004 SIAM International Conference on Data Mining*, pp. 492-496. Society for Industrial and Applied Mathematics, 2004.

# RCF 하이퍼파라미터
<a name="rcf_hyperparameters"></a>

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청에서 훈련 알고리즘을 지정합니다. 알고리즘별 하이퍼파라미터를 문자열-문자열 맵으로 지정할 수 있습니다. 다음 표에는 Amazon SageMaker AI RCF 알고리즘에 대한 하이퍼파라미터가 나열되어 있습니다. 하이퍼파라미터를 선택하는 방법에 대한 권장 사항을 포함한 자세한 정보는 [RCF 작동 방식](rcf_how-it-works.md) 섹션을 참조하세요.




| 파라미터 이름 | 설명 | 
| --- | --- | 
| feature\$1dim |  데이터세트 내 특징 수. [Random Cut Forest](https://sagemaker.readthedocs.io/en/stable/algorithms/unsupervised/randomcutforest.html) 예측기를 사용하는 경우 이 값은 자동으로 계산되므로 지정할 필요가 없습니다. **필수** 유효한 값: 양의 정수(최소: 1, 최대 10000)  | 
| eval\$1metrics |  레이블 지정된 테스트 데이터세트의 점수를 매기는 데 사용되는 지표의 목록. 다음 지표는 출력에 대해 선택할 수 있습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/rcf_hyperparameters.html) **선택 사항** 유효한 값: `accuracy` 또는 `precision_recall_fscore`에서 가져온 가능한 값을 포함한 목록. 기본값: `accuracy`, `precision_recall_fscore` 둘 다 계산됩니다.  | 
| num\$1samples\$1per\$1tree |  훈련 데이터세트에서 각 트리에 제공되는 임의 샘플의 수. **선택 사항** 유효한 값: 양의 정수(최소: 1, 최대 2048) 기본값: 256  | 
| num\$1trees |  포레스트에 있는 트리의 수. **선택 사항** 유효한 값: 양의 정수(최소: 50, 최대 1000) 기본 값: 100  | 

# RCF 모델 튜닝
<a name="random-cut-forest-tuning"></a>

하이퍼파라미터 튜닝 및 하이퍼파라미터 최적화라고도 하는 *자동 모델 튜닝*은 데이터세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다. 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 알고리즘에서 계산하는 지표 중에서 목표 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 목표 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

Amazon SageMaker AI RCF 알고리즘은 하이퍼파라미터 최적화를 위해 레이블링된 테스트 데이터세트가 필요한 비지도 이상 감지 알고리즘입니다. RCF는 테스트 데이터 포인트에 대한 변칙 점수를 계산한 다음 점수가 평균 점수의 3가지 표준 편차를 벗어난 경우 해당 데이터 포인트를 변칙으로 레이블을 지정합니다. 이를 3 시그마 제한 휴리스틱(heuristic)이라고 합니다. F1 점수는 계산된 레이블과 실제 레이블 간의 차이를 기준으로 합니다. 하이퍼파라미터 튜닝 작업은 이 점수를 최대화하는 모델을 찾습니다. 하이퍼파라미터 최적화의 성공 여부는 테스트 데이터세트에 대한 3-시그마 제한 휴리스틱(heuristic)의 적용 가능성에 따라 달라집니다.

모델 튜닝에 대한 자세한 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## RCF 알고리즘으로 계산되는 지표
<a name="random-cut-forest-metrics"></a>

RCF 알고리즘은 훈련 중 다음 지표를 계산합니다. 모델을 튜닝하는 경우 이 지표를 목표 지표로 선택합니다.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| test:f1 | 테스트 데이터세트에 대한 F1 점수는 계산된 레이블과 실제 레이블 간의 차이를 기준으로 합니다. | 최대화 | 

## 튜닝 가능한 RCF 하이퍼파라미터
<a name="random-cut-forest-tunable-hyperparameters"></a>

다음 하이퍼파라미터를 사용하여 RCF 모델을 튜닝할 수 있습니다.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| num\$1samples\$1per\$1tree | IntegerParameterRanges | MinValue: 1, MaxValue:2048 | 
| num\$1trees | IntegerParameterRanges | MinValue: 50, MaxValue:1000 | 

# RCF 응답 형식
<a name="rcf-in-formats"></a>

모든 Amazon SageMaker AI 기본 제공 알고리즘은 [공통 데이터 형식 - 추론](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)에서 설명하는 공통 입력 추론 형식을 따릅니다. 참고로 SageMaker AI Random Cut Forest는 밀집 및 희소 JSON 및 RecordIO 형식을 지원합니다. 이 주제에는 SageMaker AI RCF 알고리즘에 사용 가능한 출력 형식 목록이 포함되어 있습니다.

## JSON 응답 형식
<a name="RCF-json"></a>

ACCEPT: application/json.

```
    {                                                                                                                                                                                                                                                                                    
        "scores":    [                                                                                                                                                                                                                                                                   
            {"score": 0.02},                                                                                                                                                                                                                                                             
            {"score": 0.25}                                                                                                                                                                                                                                                              
        ]                                                                                                                                                                                                                                                                                
    }
```

### JSONLINES 응답 형식
<a name="RCF-jsonlines"></a>

ACCEPT: application/jsonlines.

```
{"score": 0.02},
{"score": 0.25}
```

## RECORDIO 응답 형식
<a name="rcf-recordio"></a>

ACCEPT: application/x-recordio-protobuf.

```
    [                                                                                                                                                                                                                                                                                    
         Record = {                                                                                                                                                                                                                                                                           
             features = {},                                                                                                                                                                                                                                                                   
             label = {                                                                                                                                                                                                                                                                       
                 'score': {                                                                                                                                                                                                                                                                   
                     keys: [],                                                                                                                                                                                                                                                                
                     values: [0.25]  # float32                                                                                                                                                                                                                                                
                 }                                                                                                                                                                                                                                                                            
             }                                                                                                                                                                                                                                                                                
         },                                                                                                                                                                                                                                                                                   
         Record = {                                                                                                                                                                                                                                                                           
             features = {},                                                                                                                                                                                                                                                                   
             label = {                                                                                                                                                                                                                                                                       
                 'score': {                                                                                                                                                                                                                                                                   
                     keys: [],                                                                                                                                                                                                                                                                
                     values: [0.23]  # float32                                                                                                                                                                                                                                                
                 }                                                                                                                                                                                                                                                                            
             }                                                                                                                                                                                                                                                                                
         }                                                                                                                                                                                                                                                                                    
    ]
```

# 컴퓨터 비전용 내장 SageMaker AI 알고리즘
<a name="algorithms-vision"></a>

SageMaker AI는 이미지 분류, 객체 감지 및 컴퓨터 비전에 사용되는 이미지 처리 알고리즘을 제공합니다.
+ [이미지 분류 - MXNet](image-classification.md) - 답이 포함된 예제 데이터를 사용합니다(지도 알고리즘이라고 함).** 이 알고리즘을 사용하여 이미지를 분류할 수 있습니다.
+ [이미지 분류 - TensorFlow](image-classification-tensorflow.md) - 사전 훈련된 TensorFlow Hub 모델을 사용하여 특정 태스크에 맞게 미세 조정합니다(지도 알고리즘이라고 함).** 이 알고리즘을 사용하여 이미지를 분류할 수 있습니다.
+ [객체 감지 - MXNet](object-detection.md) - 단일 심층 신경망을 사용하여 이미지의 물체를 감지하고 분류합니다. 이 알고리즘은 입력으로 이미지를 가져와 이미지 장면 내에서 객체의 모든 인스턴스를 식별하는 지도 학습 알고리즘입니다.
+ [객체 감지 - TensorFlow](object-detection-tensorflow.md) - 이미지에서 경계 상자와 객체 레이블을 감지합니다. 사전 훈련된 TensorFlow 모델에 사용할 수 있는 전이 학습을 지원하는 지도 알고리즘입니다.
+ [의미 체계 분할 알고리즘](semantic-segmentation.md) - 컴퓨터 비전 응용 분야를 개발하는 데 세분화된 픽셀 수준 접근 방식을 제공합니다.


| 알고리즘 이름 | 채널 이름 | 훈련 입력 모드 | 파일 유형 | 인스턴스 클래스 | 병렬화 가능 | 
| --- | --- | --- | --- | --- | --- | 
| 이미지 분류 - MXNet | train 및 validation, (선택 사항) train\$1lst, validation\$1lst 및 model | 파일 또는 파이프 | recordIO 또는 이미지 파일(.jpg 또는 .png)  | GPU | 예 | 
| 이미지 분류 - TensorFlow | 훈련 및 검증 | 파일 | 이미지 파일(.jpg, .jpeg 또는.png)  | CPU 또는 GPU | 예(단일 인스턴스의 여러 GPU에서만 가능) | 
| 객체 감지 | train 및 validation, (선택 사항) train\$1annotation, validation\$1annotation 및 model | 파일 또는 파이프 | recordIO 또는 이미지 파일(.jpg 또는 .png)  | GPU | 예 | 
| 객체 감지 - TensorFlow | 훈련 및 검증 | 파일 | 이미지 파일(.jpg, .jpeg 또는.png)  | GPU | 예(단일 인스턴스의 여러 GPU에서만 가능) | 
| 의미 체계 분할 | train 및 validation, train\$1annotation, validation\$1annotation, 및 (선택 사항) label\$1map 및 model | 파일 또는 파이프 | 이미지 파일 | GPU(단일 인스턴스 전용) | 아니요 | 

# 이미지 분류 - MXNet
<a name="image-classification"></a>

Amazon SageMaker 이미지 분류 알고리즘은 다중 레이블 분류를 지원하는 지도 학습 알고리즘입니다. 이 알고리즘은 이미지를 입력으로 취해 해당 이미지에 할당된 하나 이상의 레이블을 출력합니다. 처음부터 새로 훈련하거나 대량의 훈련 이미지를 이용할 수 없는 경우 전이 학습을 사용하여 훈련할 수 있는 컨볼루션 신경망을 사용합니다.

Amazon SageMaker AI 이미지 분류 알고리즘에 대한 권장 입력 형식은 Apache MXNet [RecordIO](https://mxnet.apache.org/api/faq/recordio)입니다. 하지만 .jpg 또는 .png 형식의 원시 이미지도 사용할 수 있습니다. 기계 학습 시스템을 위한 효율적인 데이터 준비 및 로딩에 대한 광범위한 개요는 [이 토론](https://mxnet.apache.org/api/architecture/note_data_loading)을 참조하세요.

**참고**  
기존 딥 러닝 프레임워크와의 더 나은 상호 운용성을 유지하기 위해 다른 Amazon SageMaker AI 알고리즘에서 일반적으로 사용되는 protobuf 데이터 형식과는 다릅니다.

컨볼루션 네트워크에 대한 자세한 정보는 다음을 참조하세요.
+ [Deep residual learning for image recognition](https://arxiv.org/abs/1512.03385) Kaiming He, et al., 2016 IEEE Conference on Computer Vision and Pattern Recognition
+ [ImageNet 이미지 데이터베이스](http://www.image-net.org/)
+ [Gluon-CV와 MXNet을 사용한 이미지 분류](https://gluon-cv.mxnet.io/build/examples_classification/index.html)

**Topics**
+ [Image Classification 알고리즘의 입력/출력 인터페이스](#IC-inputoutput)
+ [Image Classification 알고리즘에 대한 EC2 인스턴스 권장 사항](#IC-instances)
+ [이미지 분류 샘플 노트북](#IC-sample-notebooks)
+ [Image Classification 작동 방식](IC-HowItWorks.md)
+ [이미지 분류 하이퍼파라미터](IC-Hyperparameter.md)
+ [이미지 분류 모델 튜닝](IC-tuning.md)

## Image Classification 알고리즘의 입력/출력 인터페이스
<a name="IC-inputoutput"></a>

SageMaker AI 이미지 분류 알고리즘은 파일 모드에서 훈련을 위해 RecordIO(`application/x-recordio`) 및 이미지(`image/png`, `image/jpeg`, `application/x-image`) 콘텐츠 유형을 지원하고, 파이프 모드에서 훈련을 위해 RecordIO(`application/x-recordio`) 콘텐츠 유형을 지원합니다. 그러나 증강 매니페스트 형식을 사용하여 RecordIO 파일을 생성하지 않고 이미지 파일(`image/png`, `image/jpeg` 및 `application/x-image`)을 사용해 파이프 모드에서 훈련할 수도 있습니다.

분산 훈련은 파일 모드와 파이프 모드에서 지원됩니다. 파이프 모드에서 RecordIO 콘텐츠 형식을 사용하는 경우 `S3DataSource`의 `S3DataDistributionType`을 `FullyReplicated`로 설정해야 합니다. 이 알고리즘은 데이터가 각 머신에 복사되는 완전 복제 모델을 지원합니다.

이 알고리즘은 추론을 위해 `image/png`, `image/jpeg` 및 `application/x-image`를 지원합니다.

### RecordIO 형식을 사용한 훈련
<a name="IC-recordio-training"></a>

훈련에 RecordIO 형식을 사용하는 경우 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청의 `InputDataConfig` 파라미터에 대한 값으로 `train` 및 `validation` 채널을 둘 다 지정합니다. `train` 채널에서 1개의 RecordIO(`.rec`) 파일을 지정하고 `validation` 채널에서 1개의 RecordIO 파일을 지정합니다. 두 채널에 대한 콘텐츠 유형을 `application/x-recordio`로 설정합니다.

### 이미지 형식을 사용한 훈련
<a name="IC-image-training"></a>

훈련에 이미지 형식을 사용하는 경우 `train` 요청의 `validation` 파라미터에 대한 값으로 `train_lst`, `validation_lst`, `InputDataConfig` 및 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 채널을 지정합니다. `train` 및 `validation` 채널에 대한 개별 이미지 데이터(`.jpg` 또는 `.png`파일)를 지정합니다. 각 `.lst` 및 `train_lst` 채널에서 1개의 `validation_lst` 파일을 지정합니다. 네 채널 모두에 대한 콘텐츠 유형을 `application/x-image`로 설정합니다.

**참고**  
SageMaker AI는 훈련 및 검증 데이터를 다른 채널과 별도로 읽으므로 훈련 및 검증 데이터를 다른 폴더에 저장해야 합니다.

`.lst` 파일은 탭으로 구분된 파일로 이미지 파일의 목록을 담은 3개의 열이 포함되어 있습니다. 첫 번째 열은 이미지 인덱스를 지정하고, 두 번째 열은 이미지에 대한 클래스 레이블 인덱스를 지정하며, 세 번째 열은 이미지 파일의 상대 경로를 지정합니다. 첫 번째 열의 이미지 인덱스는 모든 이미지 간에서 고유해야 합니다. 클래스 레이블 인덱스 세트는 0부터 시작하여 순차적으로 번호가 부여되어 있습니다. 예를 들어 0은 cat 클래스, 1은 dog 클래스이며, 이후 추가로 클래스가 이어집니다.

 다음은 `.lst` 파일의 예제입니다.

```
5      1   your_image_directory/train_img_dog1.jpg
1000   0   your_image_directory/train_img_cat1.jpg
22     1   your_image_directory/train_img_dog2.jpg
```

예를 들어 훈련 이미지가 `s3://<your_bucket>/train/class_dog`, `s3://<your_bucket>/train/class_cat` 등에 저장된 경우 `train` 채널에 대한 경로를 `s3://<your_bucket>/train`으로 지정합니다. 이는 데이터의 최상위 디렉터리입니다. `.lst` 파일에서 `train_image_dog1.jpg` 클래스 디렉터리의 `class_dog` 파일에 대한 상대 경로를 `class_dog/train_image_dog1.jpg`로 지정합니다. 또한 `train` 디렉터리의 한 하위 디렉터리에 있는 모든 이미지 파일을 저장할 수도 있습니다. 이 경우 상대 경로에 대해 하위 디렉터리를 사용합니다. 예를 들어 `s3://<your_bucket>/train/your_image_directory`입니다.

### 증강 매니페스트 이미지 형식을 사용한 훈련
<a name="IC-augmented-manifest-training"></a>

증강 매니페스트 형식을 사용하면 RecordIO 파일을 생성할 필요 없이 파이프 모드에서 훈련할 수 있습니다. [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청의 `InputDataConfig` 파라미터에 대한 값으로 train 및 validation 채널을 둘 다 지정해야 합니다. 이 형식을 사용하는 동안 이미지와 해당하는 주석으로 구성된 목록이 포함된 S3 매니페스트 파일이 생성되어야 합니다. 매니페스트 파일 형식은 각 행이 샘플 하나를 나타내는 [JSON Lines](http://jsonlines.org/) 형식이어야 합니다. 이미지는 이미지의 S3 위치를 가리키는 `'source-ref'` 태그를 사용하여 지정됩니다. 주석은 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청에서 지정된 대로 `"AttributeNames"` 파라미터 값 아래에 제공됩니다. 또한 `metadata` 태그 아래에 추가 메타데이터가 포함될 수 있지만 이들은 알고리즘에서 무시됩니다. 다음 예제에서 `"AttributeNames"`은 이미지 및 주석 참조 `["source-ref", "class"]`의 목록에 포함됩니다. 해당 레이블 값은 첫 번째 이미지가 `"0"`이고 두 번째 이미지가 `“1”`입니다.

```
{"source-ref":"s3://image/filename1.jpg", "class":"0"}
{"source-ref":"s3://image/filename2.jpg", "class":"1", "class-metadata": {"class-name": "cat", "type" : "groundtruth/image-classification"}}
```

ImageClassification 알고리즘을 훈련할 경우에는 입력 파일의 `"AttributeNames"` 순서가 중요합니다. `image`를 먼저 사용한 다음 `label`를 사용하여 특정 순서로 파이프된 데이터를 허용합니다. 따라서 이 예제의 "AttributeNames"에는 먼저 `"source-ref"`가 제공된 다음 `"class"`가 제공됩니다. ImageClassification 알고리즘을 증강 매니페스트와 함께 사용하는 경우 `RecordWrapperType` 파라미터의 값이 `"RecordIO"`이어야 합니다.

레이블의 JSON 배열을 지정하면 다중 레이블 훈련도 가능합니다. `num_classes` 하이퍼파라미터는 총 클래스 수와 일치하도록 설정해야 합니다. 멀티 핫 형식과 클래스 ID 형식 등 두 가지 유효한 레이블 형식이 있습니다.

멀티 핫 형식에서 각 레이블은 모든 클래스의 다중 핫 인코딩 벡터이며 각 클래스는 0 또는 1 값을 사용합니다. 다음 예제에는 3가지 클래스가 있습니다. 첫 번째 이미지는 클래스 0과 2로 레이블이 지정되고, 두 번째 이미지는는 클래스 2로만 레이블이 지정됩니다.

```
{"image-ref": "s3://amzn-s3-demo-bucket/sample01/image1.jpg", "class": "[1, 0, 1]"}
{"image-ref": "s3://amzn-s3-demo-bucket/sample02/image2.jpg", "class": "[0, 0, 1]"}
```

클래스 ID 형식에서 각 레이블은 데이터 포인트에 적용되는 클래스 ID(0, `num_classes`)의 목록입니다. 앞의 예제는 다음과 같이 보일 수 있습니다.

```
{"image-ref": "s3://amzn-s3-demo-bucket/sample01/image1.jpg", "class": "[0, 2]"}
{"image-ref": "s3://amzn-s3-demo-bucket/sample02/image2.jpg", "class": "[2]"}
```

멀티 핫 형식이 기본값이지만, `label-format` 파라미터를 사용하여 콘텐츠 형식에서 명시적으로 설정할 수 있습니다(`"application/x-recordio; label-format=multi-hot".`). GroundTruth에서 출력된 형식인 클래스 ID 형식은 명시적으로 설정해야 합니다(`"application/x-recordio; label-format=class-id".`).

증강 매니페스트 파일에 대한 추가 정보는 [훈련 작업용 증강 매니페스트 파일](augmented-manifest.md) 섹션을 참조하세요.

### 점진적 훈련
<a name="IC-incremental-training"></a>

또한 이전에 SageMaker AI로 훈련한 모델을 새 모델과 아티팩트의 훈련을 위한 시드로 지정할 수 있습니다. 증분 훈련은 동일하거나 유사한 데이터로 새 모델을 훈련하려는 경우 훈련 시간을 절감시켜 줍니다. SageMaker AI 이미지 분류 모델은 SageMaker AI에서 훈련된 다른 내장 이미지 분류 모델로만 시드될 수 있습니다.

사전 훈련된 모델을 사용하려면 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청에서 `ChannelName`을 `InputDataConfig` 파라미터에 "model"로 지정합니다. model 채널의 `ContentType`을 `application/x-sagemaker-model`로 설정합니다. model 채널에 업로드한 사전 훈련된 모델과 새 모델 둘 다의 입력 하이퍼파라미터는 `num_layers`, `image_shape` 및 `num_classes` 입력 파라미터에 대해 설정이 동일해야 합니다. 이러한 파라미터는 네트워크 아키텍처를 정의합니다. 사전 훈련된 모델 파일의 경우 SageMaker AI의 압축된 모델 아티팩트(.tar.gz 형식) 출력을 사용합니다. 입력 데이터에 RecordIO 또는 이미지 형식을 사용할 수 있습니다.

### 이미지 분류 알고리즘을 이용한 추론
<a name="IC-inference"></a>

생성된 모델은 추론에 대해 호스팅될 수 있고, 인코딩된 `.jpg` 및 `.png` 이미지 형식을 `image/png, image/jpeg` 및 `application/x-image` 콘텐츠 유형으로 지원합니다. 입력 이미지의 크기가 자동으로 조정됩니다. 출력은 JSON 형식 또는 배치 변환을 위한 [JSON Lines 텍스트 형식](http://jsonlines.org/)으로 인코딩된 모든 클래스에 대한 가능성 값입니다. 이미지 분류 모델은 요청당 단일 이미지를 처리하므로 JSON 또는 JSON Lines 형식으로 한 행만 출력합니다. 다음은 JSON Lines 형식의 응답 예제입니다.

```
accept: application/jsonlines

 {"prediction": [prob_0, prob_1, prob_2, prob_3, ...]}
```

훈련 및 추론에 대한 자세한 정보는 소개에서 참조한 이미지 분류 샘플 노트북 인스턴스를 참조하세요.

## Image Classification 알고리즘에 대한 EC2 인스턴스 권장 사항
<a name="IC-instances"></a>

이미지 분류의 경우 P2, P3, G4dn 및 G5 인스턴스를 지원합니다. 배치 크기가 큰 훈련에 대해 메모리가 더 많은 GPU 인스턴스를 사용하는 것이 좋습니다. 또한 분산 훈련을 위해 다중 GPU 및 다중 머신 설정에서 알고리즘을 실행할 수 있습니다. CPU(예: C4) 및 GPU(P2, P3, G4dn 또는 G5) 인스턴스를 모두 추론에 사용할 수 있습니다.

## 이미지 분류 샘플 노트북
<a name="IC-sample-notebooks"></a>

SageMaker AI 이미지 분류 알고리즘을 사용하는 샘플 노트북은 [Build and Register an MXNet Image Classification Model via SageMaker Pipelines](https://github.com/aws-samples/amazon-sagemaker-pipelines-mxnet-image-classification/blob/main/image-classification-sagemaker-pipelines.ipynb)를 참조하세요. SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 이 인스턴스에 액세스하는 방법에 대한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열면 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인할 수 있습니다. 이미지 분류 예제 노트북은 **Introduction to Amazon algorithms(Amazon 알고리즘 소개)** 섹션에 있습니다. 노트북을 열려면 **사용** 탭을 클릭하고 사본 생성을 선택합니다.

# Image Classification 작동 방식
<a name="IC-HowItWorks"></a>

Image Classification 알고리즘은 입력으로 이미지를 가져와 출력 범주 중 하나로 분류합니다. 딥 러닝은 이미지 분류 도메인에 혁신을 가져왔고 뛰어난 성과를 거두었습니다. 정확도가 높은 이미지 분류를 위해 [ResNet](https://arxiv.org/abs/1512.03385), [DenseNet](https://arxiv.org/abs/1608.06993), [Inception](https://arxiv.org/pdf/1409.4842.pdf) 등 다양한 딥 러닝 네트워크가 개발되었습니다. 동시에 이러한 네트워크의 훈련에 필수적인 레이블된 이미지 데이터를 수집하려는 노력도 있었습니다. [ImageNet](https://www.image-net.org/)은 11,000개의 범주와 1,100만 개가 넘는 이미지를 보유한 대량의 데이터 세트입니다. ImageNet 데이터로 네트워크를 훈련하고 나면 이를 사용하고 간편한 미세 조정을 통해 다른 데이터 세트와 일반화할 수 있습니다. 이러한 전이 학습 접근 방식에서 네트워크는 가중치와 함께 초기화(예: ImageNet에서 훈련)되고 다른 데이터 세트에서의 이미지 분류 작업을 위해 미세 조정될 수 있습니다.

Amazon SageMaker AI의 이미지 분류는 전체 훈련과 전이 학습이라는 2가지 모드에서 실행될 수 있습니다. 전체 훈련 모드에서 네트워크는 임의 가중치와 함께 초기화되고 처음부터 사용자 데이터를 통해 교육됩니다. 전이 학습 모드에서 네트워크는 사전 교육된 가중치와 함께 초기화되고 완전히 연결된 계층이 임의 가중치와 함께 초기화됩니다. 그리고 전체 네트워크는 새 데이터를 통해 미세 조정됩니다. 이 모드에서는 더욱 작은 데이터 세트로도 훈련을 완료할 수 있습니다. 네트워크가 이미 훈련되었기 때문에 효율적인 훈련 데이터가 없는 경우에도 사용될 수 있기 때문입니다.

# 이미지 분류 하이퍼파라미터
<a name="IC-Hyperparameter"></a>

하이퍼파라미터는 기계 학습 모델이 학습을 시작하기 전에 설정되는 파라미터입니다. 다음 하이퍼파라미터는 Amazon SageMaker AI 기본 제공 이미지 분류 알고리즘에서 지원됩니다. 이미지 분류 하이퍼파라미터 튜닝에 대한 자세한 내용은 [이미지 분류 모델 튜닝](IC-tuning.md) 섹션을 참조하세요.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| num\$1classes | 출력 클래스의 수. 이 파라미터는 네트워크 출력의 차원을 정의하고 데이터세트의 클래스 수로 설정됩니다. 멀티 클래스 분류 외에도 다중 레이블 분류도 지원됩니다. 보강된 매니페스트 파일을 사용하여 다중 레이블 분류 작업을 수행하는 방법에 대한 자세한 내용은 [Image Classification 알고리즘의 입력/출력 인터페이스](image-classification.md#IC-inputoutput) 섹션을 참조하세요. **필수** 유효한 값: 양수  | 
| num\$1training\$1samples | 입력 데이터 세트의 훈련 예제 수. 이 값과 훈련 세트의 샘플 수가 일치하지 않는 경우 `lr_scheduler_step` 파라미터의 동작이 정의되지 않고 분산 훈련 정확도에 영향을 미칠 수 있습니다. **필수** 유효한 값: 양수  | 
| augmentation\$1type |  데이터 증강 유형. 입력 이미지는 아래 지정된 여러 방법으로 증강될 수 있습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/IC-Hyperparameter.html) **선택 사항**  유효한 값: `crop`, `crop_color` 또는 `crop_color_transform`. 기본값: 기본값 없음  | 
| beta\$11 | `adam`에 대한 beta1로 1차 추정에 대한 지수 감소율입니다. **선택 사항**  유효한 값: 부동 소수점. 범위: [0, 1]. 기본 값: 0.9 | 
| beta\$12 | `adam`에 대한 beta2로 2차 추정에 대한 지수 감소율입니다. **선택 사항**  유효한 값: 부동 소수점. 범위: [0, 1]. 기본값: 0.999 | 
| checkpoint\$1frequency | 모델 파라미터를 저장하는 기간(epoch 횟수). 모든 체크포인트 파일은 최종 모델 파일 “model.tar.gz”의 일부로 저장되고 지정된 모델 위치로 S3에 업로드됩니다. 이렇게 하면 훈련 중에 저장된 체크포인트 수에 비례하여 모델 파일의 크기가 증가합니다. **선택 사항** 유효한 값: `epochs`보다 크기 않은 양의 정수. 기본값: 없음(최고의 유효성 검사 정확도를 가진 epoch에서 체크포인트 저장) | 
| early\$1stopping | `True`이면 훈련 중 조기 중지 로직을 사용하고 `False`이면 사용하지 않습니다. **선택 사항** 유효한 값: `True` 또는 `False` 기본값: `False` | 
| early\$1stopping\$1min\$1epochs | 조기 중지 로직을 호출하기 전에 실행해야 할 최소 epoch 수. `early_stopping`이 `True`인 경우에만 사용됩니다. **선택 사항** 유효한 값: 양수 기본값: 10 | 
| early\$1stopping\$1patience | 상대적 지표에서 개선 사항이 없는 경우 훈련 완료 전에 대기하는 epoch의 수. `early_stopping`이 `True`인 경우에만 사용됩니다. **선택 사항** 유효한 값: 양수 기본값: 5 | 
| early\$1stopping\$1tolerance | 정확도 검증 지표의 개선을 측정하는 상대 공차. 이전 최적 정확도로 나눈 정확도의 개선율이 설정된 `early_stopping_tolerance` 값보다 작은 경우 조기 중지 시 개선되지 않은 것으로 간주합니다. `early_stopping`이 `True`인 경우에만 사용됩니다. **선택 사항** 유효한 값: 0 ≤ 부동 소수점 ≤ 1 기본 값: 0.0 | 
| epochs | 훈련 epoch의 수. **선택 사항** 유효한 값: 양수 기본값: 30 | 
| eps | `adam` 및 `rmsprop`에 대한 엡실론. 0으로 나누기를 방지하는 작은 값으로 주로 설정됩니다. **선택 사항** 유효한 값: 부동 소수점. 범위: [0, 1]. 기본값: 1e-8 | 
| gamma | `rmsprop`에 대한 gamma, 기울기 제곱의 이동 평균에 대한 감소 요소. **선택 사항** 유효한 값: 부동 소수점. 범위: [0, 1]. 기본 값: 0.9 | 
| image\$1shape | 입력 이미지 차원으로 네트워크의 입력 계층과 동일한 크기입니다. 형식은 '`num_channels`, height, width'로 정의됩니다. 이미지 차원은 모든 값을 가져올 수 있고 네트워크는 입력의 다양한 차원을 처리할 수 있습니다. 하지만 크기가 큰 이미지 차원 를 사용하는 경우 메모리 제약이 있을 수 있습니다. 사전 훈련된 모델은 224 x 224로 고정된 이미지 크기만 사용할 수 있습니다. 이미지 분류에 대한 일반적 이미지 차원은 '3,224,224'입니다. 이는 ImageNet 데이터 세트와 유사합니다. 훈련의 경우 어떤 차원에서든 입력 이미지가 이 파라미터보다 작으면 훈련이 실패합니다. 이미지가 더 크면 이 파라미터로 지정된 영역만큼 이미지의 일부가 잘립니다. `augmentation_type` 하이퍼파라미터가 설정된 경우 무작위 잘라내기가 수행되고, 그렇지 않으면 중앙 잘라내기가 수행됩니다. 추론 시 입력 이미지는 훈련 중에 사용된 `image_shape` 크기로 조정됩니다. 가로 세로 비율은 유지되지 않으며 이미지는 잘리지 않습니다. **선택 사항** 유효한 값: 문자열 기본값: ‘3,224,224’ | 
| kv\$1store |  분산 훈련 도중 가중치 업데이트 동기화 모드. 가중치 업데이트는 머신에 걸쳐 동기식 또는 비동기식으로 업데이트될 수 있습니다. 동기식 업데이트는 일반적으로 비동기식 업데이트보다 더 높은 정확도를 제공하지만 속도가 느릴 수 있습니다. 자세한 정보는 MXNet 분산 훈련을 참조하세요. 이 파라미터는 단일 머신 훈련에 해당되지 않습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/IC-Hyperparameter.html) **선택 사항** 유효한 값: `dist_sync` 또는 `dist_async` 기본값: 기본값 없음  | 
| learning\$1rate | 초기 학습률. **선택 사항** 유효한 값: 부동 소수점. 범위: [0, 1]. 기본값: 0.1 | 
| lr\$1scheduler\$1factor | `lr_scheduler_step` 파라미터와 결합하여 사용되는 학습률 절감 비율로 `lr_new` = `lr_old` \$1 `lr_scheduler_factor`로 정의됩니다. **선택 사항** 유효한 값: 부동 소수점. 범위: [0, 1]. 기본값: 0.1 | 
| lr\$1scheduler\$1step | 학습률이 감소하는 epoch. `lr_scheduler_factor` 파라미터의 설명과 같이 학습률은 이러한 epoch에서 `lr_scheduler_factor`만큼 감소합니다. 예를 들어 값이 "10, 20"으로 설정된 경우 학습률은 10번째 epoch 이후 `lr_scheduler_factor`만큼 감소하고, 20번째 epoch 이후 `lr_scheduler_factor`만큼 다시 감소합니다. epoch은 ","로 구분됩니다. **선택 사항** 유효한 값: 문자열 기본값: 기본값 없음 | 
| mini\$1batch\$1size | 훈련용 배치 크기. 단일 머신 다중 GPU 설정에서 각 GPU는 `mini_batch_size`/num\$1gpu 훈련 샘플을 처리합니다. dist\$1sync 모드의 다중 머신 훈련의 경우 실제 배치(batch) 크기는 `mini_batch_size`\$1머신의 수입니다. 자세한 정보는 MXNet 설명서를 참조하세요. **선택 사항** 유효한 값: 양수 기본 값: 32 | 
| momentum | `sgd` 및 `nag`에 대한 모멘텀(다른 옵티마이저의 경우 무시됨) **선택 사항** 유효한 값: 부동 소수점. 범위: [0, 1]. 기본 값: 0.9 | 
| multi\$1label |  각 샘플에 여러 레이블을 할당할 수 있는 다중 레이블 분류에 사용하도록 하는 플래그. 모든 클래스의 평균 정확도가 기록됩니다. **선택 사항** 유효한 값: 0 또는 1 기본값: 0  | 
| num\$1layers | 네트워크에 대한 계층 수. 이미지 크기가 큰 데이터(예: 224x224, ImageNet)의 경우 세트의 계층 수를 [18, 34, 50, 101, 152, 200]으로 선택하는 것이 좋습니다. 이미지 크기가 작은 데이터(예: 28x28, CIFAR)의 경우 세트의 계층 수를 [20, 32, 44, 56, 110]으로 선택하는 것이 좋습니다. ResNet 백서를 기반으로 한 각 세트의 계층 수. 전이 학습의 경우 계층의 수는 기본 네트워크의 아키텍처를 정의하고 이런 이유로 [18, 34, 50, 101, 152, 200]으로만 선택할 수 있습니다. **선택 사항** 유효한 값: [18, 34, 50, 101, 152, 200] 또는 [20, 32, 44, 56, 110]의 양의 정수 기본값: 152 | 
| optimizer | 옵티마이저 유형. 옵티마이저의 파라미터에 대한 자세한 정보는 MXNet의 API를 참조하세요. **선택 사항** 유효한 값: `sgd`, `adam`, `rmsprop` 또는 `nag` 중 하나 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/IC-Hyperparameter.html) 기본값: `sgd` | 
| precision\$1dtype | 훈련에 사용되는 가중치의 정밀도. 이 알고리즘은 가중치에 단일 정밀도(`float32`) 또는 반정밀도(`float16`)를 사용할 수 있습니다. 가중치에 반정밀도를 사용하면 메모리 사용량이 줄어듭니다. **선택 사항** 유효한 값: `float32` 또는 `float16` 기본값: `float32` | 
| resize | 훈련을 위해 크기를 조정한 후 이미지의 가장 짧은 면에 있는 픽셀 수입니다. 이 파라미터가 설정되지 않은 경우 크기 조정 없이 훈련 데이터가 사용됩니다. 훈련 실패를 방지하려면 파라미터가 `image_shape`의 너비와 높이 구성요소 모두보다 커야 합니다. 이미지 콘텐츠 유형을 사용하는 경우 **필수** RecordIO 콘텐츠 형식을 사용하는 경우 **선택 사항** 유효한 값: 양수 기본값: 기본값 없음  | 
| top\$1k | 훈련 중 top-k 정확도를 보고합니다. 이 파라미터는 1보다 커야 합니다. top-1 훈련 정확도가 이미 보고된 정기 훈련 정확도와 동일하기 때문입니다. **선택 사항** 유효한 값: 1보다 큰 양의 정수. 기본값: 기본값 없음 | 
| use\$1pretrained\$1model | 훈련에 사전 훈련 모델을 사용하도록 하는 플래그. 1로 설정된 경우 해당 계층 수를 가진 사전 훈련 모델이 로드되고 훈련에 사용됩니다. 최상위 FC 계층만이 임의 가중치로 다시 초기화됩니다. 그렇지 않은 경우 네트워크는 처음부터 교육됩니다. **선택 사항** 유효한 값: 0 또는 1 기본값: 0 | 
| use\$1weighted\$1loss |  다중 레이블 분류에 가중치 기반 교차 엔트로피 손실을 사용하도록 하는 플래그(`multi_label` = 1인 경우에만 사용됨). 여기서 가중치는 클래스 배포를 기반으로 계산됩니다. **선택 사항** 유효한 값: 0 또는 1 기본값: 0  | 
| weight\$1decay | `sgd` 및 `nag`에 대한 계수 가중치 감소(다른 옵티마이저의 경우 무시됨) **선택 사항** 유효한 값: 부동 소수점. 범위: [0, 1]. 기본값: 0.0001 | 

# 이미지 분류 모델 튜닝
<a name="IC-tuning"></a>

하이퍼파라미터 튜닝이라고도 하는 자동 모델 튜닝은 데이터세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 알고리즘에서 계산하는 지표 중에서 목표 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 목표 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## Image Classification 알고리즘으로 계산되는 지표
<a name="IC-metrics"></a>

Image Classification 알고리즘은 지도 알고리즘으로, 훈련 중 계산되는 정확도 지표를 보고합니다. 모델을 튜닝하는 경우 이 지표를 목표 지표로 선택합니다.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| validation:accuracy | 올바른 예측 수 대 총 예측 수의 비율입니다. | 최대화 | 

## 튜닝 가능한 이미지 분류 하이퍼파라미터
<a name="IC-tunable-hyperparameters"></a>

다음 하이퍼파라미터를 사용하여 이미지 분류 모델을 튜닝합니다. 이미지 분류 목표 지표에 가장 큰 영향을 미치는 하이퍼파라미터는 `mini_batch_size`, `learning_rate` 및 `optimizer`입니다. 선택한 `optimizer`를 기반으로 옵티마이저 관련 하이퍼파라미터(예: `momentum`, `weight_decay`, `beta_1`, `beta_2`, `eps` 및 `gamma`)를 튜닝합니다. 예를 들어, `adam`이 `optimizer`인 경우에만 `beta_1` 및 `beta_2`를 사용합니다.

각 옵티마이저에서 사용되는 하이퍼파라미터에 대한 자세한 정보는 [이미지 분류 하이퍼파라미터](IC-Hyperparameter.md) 섹션을 참조하세요.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| beta\$11 | ContinuousParameterRanges | MinValue: 1e-6, MaxValue: 0.999 | 
| beta\$12 | ContinuousParameterRanges | MinValue: 1e-6, MaxValue: 0.999 | 
| eps | ContinuousParameterRanges | MinValue: 1e-8, MaxValue: 1.0 | 
| gamma | ContinuousParameterRanges | MinValue: 1e-8, MaxValue: 0.999 | 
| learning\$1rate | ContinuousParameterRanges | MinValue: 1e-6, MaxValue: 0.5 | 
| mini\$1batch\$1size | IntegerParameterRanges | MinValue: 8, MaxValue: 512 | 
| momentum | ContinuousParameterRanges | MinValue: 0.0, MaxValue: 0.999 | 
| optimizer | CategoricalParameterRanges | ['sgd', ‘adam’, ‘rmsprop’, 'nag'] | 
| weight\$1decay | ContinuousParameterRanges | MinValue: 0.0, MaxValue: 0.999 | 

# 이미지 분류 - TensorFlow
<a name="image-classification-tensorflow"></a>

[Amazon SageMaker 이미지 분류 - TensorFlow 알고리즘은 TensorFlow Hub](https://tfhub.dev/s?fine-tunable=yes&module-type=image-classification&subtype=module,placeholder&tf-version=tf2)에서 사전 훈련된 여러 모델을 사용하여 전이 학습을 지원하는 지도 학습 알고리즘입니다. 대량의 이미지 데이터를 사용할 수 없는 경우에도 전이 학습을 사용하여 자체 데이터세트에서 사용 가능한 사전 훈련된 모델 중 하나를 미세 조정할 수 있습니다. 이미지 분류 알고리즘은 이미지를 입력으로 받아 제공된 각 클래스 레이블에 대한 확률을 출력합니다. 훈련 데이터세트는 .jpg, .jpeg 또는.png 형식의 이미지로 구성되어야 합니다. 이 페이지에는 Amazon EC2 인스턴스 권장 사항 및 이미지 분류 - TensorFlow용 샘플 노트북에 대한 정보가 포함되어 있습니다.

**Topics**
+ [SageMaker 이미지 분류 사용 방법 - TensorFlow 알고리즘](IC-TF-how-to-use.md)
+ [이미지 분류 - TensorFlow 알고리즘의 입력/출력 인터페이스](IC-TF-inputoutput.md)
+ [이미지 분류 - TensorFlow 알고리즘에 대한 Amazon EC2 인스턴스 권장 사항](#IC-TF-instances)
+ [이미지 분류 - TensorFlow 샘플 노트북](#IC-TF-sample-notebooks)
+ [이미지 분류 - TensorFlow 작동 방식](IC-TF-HowItWorks.md)
+ [TensorFlow Hub 모델](IC-TF-Models.md)
+ [이미지 분류 - 텐서플로우 하이퍼파라미터](IC-TF-Hyperparameter.md)
+ [이미지 분류 - TensorFlow 모델 튜닝](IC-TF-tuning.md)

# SageMaker 이미지 분류 사용 방법 - TensorFlow 알고리즘
<a name="IC-TF-how-to-use"></a>

이미지 분류 - TensorFlow를 Amazon SageMaker AI 기본 제공 알고리즘으로 사용할 수 있습니다. 다음 섹션에서는 SageMaker AI Python SDK와 함께 이미지 분류 - TensorFlow를 사용하는 방법을 설명합니다. Amazon SageMaker Studio Classic UI에서 이미지 분류 - TensorFlow를 사용하는 방법에 대한 자세한 내용은 [SageMaker JumpStart 사전 훈련된 모델](studio-jumpstart.md) 섹션을 참조하세요.

이미지 분류 - TensorFlow 알고리즘은 호환되는 사전 훈련된 TensorFlow Hub 모델을 사용하여 전이 학습을 지원합니다. 사용 가능한 모든 사전 훈련된 모델의 목록은 [TensorFlow Hub 모델](IC-TF-Models.md) 섹션을 참조하세요. 모든 사전 훈련된 모델은 고유한 `model_id`를 가집니다. 다음 예제에서는 MobileNet V2 1.00 224(`model_id`:`tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4`)를 사용하여 사용자 지정 데이터세트를 미세 조정합니다. 사전 훈련된 모델은 모두 TensorFlow Hub에서 사전 다운로드되고 Amazon S3 버킷에 저장되므로 훈련 작업을 네트워크 격리 상태에서 실행할 수 있습니다. 이처럼 사전 생성된 모델 훈련 아티팩트를 사용하여 SageMaker AI Estimator를 구문화합니다.

먼저 도커 이미지 URI, 훈련 스크립트 URI, 사전 훈련 모델 URI를 검색하세요. 그런 다음 상황에 맞게 하이퍼파라미터를 변경하세요. `hyperparameters.retrieve_default`를 사용하면 모든 가용 하이퍼파라미터와 해당 하이퍼파라미터의 기본값으로 구성된 Python 사전을 볼 수 있습니다. 자세한 내용은 [이미지 분류 - 텐서플로우 하이퍼파라미터](IC-TF-Hyperparameter.md) 단원을 참조하십시오. 이 값들을 사용하여 SageMaker AI Estimator를 구문화합니다.

**참고**  
하이퍼파라미터의 기본값은 모델마다 다릅니다. 대형 모델의 경우 기본 배치 크기가 더 작고 `train_only_top_layer` 하이퍼파라미터는 `"True"`로 설정됩니다.

이 예제에서는 다섯 개의 꽃 이미지 클래스가 포함된 [https://www.tensorflow.org/datasets/catalog/tf_flowers](https://www.tensorflow.org/datasets/catalog/tf_flowers) 데이터세트를 사용합니다. TensorFlow에서 Apache 2.0 라이선스에 따라 데이터세트를 사전 다운로드하고 Amazon S3에서 사용할 수 있도록 했습니다. 모델을 미세 조정하려면 훈련 데이터세트의 Amazon S3 위치를 사용하여 `.fit`을 호출하세요.

```
from sagemaker import image_uris, model_uris, script_uris, hyperparameters
from sagemaker.estimator import Estimator

model_id, model_version = "tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4", "*"
training_instance_type = "ml.p3.2xlarge"

# Retrieve the Docker image
train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None)

# Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training")

# Retrieve the pretrained model tarball for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)

# [Optional] Override default hyperparameters with custom values
hyperparameters["epochs"] = "5"

# The sample training data is available in the following S3 bucket
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/tf_flowers/"

training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"

output_bucket = sess.default_bucket()
output_prefix = "jumpstart-example-ic-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

# Create SageMaker Estimator instance
tf_ic_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,
)

# Use S3 path of the training data to launch SageMaker TrainingJob
tf_ic_estimator.fit({"training": training_dataset_s3_path}, logs=True)
```

# 이미지 분류 - TensorFlow 알고리즘의 입력/출력 인터페이스
<a name="IC-TF-inputoutput"></a>

TensorFlow Hub 모델에 나열된 사전 훈련된 각 모델은 이미지 클래스의 개수에 관계없이 모든 데이터세트에 맞게 미세 조정할 수 있습니다. 이미지 분류 - TensorFlow 모델에 입력하기 위해 훈련 데이터의 형식을 지정하는 방법에 유의하세요.
+ **훈련 데이터 입력 형식:** 훈련 데이터는 클래스 개수만큼 많은 하위 디렉터리가 있는 디렉터리여야 합니다. 각 하위 디렉터리에는 해당 클래스에 속하는 이미지가 .jpg, .jpeg 또는.png 형식으로 포함되어야 합니다.

다음은 입력 디렉터리 구조의 예제입니다. 이 예제 데이터세트에는 `roses` 및 `dandelion`이라는 두 개의 클래스가 있습니다. 각 클래스 폴더의 이미지 파일 이름은 임의로 지정할 수 있습니다. 입력 디렉터리는 `s3://bucket_name/input_directory/`와 비슷한 경로를 가진 Amazon S3 버킷에 호스팅되어야 합니다. 단, 후행 `/`는 필수입니다.

```
input_directory
    |--roses
        |--abc.jpg
        |--def.jpg
    |--dandelion
        |--ghi.jpg
        |--jkl.jpg
```

훈련된 모델은 클래스 폴더 이름을 출력 클래스 확률 목록의 인덱스에 매핑하는 레이블 매핑 파일을 출력합니다. 매핑은 알파벳 순서로 표시됩니다. 예를 들어, 위 예제에서 dandelion 클래스는 인덱스 0이고 roses 클래스는 인덱스 1입니다.

훈련 후에는 증분 훈련을 사용하여 추가로 훈련하거나 추론을 위해 배포할 수 있는 미세 조정된 모델을 갖게 됩니다. 이미지 분류 - TensorFlow 알고리즘은 미세 조정된 모델에 전처리 및 후처리 서명을 자동으로 추가하여 이미지를 입력으로 받고 클래스 확률을 반환할 수 있습니다. 클래스 인덱스를 클래스 레이블에 매핑하는 파일은 모델과 함께 저장됩니다.

## 증분 훈련
<a name="IC-TF-incremental-training"></a>

이전에 SageMaker AI로 훈련시킨 모델의 아티팩트를 새 모델의 훈련을 위한 시드로 지정할 수 있습니다. 증분 훈련은 동일하거나 유사한 데이터로 새 모델을 훈련하려는 경우 훈련 시간을 절감시켜 줍니다.

**참고**  
SageMaker 이미지 분류 - TensorFlow 모델을 SageMaker AI에서 훈련한 다른 이미지 분류 - TensorFlow 모델에만 시드할 수 있습니다.

클래스 세트가 동일하게 유지되는 한 어떤 데이터세트라도 증분 훈련에 사용할 수 있습니다. 증분 훈련 단계는 미세 조정 단계와 비슷하지만, 사전 훈련 모델로 시작되는 대신 기존의 미세 조정 모델로 시작됩니다. SageMaker AI 이미지 분류 - TensorFlow 알고리즘을 사용한 증분 훈련의 예는 [Introduction to SageMaker TensorFlow - Image Classification](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/image_classification_tensorflow/Amazon_TensorFlow_Image_Classification.ipynb) 샘플 노트북을 참조하세요.

## 이미지 분류 - TensorFlow 알고리즘을 이용한 추론
<a name="IC-TF-inference"></a>

추론을 위한 TensorFlow 이미지 분류 훈련의 결과로 미세 조정된 모델을 호스팅할 수 있습니다. 추론을 위한 모든 입력 이미지는 `.jpg`, `jpeg` 또는 `.png` 형식이어야 하며 콘텐츠 유형 `application/x-image`이어야 합니다. 이미지 분류 - TensorFlow 알고리즘은 입력 이미지의 크기를 자동으로 조정합니다.

추론을 실행하면 확률 값, 모든 클래스의 클래스 레이블, 그리고 가장 확률이 높은 클래스 인덱스에 해당하는 예측 레이블이 JSON 형식으로 인코딩됩니다. 이미지 분류 - TensorFlow 모델은 요청당 단일 이미지를 처리하므로 한 줄만 출력합니다. 다음은 JSON 형식 응답 예제입니다.

```
accept: application/json;verbose

 {"probabilities": [prob_0, prob_1, prob_2, ...],
  "labels":        [label_0, label_1, label_2, ...],
  "predicted_label": predicted_label}
```

`accept`가 `application/json`으로 설정된 경우 모델은 확률만 출력합니다. 이미지 분류 - TensorFlow 알고리즘을 사용한 훈련 및 추론의 자세한 내용은 [SageMaker TensorFlow - 이미지 분류 소개](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/image_classification_tensorflow/Amazon_TensorFlow_Image_Classification.ipynb) 샘플 노트북을 참조하세요.

## 이미지 분류 - TensorFlow 알고리즘에 대한 Amazon EC2 인스턴스 권장 사항
<a name="IC-TF-instances"></a>

이미지 분류 - TensorFlow 알고리즘은 다음을 포함하여 훈련을 위한 모든 CPU 및 GPU 인스턴스를 지원합니다.
+ `ml.p2.xlarge`
+ `ml.p2.16xlarge`
+ `ml.p3.2xlarge`
+ `ml.p3.16xlarge`
+ `ml.g4dn.xlarge`
+ `ml.g4dn.16.xlarge`
+ `ml.g5.xlarge`
+ `ml.g5.48xlarge`

배치 크기가 큰 훈련에 대해 메모리가 더 많은 GPU 인스턴스를 사용하는 것이 좋습니다. CPU(예: M5) 및 GPU(P2, P3, G4dn 또는 G5) 인스턴스를 모두 추론에 사용할 수 있습니다.

## 이미지 분류 - TensorFlow 샘플 노트북
<a name="IC-TF-sample-notebooks"></a>

사용자 지정 데이터세트에서 전이 학습을 위해 이미지 분류 - TensorFlow 알고리즘을 사용하는 방법에 대한 자세한 내용은 [SageMaker TensorFlow - 이미지 분류 소개](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/image_classification_tensorflow/Amazon_TensorFlow_Image_Classification.ipynb) 노트북을 참조하세요.

SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 이 인스턴스에 액세스하는 방법에 대한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만들고 연 후에는 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플의 목록을 확인합니다. 노트북을 열려면 **사용** 탭을 선택한 후 **사본 생성**을 선택합니다.

# 이미지 분류 - TensorFlow 작동 방식
<a name="IC-TF-HowItWorks"></a>

이미지 분류 - TensorFlow 알고리즘은 입력으로 이미지를 가져와 출력 클래스 레이블 중 하나로 분류합니다. MobileNet, ResNet, Inception 및 EfficientNet과 같은 다양한 딥 러닝 네트워크는 이미지 분류의 정확도가 매우 높습니다. 1,100만 개 이상의 이미지와 거의 11,000개의 클래스가 있는 ImageNet과 같이 대규모 이미지 데이터세트를 기반으로 훈련되는 딥 러닝 네트워크도 있습니다. ImageNet 데이터로 네트워크를 훈련시킨 후에는 특정 초점을 맞춘 데이터세트에서 네트워크를 미세 조정하여 보다 구체적인 분류 작업을 수행할 수 있습니다. Amazon SageMaker 이미지 분류 - TensorFlow 알고리즘은 TensorFlow Hub에서 사용할 수 있는 많은 사전 훈련된 모델에 대한 전이 학습을 지원합니다.

훈련 데이터의 클래스 레이블 수에 따라 선택한 사전 훈련된 TensorFlow Hub 모델에 분류 계층이 연결됩니다. 분류 계층은 드롭아웃 계층, 고밀도 계층, 임의 가중치로 초기화되는 2-norm regularizer가 있는 완전 연결 계층으로 구성됩니다. 이 모델에는 드롭아웃 계층의 드롭아웃 비율에 대한 하이퍼파라미터와 고밀도 계층의 L2 정규화 인자가 있습니다. 그러면 전체 네트워크(사전 훈련된 모델 포함)를 미세 조정하거나 새 훈련 데이터의 상위 분류 계층만 미세 조정할 수 있습니다. 이 전이 학습 방법을 사용하면 더 작은 데이터세트로 훈련할 수 있습니다.

# TensorFlow Hub 모델
<a name="IC-TF-Models"></a>

다음과 같은 사전 훈련된 모델을 이미지 분류 - TensorFlow 알고리즘과 함께 전이 학습에 사용할 수 있습니다.

다음 모델은 주어진 데이터세트의 크기, 모델 파라미터 수, 훈련 시간, 추론 지연 시간이 크게 다릅니다. 사용 사례에 가장 적합한 모델은 미세 조정 데이터세트의 복잡도와 훈련 시간, 추론 지연 시간 또는 모델 정확도 관련 요건에 따라 달라집니다.


| 모델 이름 | `model_id` | 소스 | 
| --- | --- | --- | 
| MobileNet V2 1.00 224 | `tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v2_100_224/classification/4) | 
| MobileNet V2 0.75 224 | `tensorflow-ic-imagenet-mobilenet-v2-075-224-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v2_075_224/classification/4) | 
| MobileNet V2 0.50 224 | `tensorflow-ic-imagenet-mobilenet-v2-050-224-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v2_050_224/classification/4) | 
| MobileNet V2 0.35 224 | `tensorflow-ic-imagenet-mobilenet-v2-035-224-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v2_035_224/classification/4) | 
| MobileNet V2 1.40 224 | `tensorflow-ic-imagenet-mobilenet-v2-140-224-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v2_140_224/classification/4) | 
| MobileNet V2 1.30 224 | `tensorflow-ic-imagenet-mobilenet-v2-130-224-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v2_130_224/classification/4) | 
| MobileNet V2 | `tensorflow-ic-tf2-preview-mobilenet-v2-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/tf2-preview/mobilenet_v2/classification/4) | 
| Inception V3 | `tensorflow-ic-imagenet-inception-v3-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/inception_v3/classification/4) | 
| Inception V2 | `tensorflow-ic-imagenet-inception-v2-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/inception_v2/classification/4) | 
| Inception V1 | `tensorflow-ic-imagenet-inception-v1-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/inception_v1/classification/4) | 
| Inception V3 Preview | `tensorflow-ic-tf2-preview-inception-v3-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/tf2-preview/inception_v3/classification/4) | 
| Inception ResNet V2 | `tensorflow-ic-imagenet-inception-resnet-v2-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/inception_resnet_v2/classification/4) | 
| ResNet V2 50 | `tensorflow-ic-imagenet-resnet-v2-50-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/resnet_v2_50/classification/4) | 
| ResNet V2 101 | `tensorflow-ic-imagenet-resnet-v2-101-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/resnet_v2_101/classification/4) | 
| ResNet V2 152 | `tensorflow-ic-imagenet-resnet-v2-152-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/resnet_v2_152/classification/4) | 
| ResNet V1 50 | `tensorflow-ic-imagenet-resnet-v1-50-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/resnet_v1_50/classification/4) | 
| ResNet V1 101 | `tensorflow-ic-imagenet-resnet-v1-101-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/resnet_v1_101/classification/4) | 
| ResNet V1 152 | `tensorflow-ic-imagenet-resnet-v1-152-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/resnet_v1_152/classification/4) | 
| ResNet 50 | `tensorflow-ic-imagenet-resnet-50-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/resnet_50/classification/1) | 
| EfficientNet B0 | `tensorflow-ic-efficientnet-b0-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/efficientnet/b0/classification/1) | 
| EfficientNet B1 | `tensorflow-ic-efficientnet-b1-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/efficientnet/b1/classification/1) | 
| EfficientNet B2 | `tensorflow-ic-efficientnet-b2-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/efficientnet/b2/classification/1) | 
| EfficientNet B3 | `tensorflow-ic-efficientnet-b3-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/efficientnet/b3/classification/1) | 
| EfficientNet B4 | `tensorflow-ic-efficientnet-b4-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/efficientnet/b4/classification/1) | 
| EfficientNet B5 | `tensorflow-ic-efficientnet-b5-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/efficientnet/b5/classification/1) | 
| EfficientNet B6 | `tensorflow-ic-efficientnet-b6-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/efficientnet/b6/classification/1) | 
| EfficientNet B7 | `tensorflow-ic-efficientnet-b7-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/efficientnet/b7/classification/1) | 
| EfficientNet B0 Lite | `tensorflow-ic-efficientnet-lite0-classification-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/efficientnet/lite0/classification/2) | 
| EfficientNet B1 Lite | `tensorflow-ic-efficientnet-lite1-classification-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/efficientnet/lite1/classification/2) | 
| EfficientNet B2 Lite | `tensorflow-ic-efficientnet-lite2-classification-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/efficientnet/lite2/classification/2) | 
| EfficientNet B3 Lite | `tensorflow-ic-efficientnet-lite3-classification-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/efficientnet/lite3/classification/2) | 
| EfficientNet B4 Lite | `tensorflow-ic-efficientnet-lite4-classification-2` | [TensorFlow Hub 링크](https://tfhub.dev/tensorflow/efficientnet/lite4/classification/2) | 
| MobileNet V1 1.00 224 | `tensorflow-ic-imagenet-mobilenet-v1-100-224-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v1_100_224/classification/4) | 
| MobileNet V1 1.00 192 | `tensorflow-ic-imagenet-mobilenet-v1-100-192-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v1_100_192/classification/4) | 
| MobileNet V1 1.00 160 | `tensorflow-ic-imagenet-mobilenet-v1-100-160-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v1_100_160/classification/4) | 
| MobileNet V1 1.00 128 | `tensorflow-ic-imagenet-mobilenet-v1-100-128-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v1_100_128/classification/4) | 
| MobileNet V1 0.75 224 | `tensorflow-ic-imagenet-mobilenet-v1-075-224-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v1_075_224/classification/4) | 
| MobileNet V1 0.75 192 | `tensorflow-ic-imagenet-mobilenet-v1-075-192-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v1_075_192/classification/4) | 
| MobileNet V1 0.75 160 | `tensorflow-ic-imagenet-mobilenet-v1-075-160-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v1_075_160/classification/4) | 
| MobileNet V1 0.75 128 | `tensorflow-ic-imagenet-mobilenet-v1-075-128-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v1_075_128/classification/4) | 
| MobileNet V1 0.50 224 | `tensorflow-ic-imagenet-mobilenet-v1-050-224-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v1_050_224/classification/4) | 
| MobileNet V1 0.50 192 | `tensorflow-ic-imagenet-mobilenet-v1-050-192-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v1_050_192/classification/4) | 
| MobileNet V1 1.00 160 | `tensorflow-ic-imagenet-mobilenet-v1-050-160-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v1_050_160/classification/4) | 
| MobileNet V1 0.50 128 | `tensorflow-ic-imagenet-mobilenet-v1-050-128-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v1_050_128/classification/4) | 
| MobileNet V1 0.25 224 | `tensorflow-ic-imagenet-mobilenet-v1-025-224-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v1_025_224/classification/4) | 
| MobileNet V1 0.25 192 | `tensorflow-ic-imagenet-mobilenet-v1-025-192-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v1_025_192/classification/4) | 
| MobileNet V1 0.25 160 | `tensorflow-ic-imagenet-mobilenet-v1-025-160-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v1_025_160/classification/4) | 
| MobileNet V1 0.25 128 | `tensorflow-ic-imagenet-mobilenet-v1-025-128-classification-4` | [TensorFlow Hub 링크](https://tfhub.dev/google/imagenet/mobilenet_v1_025_128/classification/4) | 
| BiT-S R50x1 | `tensorflow-ic-bit-s-r50x1-ilsvrc2012-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/bit/s-r50x1/ilsvrc2012_classification/1) | 
| BiT-S R50x3 | `tensorflow-ic-bit-s-r50x3-ilsvrc2012-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/bit/s-r50x3/ilsvrc2012_classification/1) | 
| BiT-S R101x1 | `tensorflow-ic-bit-s-r101x1-ilsvrc2012-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/bit/s-r101x1/ilsvrc2012_classification/1) | 
| BiT-S R101x3 | `tensorflow-ic-bit-s-r101x3-ilsvrc2012-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/bit/s-r101x3/ilsvrc2012_classification/1) | 
| BiT-M R50x1 | `tensorflow-ic-bit-m-r50x1-ilsvrc2012-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/bit/m-r50x1/ilsvrc2012_classification/1) | 
| BiT-M R50x3 | `tensorflow-ic-bit-m-r50x3-ilsvrc2012-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/bit/m-r50x3/ilsvrc2012_classification/1) | 
| BiT-M R101x1 | `tensorflow-ic-bit-m-r101x1-ilsvrc2012-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/bit/m-r101x1/ilsvrc2012_classification/1) | 
| BiT-M R101x3 | `tensorflow-ic-bit-m-r101x3-ilsvrc2012-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/bit/m-r101x3/ilsvrc2012_classification/1) | 
| BiT-M R50x1 ImageNet-21k | `tensorflow-ic-bit-m-r50x1-imagenet21k-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/bit/m-r50x1/imagenet21k_classification/1) | 
| BiT-M R50x3 ImageNet-21k | `tensorflow-ic-bit-m-r50x3-imagenet21k-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/bit/m-r50x3/imagenet21k_classification/1) | 
| BiT-M R101x1 ImageNet-21k | `tensorflow-ic-bit-m-r101x1-imagenet21k-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/bit/m-r101x1/imagenet21k_classification/1) | 
| BiT-M R101x3 ImageNet-21k | `tensorflow-ic-bit-m-r101x3-imagenet21k-classification-1` | [TensorFlow Hub 링크](https://tfhub.dev/google/bit/m-r101x3/imagenet21k_classification/1) | 

# 이미지 분류 - 텐서플로우 하이퍼파라미터
<a name="IC-TF-Hyperparameter"></a>

하이퍼파라미터는 기계 학습 모델이 학습을 시작하기 전에 설정되는 파라미터입니다. 다음 하이퍼파라미터는 Amazon SageMaker AI 기본 제공 이미지 분류 - TensorFlow 알고리즘에서 지원됩니다. 하이퍼파라미터 튜닝 관련 정보는 [이미지 분류 - TensorFlow 모델 튜닝](IC-TF-tuning.md) 섹션을 참조하세요.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| augmentation |  `augmentation_random_flip`, `augmentation_random_rotation` 및 `augmentation_random_zoom`을 훈련 데이터에 적용하기 위해 `"True"`로 설정합니다. 유효한 값: 문자열, 다음 중 하나: (`"True"` 또는 `"False"`). 기본값: `"False"`.  | 
| augmentation\$1random\$1flip |  `augmentation`이 `"True"`로 설정된 경우 데이터 증대에 사용할 플립 모드를 나타냅니다. 자세한 내용은 TensorFlow 설명서에서 [RandomFlip](https://www.tensorflow.org/api_docs/python/tf/keras/layers/RandomFlip)을 참조하세요. 유효한 값: 문자열, 다음 중 하나: (`"horizontal_and_vertical"`, `"vertical"` 또는 `"None"`). 기본값: `"horizontal_and_vertical"`.  | 
| augmentation\$1random\$1rotation |  `augmentation`이 `"True"`로 설정된 경우 데이터 증강에 사용할 회전량을 나타냅니다. 값은 2π의 일부를 나타냅니다. 양수 값은 시계 반대 방향으로 회전하고 음수 값은 시계 방향으로 회전합니다. `0`은 회전이 없음을 의미합니다. 자세한 내용은 TensorFlow 설명서에서 [RandomRotation](https://www.tensorflow.org/api_docs/python/tf/keras/layers/RandomRotation)을 참조하세요. 유효한 값: 부동 소수점, 범위: [`-1.0`, `1.0`]. 기본값: `0.2`.  | 
| augmentation\$1random\$1zoom |  `augmentation`이 `"True"`로 설정된 경우 데이터 증강에 사용할 세로 줌의 정도를 나타냅니다. 양수 값은 축소되고 음수 값은 확대됩니다. `0`은 확대/축소가 없음을 의미합니다. 자세한 내용은 TensorFlow 설명서의 [RandomZoom](https://www.tensorflow.org/api_docs/python/tf/keras/layers/RandomZoom)을 참조하세요. 유효한 값: 부동 소수점, 범위: [`-1.0`, `1.0`]. 기본값: `0.1`.  | 
| batch\$1size |  훈련용 배치 크기. GPU가 여러 개인 인스턴스로 훈련할 경우에는 이 배치 크기가 모든 GPU에서 사용됩니다. 유효한 값: 양수. 기본값: `32`.  | 
| beta\$11 |  `"adam"` 최적화 프로그램용 beta1. 1차 추정치의 지수 감소율을 나타냅니다. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.9`.  | 
| beta\$12 |  `"adam"` 최적화 프로그램용 beta2. 2차 추정치의 지수 감소율을 나타냅니다. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.999`.  | 
| binary\$1mode |  `binary_mode`가 `"True"`로 설정된 경우 모델은 포지티브 클래스에 대해 단일 확률 수를 반환하며 추가 `eval_metric` 옵션을 사용할 수 있습니다. 바이너리 분류 문제에만 사용하세요. 유효한 값: 문자열, 다음 중 하나: (`"True"` 또는 `"False"`). 기본값: `"False"`.  | 
| dropout\$1rate | 최상위 분류 레이어에 있는 드롭아웃 레이어의 드롭아웃 비율. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.2` | 
| early\$1stopping |  훈련 중 조기 중지 로직을 사용하기 위한 `"True"` 설정 여부. `"False"`인 경우에는 조기 중지를 사용하지 않습니다. 유효한 값: 문자열, 다음 중 하나: (`"True"` 또는 `"False"`). 기본값: `"False"`.  | 
| early\$1stopping\$1min\$1delta | 개선으로 인정받는 데 필요한 최소 변화. early\$1stopping\$1min\$1delta의 값보다 작은 절대 변화는 개선으로 인정되지 않습니다. early\$1stopping이 "True"로 설정된 경우에만 사용합니다.유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`].기본값: `0.0`. | 
| early\$1stopping\$1patience |  개선이 없는 상태에서도 훈련을 계속할 수 있는 에포크의 수. `early_stopping`이 `"True"`로 설정된 경우에만 사용합니다. 유효한 값: 양수. 기본값: `5`.  | 
| epochs |  훈련 epoch의 수. 유효한 값: 양수. 기본값: `3`.  | 
| epsilon |  `"adam"`, `"rmsprop"`, `"adadelta"`, `"adagrad"` 최적화 프로그램 전용 엡실론. 0으로 나눠지지 않도록 대개 작은 값으로 설정됩니다. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `1e-7`.  | 
| eval\$1metric |  `binary_mode`가 `"False"`로 설정된 경우 `eval_metric`은 `"accuracy"`만 될 수 있습니다. `binary_mode`가 `"True"`이면, 유효한 값 중 하나를 선택하세요. 자세한 내용은 TensorFlow 설명서의 [Metrics](https://www.tensorflow.org/api_docs/python/tf/keras/metrics)를 참조하세요. 유효한 값: 문자열, 다음 중 하나: (`"accuracy"`, `"precision"`, `"recall"`, `"auc"` 또는 `"prc"`). 기본값: `"accuracy"`.  | 
| image\$1resize\$1interpolation |  이미지 크기를 조정할 때 사용되는 보간 방법을 나타냅니다. 자세한 내용은 TensorFlow 설명서의 [image.resize](https://www.tensorflow.org/api_docs/python/tf/image/resize)를 참조하세요. 유효한 값: 문자열, 다음 중 하나: (`"bilinear"`, `"nearest"`, `"bicubic"`, `"area"`, ` "lanczos3"`, `"lanczos5"`, `"gaussian"` 또는 `"mitchellcubic"`). 기본값: `"bilinear"`.  | 
| initial\$1accumulator\$1value |  `"adagrad"` 최적화 프로그램 전용 누적기의 시작 값 또는 파라미터별 모멘텀 값. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.0001`.  | 
| label\$1smoothing |  레이블 값에 대한 신뢰도를 어느 정도 완화해야 하는지를 나타냅니다. 예를 들어, `label_smoothing`이 `0.1`이면 비대상 레이블은 `0.1/num_classes `이고 대상 레이블은 `0.9+0.1/num_classes`입니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.1`.  | 
| learning\$1rate | 최적화 프로그램 학습률.유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`].기본값: `0.001`. | 
| momentum |  `"sgd"`, `"nesterov"` 및 `"rmsprop"` 옵티마이저의 모멘텀. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.9`.  | 
| optimizer |  옵티마이저 유형. 자세한 내용은 TensorFlow 설명서의 [최적화 프로그램](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers)을 참조하세요. 유횻값: 문자열, 다음 중 하나: (`"adam"`, `"sgd"`, `"nesterov"`, `"rmsprop"`, ` "adagrad"`, `"adadelta"`). 기본값: `"adam"`.  | 
| regularizers\$1l2 |  분류 계층의 고밀도 계층을 위한 L2 정규화 인자. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `.0001`.  | 
| reinitialize\$1top\$1layer |  `"Auto"`로 설정하면 미세 조정 중에 최상위 분류 계층 파라미터가 다시 초기화됩니다. 증분 훈련에서 최상위 분류 계층 파라미터는 `"True"`로 설정된 경우를 제외하면 다시 초기화되지 않습니다. 유효한 값: 문자열, 다음 중 하나: (`"Auto"`, `"True"` 또는 `"False"`). 기본값: `"Auto"`.  | 
| rho |  `"adadelta"` 및 `"rmsprop"` 최적화 프로그램의 그라데이션에 대한 할인 계수입니다. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.95`.  | 
| train\$1only\$1top\$1layer |  `"True"`인 경우 최상위 분류 계층 파라미터만 미세 조정됩니다. `"False"`인 경우 모든 모델 파라미터가 미세 조정됩니다. 유효한 값: 문자열, 다음 중 하나: (`"True"` 또는 `"False"`). 기본값: `"False"`.  | 

# 이미지 분류 - TensorFlow 모델 튜닝
<a name="IC-TF-tuning"></a>

하이퍼파라미터 튜닝이라고도 하는 자동 모델 튜닝은 데이터세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 알고리즘에서 계산하는 지표 중에서 목표 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 목표 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## 이미지 분류 - TensorFlow 알고리즘으로 계산되는 지표
<a name="IC-TF-metrics"></a>

Image Classification 알고리즘은 지도 알고리즘으로, 훈련 중 계산되는 정확도 지표를 보고합니다. 모델을 튜닝하는 경우 이 지표를 목표 지표로 선택합니다.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| validation:accuracy | 올바른 예측 수 대 총 예측 수의 비율입니다. | 최대화 | 

## 조정 가능한 이미지 분류 - TensorFlow 하이퍼파라미터
<a name="IC-TF-tunable-hyperparameters"></a>

다음 하이퍼파라미터를 사용하여 이미지 분류 모델을 튜닝합니다. 이미지 분류 목표 지표에 가장 큰 영향을 미치는 하이퍼파라미터는 `batch_size`, `learning_rate` 및 `optimizer`입니다. 선택한 `optimizer`를 기반으로 `momentum`, `regularizers_l2`, `beta_1`, `beta_2` 및 `eps` 같은 옵티마이저 관련 하이퍼파라미터를 튜닝합니다. 예를 들어, `adam`이 `optimizer`인 경우에만 `beta_1` 및 `beta_2`를 사용합니다.

각 `optimizer`에 사용되는 하이퍼파라미터의 유형에 대한 자세한 내용은 [이미지 분류 - 텐서플로우 하이퍼파라미터](IC-TF-Hyperparameter.md)를 참조하세요.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| batch\$1size | IntegerParameterRanges | MinValue: 8, MaxValue: 512 | 
| beta\$11 | ContinuousParameterRanges | MinValue: 1e-6, MaxValue: 0.999 | 
| beta\$12 | ContinuousParameterRanges | MinValue: 1e-6, MaxValue: 0.999 | 
| eps | ContinuousParameterRanges | MinValue: 1e-8, MaxValue: 1.0 | 
| learning\$1rate | ContinuousParameterRanges | MinValue: 1e-6, MaxValue: 0.5 | 
| momentum | ContinuousParameterRanges | MinValue: 0.0, MaxValue: 0.999 | 
| optimizer | CategoricalParameterRanges | ['sgd', ‘adam’, ‘rmsprop’, 'nesterov', 'adagrad', 'adadelta'] | 
| regularizers\$1l2 | ContinuousParameterRanges | MinValue: 0.0, MaxValue: 0.999 | 
| train\$1only\$1top\$1layer | ContinuousParameterRanges | ['True', 'False'] | 

# 객체 감지 - MXNet
<a name="object-detection"></a>

Amazon SageMaker AI 객체 감지 - MXNet 알고리즘은 단일 심층 신경망을 사용하여 이미지의 객체를 감지 및 분류합니다. 이 알고리즘은 입력으로 이미지를 가져와 이미지 장면 내에서 객체의 모든 인스턴스를 식별하는 지도 학습 알고리즘입니다. 객체는 지정된 모음 내 클래스 중 하나로 범주화되는데, 이때 해당 클래스에 속하는 신뢰도 점수를 사용합니다. 이미지 내에서 객체의 위치와 크기는 직사각형 경계 상자로 표시됩니다. 이 알고리즘에서는 [Single Shot MultiBox Detector(SSD)](https://arxiv.org/pdf/1512.02325.pdf) 프레임워크를 사용하고 [VGG](https://arxiv.org/pdf/1409.1556.pdf) 및 [ResNet](https://arxiv.org/pdf/1603.05027.pdf), 이렇게 두 가지 기본 네트워크를 지원합니다. 이러한 네트워크는 처음부터 훈련하거나 [ImageNet](http://www.image-net.org/) 데이터세트에 대해 사전에 훈련된 모델을 사용하여 훈련할 수 있습니다.

**Topics**
+ [Object Detection 알고리즘에 대한 입력/출력 인터페이스](#object-detection-inputoutput)
+ [Object Detection 알고리즘에 대한 EC2 인스턴스 권장 사항](#object-detection-instances)
+ [Object Detection 샘플 노트북](#object-detection-sample-notebooks)
+ [Object Detection 작동 방식](algo-object-detection-tech-notes.md)
+ [Object Detection 하이퍼파라미터](object-detection-api-config.md)
+ [객체 감지 모델 튜닝](object-detection-tuning.md)
+ [Object Detection 요청 및 응답 형식](object-detection-in-formats.md)

## Object Detection 알고리즘에 대한 입력/출력 인터페이스
<a name="object-detection-inputoutput"></a>

SageMaker AI 객체 감지 알고리즘은 파일 모드에서의 훈련을 위해 RecordIO(`application/x-recordio`) 및 이미지(`image/png`, `image/jpeg`, 및 `application/x-image`) 콘텐츠 유형을 둘 다 지원하고 파이프 모드에서의 훈련을 위해 RecordIO(`application/x-recordio`)를 지원합니다. 그러나 증강 매니페스트 형식을 사용하여 RecordIO 파일을 생성하지 않고 이미지 파일(`image/png`, `image/jpeg` 및 `application/x-image`)을 사용해 파이프 모드에서 훈련할 수도 있습니다. Amazon SageMaker AI 객체 감지 알고리즘에 권장되는 입력 형식은 [Apache MXNet RecordIO](https://mxnet.apache.org/api/architecture/note_data_loading)입니다. 하지만 .jpg 또는 .png 형식의 원시 이미지도 사용할 수 있습니다. 알고리즘은 추론에 대해 `application/x-image`만을 지원합니다.

**참고**  
기존 딥 러닝 프레임워크와의 더 나은 상호 운용성을 유지하기 위해 다른 Amazon SageMaker AI 알고리즘에서 일반적으로 사용되는 protobuf 데이터 형식과는 다릅니다.

데이터 형식에 대한 자세한 정보는 [Object Detection 샘플 노트북](#object-detection-sample-notebooks) 섹션을 참조하세요.

### RecordIO 형식을 사용한 훈련
<a name="object-detection-recordio-training"></a>

훈련에 RecordIO 형식을 사용하는 경우 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청의 `InputDataConfig` 파라미터에 대한 값으로 train 및 validation 채널을 둘 다 지정합니다. train 채널에서 1개의 RecordIO(.rec) 파일을 지정하고 validation 채널에서 1개의 RecordIO 파일을 지정합니다. 두 채널에 대한 콘텐츠 유형을 `application/x-recordio`로 설정합니다. RecordIO 파일을 생성하는 방법의 예는 객체 감지 샘플 노트북을 참조하세요. 또한 [MXNet의 GluonCV](https://gluon-cv.mxnet.io/build/examples_datasets/recordio.html) 도구를 사용하여 [PASCAL Visual Object Classes](http://host.robots.ox.ac.uk/pascal/VOC/) 및 [Common Objects in Context(COCO)](http://cocodataset.org/#home) 등과 같이 널리 사용되는 데이터세트에 대한 RecordIO 파일을 생성할 수도 있습니다.

### 이미지 형식을 사용한 훈련
<a name="object-detection-image-training"></a>

훈련에 이미지 형식을 사용하는 경우 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청의 `InputDataConfig` 파라미터에 대한 값으로 `train`, `validation`, `train_annotation` 및 `validation_annotation` 채널을 지정합니다. train 및 validation 채널에 대한 개별 이미지 데이터(.jpg 또는 .png)를 지정합니다. 주석 데이터의 경우 JSON 형식을 사용할 수 있습니다. `train_annotation` 및 `validation_annotation` 채널에서 해당하는 .json 파일을 지정합니다. 이미지 유형에 따라 4가지 모든 채널의 콘텐츠 유형을 `image/png` 또는 `image/jpeg`로 설정합니다. 또한 데이터세트에 .jpg 및 .png 이미지가 둘 다 포함되어 있는 경우에는 콘텐츠 유형 `application/x-image`를 사용할 수도 있습니다. 다음은 .json 파일의 예입니다.

```
{
   "file": "your_image_directory/sample_image1.jpg",
   "image_size": [
      {
         "width": 500,
         "height": 400,
         "depth": 3
      }
   ],
   "annotations": [
      {
         "class_id": 0,
         "left": 111,
         "top": 134,
         "width": 61,
         "height": 128
      },
      {
         "class_id": 0,
         "left": 161,
         "top": 250,
         "width": 79,
         "height": 143
      },
      {
         "class_id": 1,
         "left": 101,
         "top": 185,
         "width": 42,
         "height": 130
      }
   ],
   "categories": [
      {
         "class_id": 0,
         "name": "dog"
      },
      {
         "class_id": 1,
         "name": "cat"
      }
   ]
}
```

각 이미지의 주석에는 .json 파일이 필요하고 .json 파일의 이름은 해당 이미지와 동일해야 합니다. 위 .json 파일의 이름은 "sample\$1image1.json"이어야 합니다. 주석 .json 파일에는 4가지 속성이 있습니다. 속성 "file"은 이미지 파일의 상대 경로를 지정합니다. 예를 들어, 훈련 이미지 및 해당 .json 파일이 s3://*your\$1bucket*/train/sample\$1image 및 s3://*your\$1bucket*/train\$1annotation에 저장된 경우 train 및 train\$1annotation 채널의 경로를 각각 s3://*your\$1bucket*/train 및 s3://*your\$1bucket*/train\$1annotation으로 지정합니다.

.json 파일에서 sample\$1image1.jpg 이미지의 상대 경로는 sample\$1image/sample\$1image1.jpg여야 합니다. `"image_size"` 속성은 전체 이미지 크기를 지정합니다. SageMaker AI 객체 감지 알고리즘은 현재 3채널 이미지만 지원합니다. `"annotations"` 속성은 이미지 내 객체의 범주와 경계 상자를 지정합니다. 각 객체에는 `"class_id"` 인덱스와 경계 상자 좌표 4개(`"left"`, `"top"`, `"width"`, `"height"`)로 주석이 지정됩니다. `"left"`(x 좌표) 및 `"top"`(y 좌표) 값은 경계 상자의 왼쪽 위 모서리를 나타냅니다. `"width"`(x 좌표) 및 `"height"`(y 좌표) 값은 경계 상자의 크기를 나타냅니다. 원점(0, 0)은 전체 이미지의 왼쪽 위 모서리입니다. 한 이미지 내에 객체가 여러 개 있는 경우 단일 .json 파일 내에 주석이 모두 포함되어 있어야 합니다. `"categories"` 속성은 클래스 인덱스 및 클래스 이름 간 매핑을 저장합니다. 클래스 인덱스는 0부터 시작하여 순차적으로 번호가 지정되어 있어야 합니다. `"categories"` 속성은 주석 .json 파일에 대해 선택적입니다.

### 증강 매니페스트 이미지 형식을 사용한 훈련
<a name="object-detection-augmented-manifest-training"></a>

증강 매니페스트 형식을 사용하면 RecordIO 파일을 생성할 필요 없이 파이프 모드에서 훈련할 수 있습니다. [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청의 `InputDataConfig` 파라미터에 대한 값으로 train 및 validation 채널을 둘 다 지정해야 합니다. 이 형식을 사용하는 동안 이미지와 해당하는 주석으로 구성된 목록이 포함된 S3 매니페스트 파일이 생성되어야 합니다. 매니페스트 파일 형식은 각 행이 샘플 하나를 나타내는 [JSON Lines](http://jsonlines.org/) 형식이어야 합니다. 이미지는 이미지의 S3 위치를 가리키는 `'source-ref'` 태그를 사용하여 지정됩니다. 주석은 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청에서 지정된 대로 `"AttributeNames"` 파라미터 값 아래에 제공됩니다. 또한 `metadata` 태그 아래에 추가 메타데이터가 포함될 수 있지만 이들은 알고리즘에서 무시됩니다. 다음 예제에서 `"AttributeNames`는 목록 `["source-ref", "bounding-box"]` 리스트에 포함됩니다.

```
{"source-ref": "s3://your_bucket/image1.jpg", "bounding-box":{"image_size":[{ "width": 500, "height": 400, "depth":3}], "annotations":[{"class_id": 0, "left": 111, "top": 134, "width": 61, "height": 128}, {"class_id": 5, "left": 161, "top": 250, "width": 80, "height": 50}]}, "bounding-box-metadata":{"class-map":{"0": "dog", "5": "horse"}, "type": "groundtruth/object-detection"}}
{"source-ref": "s3://your_bucket/image2.jpg", "bounding-box":{"image_size":[{ "width": 400, "height": 300, "depth":3}], "annotations":[{"class_id": 1, "left": 100, "top": 120, "width": 43, "height": 78}]}, "bounding-box-metadata":{"class-map":{"1": "cat"}, "type": "groundtruth/object-detection"}}
```

객체 감지 알고리즘을 훈련할 경우에는 입력 파일의 `"AttributeNames"` 순서가 중요합니다. `image`를 먼저 사용한 다음 `annotations`를 사용하여 특정 순서로 파이프된 데이터를 허용합니다. 따라서 이 예제의 "AttributeNames"에는 먼저 `"source-ref"`가 제공된 다음 `"bounding-box"`가 제공됩니다. 증강 매니페스트와 함께 객체 감지를 사용할 경우 파라미터 `RecordWrapperType`의 값을 `"RecordIO"`으로 설정해야 합니다.

증강 매니페스트 파일에 대한 추가 정보는 [훈련 작업용 증강 매니페스트 파일](augmented-manifest.md) 섹션을 참조하세요.

### 점진적 훈련
<a name="object-detection-incremental-training"></a>

또한 이전에 SageMaker AI로 훈련한 모델을 새 모델과 아티팩트의 훈련을 위한 시드로 지정할 수 있습니다. 증분 훈련은 동일하거나 유사한 데이터로 새 모델을 훈련하려는 경우 훈련 시간을 절감시켜 줍니다. SageMaker AI 객체 감지 모델은 SageMaker AI에서 훈련된 다른 기분 제공 객체 감지 모델로만 시드될 수 있습니다.

사전 훈련된 모델을 사용하려면 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청에서 `ChannelName`을 `InputDataConfig` 파라미터에 "model"로 지정합니다. model 채널의 `ContentType`을 `application/x-sagemaker-model`로 설정합니다. model 채널에 업로드한 사전 훈련된 모델과 새 모델 둘 다의 입력 하이퍼파라미터는 `base_network` 및 `num_classes` 입력 파라미터에 대해 설정이 동일해야 합니다. 이러한 파라미터는 네트워크 아키텍처를 정의합니다. 사전 훈련된 모델 파일의 경우 SageMaker AI의 압축된 모델 아티팩트(.tar.gz 형식) 출력을 사용합니다. 입력 데이터에 RecordIO 또는 이미지 형식을 사용할 수 있습니다.

점진적 훈련에 대한 자세한 내용 및 점진적 훈련 사용 방법에 대한 지침은 [Amazon SageMaker AI에서 점진적 훈련 사용](incremental-training.md) 섹션을 참조하세요.

## Object Detection 알고리즘에 대한 EC2 인스턴스 권장 사항
<a name="object-detection-instances"></a>

객체 감지 알고리즘은 P2, P3, G4dn 및 G5 GPU 인스턴스 패밀리를 지원합니다. 배치 크기가 큰 훈련에 대해 메모리가 더 많은 GPU 인스턴스를 사용하는 것이 좋습니다. 또한 분산 훈련을 위해 멀티 GPU 및 다중 머신 설정에서 객체 감지 알고리즘을 실행할 수 있습니다.

추론에는 CPU 인스턴스(예: C5 및 M5)와 GPU 인스턴스(예: P2 및 G4dn) 둘 다를 사용할 수 있습니다.

## Object Detection 샘플 노트북
<a name="object-detection-sample-notebooks"></a>

SageMaker AI 객체 감지 알고리즘을 사용하여 다음 모델을 훈련시키고 호스팅하는 방법을 보여주는 샘플 노트북 

Single Shot 멀티박스 탐지기 알고리즘을 사용하는 [Caltech Birds(CUB 200 2011)](http://www.vision.caltech.edu/datasets/cub_200_2011/) 데이터세트는 [Amazon SageMaker AI Object Detection for Bird Species](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/object_detection_birds/object_detection_birds.html)를 참조하세요. SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 이 인스턴스에 액세스하는 방법에 대한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만든 후 열면 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플 목록을 확인할 수 있습니다. Object Detection 알고리즘을 사용하는 객체 감지 예제 노트북은 **Introduction to Amazon Algorithms(Amazon 알고리즘 소개)** 섹션에 있습니다. 노트북을 열려면 **사용** 탭을 클릭하고 사본 생성을 선택합니다.

Amazon SageMaker AI 객체 감지 알고리즘에 대한 자세한 내용은 다음 블로그 게시물을 참조하세요.
+ [Amazon SageMaker AI 객체 감지 모델 훈련 및 실행 AWS IoT Greengrass - 1/3부: 훈련 데이터 준비](https://aws.amazon.com/blogs/iot/sagemaker-object-detection-greengrass-part-1-of-3/)
+ [Amazon SageMaker AI 객체 감지 모델 훈련 및 실행 AWS IoT Greengrass - 3/2부: 사용자 지정 객체 감지 모델 훈련](https://aws.amazon.com/blogs/iot/sagemaker-object-detection-greengrass-part-2-of-3/)
+ [Amazon SageMaker AI 객체 감지 모델 훈련 및 실행 AWS IoT Greengrass - 3/3부: 엣지에 배포](https://aws.amazon.com/blogs/iot/sagemaker-object-detection-greengrass-part-3-of-3/)

# Object Detection 작동 방식
<a name="algo-object-detection-tech-notes"></a>

Object Detection 알고리즘은 알려진 객체 범주 모음의 이미지에서 객체의 모든 인스턴스를 식별해 찾습니다. 이 알고리즘은 이미지를 입력으로 가져와 객체가 속한 범주를 출력합니다. 이때 객체가 해당 범주에 속하는 신뢰도 점수도 함께 출력합니다. 또한 직사각형 경계 상자를 사용해 객체의 위치와 크기를 예측합니다. Amazon SageMaker AI 객체 감지는 분류 작업을 위해 사전 훈련된 합성곱 신경망(CNN)을 기본 네트워크로 사용하는 [Single Shot multibox Detector(SSD)](https://arxiv.org/pdf/1512.02325.pdf) 알고리즘을 사용합니다. SSD는 중간 계층의 출력을 감지를 위한 특징으로 사용합니다.

다양한 CNN(예: [VGG](https://arxiv.org/pdf/1409.1556.pdf) 및 [ResNet](https://arxiv.org/pdf/1603.05027.pdf))은 이미지 분류 작업에서 뛰어난 성과를 보여주었습니다. Amazon SageMaker AI의 객체 감지 기능은 VGG-16 및 ResNet-50을 SSD를 위한 기본 네트워크로 지원합니다. 이 알고리즘은 전체 훈련 모드 또는 전이 학습 모드에서 훈련할 수 있습니다. 전체 훈련 모드에서 기본 네트워크는 임의 가중치와 함께 초기화되고 사용자 데이터를 통해 훈련됩니다. 전이 학습 모드에서 기본 네트워크 가중치는 사전 훈련된 모델에서 로드됩니다.

개체 감지 알고리즘은 즉각적으로 내부적으로 플립, 재조정 및 지터와 같은 표준 데이터 증강 연산을 사용하여 과적합을 방지합니다.

# Object Detection 하이퍼파라미터
<a name="object-detection-api-config"></a>

[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청에서 사용하고자 하는 훈련 알고리즘을 지정합니다. 또한 훈련 데이터세트에서 모델의 파라미터를 예측하는 데 사용되는 알고리즘 관련 하이퍼파라미터를 지정할 수도 있습니다. 다음 테이블에는 객체 감지 알고리즘 훈련을 위해 Amazon SageMaker AI에서 제공하는 하이퍼파라미터가 나와 있습니다. 객체 훈련 작동 방식에 대한 자세한 정보는 [Object Detection 작동 방식](algo-object-detection-tech-notes.md) 섹션을 참조하세요.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| num\$1classes |  출력 클래스의 수. 이 파라미터는 네트워크 출력의 차원을 정의하고 데이터세트의 클래스 수로 설정됩니다. **필수** 유효한 값: 양수  | 
| num\$1training\$1samples |  입력 데이터세트의 훈련 예제 수.  이 값과 훈련 세트의 샘플 수가 일치하지 않는 경우 `lr_scheduler_step` 파라미터의 동작이 정의되지 않고 분산 훈련 정확도에 영향을 미칠 수 있습니다.  **필수** 유효한 값: 양수  | 
| base\$1network |  사용할 기본 네트워크 아키텍처. **선택 사항** 유효한 값: 'vgg-16' 또는 'resnet-50' 기본값: 'vgg-16'  | 
| early\$1stopping |  `True`이면 훈련 중 조기 중지 로직을 사용하고 `False`이면 사용하지 않습니다. **선택 사항** 유효한 값: `True` 또는 `False` 기본값: `False`  | 
| early\$1stopping\$1min\$1epochs |  조기 중지 로직을 호출하기 전에 실행해야 할 최소 epoch 수. `early_stopping`이 `True`인 경우에만 사용됩니다. **선택 사항** 유효한 값: 양수 기본값: 10  | 
| early\$1stopping\$1patience |  상대적 지표에 `early_stopping_tolerance` 하이퍼파라미터로 정의한 개선 사항이 없는 경우 훈련 완료 전에 대기하는 epoch의 수. `early_stopping`이 `True`인 경우에만 사용됩니다. **선택 사항** 유효한 값: 양수 기본값: 5  | 
| early\$1stopping\$1tolerance |  조기 중지를 피하기 위해 `validation:mAP` 즉, Mean Average Precision(mAP)의 상대적 개선이 초과해야 하는 내결함성 값. mAP의 변동 비율을 이전의 최적 mAP로 나눈 값이 설정된 `early_stopping_tolerance` 값보다 작으면 조기 중지에서 개선이 없는 것으로 간주합니다. `early_stopping`이 `True`인 경우에만 사용됩니다. **선택 사항** 유효한 값: 0 ≤ 부동 소수점 ≤ 1 기본 값: 0.0  | 
| image\$1shape |  입력 이미지의 이미지 크기. 입력 이미지의 크기를 이 크기의 사각형 이미지로 재조정합니다. 성능 향상을 위해 300 및 512를 사용하는 것이 좋습니다. **선택 사항** 유효한 값: 양수 ≥300 기본값: 300  | 
| epochs |  훈련 epoch의 수. **선택 사항** 유효한 값: 양수 기본값: 30  | 
| freeze\$1layer\$1pattern |  기본 네트워크의 동결 계층에 대한 정규식(regex). 예를 들어, `freeze_layer_pattern` = `"^(conv1_\|conv2_).*"`를 설정하면 `"conv1_"` 또는 `"conv2_"`가 이름에 포함된 모든 계층이 동결됩니다. 즉, 이러한 계층에 대한 가중치가 훈련 중 업데이트되지 않습니다. 계층 이름은 네트워크 기호 파일 [vgg16-symbol.json](http://data.mxnet.io/models/imagenet/vgg/vgg16-symbol.json ) 및 [resnet-50-symbol.json](http://data.mxnet.io/models/imagenet/resnet/50-layers/resnet-50-symbol.json)에서 찾을 수 있습니다. 레이어를 고정하면 가중치를 더 이상 수정할 수 없습니다. 이는 정확성에 대한 작은 손실을 대가로 훈련 시간을 크게 단축할 수 있습니다. 이 기술은 기본 네트워크의 하위 계층을 재교육할 필요가 없는 전이 학습에서 일반적으로 사용됩니다. **선택 사항** 유효한 값: 문자열 기본값: 동결되는 계층 없음  | 
| kv\$1store |  분산 훈련 중 사용되는 가중치 업데이트 동기화 모드. 가중치는 머신에 걸쳐 동기식 또는 비동기식으로 업데이트될 수 있습니다. 동기식 업데이트는 일반적으로 비동기식 업데이트보다 더 높은 정확도를 제공하지만 속도가 느릴 수 있습니다. 자세한 정보는 [분산 훈련](https://mxnet.apache.org/api/faq/distributed_training) MXNet 자습서를 참조하세요.  이 파라미터는 단일 머신 훈련에 해당되지 않습니다.  **선택 사항** 유효한 값: `'dist_sync'` 또는 `'dist_async'` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/object-detection-api-config.html) 기본값: -  | 
| label\$1width |  훈련 및 검증 데이터 간 동기화에 사용되는 포스 패딩 레이블 너비. 예를 들어, 데이터의 이미지 하나에 객체가 최대 10개 포함되어 있고, 각 객체의 주석이 5가지 숫자 [class\$1id, left, top, width, height]로 지정된 경우 `label_width`는 (10\$15 \$1 헤더 정보 길이)보다 작으면 안 됩니다. 헤더 정보 길이는 일반적으로 2입니다. 훈련에는 약간 큰 `label_width`를 사용하는 것이 좋은데, 이 예에서는 60이 적당합니다. **선택 사항** 유효한 값: 데이터의 가장 긴 주석 정보 길이를 수용하기에 충분히 큰 양의 정수 기본값: 350  | 
| learning\$1rate |  초기 학습률. **선택 사항** 유효한 값: (0, 1]의 부동 소수점 기본값: 0.001  | 
| lr\$1scheduler\$1factor |  학습률이 감소하는 비율. `lr_new` = `lr_old` \$1 `lr_scheduler_factor`로 정의된 `lr_scheduler_step` 파라미터와 함께 사용됩니다. **선택 사항** 유효한 값: (0, 1)의 부동 소수점 기본값: 0.1  | 
| lr\$1scheduler\$1step |  학습률이 감소하는 epoch. 학습률은 쉼표로 구분된 문자열에 나열된 epoch(예: "epoch1, epoch2, ...")에서 `lr_scheduler_factor`씩 감소합니다. 예를 들어 값이 "10, 20"으로 설정되어 있고, `lr_scheduler_factor`가 1/2로 설정된 경우 학습률은 10번째 epoch 이후 절반이 감소하고, 20번째 epoch 이후 다시 절반이 감소합니다. **선택 사항** 유효한 값: 문자열 기본값: 빈 문자열  | 
| mini\$1batch\$1size |  훈련용 배치 크기. 단일 머신 다중 GPU 설정에서 각 GPU는 `mini_batch_size`/`num_gpu` 훈련 샘플을 처리합니다. `dist_sync` 모드의 다중 머신 훈련의 경우 실제 배치(batch) 크기는 `mini_batch_size`\$1머신의 수입니다. `mini_batch_size`가 크면 일반적으로 훈련 속도가 빨라지지만 메모리 부족 문제가 발생할 수 있습니다. 메모리 사용량은 `mini_batch_size`, `image_shape` 및 `base_network` 아키텍처와 관련이 있습니다. 예를 들어, 단일 p3.2xlarge 인스턴스에서 메모리 부족 오류 없이 가장 큰 `mini_batch_size`는 32로, 이때 base\$1network는 "resnet-50"이고, `image_shape`은 300입니다. 동일한 인스턴스에서 기본 네트워크가 `vgg-16`이고 `image_shape`가 300이면 `mini_batch_size`를 64로 설정할 수 있습니다. **선택 사항** 유효한 값: 양수 기본값: 32  | 
| momentum |  `sgd`에 대한 모멘텀. 다른 옵티마이저의 경우 무시됩니다. **선택 사항** 유효한 값: (0, 1]의 부동 소수점 기본값: 0.9  | 
| nms\$1threshold |  최대가 아닌 억제 임계값 **선택 사항** 유효한 값: (0, 1]의 부동 소수점 기본값: 0.45  | 
| optimizer |  옵티마이저 유형. 옵티마이저 값에 대한 자세한 정보는 [MXNet의 API](https://mxnet.apache.org/api/python/docs/api/)를 참조하세요. **선택 사항** 유효한 값: ['sgd', 'adam', 'rmsprop', 'adadelta'] 기본값: 'sgd'  | 
| overlap\$1threshold |  평가 중첩 임계값 **선택 사항** 유효한 값: (0, 1]의 부동 소수점 기본값: 0.5  | 
| use\$1pretrained\$1model |  훈련용 사전 훈련 모델을 사용할지 여부를 표시합니다. 1로 설정된 경우 해당 아키텍처를 가진 사전 훈련 모델이 로드되고 훈련에 사용됩니다. 그렇지 않은 경우 네트워크는 처음부터 교육됩니다. **선택 사항** 유효한 값: 0 또는 1 기본값: 1  | 
| weight\$1decay |  `sgd` 및 `rmsprop`에 대한 가중치 감소 계수. 다른 옵티마이저의 경우 무시됩니다. **선택 사항** 유효한 값: (0, 1)의 부동 소수점 기본값: 0.0005  | 

# 객체 감지 모델 튜닝
<a name="object-detection-tuning"></a>

하이퍼파라미터 튜닝이라고도 하는 자동 모델 튜닝은 데이터세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 알고리즘에서 계산하는 지표 중에서 목표 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 목표 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## Object Detection 알고리즘으로 계산되는 지표
<a name="object-detection-metrics"></a>

Object Detection 알고리즘은 훈련 중 단일 지표 `validation:mAP`에 대해 보고합니다. 모델을 튜닝할 때 목표 지표로 이 지표를 선택합니다.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| validation:mAP |  검증 세트에 대해 계산된 Mean Average Precision(mAP)  |  최대화  | 



## 튜닝 가능한 Object Detection 하이퍼파라미터
<a name="object-detection-tunable-hyperparameters"></a>

다음 하이퍼파라미터를 사용하여 Amazon SageMaker AI 객체 감지 모델을 튜닝합니다. 객체 감지 목표 지표에 가장 큰 영향을 미치는 하이퍼파라미터는 `mini_batch_size`, `learning_rate` 및 `optimizer`입니다.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| learning\$1rate |  ContinuousParameterRange  |  MinValue: 1e-6, MaxValue: 0.5  | 
| mini\$1batch\$1size |  IntegerParameterRanges  |  MinValue: 8, MaxValue: 64  | 
| momentum |  ContinuousParameterRange  |  MinValue: 0.0, MaxValue: 0.999  | 
| optimizer |  CategoricalParameterRanges  |  ['sgd', 'adam', 'rmsprop', 'adadelta']  | 
| weight\$1decay |  ContinuousParameterRange  |  MinValue: 0.0, MaxValue: 0.999  | 

# Object Detection 요청 및 응답 형식
<a name="object-detection-in-formats"></a>

다음 페이지에서는 Amazon SageMaker AI 객체 감지 - MXNet 모델의 추론 요청 및 응답 형식을 설명합니다.

## 요청 형식
<a name="object-detection-json"></a>

모델의 엔드포인트를 사용하여 교육된 모델을 쿼리합니다. 엔드포인트는 `image/jpeg` 및 `image/png` 콘텐츠 유형의 .jpg 및 .png 이미지 형식을 사용합니다.

## 응답 형식
<a name="object-detection-recordio"></a>

응답은 JSON 형식으로 인코딩된 이미지 내 모든 객체에 대한 신뢰도 점수 및 경계 상자 좌표가 포함된 클래스 인덱스입니다. 다음은 응답 .json 파일의 예입니다.

```
{"prediction":[
  [4.0, 0.86419455409049988, 0.3088374733924866, 0.07030484080314636, 0.7110607028007507, 0.9345266819000244],
  [0.0, 0.73376623392105103, 0.5714187026023865, 0.40427327156066895, 0.827075183391571, 0.9712159633636475],
  [4.0, 0.32643985450267792, 0.3677481412887573, 0.034883320331573486, 0.6318609714508057, 0.5967587828636169],
  [8.0, 0.22552496790885925, 0.6152569651603699, 0.5722782611846924, 0.882301390171051, 0.8985623121261597],
  [3.0, 0.42260299175977707, 0.019305512309074402, 0.08386176824569702, 0.39093565940856934, 0.9574796557426453]
]}
```

이 .json 파일의 각 행에는 감지된 객체를 나타내는 배열이 포함되어 있습니다. 이러한 객체 배열은 각각 6개 숫자 목록으로 구성되어 있습니다. 첫 번째 숫자는 예측된 클래스 레이블이고, 두 번째 숫자는 감지를 위해 연결된 신뢰도 점수입니다. 마지막 숫자 4개는 경계 상자 좌표 [xmin, ymin, xmax, ymax]를 나타냅니다. 이러한 출력 경계 상자 모서리 인덱스는 전체 이미지 크기로 정규화됩니다. 이 인코딩은 입력 .json 형식에서 사용하는 인코딩과 다릅니다. 예를 들어, 감지 결과의 첫 번째 항목에서 0.3088374733924866은 전체 이미지 너비의 비율로 표시된 경계 상자의 왼쪽 좌표(왼쪽 위 모서리의 x 좌표), 0.07030484080314636은 전체 이미지 높이의 비율로 표시된 경계 상자의 상단 좌표(왼쪽 위 모서리의 y 좌표), 0.7110607028007507은 전체 이미지 너비의 비율로 표시된 경계 상자의 오른쪽 좌표(오른쪽 아래 모서리의 x 좌표) 그리고 0.9345266819000244는 전체 이미지 높이의 비율로 표시된 경계 상자의 하단 좌표(오른쪽 아래 모서리의 y 좌표)입니다.

신뢰할 수 없는 감지 결과를 피하기 위해 신뢰도 점수가 낮은 감지 결과는 제외하려고 할 수 있습니다. [객체 감지 샘플 노트북](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/object_detection_birds/object_detection_birds.ipynb)에서는 임곗값을 사용하여 신뢰도가 낮은 탐지를 제거하고 원본 이미지에 경계 상자를 표시하는 스크립트의 예제를 제공합니다.

배치 변환을 위해 응답은 JSON 형식입니다. 이 형식은 위에서 설명한 JSON 형식과 동일합니다. 각 이미지의 감지 결과는 JSON 파일로 표시됩니다. 예제:

```
{"prediction": [[label_id, confidence_score, xmin, ymin, xmax, ymax], [label_id, confidence_score, xmin, ymin, xmax, ymax]]}
```

훈련 및 추론에 대한 자세한 정보는 [Object Detection 샘플 노트북](object-detection.md#object-detection-sample-notebooks) 섹션을 참조하세요.

## OUTPUT: JSON 응답 형식
<a name="object-detection-output-json"></a>

accept: application/json;annotation=1

```
{
   "image_size": [
      {
         "width": 500,
         "height": 400,
         "depth": 3
      }
   ],
   "annotations": [
      {
         "class_id": 0,
         "score": 0.943,
         "left": 111,
         "top": 134,
         "width": 61,
         "height": 128
      },
      {
         "class_id": 0,
         "score": 0.0013,
         "left": 161,
         "top": 250,
         "width": 79,
         "height": 143
      },
      {
         "class_id": 1,
         "score": 0.0133,
         "left": 101,
         "top": 185,
         "width": 42,
         "height": 130
      }
   ]
}
```

# 객체 감지 - TensorFlow
<a name="object-detection-tensorflow"></a>

Amazon SageMaker AI 객체 감지 - TensorFlow 알고리즘은 [TensorFlow 모델 정원](https://github.com/tensorflow/models)에서 사전 훈련된 여러 모델을 이용하여 전이 학습을 지원하는 지도 학습 알고리즘입니다. 대량의 이미지 데이터를 사용할 수 없는 경우에도 전이 학습을 이용하여 자체 데이터세트에서 사전 훈련된 가용 모델 중 하나를 미세 조정할 수 있습니다. 객체 감지 알고리즘은 이미지를 입력으로 받아들여 경계 상자 목록을 출력합니다. 훈련 데이터세트는 `jpg`, `.jpeg` 또는 `.png` 형식의 이미지로 구성되어야 합니다. 이 페이지에는 Amazon EC2 인스턴스 권장 사항 및 객체 감지 - TensorFlow용 샘플 노트북에 대한 정보가 포함되어 있습니다.

**Topics**
+ [SageMaker AI 객체 감지 - TensorFlow 알고리즘 사용 방법](object-detection-tensorflow-how-to-use.md)
+ [객체 감지 - TensorFlow 알고리즘의 입력 및 출력 인터페이스](object-detection-tensorflow-inputoutput.md)
+ [객체 감지 - TensorFlow 알고리즘에 대한 Amazon EC2 인스턴스 권장 사항](#object-detection-tensorflow-instances)
+ [객체 감지 - TensorFlow 샘플 노트북](#object-detection-tensorflow-sample-notebooks)
+ [객체 감지 - TensorFlow의 작동 방식](object-detection-tensorflow-HowItWorks.md)
+ [TensorFlow 모델](object-detection-tensorflow-Models.md)
+ [객체 감지 - TensorFlow 하이퍼파라미터](object-detection-tensorflow-Hyperparameter.md)
+ [객체 감지 - TensorFlow 모델 튜닝](object-detection-tensorflow-tuning.md)

# SageMaker AI 객체 감지 - TensorFlow 알고리즘 사용 방법
<a name="object-detection-tensorflow-how-to-use"></a>

객체 감지 - TensorFlow를 Amazon SageMaker AI 기본 제공 알고리즘으로 사용할 수 있습니다. 다음 섹션에서는 SageMaker AI Python SDK로 객체 감지 - TensorFlow를 사용하는 방법을 설명합니다. Amazon SageMaker Studio Classic UI에서 객체 감지 - TensorFlow를 사용하는 방법에 대한 자세한 내용은 [SageMaker JumpStart 사전 훈련된 모델](studio-jumpstart.md) 섹션을 참조하세요.

객체 감지 - TensorFlow 알고리즘은 호환 가능하며 사전 훈련된 TensorFlow 모델 중 무엇이든 사용하여 전이 학습을 지원합니다. 사전 훈련된 모든 가용 모델의 목록은 [TensorFlow 모델](object-detection-tensorflow-Models.md)를 참조하세요. 모든 사전 훈련 모델에는 고유의 `model_id`가 있습니다. 다음 예제에서는 ResNet50(`model_id`: `tensorflow-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8`)을 이용하여 사용자 지정 데이터세트를 미세 조정합니다. 사전 훈련 모델 모두 TensorFlow Hub에서 사전 다운로드되고 Amazon S3 버킷에 저장됩니다. 따라서 훈련 작업을 네트워크 격리 상태에서 실행할 수 있습니다. 이처럼 사전 생성된 모델 훈련 아티팩트를 사용하여 SageMaker AI Estimator를 구문화합니다.

먼저 도커 이미지 URI, 훈련 스크립트 URI, 사전 훈련 모델 URI를 검색하세요. 그런 다음 상황에 맞게 하이퍼파라미터를 변경하세요. `hyperparameters.retrieve_default`를 사용하면 모든 가용 하이퍼파라미터와 해당 하이퍼파라미터의 기본값으로 구성된 Python 사전을 볼 수 있습니다. 자세한 내용은 [객체 감지 - TensorFlow 하이퍼파라미터](object-detection-tensorflow-Hyperparameter.md) 단원을 참조하십시오. 이 값들을 사용하여 SageMaker AI Estimator를 구문화합니다.

**참고**  
기본 하이퍼파라미터 값은 모델마다 다릅니다. 그 예로 대형 모델일수록 기본 에포크 수가 적습니다.

이 예제에서는 거리의 보행자가 담긴 이미지를 포함하는 [https://www.cis.upenn.edu/~jshi/ped_html/#pub1](https://www.cis.upenn.edu/~jshi/ped_html/#pub1) 데이터세트를 사용합니다. 데이터세트를 사전 다운로드하여 Amazon S3로 사용할 수 있도록 설정했습니다. 모델을 미세 조정하려면 훈련 데이터세트의 Amazon S3 위치를 이용하여 `.fit`를 호출하세요.

```
from sagemaker import image_uris, model_uris, script_uris, hyperparameters
from sagemaker.estimator import Estimator

model_id, model_version = "tensorflow-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8", "*"
training_instance_type = "ml.p3.2xlarge"

# Retrieve the Docker image
train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None)

# Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training")

# Retrieve the pretrained model tarball for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

# Retrieve the default hyperparameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)

# [Optional] Override default hyperparameters with custom values
hyperparameters["epochs"] = "5"

# Sample training data is available in this bucket
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/PennFudanPed_COCO_format/"

training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"

output_bucket = sess.default_bucket()
output_prefix = "jumpstart-example-od-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

# Create an Estimator instance
tf_od_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,
)

# Launch a training job
tf_od_estimator.fit({"training": training_dataset_s3_path}, logs=True)
```

사용자 지정 데이터세트에서의 전이 학습을 위한 SageMaker AI 객체 감지 - TensorFlow 알고리즘을 사용하는 방법에 대한 자세한 내용은 [Introduction to SageMaker TensorFlow - Object Detection](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/object_detection_tensorflow/Amazon_Tensorflow_Object_Detection.ipynb) 노트북을 참조하세요.

# 객체 감지 - TensorFlow 알고리즘의 입력 및 출력 인터페이스
<a name="object-detection-tensorflow-inputoutput"></a>

TensorFlow Models에 나열된 각각의 사전 훈련 모델은 이미지 클래스의 개수에 관계없이 모든 데이터세트에 맞게 미세 조정할 수 있습니다. 객체 감지 - TensorFlow 모델에 입력할 훈련 데이터의 형식을 지정하는 방법을 기억해 두세요.
+ **훈련 데이터 입력 형식:** 훈련 데이터는 `images` 하위 디렉터리 및 `annotations.json` 파일이 있는 디렉터리여야 합니다.

다음은 입력 디렉터리 구조의 예제입니다. 입력 디렉터리는 `s3://bucket_name/input_directory/`과 비슷한 경로를 가진 Amazon S3 버킷에 호스팅되어야 합니다. 단, 후행 `/`는 필수입니다.

```
input_directory
    |--images
        |--abc.png
        |--def.png
    |--annotations.json
```

`annotations.json` 파일에는 경계 상자 및 해당 클래스 레이블에 대한 정보가 `"images"` 사전 및 `"annotations"`개 키의 형태로 들어 있어야 합니다. `"images"` 키의 값은 사전 목록이어야 합니다. 각 이미지에는 `{"file_name": image_name, "height": height, "width": width, "id": image_id}`에 해당하는 정보가 포함된 사전이 하나씩 있어야 합니다. `"annotations"` 키의 값 역시 사전 목록이어야 합니다. 각 경계 상자에는 `{"image_id": image_id, "bbox": [xmin, ymin, xmax, ymax], "category_id": bbox_label}`에 해당하는 정보가 포함된 사전이 하나씩 있어야 합니다.

훈련 이후에는 레이블 매핑 파일과 훈련된 모델이 Amazon S3 버킷에 저장됩니다.

## 증분 훈련
<a name="object-detection-tensorflow-incremental-training"></a>

이전에 SageMaker AI로 훈련시킨 모델의 아티팩트를 새 모델의 훈련을 위한 시드로 지정할 수 있습니다. 증분 훈련은 동일하거나 유사한 데이터로 새 모델을 훈련하려는 경우 훈련 시간을 절감시켜 줍니다.

**참고**  
SageMaker AI 객체 감지 - TensorFlow 모델은 SageMaker AI에서 훈련된 다른 객체 감지 - TensorFlow 모델에만 시드를 지정할 수 있습니다.

클래스 세트가 동일하게 유지되는 한 어떤 데이터세트라도 증분 훈련에 사용할 수 있습니다. 증분 훈련 단계는 미세 조정 단계와 비슷하지만, 사전 훈련 모델로 시작되는 대신 기존의 미세 조정 모델로 시작됩니다. SageMaker AI 객체 감지 - TensorFlow로 증분 훈련을 사용하는 방법에 대한 자세한 내용은 [Introduction to SageMaker TensorFlow - Object Detection](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/object_detection_tensorflow/Amazon_Tensorflow_Object_Detection.ipynb) 노트북을 참조하세요.

## 객체 감지 - TensorFlow 알고리즘을 이용한 추론
<a name="object-detection-tensorflow-inference"></a>

추론용 TensorFlow 객체 감지 훈련의 결과로 미세 조정 모델을 호스팅할 수 있습니다. 모든 추론용 입력 이미지는 `.jpg`, `jpeg` 또는 `.png` 형식이면서 `application/x-image` 콘텐츠 유형이어야 합니다. 객체 감지 - TensorFlow 알고리즘은 입력 이미지의 크기를 자동으로 조정합니다.

추론을 실행하면 경계 상자, 예측 클래스, 그리고 JSON 형식으로 인코딩된 각 예측의 점수가 생성됩니다. 객체 감지 - TensorFlow 모델은 요청당 단일 이미지를 처리하고 1개 행만 출력합니다. 다음은 JSON 형식 응답의 예제입니다.

```
accept: application/json;verbose

{"normalized_boxes":[[xmin1, xmax1, ymin1, ymax1],....], 
    "classes":[classidx1, class_idx2,...], 
    "scores":[score_1, score_2,...], 
    "labels": [label1, label2, ...], 
    "tensorflow_model_output":<original output of the model>}
```

`accept`를 `application/json`로 설정하면 이 모델이 정규화 상자, 클래스 및 점수만 출력합니다.

## 객체 감지 - TensorFlow 알고리즘에 대한 Amazon EC2 인스턴스 권장 사항
<a name="object-detection-tensorflow-instances"></a>

객체 감지 - TensorFlow 알고리즘은 다음을 포함하는 모든 훈련용 GPU 인스턴스를 지원합니다.
+ `ml.p2.xlarge`
+ `ml.p2.16xlarge`
+ `ml.p3.2xlarge`
+ `ml.p3.16xlarge`

배치 크기가 큰 훈련일수록 메모리 용량이 많은 GPU 인스턴스를 사용하는 것이 좋습니다. CPU(예: M5) 인스턴스 및 GPU(P2 또는 P3) 인스턴스는 둘 다 추론에 사용할 수 있습니다. AWS 리전 간 SageMaker 훈련 및 추론 인스턴스의 전체 목록은 [Amazon SageMaker 요금을](https://aws.amazon.com/sagemaker/pricing/) 참조하세요.

## 객체 감지 - TensorFlow 샘플 노트북
<a name="object-detection-tensorflow-sample-notebooks"></a>

사용자 지정 데이터세트에서의 전이 학습을 위한 SageMaker AI 객체 감지 - TensorFlow 알고리즘을 사용하는 방법에 대한 자세한 내용은 [Introduction to SageMaker TensorFlow - Object Detection](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/object_detection_tensorflow/Amazon_Tensorflow_Object_Detection.ipynb) 노트북을 참조하세요.

SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 이 인스턴스에 액세스하는 방법에 대한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만들고 연 후에는 **SageMaker AI 예시** 탭을 선택하여 모든 SageMaker AI 샘플의 목록을 확인합니다. 노트북을 열려면 **사용** 탭을 선택한 후 **사본 생성**을 선택합니다.

# 객체 감지 - TensorFlow의 작동 방식
<a name="object-detection-tensorflow-HowItWorks"></a>

객체 감지 - TensorFlow 알고리즘은 이미지를 입력으로 받아들여 경계 상자와 객체 레이블을 예측합니다. MobileNet, ResNet, Inception, EfficientNet 등 다양한 딥 러닝 네트워크는 객체 감지에 매우 정확합니다. 32만 8,000개의 이미지를 보유한 COCO(Common Objects in Context)처럼 대규모 이미지 데이터세트로 훈련되는 딥 러닝 네트워크도 있습니다. COCO 데이터로 네트워크를 훈련시킨 후에는 특정 초점을 맞춘 데이터세트로 네트워크를 미세 조정하여 보다 구체적인 객체 감지 작업을 수행할 수 있습니다. Amazon SageMaker AI 객체 감지 - TensorFlow 알고리즘은 TensorFlow 모델 정원에서 사용할 수 있는 여러 사전 훈련 모델에 대한 전이 학습을 지원합니다.

훈련 데이터의 클래스 레이블 수에 따라 선택한 사전 훈련 TensorFlow 모델에 객체 감지 계층이 연결됩니다. 그런 다음 네트워크 전체(사전 훈련 모델 포함) 또는 새 훈련 데이터의 최상위 분류 계층 중 하나만 미세 조정할 수 있습니다. 이 전이 학습 메서드를 사용하면 더 작은 데이터세트로 훈련할 수 있습니다.

# TensorFlow 모델
<a name="object-detection-tensorflow-Models"></a>

객체 감지 - TensorFlow 알고리즘을 통해 전이 학습에 사용할 수 있도록 사전 훈련된 모델은 다음과 같습니다.

다음 모델에서는 특정 데이터세트의 크기, 모델 파라미터의 개수, 훈련 시간, 추론 지연 시간이 크게 달라집니다. 사용 사례에 가장 적합한 모델은 미세 조정 데이터세트의 복잡도와 훈련 시간, 추론 지연 시간 또는 모델 정확도 관련 요건에 따라 달라집니다.


| 모델 이름 | `model_id` | 소스 | 
| --- | --- | --- | 
| ResNet50 V1 FPN 640 | `tensorflow-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8` | [TensorFlow 모델 정원 링크](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_resnet50_v1_fpn_640x640_coco17_tpu-8.tar.gz) | 
| EfficientDet D0 512 | `tensorflow-od1-ssd-efficientdet-d0-512x512-coco17-tpu-8` | [TensorFlow 모델 정원 링크](http://download.tensorflow.org/models/object_detection/tf2/20200711/efficientdet_d0_coco17_tpu-32.tar.gz) | 
| EfficientDet D1 640 | `tensorflow-od1-ssd-efficientdet-d1-640x640-coco17-tpu-8` | [TensorFlow 모델 정원 링크](http://download.tensorflow.org/models/object_detection/tf2/20200711/efficientdet_d1_coco17_tpu-32.tar.gz) | 
| EfficientDet D2 768 | `tensorflow-od1-ssd-efficientdet-d2-768x768-coco17-tpu-8` | [TensorFlow 모델 정원 링크](http://download.tensorflow.org/models/object_detection/tf2/20200711/efficientdet_d2_coco17_tpu-32.tar.gz) | 
| EfficientDet D3 896 | `tensorflow-od1-ssd-efficientdet-d3-896x896-coco17-tpu-32` | [TensorFlow 모델 정원 링크](http://download.tensorflow.org/models/object_detection/tf2/20200711/efficientdet_d3_coco17_tpu-32.tar.gz) | 
| MobileNet V1 FPN 640 | `tensorflow-od1-ssd-mobilenet-v1-fpn-640x640-coco17-tpu-8` | [TensorFlow 모델 정원 링크](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_mobilenet_v1_fpn_640x640_coco17_tpu-8.tar.gz) | 
| MobileNet V2 FPNLite 320 | `tensorflow-od1-ssd-mobilenet-v2-fpnlite-320x320-coco17-tpu-8` | [TensorFlow 모델 정원 링크](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_mobilenet_v2_fpnlite_320x320_coco17_tpu-8.tar.gz) | 
| MobileNet V2 FPNLite 640 | `tensorflow-od1-ssd-mobilenet-v2-fpnlite-640x640-coco17-tpu-8` | [TensorFlow 모델 정원 링크](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8.tar.gz) | 
| ResNet50 V1 FPN 1024 | `tensorflow-od1-ssd-resnet50-v1-fpn-1024x1024-coco17-tpu-8` | [TensorFlow 모델 정원 링크](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_resnet50_v1_fpn_1024x1024_coco17_tpu-8.tar.gz) | 
| ResNet101 V1 FPN 640 | `tensorflow-od1-ssd-resnet101-v1-fpn-640x640-coco17-tpu-8` | [TensorFlow 모델 정원 링크](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_resnet101_v1_fpn_640x640_coco17_tpu-8.tar.gz) | 
| ResNet101 V1 FPN 1024 | `tensorflow-od1-ssd-resnet101-v1-fpn-1024x1024-coco17-tpu-8` | [TensorFlow 모델 정원 링크](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_resnet101_v1_fpn_1024x1024_coco17_tpu-8.tar.gz) | 
| ResNet152 V1 FPN 640 | `tensorflow-od1-ssd-resnet152-v1-fpn-640x640-coco17-tpu-8` | [TensorFlow 모델 정원 링크](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_resnet152_v1_fpn_640x640_coco17_tpu-8.tar.gz) | 
| ResNet152 V1 FPN 1024 | `tensorflow-od1-ssd-resnet152-v1-fpn-1024x1024-coco17-tpu-8` | [TensorFlow 모델 정원 링크](http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_resnet152_v1_fpn_1024x1024_coco17_tpu-8.tar.gz) | 

# 객체 감지 - TensorFlow 하이퍼파라미터
<a name="object-detection-tensorflow-Hyperparameter"></a>

하이퍼파라미터는 기계 학습 모델이 학습을 시작하기 전에 설정되는 파라미터입니다. Amazon SageMaker AI 기본 제공 객체 감지 - TensorFlow 알고리즘이 지원하는 하이퍼파라미터는 다음과 같습니다. 하이퍼파라미터 튜닝 관련 정보는 [객체 감지 - TensorFlow 모델 튜닝](object-detection-tensorflow-tuning.md) 섹션을 참조하세요.


| 파라미터 이름 | 설명 | 
| --- | --- | 
| batch\$1size |  훈련용 배치 크기. 유효한 값: 양수. 기본값: `3`.  | 
| beta\$11 |  `"adam"` 최적화 프로그램용 beta1. 1차 추정치의 지수 감소율을 나타냅니다. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.9`.  | 
| beta\$12 |  `"adam"` 최적화 프로그램용 beta2. 2차 추정치의 지수 감소율을 나타냅니다. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.999`.  | 
| early\$1stopping |  `"True"`를 통해 훈련 중 조기 중지 로직을 사용하도록 설정합니다. `"False"`인 경우에는 조기 중지를 사용하지 않습니다. 유효한 값: 문자열, 다음 중 하나: (`"True"` 또는 `"False"`). 기본값: `"False"`.  | 
| early\$1stopping\$1min\$1delta | 개선으로 인정받는 데 필요한 최소 변화. early\$1stopping\$1min\$1delta의 값보다 작은 절대 변화는 개선으로 인정되지 않습니다. early\$1stopping이 "True"로 설정된 경우에만 사용합니다.유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`].기본값: `0.0`. | 
| early\$1stopping\$1patience |  개선이 없는 상태에서도 훈련을 계속할 수 있는 에포크의 수. `early_stopping`이 `"True"`로 설정된 경우에만 사용합니다. 유효한 값: 양수. 기본값: `5`.  | 
| epochs |  훈련 epoch의 수. 유효한 값: 양수. 기본값: 소형 모델의 경우 `5`, 대형 모델의 경우 `1`  | 
| epsilon |  `"adam"`, `"rmsprop"`, `"adadelta"`, `"adagrad"` 최적화 프로그램의 엡실론입니다. 0으로 나눠지지 않도록 대개 작은 값으로 설정됩니다. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `1e-7`.  | 
| initial\$1accumulator\$1value |  `"adagrad"` 최적화 프로그램 전용 누적기의 시작 값 또는 파라미터별 모멘텀 값. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.1`.  | 
| learning\$1rate | 최적화 프로그램 학습률.유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`].기본값: `0.001`. | 
| momentum |  `"sgd"` 및 `"nesterov"` 최적화 프로그램의 모멘텀. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.9`.  | 
| optimizer |  옵티마이저 유형. 자세한 내용은 TensorFlow 설명서의 [최적화 프로그램](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers)을 참조하세요. 유횻값: 문자열, 다음 중 하나: (`"adam"`, `"sgd"`, `"nesterov"`, `"rmsprop"`, ` "adagrad"`, `"adadelta"`). 기본값: `"adam"`.  | 
| reinitialize\$1top\$1layer |  `"Auto"`로 설정하면 미세 조정 중에 최상위 분류 계층 파라미터가 다시 초기화됩니다. 증분 훈련에서 최상위 분류 계층 파라미터는 `"True"`로 설정된 경우를 제외하면 다시 초기화되지 않습니다. 유효한 값: 문자열, 다음 중 하나: (`"Auto"`, `"True"` 또는 `"False"`). 기본값: `"Auto"`.  | 
| rho |  `"adadelta"` 및 `"rmsprop"` 최적화 프로그램의 그라데이션에 대한 할인 계수입니다. 다른 옵티마이저의 경우 무시됩니다. 유효한 값: 부동 소수점, 범위: [`0.0`, `1.0`]. 기본값: `0.95`.  | 
| train\$1only\$1on\$1top\$1layer |  `"True"`인 경우 최상위 분류 계층 파라미터만 미세 조정됩니다. `"False"`인 경우 모든 모델 파라미터가 미세 조정됩니다. 유효한 값: 문자열, 다음 중 하나: (`"True"` 또는 `"False"`). 기본값: `"False"`.  | 

# 객체 감지 - TensorFlow 모델 튜닝
<a name="object-detection-tensorflow-tuning"></a>

하이퍼파라미터 튜닝이라고도 하는 자동 모델 튜닝은 데이터세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 알고리즘에서 계산하는 지표 중에서 목표 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 목표 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

모델 튜닝에 대한 추가 정보는 [SageMaker AI로 자동 모델 튜닝](automatic-model-tuning.md) 섹션을 참조하세요.

## 객체 감지 - TensorFlow 알고리즘으로 계산한 지표
<a name="object-detection-tensorflow-metrics"></a>

객체 감지 - TensorFlow 알고리즘으로 어떤 지표를 계산하는지 알아보려면 다음 차트를 참조하세요.


| 지표 이름 | 설명 | 최적화 방향 | Regex 패턴 | 
| --- | --- | --- | --- | 
| validation:localization\$1loss | 상자 예측의 현지화 손실률입니다. | 최소화 | `Val_localization=([0-9\\.]+)` | 

## 튜닝 가능한 객체 감지 - TensorFlow 하이퍼파라미터
<a name="object-detection-tensorflow-tunable-hyperparameters"></a>

다음 하이퍼파라미터를 사용하여 객체 감지 모델을 튜닝하세요. 객체 감지 목표 지표에 가장 큰 영향을 미치는 하이퍼파라미터는 `batch_size`, `learning_rate`, `optimizer`입니다. 선택한 `optimizer`에 따라 최적화 프로그램 관련 하이퍼파라미터(예: `momentum`, `regularizers_l2`, `beta_1`, `beta_2`, `eps`)를 튜닝하세요. 예를 들어, `adam`이 `optimizer`인 경우에만 `beta_1` 및 `beta_2`를 사용합니다.

각 `optimizer`에 사용되는 하이퍼파라미터의 유형에 대한 자세한 내용은 [객체 감지 - TensorFlow 하이퍼파라미터](object-detection-tensorflow-Hyperparameter.md)를 참조하세요.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| batch\$1size | IntegerParameterRanges | MinValue: 8, MaxValue: 512 | 
| beta\$11 | ContinuousParameterRanges | MinValue: 1e-6, MaxValue: 0.999 | 
| beta\$12 | ContinuousParameterRanges | MinValue: 1e-6, MaxValue: 0.999 | 
| eps | ContinuousParameterRanges | MinValue: 1e-8, MaxValue: 1.0 | 
| learning\$1rate | ContinuousParameterRanges | MinValue: 1e-6, MaxValue: 0.5 | 
| momentum | ContinuousParameterRanges | MinValue: 0.0, MaxValue: 0.999 | 
| optimizer | CategoricalParameterRanges | ['sgd', ‘adam’, ‘rmsprop’, 'nesterov', 'adagrad', 'adadelta'] | 
| regularizers\$1l2 | ContinuousParameterRanges | MinValue: 0.0, MaxValue: 0.999 | 
| train\$1only\$1on\$1top\$1layer | CategoricalParameterRanges | ['True', 'False'] | 
| initial\$1accumulator\$1value | CategoricalParameterRanges | MinValue: 0.0, MaxValue: 0.999 | 

# 의미 체계 분할 알고리즘
<a name="semantic-segmentation"></a>

SageMaker AI 의미 체계 분할 알고리즘은 컴퓨터 비전 애플리케이션을 개발하는 데 픽셀 수준의 세분화된 접근 방식을 제공합니다. 이 알고리즘은 미리 정의된 클래스 세트에서 가져온 클래스 레이블을 사용해 이미지의 모든 픽셀에 태그를 지정합니다. 태그 지정은 장면을 이해하는 데 기본적인 기능으로, 자율 주행 차량, 의료 영상 진단 및 로봇 감지 등과 같이 점점 늘어나고 있는 컴퓨터 비전 응용 분야에 중요합니다.

반면에 SageMaker AI [이미지 분류 - MXNet](image-classification.md)는 전체 이미지만 분석해 여러 출력 범주 중 하나로 분류하는 지도 학습 알고리즘입니다. [객체 감지 - MXNet](object-detection.md)은 이미지 내 객체의 모든 인스턴스를 감지해 분류하는 지도 학습 알고리즘으로, 직사각형 경계 상자를 사용해 이미지 내 객체의 위치와 크기를 나타냅니다.

의미 체계 분류 알고리즘 역시 이미지 내 모든 픽셀을 분류하기 때문에 이미지 내에 포함된 객체 모양에 대한 정보를 제공합니다. 세그먼트화 결과는 세그먼트화 마스크라고 하는 그레이스케일 이미지로 표현됩니다.** 세그먼트화 마스크는 입력 이미지와 모양이 동일한 그레이스케일 이미지입니다.

SageMaker AI 의미 체계 분할 알고리즘은 [MXNet Gluon 프레임워크와 Gluon CV 도구 키트](https://github.com/dmlc/gluon-cv)를 사용하여 구축되었습니다. 세 가지 기본 제공 알고리즘 중에서 선택하여 심층 신경망을 훈련할 수 있습니다. [Fully-Convolutional Network(FCN) 알고리즘 ](https://arxiv.org/abs/1605.06211), [Pyramid Scene Parsing(PSP) 알고리즘](https://arxiv.org/abs/1612.01105) 또는 [DeepLabV3](https://arxiv.org/abs/1706.05587)를 사용할 수 있습니다.

이러한 각 알고리즘에는 다음 두 가지 개별 구성 요소가 있습니다.
+ 백본(또는 인코더) - 기능에 대한 신뢰할 수 있는 활성화 맵을 생성하는 네트워크입니다.****
+ 디코더 - 인코딩된 활성화 맵에서 세그먼트화 마스크를 구성하는 네트워크입니다.**

또한 FCN, PSP 및 DeepLabV3 알고리즘에 대해 [ResNet50 또는 ResNet101](https://arxiv.org/abs/1512.03385) 중에서 백본을 선택할 수 있습니다. 이러한 백본에는 원래 [ImageNet](http://www.image-net.org/) 분류 작업에 대해 훈련된 결과물이 포함되어 있습니다. 자체 데이터를 사용하여 분류를 위해 이러한 백본을 미세하게 조정할 수 있습니다. 또는 자체 데이터만 사용해 처음부터 이러한 네트워크를 초기화 및 훈련할 수 있습니다. 디코더는 사전 훈련되지 않습니다.

추론을 위한 훈련된 모델을 배포하기 위해 SageMaker AI 호스팅 서비스를 사용합니다. 추론 중에는 세분화 마스크를 PNG 이미지 또는 각 픽셀의 개별 클래스에 대한 확률 세트로 요청할 수 있습니다. 이러한 마스크는 추가 다운스트림 이미지 처리 또는 다른 애플리케이션이 포함된 큰 파이프라인의 일부로 사용할 수 있습니다.

**Topics**
+ [의미 체계 분할 샘플 노트북](#semantic-segmentation-sample-notebooks)
+ [의미 체계 분할 알고리즘에 대한 입력/출력 인터페이스](#semantic-segmentation-inputoutput)
+ [의미 체계 분할 알고리즘에 대한 EC2 인스턴스 권장 사항](#semantic-segmentation-instances)
+ [의미 체계 분할 하이퍼파라미터](segmentation-hyperparameters.md)
+ [의미 체계 분할 모델 조정](semantic-segmentation-tuning.md)

## 의미 체계 분할 샘플 노트북
<a name="semantic-segmentation-sample-notebooks"></a>

SageMaker AI 의미 체계 분할 알고리즘을 사용하여 모델을 훈련시키고 배포하여 추론을 수행하는 샘플 Jupyter Notebook을 보려면 [의미 체계 분할 예시](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/semantic_segmentation_pascalvoc/semantic_segmentation_pascalvoc.html)를 참조하세요. SageMaker AI에서 예시 실행에 사용할 수 있는 Jupyter Notebook 인스턴스를 만들고 액세스하는 방법은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요.

모든 SageMaker AI 샘플 목록을 보려면 노트북 인스턴스를 만들어 열고 **SageMaker 예시** 탭을 선택합니다. 의미 체계 분할 예제 노트북은 **Amazon 알고리즘 소개** 아래에서 찾을 수 있습니다. 노트북을 열려면 **사용** 탭을 선택한 후 **Create copy(사본 생성)**를 선택합니다.

## 의미 체계 분할 알고리즘에 대한 입력/출력 인터페이스
<a name="semantic-segmentation-inputoutput"></a>

SageMaker AI 의미 체계 분할은 고객의 훈련 데이터세트가 [Amazon Simple Storage Service(Amazon S3)](https://aws.amazon.com/s3/)에 있을 것이라고 간주합니다. 훈련을 완료하면 Amazon S3에서 결과 모델 아티팩트를 생성합니다. SageMaker AI 의미 체계 분할의 입력 인터페이스 형식은 대부분의 표준화된 의미 체계 분할 벤치마킹 데이터세트와 유사합니다. Amazon S3의 데이터 세트는 4개의 디렉터리(2개는 이미지용, 2개는 주석용)를 사용하여 `train` 및 `validation`, 이렇게 두 가지 채널에서 제공됩니다. 주석은 압축되지 않은 PNG 이미지입니다. 데이터 세트에는 주석 매핑 설정 방법을 설명하는 레이블 맵이 포함되어 있을 수 있습니다. 레이블 맵이 없으면 이 알고리즘은 기본값을 사용합니다. 또한 Amazon S3의 Pipe 입력 모드에서 직접 훈련하기 위해 증강 매니페스트 이미지 형식(`application/x-image`)을 지원합니다. 추론을 위해 엔드포인트는 `image/jpeg` 콘텐츠 유형의 이미지를 허용합니다.

### 훈련 작동 방식
<a name="semantic-segmentation-inputoutput-training"></a>

훈련 데이터는 `train`, `train_annotation`, `validation` 및 `validation_annotation`, 이렇게 4가지 디렉터리로 분할됩니다. 이러한 각 디렉터리마다 채널이 하나씩 있습니다. 또한 데이터 세트에는 각 `train_annotation` 및 `validation_annotation` 채널에 대해 `label_map.json` 파일이 하나씩 있습니다. 사용자가 이러한 JSON 파일을 제공하지 않으면 SageMaker AI에서 기본 설정 레이블 맵을 제공합니다.

이러한 파일을 지정하는 데이터 세트는 다음 예와 비슷해야 합니다.

```
s3://bucket_name
    |
    |- train
                 |
                 | - 0000.jpg
                 | - coffee.jpg
    |- validation
                 |
                 | - 00a0.jpg
                 | - bananna.jpg
    |- train_annotation
                 |
                 | - 0000.png
                 | - coffee.png
    |- validation_annotation
                 |
                 | - 00a0.png
                 | - bananna.png
    |- label_map
                 | - train_label_map.json
                 | - validation_label_map.json
```

train 및 validation 디렉터리 내 모든 JPG 이미지는 `train_annotation` 및 `validation_annotation` 디렉터리 내에 이름이 같은 PNG 레이블 이미지를 하나씩 가지고 있습니다. 이러한 명명 규칙 덕분에 훈련 중 알고리즘이 레이블을 해당 이미지와 연결할 수 있습니다. `train`, `train_annotation`, `validation` 및 `validation_annotation` 채널은 필수입니다. 주석은 단일 채널 PNG 이미지입니다. 이 형식은 이미지 내 메타데이터(모드)가 알고리즘이 주석 이미지를 단일 채널 8비트 부호 없는 정수로 읽도록 지원하는 경우에 사용 가능합니다. 모드에 대한 Amazon의 자세한 지원 내용은 [Python 이미지 라이브러리 설명서](https://pillow.readthedocs.io/en/stable/handbook/concepts.html#modes)를 참조하세요. 8비트 픽셀 트루 컬러 `P` 모드를 사용하는 것이 좋습니다.

모든 사용 시 인코딩된 이미지는 간단한 8비트 정수입니다. 이러한 매핑에서 레이블 맵을 얻기 위해 이 알고리즘은 채널당 하나의 매핑 파일(레이블 맵이라고 함)을 사용합니다.** 레이블 맵은 실제 레이블 인덱스를 사용해 이미지 내 값을 매핑하는 데 사용됩니다. 고객이 제공하지 않는 경우 기본적으로 제공되는 기본 레이블 맵에서 주석 매트릭스(이미지)의 픽셀 값은 직접 레이블을 인덱싱합니다. 이러한 이미지는 그레이스케일 PNG 파일 또는 8비트 인덱스 PNG 파일입니다. 범위가 지정되지 않은 기본 케이스에 대한 레이블 맵 파일은 다음과 같습니다.

```
{
  "scale": "1"
}
```

눈으로 쉽게 확인할 수 있도록 약간의 대비를 주기 위해 일부 주석 소프트웨어에서는 레이블 이미지의 크기를 일정하게 조정합니다. 이를 위해 SageMaker AI 의미 체계 분할 알고리즘에서는 값을 실제 레이블 값으로 스케일 다운할 수 있는 재조정 옵션을 제공합니다. 축소할 때 값을 적절한 정수로 변환하지 마세요. 이 알고리즘은 기본적으로 스케일 값보다 작거나 같은 최대 정수로 지정하세요. 다음 코드는 레이블 값을 조정하기 위한 스케일 값을 설정하는 방법을 보여줍니다.

```
{
  "scale": "3"
}
```

다음 예제는 입력 주석 이미지의 `encoded_label` 값이 훈련 시 사용되는 `mapped_label` 값으로 매핑되는 경우 encoded\$1label 값을 조정하기 위해 `"scale"` 값을 사용하는 방법을 보여줍니다. 입력 주석 이미지의 레이블 값은 0, 3, 6이고, 스케일은 3이므로 훈련을 위해 0, 1, 2로 매핑됩니다.

```
encoded_label = [0, 3, 6]
mapped_label = [0, 1, 2]
```

경우에 따라 각 클래스에 대해 특정 색상 매핑을 지정해야 할 수도 있습니다. `label_map` 파일의 다음 예제에 표시된 것처럼 레이블 매핑에서 맵 옵션을 사용합니다.

```
{
    "map": {
        "0": 5,
        "1": 0,
        "2": 2
    }
}
```

이 예제의 레이블 매핑은 다음과 같습니다.

```
encoded_label = [0, 5, 2]
mapped_label = [1, 0, 2]
```

레이블 매핑을 활용하는 경우 다른 주석 시스템 및 주석 소프트웨어를 사용해 복잡한 전처리 없이 데이터를 얻을 수 있습니다. 레이블 맵은 채널당 하나씩 제공할 수 있습니다. `label_map` 채널의 레이블 맵 파일은 4가지 디렉터리 구조에 대해 다음 명명 규칙을 따라야 합니다. 레이블 맵을 제공하지 않은 경우 알고리즘은 스케일을 1(기본값)로 가정합니다.

### 증강 매니페스트 형식을 사용한 훈련
<a name="semantic-segmentation-inputoutput-training-augmented-manifest"></a>

증강 매니페스트 형식을 사용하면 RecordIO 파일을 생성할 필요 없이 파이프 모드에서 훈련할 수 있습니다. 증강 매니페스트 파일에는 데이터 객체가 포함되며 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청에 설명된 대로 [JSON 행](http://jsonlines.org/) 형식이어야 합니다. 매니페스트의 각 행은 이미지에 대한 Amazon S3 URI와 주석 이미지에 대한 URI를 포함하고 있는 항목입니다.

매니페스트 파일의 각 JSON 객체에는 `source-ref` 키가 포함되어 있어야 합니다. `source-ref` 키에는 이미지에 대한 Amazon S3 URI 값이 포함되어 있어야 합니다. 레이블은 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청에서 지정한 대로 `AttributeNames` 파라미터 값 아래에서 제공됩니다. 또한 metadata 태그 아래에 추가 메타데이터가 포함될 수 있지만 이들은 알고리즘에서 무시됩니다. 다음 예제에서 `AttributeNames`은 이미지 및 주석 참조 `["source-ref", "city-streets-ref"]`의 목록에 포함됩니다. 이러한 이름에는 `-ref`가 추가되어 있어야 합니다. Semantic Segmentation 알고리즘을 증강 매니페스트와 함께 사용하는 경우 `RecordWrapperType` 파라미터 값이 `"RecordIO"`이고 `ContentType` 파라미터 값이 `application/x-recordio`여야 합니다.

```
{"source-ref": "S3 bucket location", "city-streets-ref": "S3 bucket location", "city-streets-metadata": {"job-name": "label-city-streets", }}
```

증강 매니페스트 파일에 대한 추가 정보는 [훈련 작업용 증강 매니페스트 파일](augmented-manifest.md) 섹션을 참조하세요.

### 점진적 훈련
<a name="semantic-segmentation-inputoutput-incremental-training"></a>

또한 이전에 SageMaker AI를 사용해 훈련한 모델을 새 모델의 훈련을 위한 시드로 지정할 수 있습니다. 이러한 점진적 훈련은 동일하거나 유사한 데이터를 사용하여 새 모델을 훈련하려는 경우 훈련 시간을 줄여줍니다. 현재 점진적 훈련은 내장된 SageMaker AI 의미 체계 분할로 훈련된 모델에 대해서만 지원됩니다.

사전 훈련된 자체 모델을 사용하려면 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청의 `InputDataConfig`에서 `ChannelName`을 "model"로 지정합니다. model 채널의 `ContentType`을 `application/x-sagemaker-model`로 설정합니다. 네트워크 아키텍처를 정의하는 `backbone`, `algorithm`, `crop_size` 및 `num_classes` 입력 파라미터가 model 채널로 업로드하는 새 모델 및 사전 훈련된 모델의 입력 하이퍼파라미터에 동일하게 지정되어 있어야 합니다. 사전 훈련된 모델 파일의 경우 SageMaker AI 출력의 압축된(.tar.gz) 아티팩트를 사용할 수 있습니다. 입력 데이터에는 이미지 형식만 사용할 수 있습니다. 점진적 훈련에 대한 자세한 내용 및 점진적 훈련 사용 방법에 대한 지침은 [Amazon SageMaker AI에서 점진적 훈련 사용](incremental-training.md) 섹션을 참조하세요.

### 추론 생성
<a name="semantic-segmentation-inputoutput-inference"></a>

엔드포인트에 배포된 훈련된 모델을 쿼리하려면 필요한 출력 유형을 나타내는 `AcceptType` 및 이미지를 제공해야 합니다. 엔드포인트는 `image/jpeg` 콘텐츠 유형의 JPEG 이미지를 사용합니다. `image/png`의 `AcceptType`을 요청하면 이 알고리즘은 PNG 파일 및 세분화 마스크를 레이블과 동일한 형식으로 출력합니다. `application/x-recordio-protobuf`의 수락 유형을 요청하면 이 알고리즘은 recordio-protobuf 형식으로 인코딩된 클래스 확률을 반환합니다. recordio-protobuf 형식은 3차원이 클래스 수와 동일한 크기인 3D 텐서를 출력합니다. 이 구성 요소는 각 픽셀에 대한 개별 클래스 레이블의 확률을 나타냅니다.

## 의미 체계 분할 알고리즘에 대한 EC2 인스턴스 권장 사항
<a name="semantic-segmentation-instances"></a>

SageMaker AI 의미 체계 분할 알고리즘은 훈련을 위해 GPU 인스턴스만 지원하기 때문에 배치 크기가 큰 훈련의 경우 메모리 용량이 더 큰 GPU 인스턴스를 사용하는 것이 좋습니다. 단일 머신 구성의 P2, P3, G4dn 또는 G5 인스턴스를 사용하여 알고리즘을 훈련할 수 있습니다.

추론에는 CPU 인스턴스(예: C5 및 M5)나 GPU 인스턴스(예: P3 및 G4dn), 또는 둘 다를 사용할 수 있습니다. 추론을 위해 CPU, GPU, 메모리 및 네트워킹 용량의 다양한 조합을 제공하는 인스턴스 유형에 대한 자세한 정보는 [Amazon SageMaker AI ML 인스턴스 유형](https://aws.amazon.com/sagemaker/pricing/instance-types/)을 참조하세요.

# 의미 체계 분할 하이퍼파라미터
<a name="segmentation-hyperparameters"></a>

다음 표에는 네트워크 아키텍처, 데이터 입력 및 훈련을 위해 Amazon SageMaker AI 의미 체계 분할 알고리즘에서 지원하는 하이퍼파라미터가 나와 있습니다. [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 요청의 `AlgorithmName`에 훈련을 위한 의미 체계 분류를 지정합니다.

**네트워크 아키텍처 하이퍼파라미터**


| 파라미터 이름 | 설명 | 
| --- | --- | 
| backbone |  알고리즘의 인코더 구성 요소에 사용되는 백본 **선택 사항** 유효값: `resnet-50`, `resnet-101`  기본값: `resnet-50`  | 
| use\$1pretrained\$1model |  백본에 사전 훈련된 모델을 사용할지 여부 **선택 사항** 유효값: `True`, `False`  기본값: `True`  | 
| algorithm |  의미 체계 분할에 사용할 알고리즘  **선택 사항** 유효한 값: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/segmentation-hyperparameters.html) 기본값: `fcn`  | 

**데이터 하이퍼파라미터**


| 파라미터 이름 | 설명 | 
| --- | --- | 
| num\$1classes |  분할할 클래스 수 **필수** 유효한 값: 2 ≤ 양수 ≤ 254  | 
| num\$1training\$1samples |  훈련 데이터의 샘플 수. 이 알고리즘은 이 값을 사용하여 학습률 스케줄러를 설정합니다. **필수** 유효한 값: 양수  | 
| base\$1size |  자르기 전에 이미지 크기를 재조정하는 방법을 정의합니다. 긴 크기의 길이는 0.5\$12.0 사이의 난수를 곱하는 `base_size`로 설정되도록 이미지 크기가 재조정되고, 종횡비를 유지하기 위해 짧은 크기가 계산됩니다. **선택 사항** 유효한 값: 양수 > 16 기본값: 520  | 
| crop\$1size |  훈련 중 입력 이미지의 이미지 크기. `base_size`에 따라 입력 이미지의 크기를 임의로 재조정한 다음 측면 길이 `crop_size`로 이미지를 임의의 사각형으로 자릅니다. `crop_size`는 자동으로 8의 배수로 반올림됩니다. **선택 사항** 유효한 값: 양수 > 16 기본값: 240  | 

**훈련 파라미터**


| 파라미터 이름 | 설명 | 
| --- | --- | 
| early\$1stopping |  훈련 중 조기 중지 로직 사용 여부 **선택 사항** 유효값: `True`, `False`  기본값: `False`  | 
| early\$1stopping\$1min\$1epochs |  실행해야 하는 최소 epoch 수 **선택 사항** 유효한 값: 정수 기본값: 5  | 
| early\$1stopping\$1patience |  알고리즘이 조기 중지를 강제하기 전에 성능 저하에 대한 내결함성을 충족하는 epoch 수 **선택 사항** 유효한 값: 정수 기본값: 4  | 
| early\$1stopping\$1tolerance |  훈련 작업 mIOU에서 점수의 상대적 개선이 이 값보다 작은 경우 조기 중지는 해당 epoch가 개선되지 않았다고 간주합니다. `early_stopping` = `True`인 경우에만 사용합니다. **선택 사항** 유효한 값: 0 ≤ 부동 소수점 ≤ 1 기본 값: 0.0  | 
| epochs |  훈련할 epoch 수 **선택 사항** 유효한 값: 양수 기본값: 10  | 
| gamma1 |  `rmsprop`에 대한 기울기 제곱의 이동 평균에 대한 감소 계수. `rmsprop`에만 사용됩니다. **선택 사항** 유효한 값: 0 ≤ 부동 소수점 ≤ 1 기본 값: 0.9  | 
| gamma2 |  `rmsprop`에 대한 모멘텀 계수 **선택 사항** 유효한 값: 0 ≤ 부동 소수점 ≤ 1 기본 값: 0.9  | 
| learning\$1rate |  초기 학습률. **선택 사항** 유효한 값: 0 < 부동 소수점 ≤ 1 기본값: 0.001  | 
| lr\$1scheduler |  시간에 따른 감소를 제어하는 학습률 일정의 셰이프(모양) **선택 사항** 유효한 값:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/segmentation-hyperparameters.html) 기본값: `poly`  | 
| lr\$1scheduler\$1factor |  `lr_scheduler`가 `step`으로 설정된 경우, `lr_scheduler_step`에 의해 지정된 각 에포크 이후 `learning_rate`를 감산(곱하기) 할 비율입니다. 그렇지 않으면 무시됩니다. **선택 사항** 유효한 값: 0 ≤ 부동 소수점 ≤ 1 기본값: 0.1  | 
| lr\$1scheduler\$1step |  `learning_rate`가 `lr_scheduler_factor`로 감소(곱하기)된 후 쉼표로 구분된 에포크 목록입니다. 예를 들어 값이 `"10, 20"`으로 설정된 경우 `learning-rate`는 10번째 에포크 이후 `lr_scheduler_factor`만큼 감소하고, 20번째 에포크 이후 이 요소만큼 다시 감소합니다. `lr_scheduler`가 `step`으로 설정된 경우 **조건부 필수**. 그렇지 않으면 무시됩니다. 유효한 값: 문자열 기본값: (사용 시 값이 필요하므로 기본값은 없습니다.)  | 
| mini\$1batch\$1size |  훈련용 배치 크기. `mini_batch_size`가 크면 일반적으로 훈련 속도가 빨라지지만 메모리 부족해질 수 있습니다. 메모리 사용량은 `mini_batch_size` 및 `image_shape` 파라미터의 값과 백본 아키텍처의 영향을 받습니다. **선택 사항** 유효한 값: 양수  기본값: 16  | 
| momentum |  `sgd` 옵티마이저의 모멘텀. 다른 옵티마이저를 사용하는 경우 의미 체계 분할 알고리즘은 이 파라미터를 무시합니다. **선택 사항** 유효한 값: 0 < 부동 소수점 ≤ 1 기본 값: 0.9  | 
| optimizer |  옵티마이저 유형. 옵티마이저에 대한 자세한 내용을 보려면 해당 링크를 선택하세요. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/segmentation-hyperparameters.html) **선택 사항** 유효한 값: `adam`, `adagrad`, `nag`, `rmsprop`, `sgd`  기본값: `sgd`  | 
| syncbn |  `True`로 설정하면 GPU에서 처리된 모든 샘플에 대한 배치 정규화 평균과 분산이 계산됩니다. **선택 사항**  유효값: `True`, `False`  기본값: `False`  | 
| validation\$1mini\$1batch\$1size |  검증용 배치 크기. `mini_batch_size`가 크면 일반적으로 훈련 속도가 빨라지지만 메모리기 부족해질 수 있습니다. 메모리 사용량은 `mini_batch_size` 및 `image_shape` 파라미터의 값과 백본 아키텍처의 영향을 받습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/segmentation-hyperparameters.html) **선택 사항** 유효한 값: 양수 기본값: 16  | 
| weight\$1decay |  `sgd` 옵티마이저에 대한 가중치 감소 계수. 다른 옵티마이저를 사용하는 경우 이 알고리즘은 이 파라미터를 무시합니다. **선택 사항** 유효한 값: 0 < 부동 소수점 < 1 기본값: 0.0001  | 

# 의미 체계 분할 모델 조정
<a name="semantic-segmentation-tuning"></a>

하이퍼파라미터 튜닝이라고도 하는 자동 모델 튜닝은 데이터세트에 대한 광범위한 하이퍼파라미터를 테스트하는 여러 작업을 실행하여 최적의 모델 버전을 찾습니다.** 튜닝 가능한 하이퍼파라미터, 각 하이퍼파라미터에 대한 값 범위 및 목표 지표를 선택합니다. 알고리즘에서 계산하는 지표 중에서 목표 지표를 선택합니다. 자동 모델 튜닝은 선택한 하이퍼파라미터를 검색하여 목표 지표를 최적화하는 모델을 만드는 값 조합을 찾습니다.

## 의미 체계 분할 알고리즘으로 계산된 지표
<a name="semantic-segmentation-metrics"></a>

의미 체계 분할 알고리즘은 두 개의 검증 지표를 보고합니다. 하이퍼파라미터 값을 튜닝할 때 목표 지표로 이 지표 중 하나를 선택합니다.


| 지표 이름 | 설명 | 최적화 방향 | 
| --- | --- | --- | 
| validation:mIOU |  예측된 세그먼트화와 실측 데이터의 교집합 영역을 검증 세트에 있는 이미지의 합체 면적으로 나눈 값입니다. 자카드 지수라고도 합니다.  |  최대화  | 
| validation:pixel\$1accuracy | 검증 세트의 이미지에서 올바르게 분류된 픽셀의 백분율입니다. |  최대화  | 

## 튜닝 가능한 의미 체계 분할 하이퍼파라미터
<a name="semantic-segmentation-tunable-hyperparameters"></a>

의미 체계 분할 알고리즘에 대한 다음 하이퍼파라미터를 튜닝할 수 있습니다.


| 파라미터 이름 | 파라미터 유형 | 권장 범위 | 
| --- | --- | --- | 
| learning\$1rate |  ContinuousParameterRange  |  MinValue: 1e-4, MaxValue: 1e-1  | 
| mini\$1batch\$1size |  IntegerParameterRanges  |  MinValue: 1, MaxValue: 128  | 
| momentum |  ContinuousParameterRange  |  MinValue: 0.9, MaxValue: 0.999  | 
| optimzer |  CategoricalParameterRanges  |  ['sgd', 'adam', 'adadelta']  | 
| weight\$1decay |  ContinuousParameterRange  |  MinValue: 1e-5, MaxValue: 1e-3  | 

# Amazon SageMaker AI를 통한 강화형 기계 학습 사용
<a name="reinforcement-learning"></a>

강화형 기계 학습(RL)은 컴퓨터 과학, 신경과학, 심리학 등의 분야를 결합하여 상황을 행동에 매핑하여 수치적 보상 신호를 최대화하는 방법을 결정합니다. RL의 보상 신호에 대한 이러한 개념은 인간의 뇌가 어떤 행동이 보상을 극대화하고 처벌을 최소화하는지 결정을 내리는 방법을 연구하는 신경과학 연구에서 비롯되었습니다. 대부분의 상황에서 인간은 어떤 행동을 취해야 하는지에 대한 명확한 지시를 받지 않고, 어떤 행동이 가장 즉각적인 보상을 가져오는지, 그리고 그러한 행동이 미래의 상황과 결과에 어떤 영향을 미치는지 모두 학습해야 합니다.

RL 문제는 역학 시스템 이론에서 비롯된 마르코프 의사 결정 프로세스(MDP)를 사용하여 공식화됩니다. MDP는 훈련 에이전트가 최종 목표를 달성하기 위해 일정 기간 동안 부딪히는 실제 문제에 대한 세부 정보를 높은 수준으로 캡처하는 것을 목표로 합니다. 훈련 에이전트는 환경의 현재 상태를 파악하고 훈련 에이전트의 현재 상태에 영향을 줄 수 있는 가능한 조치를 식별할 수 있어야 합니다. 또한 훈련 에이전트의 목표는 환경 상태와 밀접한 상관 관계가 있어야 합니다. 이러한 방식으로 구성된 문제의 해결 방법을 강화형 기계 학습 방법이라고 합니다.

## 강화형 기계 학습 패러다임, 지도 학습 패러다임, 비지도 학습 패러다임의 차이점은 무엇입니까?
<a name="rl-differences"></a>

기계 훈련은 지도 훈련, 비지도 훈련, 강화라는 세 가지 훈련 패러다임으로 나눌 수 있습니다.

지도 학습에서는 외부 감독자가 레이블이 지정된 예제로 구성된 훈련 세트를 제공합니다. 각 예제는 상황에 대한 정보를 포함하고, 범주에 속하며, 해당 범주를 식별하는 레이블이 있습니다. 지도 학습의 목표는 훈련 데이터에 없는 상황을 정확하게 예측하기 위해 일반화하는 것입니다.

반면, RL은 대화형 문제를 다루기 때문에 상담원이 접할 수 있는 올바른 레이블이 있는 상황의 가능한 모든 예를 컬렉션하는 것은 불가능합니다. 이러한 유형의 훈련은 상담원이 자신의 경험을 통해 정확하게 훈련하고 그에 따라 조정할 수 있을 때 가장 가능성이 높습니다.

비지도 학습에서 에이전트는 레이블이 지정되지 않은 데이터 내의 구조를 발견하여 학습합니다. RL 에이전트는 경험을 바탕으로 구조를 찾아내는 것이 도움이 될 수 있지만 RL의 유일한 목적은 보상 신호를 극대화하는 것입니다.

**Topics**
+ [강화형 기계 학습 패러다임, 지도 학습 패러다임, 비지도 학습 패러다임의 차이점은 무엇입니까?](#rl-differences)
+ [강화 학습이 중요한 이유는 무엇입니까?](#rl-why)
+ [마코프 의사결정 과정(MDP)](#rl-terms)
+ [Amazon SageMaker AI RL의 주요 기능](#sagemaker-rl)
+ [강화형 기계 학습 샘플 노트북](#sagemaker-rl-notebooks)
+ [Amazon SageMaker AI RL을 사용한 샘플 RL 워크플로](sagemaker-rl-workflow.md)
+ [Amazon SageMaker AI의 RL 환경](sagemaker-rl-environments.md)
+ [Amazon SageMaker AI RL을 사용한 분산 훈련](sagemaker-rl-distributed.md)
+ [Amazon SageMaker AI RL을 사용한 하이퍼파라미터 튜닝](sagemaker-rl-tuning.md)

## 강화 학습이 중요한 이유는 무엇입니까?
<a name="rl-why"></a>

RL은 공급망 관리, HVAC 시스템, 산업용 로봇, 게임 인공 지능, 대화 시스템, 자율 주행 차량과 같은 크고 복잡한 문제를 해결하는 데 매우 적합합니다. RL 모델은 에이전트가 취하는 모든 행동에 대해 보상과 처벌을 받는 연속 프로세스를 통해 학습하기 때문에 동적인 환경에서 불확실성이 존재할 때 시스템이 의사를 결정하도록 훈련할 수 있습니다.

## 마코프 의사결정 과정(MDP)
<a name="rl-terms"></a>

RL은 마코프 의사결정 과정(MDP)라는 모델을 기반으로 합니다. MDP는 일련의 시간 단계로 구성됩니다. 각 시간 단계는 다음과 같은 요소로 구성됩니다.

환경  
RL 모델이 작동하는 공간을 정의합니다. 이러한 공간은 실제 환경 또는 시뮬레이터일 수 있습니다. 예를 들어, 실제 도로에서 자율 주행 차량을 훈련하는 경우는 환경이 실제 환경입니다. 도로 위를 주행하는 자율 주행 차량을 모델링하는 컴퓨터 프로그램을 훈련하는 경우에는 환경이 시뮬레이터입니다.

State  
환경에 대한 모든 정보와 미래와 관련된 과거의 모든 단계를 지정합니다. 예를 들어, 로봇이 언제든지 어떤 방향으로든 이동할 수 있는 RL 모델에서는 현재 시간 단계에서 로봇의 위치가 상태입니다. 로봇 위치를 알면 해당 위치에 도착하기 위해 어떤 단계를 수행했는지 알 필요가 없기 때문입니다.

작업  
작업은 에이전트가 수행합니다. 예를 들어 로봇이 앞으로 나아갑니다.

보상  
에이전트가 수행한 마지막 작업의 상태 값을 나타내는 숫자입니다. 예를 들어, 목표가 로봇이 보물을 찾도록 하는 것이라면 보물을 찾은 경우 보상이 5이고, 보물을 찾지 못한 경우에는 보상이 0일 수 있습니다. RL 모델은 장기간 누적된 보상을 최적화하는 전략을 찾으려고 합니다. 이러한 전략을 *정책*이라고 합니다.

관측치  
각 단계마다 에이전트가 사용할 수 있는 환경 상태에 대한 정보입니다. 전체 상태이거나 상태의 일부분일 수 있습니다. 예를 들어, 체스 시합 모델의 에이전트는 모든 단계에서 체스판의 전체 상태를 관찰할 수 있지만 미로 속의 로봇은 현재 마주하고 있는 미로의 작은 부분 밖에 관찰할 수 없습니다.

일반적으로 RL의 훈련은 많은 *에피소드*로 구성됩니다. 에피소드는 초기 상태에서 환경이 최종 상태에 도달할 때까지 MDP의 모든 시간 단계로 구성됩니다.

## Amazon SageMaker AI RL의 주요 기능
<a name="sagemaker-rl"></a>

SageMaker AI RL에서 RL 모델을 훈련하려면 다음 구성 요소를 사용합니다.
+ 딥 러닝(DL) 프레임워크. 현재, SageMaker AI는 TensorFlow 및 Apache MXNet에서 RL을 지원합니다.
+ RL 도구 키트. RL 도구 키트는 에이전트와 환경 간의 상호 작용을 관리하고, RL 알고리즘의 광범위한 상태 선택 항목을 제공합니다. SageMaker AI는 Intel Coach 및 Ray RLlib 도구 키트를 지원합니다. Intel Coach에 대한 자세한 정보는 [https://nervanasystems.github.io/coach/](https://nervanasystems.github.io/coach/)를 참조하세요. Ray RLlib에 대한 자세한 정보는 [https://ray.readthedocs.io/en/latest/rllib.html](https://ray.readthedocs.io/en/latest/rllib.html)을 참조하세요.
+ RL 환경. 사용자 지정 환경, 오픈 소스 환경 또는 상용 환경을 사용할 수 있습니다. 자세한 내용은 [Amazon SageMaker AI의 RL 환경](sagemaker-rl-environments.md) 단원을 참조하세요.

다음 다이어그램은 SageMaker AI RL에서 지원되는 RL 구성 요소를 보여 줍니다.

![\[SageMaker AI RL에서 지원되는 RL 구성 요소.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/sagemaker-rl-support.png)


## 강화형 기계 학습 샘플 노트북
<a name="sagemaker-rl-notebooks"></a>

전체 코드 예시를 보려면 SageMaker AI 예시 리포지토리의 [강화형 기계 학습 샘플 노트북](https://github.com/aws/amazon-sagemaker-examples/tree/main/reinforcement_learning)을 참조하세요.

# Amazon SageMaker AI RL을 사용한 샘플 RL 워크플로
<a name="sagemaker-rl-workflow"></a>

다음 예시에서는 Amazon SageMaker AI RL을 사용한 RL 모델 개발 단계에 대해 설명합니다.

1. **RL 문제 공식화** - 먼저 비즈니스 문제를 RL 문제로 공식화합니다. 예를 들어, 자동 조정을 사용하면 정의한 조건에 따라 서비스가 용량을 동적으로 늘리거나 줄일 수 있습니다. 현재, 이렇게 하려면 경보, 크기 조정 정책, 임곗값 및 기타 수동 단계를 설정해야 합니다. RL을 사용하여 이러한 문제를 해결하기 위해 마코프 의사결정 과정의 다음 구성 요소를 정의합니다.

   1. **목표** - 원하는 로드 프로필과 일치하도록 인스턴스 용량을 조정합니다.

   1. **환경** - 로드 프로필이 포함된 사용자 지정 환경입니다. 일별 및 주별 변형 및 일시적 급증을 고려해 시뮬레이션된 로드를 생성합니다. 시뮬레이션된 시스템에는 새 리소스를 요청하는 경우와 새 리소스를 요청 제공에 사용할 수 있는 경우 간에 지연이 있습니다.

   1. **상태** - 현재 로드, 실패한 작업 수 및 활성 시스템 수

   1. **조치** - 동일한 수의 인스턴스를 제거, 추가 또는 유지합니다.

   1. **보상** - 성공적인 거래에 대해서는 긍정적인 보상을, 지정된 임곗값을 초과하는 거래에 대해서는 높은 벌금을 부과합니다.

1. **RL 환경 정의** - RL 환경은 RL 에이전트가 상호 작용하는 실제 세계일 수도 있고 실제 세계의 시뮬레이션일 수도 있습니다. 사용자는 Gym 인터페이스를 사용하여 개발된 오픈 소스 환경 및 사용자 지정 환경과 MATLAB 및 SimuLink와 같은 상업용 시뮬레이션 환경을 연결할 수 있습니다.

1. **프리셋 정의** - 프리셋은 RL 훈련 작업을 구성하고 RL 알고리즘의 하이퍼파라미터를 정의합니다.

1. **훈련 코드 작성** - 훈련 코드를 Python 스크립트로 작성해 SageMaker AI 훈련 작업에 전달합니다. 훈련 코드에서, 환경 파일과 사전 설정 파일을 가져온 후 `main()` 함수를 정의합니다.

1. **RL 모델 훈련** - [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)의 SageMaker AI `RLEstimator`를 사용하여 RL 훈련 작업을 시작합니다. 로컬 모드를 사용하는 경우에는 훈련 작업이 노트북 인스턴스에서 실행됩니다. 훈련에 SageMaker AI를 사용하는 경우 사용자는 GPU 또는 CPU 인스턴스를 선택할 수 있습니다. 훈련 작업의 결과는 로컬 모드에서 훈련하는 경우에는 로컬 디렉터리에, SageMaker AI 훈련을 사용하는 경우에는 Amazon S3에 저장합니다.

   `RLEstimator`에는 다음 정보가 파라미터로 필요합니다.

   1. 환경, 사전 설정 및 훈련 코드가 업로드되는 소스 디렉터리

   1. 훈련 스크립트 경로

   1. 사용하려는 RL 도구 키트 및 딥 러닝 프레임워크. RL 컨테이너에 대한 Amazon ECR 경로를 자동으로 확인합니다.

   1. 훈련 파라미터(예: 인스턴스 수, 작업 이름 및 출력을 위한 S3 경로)

   1. 로그에서 캡처하려는 지표 정의. 이러한 정의는 CloudWatch 및 SageMaker AI 노트북에서도 시각화할 수 있습니다.

1. **훈련 지표 및 결과 시각화** - RL 모델을 사용하는 훈련 작업이 완료된 후 사용자는 CloudWatch에서 훈련 작업에서 정의한 지표를 볼 수 있습니다. 또한 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 분석 라이브러리를 사용하여 노트북에서 지표를 그래프로 작성할 수도 있습니다. 지표를 시각화하면 보상으로 측정되는 모델의 성능이 시간이 흐름에 따라 어떻게 개선되는지 확인할 수 있습니다.
**참고**  
로컬 모드에서 훈련하는 경우에는 CloudWatch에서 지표를 시각화할 수 없습니다.

1. **모델 평가** - 검사 채널에서 평가 및 추론을 위해 이전에 훈련된 모델의 체크포인트 데이터를 전달할 수 있습니다. 로컬 모드에서는 로컬 디렉터리를 사용합니다. SageMaker AI 훈련 모드에서는 먼저, 데이터를 S3로 업로드해야 합니다.

1. **RL 모델 배포** - 마지막으로를 사용하여 SageMaker AI 컨테이너 또는 엣지 디바이스에서 호스팅되는 엔드포인트에 훈련된 모델을 배포합니다 AWS IoT Greengrass.

SageMaker AI에서 RL을 사용하는 방법은 [SageMaker Python SDK에서 RL 사용](https://sagemaker.readthedocs.io/en/stable/using_rl.html)을 참조하세요.

# Amazon SageMaker AI의 RL 환경
<a name="sagemaker-rl-environments"></a>

Amazon SageMaker AI RL은 환경을 사용하여 실제 시나리오를 모방합니다. 시뮬레이터는 환경의 현재 상태와 에이전트가 수행한 작업을 감안해 작업의 영향을 처리하고 다음 상태 및 보상을 반환합니다. 시뮬레이터는 실제로 에이전트를 훈련하는 것이 안전하지 않은 경우(예: 드론 날리기) 또는 RL 알고리즘이 수렴되는 데 시간이 오래 걸리는 경우(예: 체스를 두는 경우) 유용합니다.

다음 다이어그램은 카 레이싱 게임을 위한 시뮬레이터의 상호 작용의 예를 보여줍니다.

![\[카 레이싱 게임을 위한 시뮬레이터의 상호 작용의 예.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/sagemaker-rl-flow.png)


이 시뮬레이션 환경은 에이전트와 시뮬레이터로 구성되어 있습니다. 여기서, 컨볼루션 신경망(CNN)은 시뮬레이터의 이미지를 사용하여 게임 컨트롤러를 제어하기 위한 작업을 생성합니다. 이 환경에서는 여러 시뮬레이션을 사용하여 `state_t`, `action`, `state_t+1` 및 `reward_t+1` 형태의 훈련 데이터를 생성합니다. 보상 정의는 중요하며, RL 모델 품질에 영향을 미칩니다. 보상 함수의 몇 가지 예를 제공하되 사용자가 구성할 수 있도록 설정하고자 합니다.

**Topics**
+ [SageMaker AI RL에서 환경에 OpenAI Gym 인터페이스 사용](#sagemaker-rl-environments-gym)
+ [오픈 소스 환경 사용](#sagemaker-rl-environments-open)
+ [상용 환경 사용](#sagemaker-rl-environments-commercial)

## SageMaker AI RL에서 환경에 OpenAI Gym 인터페이스 사용
<a name="sagemaker-rl-environments-gym"></a>

SageMaker AI RL에서 OpenAI Gym 환경을 사용하려면 다음 API 요소를 사용합니다. OpenAI Gym에 대한 추가 정보는 [Gym 설명서](https://www.gymlibrary.dev/)를 참조하세요.
+ `env.action_space` - 에이전트가 취할 수 있는 작업을 정의하고, 각 작업이 연속적인지 또는 연속적인지 지정하고, 작업이 연속적인지 최소 및 최대값을 지정합니다.
+ `env.observation_space` - 에이전트가 환경에서 받은 관측치와 더불어 연속 관측치에 대한 최소값 및 최대값을 정의합니다.
+ `env.reset()` - 훈련 에피소드를 초기화합니다. `reset()` 함수는 환경의 최초 상태를 반환하고, 에이전트는 최초 상태를 사용하여 첫 번째 작업을 수행합니다. 그런 다음 에피소드가 최종 상태에 도달할 때까지 `step()`에 작업이 반복적으로 전송됩니다. `step()`에서 `done = True`를 반환하면 에피소드가 종료된 것입니다. RL 도구 키트는 `reset()`을 호출해 환경을 다시 초기화합니다.
+ `step()` - 에이전트 액션을 입력으로 받아 환경의 다음 상태, 보상, 에피소드 종료 여부, 디버깅 정보를 전달하는 `info` 사전을 출력합니다. 입력 검증은 환경의 책임입니다.
+ `env.render()` - 시각화가 적용된 환경에 사용됩니다. RL 도구 키트는 이 함수를 호출하여 `step()` 함수를 호출한 후 매번 환경의 시각화를 캡처합니다.

## 오픈 소스 환경 사용
<a name="sagemaker-rl-environments-open"></a>

사용자는 자체 컨테이너를 빌드하여 SageMaker AI RL에서 EnergyPlus 및 RoboSchool 등과 같은 오프 소스 환경을 사용할 수 있습니다. EnergyPlus에 대한 추가 정보는 [https://energyplus.net/](https://energyplus.net/)을 참조하세요. RoboSchool에 대한 추가 정보는 [https://github.com/openai/roboschool](https://github.com/openai/roboschool)을 참조하세요. [SageMaker AI 예시 리포지토리](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/reinforcement_learning)의 HVAC 및 RoboSchool 예시는 SageMaker AI RL과 함께 사용할 사용자 지정 컨테이너를 구축하는 방법을 보여줍니다.

## 상용 환경 사용
<a name="sagemaker-rl-environments-commercial"></a>

사용자는 자체 컨테이너를 빌드하여 SageMaker AI RL에서 MATLAB 및 Simulink 등과 같은 상용 환경을 사용할 수 있습니다. 자체 라이선스를 관리해야 합니다.

# Amazon SageMaker AI RL을 사용한 분산 훈련
<a name="sagemaker-rl-distributed"></a>

Amazon SageMaker AI RL은 멀티 코어 및 다중 인스턴스 분산 훈련을 지원합니다. 사용 사례에 따라 훈련 및/또는 환경 롤아웃을 분산할 수 있습니다. 예를 들어, SageMaker AI RL은 다음 분산 시나리오에 적합합니다.
+ 단일 훈련 인스턴스 및 인스턴스 유형이 동일한 여러 롤아웃 인스턴스 예시는 [SageMaker AI 예시 리포지토리](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/reinforcement_learning)의 신경망 압축 예시를 참조하세요.
+ 훈련 및 롤아웃을 위한 여러 인스턴스 유형이 있는 단일 트레이너 인스턴스 및 다중 롤아웃 인스턴스. 예제는 SageMaker AI 예제 리포지토리의 AWS DeepRacer /RoboMaker 예제를 참조하세요. AWS RoboMaker [SageMaker ](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/reinforcement_learning)
+ 롤아웃에 여러 코어를 사용하는 단일 트레이너 인스턴스. 예시는 [SageMaker AI 예시 리포지토리](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/reinforcement_learning)의 Roboschool 예시를 참조하세요. 이 시나리오는 시뮬레이션 환경이 가벼워 단일 스레드에서 실행할 수 있는 경우 유용합니다.
+ 훈련 및 롤아웃을 위한 여러 인스턴스. 예시는 [SageMaker AI 예시 리포지토리](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/reinforcement_learning)의 Roboschool 예시를 참조하세요.

# Amazon SageMaker AI RL을 사용한 하이퍼파라미터 튜닝
<a name="sagemaker-rl-tuning"></a>

사용자는 하이퍼파라미터 튜닝 작업을 실행하여 Amazon SageMaker AI RL에 맞게 하이퍼파라미터를 최적화할 수 있습니다. [SageMaker AI 예시 리포지토리](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/reinforcement_learning)의 샘플 노트북에 있는 Roboschool 예시는 사용자가 RL Coach를 사용하여 이 작업을 수행하는 방법을 보여줍니다. 런처 스크립트는 사용자가 Coach 사전 설정 파일에서 파라미터를 추출해 최적화하는 방법을 보여줍니다.