

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

# 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
            }   
        }
    }
]
```