

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

# 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` 하이퍼파라미터 중 하나와 동일합니다.