

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

# 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 | 