주요 콘텐츠

TrainingOptionsRMSProp

RMSProp 최적화 함수의 훈련 옵션

설명

TrainingOptionsRMSProp 객체를 사용하여 RMSProp(RMS 전파) 최적화 함수의 훈련 옵션을 설정합니다. 학습률 정보, L2 정규화 인자, 미니 배치 크기 등이 해당합니다.

생성

trainingOptions를 사용하고 첫 번째 입력 인수로 "rmsprop"를 지정하여 TrainingOptionsRMSProp 객체를 만듭니다.

속성

모두 확장

RMSProp

훈련에 사용할 Epoch(데이터를 한 번 완전히 통과하는 것)의 최대 횟수로, 양의 정수로 지정됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

각 훈련 반복마다 사용할 미니 배치의 크기로, 양의 정수로 지정됩니다. 미니 배치는 손실 함수의 기울기를 계산하고 가중치를 업데이트하는 데 사용되는 훈련 세트의 서브셋입니다.

훈련 샘플의 개수가 미니 배치 크기로 균등하게 나뉘지 않는 경우, 각 Epoch의 최종 전체 미니 배치에 담기지 않는 훈련 데이터를 버립니다. 미니 배치 크기가 훈련 샘플의 개수보다 작으면 어떤 데이터도 버리지 않습니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

데이터 섞기 옵션으로, 다음 값 중 하나로 지정됩니다.

  • "once" — 훈련 전에 훈련 데이터와 검증 데이터를 1회 섞습니다.

  • "never" — 데이터를 섞지 않습니다.

  • "every-epoch" — 각 훈련 Epoch 전에 훈련 데이터를 섞고, 각 신경망 검증 전에 검증 데이터를 섞습니다. 훈련 샘플의 개수가 미니 배치 크기로 균등하게 나뉘지 않는 경우, 각 Epoch의 최종 전체 미니 배치에 담기지 않는 훈련 데이터를 버립니다. 매 Epoch마다 동일한 데이터가 버려지지 않도록 하려면 Shuffle 훈련 옵션을 "every-epoch"로 설정하십시오.

훈련에 사용할 초기 학습률로, 양의 스칼라로 지정됩니다.

학습률이 너무 낮으면 훈련 시간이 오래 걸릴 수 있습니다. 학습률이 너무 높으면 훈련이 최적의 결과보다 못한 값에 도달하거나 발산할 수 있습니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

학습률 조정 계획으로, 내장 학습률 조정 계획 이름을 나타내는 문자형 벡터 또는 string형 스칼라, 이름으로 구성된 string형 배열, 내장 학습률 조정 계획 객체 또는 사용자 지정 학습률 조정 계획 객체, 함수 핸들, 또는 이름, 메트릭 객체 및 함수 핸들로 구성된 셀형 배열로 지정됩니다.

내장 학습률 조정 계획 이름

학습률 조정 계획을 string형 스칼라, 문자형 벡터 또는 다음 이름 중 하나 이상으로 구성된 string형 배열이나 셀형 배열로 지정합니다.

이름설명플롯
"none"학습률 조정 계획이 없습니다. 이 조정 계획은 학습률을 일정하게 유지합니다.

Plot with x and y axes showing epoch and learning rate, respectively. The learning rate is constant for each epoch.

"piecewise"조각별 학습률 조정 계획입니다. 이 조정 계획은 매 Epoch 10회마다 학습률을 10배만큼 낮춥니다.

Plot with x and y axes showing epoch and learning rate, respectively. Every 10 epochs, the learning rate drops by a factor of 10.

"warmup" (R2024b 이후)워밍업 학습률 조정 계획입니다. 이 조정 계획은 5회 반복하는 동안 학습률을 기본 학습률까지 높입니다.

Plot with x and y axes showing epoch and learning rate, respectively. For 5 iterations, the learning rate ramps up to the base learning rate and then remains constant.

"polynomial" (R2024b 이후)다항식 학습률 조정 계획입니다. 이 조정 계획은 매 Epoch마다 유니타리 지수를 사용한 멱법칙을 적용하여 학습률을 낮춥니다.

Plot with x and y axes showing epoch and learning rate, respectively. The learning rate decreases linearly from the base learning rate towards zero.

"exponential" (R2024b 이후)지수 학습률 조정 계획입니다. 이 조정 계획은 매 Epoch마다 학습률을 10배만큼 줄입니다.

Plot with x and y axes showing epoch and learning rate, respectively. Every epoch, the learning rate decays by a factor of 10.

"cosine" (R2024b 이후)코사인 학습률 조정 계획입니다. 이 조정 계획은 매 Epoch마다 코사인 공식을 사용하여 학습률을 낮춥니다.

Plot with x and y axes showing epoch and learning rate, respectively. The learning rate decreases following a cosine curve from the base learning rate towards zero.

"cyclical" (R2024b 이후)순환 학습률 조정 계획입니다. 이 조정 계획은 Epoch 10회 주기에서 처음 Epoch 5회 동안은 학습률을 기본 학습률에서 시작해 증가시키고 그다음 Epoch 5회 동안은 학습률을 줄입니다.

Plot with x and y axes showing epoch and learning rate, respectively. For periods of 10 epochs, the learning rate increases from the base learning rate for 5 epochs and then decreases for 5 epochs.

내장 학습률 조정 계획 객체 (R2024b 이후)

문자열 옵션이 제공하는 것보다 더 높은 유연성이 필요하다면 내장 학습률 조정 계획 객체를 사용할 수 있습니다.

  • piecewiseLearnRate조각별 학습률 조정 계획 객체는 지정된 인자를 학습률에 곱하여 주기적으로 학습률을 낮춥니다. 이 객체를 사용하면 조각별 조정 계획의 감소 인자와 주기를 사용자 지정할 수 있습니다.

    R2024b 이전: LearnRateDropFactorLearnRateDropPeriod 훈련 옵션을 사용하여 각각 조각별 감소 인자와 주기를 사용자 지정합니다.

  • warmupLearnRate워밍업 학습률 조정 계획 객체는 지정된 반복 횟수 동안 학습률을 높입니다. 이 객체를 사용하면 워밍업 조정 계획의 초기 및 최종 학습률 인자와 스텝 수를 사용자 지정할 수 있습니다.

  • polynomialLearnRate다항식 학습률 조정 계획은 멱법칙을 사용하여 학습률을 낮춥니다. 이 객체를 사용하면 다항식 조정 계획의 초기 및 최종 학습률 인자, 지수, 스텝 수를 사용자 지정할 수 있습니다.

  • exponentialLearnRate지수 학습률 조정 계획은 지정된 인자만큼 학습률을 낮춥니다. 이 객체를 사용하면 지수 조정 계획의 감소 인자와 주기를 사용자 지정할 수 있습니다.

  • cosineLearnRate코사인 학습률 조정 계획 객체는 코사인 곡선을 사용하여 학습률을 낮추고 웜 리스타트(warm restarts)를 수행합니다. 이 객체를 사용하면 코사인 조정 계획의 초기 및 최종 학습률 인자, 주기, 주기 증가율 인자를 사용자 지정할 수 있습니다.

  • cyclicalLearnRate순환 학습률 조정 계획은 학습률을 주기적으로 높이거나 낮춥니다. 이 옵션을 사용하면 순환 조정 계획의 최대 인자, 주기, 스텝 비율을 사용자 지정할 수 있습니다.

사용자 지정 학습률 조정 계획 (R2024b 이후)

유연성을 높이려면, 사용자 지정 학습률 조정 계획을 deep.LearnRateSchedule에서 상속되는 함수 핸들 또는 사용자 지정 클래스로 정의할 수 있습니다.

  • 사용자 지정 학습률 조정 계획 함수 핸들 — 필요한 학습률 조정 계획이 내장 학습률 조정 계획이 아닌 경우 함수 핸들을 사용하여 사용자 지정 학습률 조정 계획을 지정할 수 있습니다. 사용자 지정 조정 계획을 지정하려면 learningRate = f(baseLearningRate,epoch) 구문의 함수 핸들을 사용하십시오. 여기서 baseLearningRate는 기본 학습률이고 epoch는 Epoch 번호입니다.

  • 사용자 지정 학습률 조정 계획 객체 — 함수 핸들이 제공하는 것보다 더 높은 유연성이 필요하다면 deep.LearnRateSchedule에서 상속되는 사용자 지정 학습률 조정 계획 클래스를 정의할 수 있습니다.

다중 학습률 조정 계획 (R2024b 이후)

복수의 조정 계획을 string형 또는 셀형 배열로 지정하여 여러 학습률 조정 계획을 결합할 수 있습니다. 이 경우 첫 번째 요소부터 순서대로 조정 계획이 적용됩니다. 최대 하나의 조정 계획은 무한할 수 있으며(예: "cyclical" 또는 NumSteps 속성이 Inf로 설정된 객체의 경우 조정 계획이 무한히 지속됨), 이러한 무한 조정 계획은 배열의 마지막 요소여야 합니다.

학습률을 낮출 Epoch의 주기로, 양의 정수로 지정됩니다. 이 옵션은 LearnRateSchedule 훈련 옵션이 "piecewise"인 경우에만 유효합니다.

지정된 Epoch 횟수가 경과될 때마다 전역 학습률에 감소 인자를 곱합니다. 감소 인자는 LearnRateDropFactor 훈련 옵션을 사용하여 지정합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

학습률 감소 인자로, 01 사이의 스칼라로 지정됩니다. 이 옵션은 LearnRateSchedule 훈련 옵션이 "piecewise"인 경우에만 유효합니다.

LearnRateDropFactor는 특정 Epoch 횟수가 경과될 때마다 학습률에 적용할 승산 인자입니다. Epoch 횟수는 LearnRateDropPeriod 훈련 옵션을 사용하여 지정합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

RMSProp 솔버에 대한 제곱 기울기 이동평균의 감쇠율로, 1보다 작은 음이 아닌 스칼라로 지정됩니다.

감쇠율의 일반적인 값은 0.9, 0.99, 0.999로, 각각 평균 길이 10, 100, 1000의 파라미터 업데이트에 대응됩니다.

자세한 내용은 RMS 전파 항목을 참조하십시오.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

RMSProp 솔버에 대한 분모 오프셋으로, 양의 스칼라로 지정됩니다.

솔버는 0으로 나누기를 방지하기 위해 신경망 파라미터 업데이트에서 분모에 오프셋을 더합니다. 디폴트 값은 대부분의 작업에서 잘 동작합니다.

다양한 솔버에 대한 자세한 내용은 RMS 전파 항목을 참조하십시오.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

데이터 레이아웃

R2025a 이후

categorical형 입력값에 대한 인코딩으로, 다음 값 중 하나로 지정됩니다.

  • "integer" — categorical형 입력값을 정수 값으로 변환합니다. 이 경우 신경망에는 categorical형 입력값마다 하나의 입력 채널이 있어야 합니다.

  • "one-hot" — categorical형 입력값을 one-hot 형식으로 인코딩된 벡터로 변환합니다. 이 경우 신경망에는 categorical형 입력값마다 numCategories개의 채널이 있어야 합니다. 여기서 numCategories는 대응되는 categorical형 입력값의 범주 개수입니다.

R2025a 이후

categorical형 목표값에 대한 인코딩으로, 다음 값 중 하나로 지정됩니다.

  • "auto""index-crossentropy" 손실 함수를 사용하여 훈련시키는 경우 categorical형 목표값을 정수 값으로 변환합니다. 그 외의 경우에는 categorical형 목표값을 one-hot 형식으로 인코딩된 벡터로 변환합니다.

  • "integer" — categorical형 목표값을 정수 값으로 변환하고, 정수로 인코딩된 값을 손실 함수와 메트릭 함수로 전달합니다.

  • "one-hot" — categorical형 목표값을 one-hot 형식으로 인코딩된 벡터로 변환하고, one-hot 형식으로 인코딩된 값을 손실 함수와 메트릭 함수로 전달합니다.

R2023b 이후

입력 데이터 차원에 대한 설명으로, string형 배열, 문자형 벡터, 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다.

InputDataFormats"auto"이면 신경망 입력에 필요한 형식이 사용됩니다. 그렇지 않으면 해당 신경망 입력에 대해 지정된 형식이 사용됩니다.

데이터 형식은 문자들로 구성된 문자열로, 각 문자는 대응되는 데이터 차원의 유형을 설명합니다.

문자는 다음을 나타냅니다.

  • "S" — 공간

  • "C" — 채널

  • "B" — 배치

  • "T" — 시간

  • "U" — 지정되지 않음

예를 들어, 첫 번째, 두 번째, 세 번째 차원이 각각 채널, 관측값, 시간 스텝에 대응되는 시퀀스 배치를 나타내는 배열이 있다고 가정하겠습니다. 데이터를 "CBT"(채널, 배치, 시간) 형식으로 설명할 수 있습니다.

"S" 또는 "U" 레이블의 차원은 여러 개 지정할 수 있습니다. 레이블 "C", "B", "T"는 각각 최대 한 번만 사용할 수 있습니다. 두 번째 차원 뒤의 한원소 후행 "U" 차원은 무시됩니다.

복수의 입력값이 포함된 net을 사용하는 신경망인 경우, 입력 데이터 형식으로 구성된 배열을 지정하십시오. 여기서 InputDataFormats(i)는 입력값 net.InputNames(i)에 대응됩니다.

자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.

데이터형: char | string | cell

R2023b 이후

목표 데이터 차원에 대한 설명으로, 다음 값 중 하나로 지정됩니다.

  • "auto" — 목표 데이터의 차원 수가 입력 데이터와 동일한 경우 trainnet 함수는 InputDataFormats에서 지정한 형식을 사용합니다. 목표 데이터의 차원 수가 입력 데이터와 다른 경우 trainnet 함수는 손실 함수에 필요한 형식을 사용합니다.

  • string형 배열, 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열 — trainnet 함수는 사용자가 지정한 데이터 형식을 사용합니다.

데이터 형식은 문자들로 구성된 문자열로, 각 문자는 대응되는 데이터 차원의 유형을 설명합니다.

문자는 다음을 나타냅니다.

  • "S" — 공간

  • "C" — 채널

  • "B" — 배치

  • "T" — 시간

  • "U" — 지정되지 않음

예를 들어, 첫 번째, 두 번째, 세 번째 차원이 각각 채널, 관측값, 시간 스텝에 대응되는 시퀀스 배치를 나타내는 배열이 있다고 가정하겠습니다. 데이터를 "CBT"(채널, 배치, 시간) 형식으로 설명할 수 있습니다.

"S" 또는 "U" 레이블의 차원은 여러 개 지정할 수 있습니다. 레이블 "C", "B", "T"는 각각 최대 한 번만 사용할 수 있습니다. 두 번째 차원 뒤의 한원소 후행 "U" 차원은 무시됩니다.

자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.

데이터형: char | string | cell

모니터링

신경망 훈련 중에 표시할 플롯으로, 다음 값 중 하나로 지정됩니다.

  • "none" — 훈련 중에 플롯을 표시하지 않습니다.

  • "training-progress" — 훈련 진행 상황을 플로팅합니다.

이 플롯은 Metrics 속성으로 지정된 미니 배치 손실, 검증 손실, 훈련 미니 배치 및 검증 메트릭, 그리고 훈련 진행 상황에 대한 추가 정보를 보여줍니다.

훈련 후 훈련 진행 상황 플롯을 프로그래밍 방식으로 열고 닫으려면 trainnet 함수의 두 번째 출력값을 show 함수와 close 함수에 사용하십시오. Plots 훈련 옵션이 "none"으로 지정된 경우에도 show 함수를 사용하여 훈련 진행 상황을 볼 수 있습니다.

y축 스케일을 로그로 전환하려면 좌표축 도구 모음을 사용하십시오. Training plot axes toolbar with log scale enabled and the tooltip "Log scale y-axis".

플롯에 대한 자세한 내용은 딥러닝 훈련 진행 상황 모니터링하기 항목을 참조하십시오.

R2023b 이후

모니터링할 메트릭으로, 다음 값 중 하나로 지정됩니다.

  • 내장 메트릭 또는 손실 함수 이름 — 메트릭을 string형 스칼라, 문자형 벡터 또는 다음 이름 중 하나 이상으로 구성된 셀형 배열이나 string형 배열로 지정합니다.

    • 메트릭:

      • "accuracy" — 정확도(top-1 정확도라고도 함)

      • "auc" — ROC 곡선 아래 면적(AUC)

      • "fscore" — F-점수(F1-점수라고도 함)

      • "precision" — 정밀도

      • "recall" — 재현율

      • "rmse" — RMS 오차

      • "mape" — 평균절대백분율오차(MAPE) (R2024b 이후)

      • "rsquared"R2(결정계수) (R2025a 이후)

    • 손실 함수:

      • "crossentropy" — 분류 작업의 교차 엔트로피 손실. (R2024b 이후)

      • "indexcrossentropy" — 분류 작업의 인덱스 교차 엔트로피 손실. (R2024b 이후)

      • "binary-crossentropy" — 이진 분류 작업 및 다중 레이블 분류 작업의 이진 교차 엔트로피 손실. (R2024b 이후)

      • "mae" / "mean-absolute-error" / "l1loss" — 회귀 작업의 평균절대오차. (R2024b 이후)

      • "mse" / "mean-squared-error" / "l2loss" — 회귀 작업의 평균제곱오차. (R2024b 이후)

      • "huber" — 회귀 작업의 Huber 손실 (R2024b 이후)

    손실 함수를 "crossentropy"로 설정하고 "index-crossentropy"를 메트릭으로 지정하거나, 손실 함수를 "index-crossentropy"로 설정하고 "crossentropy"를 메트릭으로 지정하는 것은 지원되지 않습니다.

    딥러닝 메트릭 및 손실 함수에 대한 자세한 내용은 Deep Learning Metrics 항목을 참조하십시오.

  • 내장 메트릭 객체 — 더 많은 유연성이 필요한 경우 내장 메트릭 객체를 사용할 수 있습니다. 다음과 같은 내장 메트릭 객체가 지원됩니다.

    내장 메트릭 객체를 만들 때 평균화 유형이나 단일 레이블 작업으로 할지 다중 레이블 작업으로 할지 등의 추가 옵션을 지정할 수 있습니다.

  • 사용자 지정 메트릭 함수 핸들 — 필요한 메트릭이 내장 메트릭이 아닌 경우 함수 핸들을 사용하여 사용자 지정 메트릭을 지정할 수 있습니다. 함수의 구문은 metric = metricFunction(Y,T)여야 합니다. 여기서 Y는 신경망 예측값에 대응되고 T는 목표 응답에 대응됩니다. 출력값이 여러 개인 신경망의 경우 구문은 metric = metricFunction(Y1,…,YN,T1,…TM)이어야 합니다. 여기서 N은 출력값 개수이고 M은 목표값 개수입니다. 자세한 내용은 Define Custom Metric Function 항목을 참조하십시오.

    참고

    데이터가 미니 배치로 나뉜 경우, 각 미니 배치에 대한 메트릭을 계산한 다음 해당 값들의 평균을 반환합니다. 일부 메트릭의 경우 이 동작으로 인해 전체 데이터 세트를 한 번에 사용하여 메트릭을 계산하는 경우와 다른 메트릭 값이 생성될 수 있습니다. 대부분의 경우 값은 비슷합니다. 데이터에 대해 배치 평균 메트릭이 아닌 사용자 지정 메트릭을 사용하려면 사용자 지정 메트릭 객체를 만들어야 합니다. 자세한 내용은 Define Custom Deep Learning Metric Object 항목을 참조하십시오.

  • deep.DifferentiableFunction 객체 (R2024a 이후) — 사용자 지정 역방향 함수를 갖는 함수 객체. categorical형 목표값의 경우 categorical형 값은 one-hot 형식으로 인코딩된 벡터로 자동으로 변환된 다음 메트릭 함수에 전달됩니다. 자세한 내용은 Define Custom Deep Learning Operations 항목을 참조하십시오.

  • 사용자 지정 메트릭 객체 — 더 많은 사용자 지정이 필요한 경우 사용자 지정 메트릭 객체를 정의할 수 있습니다. 사용자 지정 메트릭을 만드는 방법을 보여주는 예제는 Define Custom Metric Object 항목을 참조하십시오. 사용자 지정 메트릭 만들기에 대한 일반적인 내용은 Define Custom Deep Learning Metric Object 항목을 참조하십시오.

메트릭을 함수 핸들, deep.DifferentiableFunction 객체 또는 사용자 지정 메트릭 객체로 지정하고 trainnet 함수를 사용하여 신경망을 훈련시키는 경우, 메트릭에 전달되는 목표값의 레이아웃은 목표값의 데이터형, trainnet 함수에 지정한 손실 함수 및 사용자가 지정한 기타 메트릭에 따라 달라집니다.

  • 목표값이 숫자형 배열인 경우 목표값은 메트릭에 직접 전달됩니다.

  • 손실 함수가 "index-crossentropy"이고 목표값이 categorical형 배열인 경우 목표값은 숫자형 클래스 인덱스로 자동으로 변환된 다음 메트릭에 전달됩니다.

  • 다른 손실 함수의 경우 목표값이 categorical형 배열이면 목표값은 one-hot 형식으로 인코딩된 벡터로 자동으로 변환된 다음 메트릭에 전달됩니다.

이 옵션은 trainnet 함수와 trainBERTDocumentClassifier (Text Analytics Toolbox) 함수만 지원합니다.

예: Metrics=["accuracy","fscore"]

예: Metrics={"accuracy",@myFunction,precisionObj}

R2024a 이후

조기 중지의 기준으로 사용하거나 최적의 신경망을 반환하는 데 사용할 목적 메트릭의 이름으로, string형 스칼라 또는 문자형 벡터로 지정됩니다.

메트릭 이름은 "loss"이거나 Metrics 인수로 지정된 메트릭의 이름과 일치해야 합니다. 함수 핸들을 사용하여 지정된 메트릭은 지원되지 않습니다. ObjectiveMetricName 값을 사용자 지정 메트릭의 이름으로 지정하려면 사용자 지정 메트릭 객체의 Maximize 속성값이 비어 있지 않아야 합니다. 자세한 내용은 Define Custom Deep Learning Metric Object 항목을 참조하십시오.

조기 중지를 위한 목적 메트릭을 지정하는 방법에 대한 자세한 내용은 ValidationPatience 항목을 참조하십시오. 목적 메트릭을 사용하여 최적의 신경망을 반환하는 방법에 대한 자세한 내용은 OutputNetwork 항목을 참조하십시오.

데이터형: char | string

명령 창에 훈련 진행 상황 정보를 표시할지 지정하는 플래그로, 1(true) 또는 0(false)으로 지정됩니다.

trainnet 함수를 사용하면 상세 출력값은 다음 변수가 포함된 테이블을 표시합니다.

변수설명
Iteration반복 횟수.
EpochEpoch 횟수.
TimeElapsed시, 분, 초 단위의 경과된 시간.
LearnRate학습률.
TrainingLoss훈련 손실.
ValidationLoss검증 손실. 검증 데이터를 지정하지 않은 경우에는 이 정보를 표시하지 않습니다.

훈련 옵션에서 추가 메트릭을 지정하면 상세 출력값에도 표시됩니다. 예를 들어 Metrics 훈련 옵션을 "accuracy"로 설정하면 정보에 TrainingAccuracy 변수와 ValidationAccuracy 변수가 포함됩니다.

훈련이 중지될 때 상세 출력값은 중지 이유를 표시합니다.

검증 데이터를 지정하려면 ValidationData 훈련 옵션을 사용하십시오.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

상세 출력의 빈도, 즉 명령 창에 출력하기까지 진행할 반복 횟수로, 양의 정수로 지정됩니다.

훈련 중에 신경망을 검증하는 경우, 검증이 실시될 때마다 명령 창에도 출력합니다.

이 속성을 활성화하려면 Verbose 훈련 옵션을 1(true)로 설정하십시오.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

훈련 중에 호출할 출력 함수로, 함수 핸들 또는 함수 핸들로 구성된 셀형 배열로 지정됩니다. 훈련 시작 전, 각 반복 후, 훈련이 완료될 때 한 번씩 함수를 호출합니다.

함수의 구문은 stopFlag = f(info)여야 합니다. 여기서 info는 훈련 진행 상황에 대한 정보가 포함된 구조체이고 stopFlag는 훈련을 조기에 중지함을 나타내는 스칼라입니다. stopFlag1(true)인 경우 훈련을 중지합니다. 그렇지 않으면 훈련을 계속합니다.

trainnet 함수는 출력 함수에 다음 필드를 포함하는 구조체 info를 전달합니다.

필드설명
EpochEpoch 횟수
Iteration반복 횟수
TimeElapsed훈련 시작 이후 경과된 시간
LearnRate반복 학습률
TrainingLoss반복 훈련 손실
ValidationLoss검증 손실(지정되어 있고, 반복 시 평가된 경우)
State반복 훈련 상태로, "start", "iteration" 또는 "done"으로 지정됩니다.

훈련 옵션에서 추가 메트릭을 지정하면 훈련 정보에도 표시됩니다. 예를 들어 Metrics 훈련 옵션을 "accuracy"로 설정하면 정보에 TrainingAccuracy 필드와 ValidationAccuracy 필드가 포함됩니다.

특정 필드가 계산되지 않았거나 출력 함수에 대한 특정 호출과 관련이 없는 경우, 해당 필드는 빈 배열을 포함하게 됩니다.

출력 함수를 사용하는 방법을 보여주는 예제는 Custom Stopping Criteria for Deep Learning Training 항목을 참조하십시오.

데이터형: function_handle | cell

검증

훈련 중에 검증에 사용할 데이터로, [], 검증 예측 변수와 검증 목표값을 포함하는 데이터저장소, 테이블, 셀형 배열 또는 minibatchqueue 객체로 지정됩니다.

훈련하는 동안 이 검증 데이터를 사용하여 검증 손실과 메트릭 값을 계산합니다. 검증 빈도를 지정하려면 ValidationFrequency 훈련 옵션을 사용하십시오. 또한 검증 목적 메트릭이 더 이상 개선되지 않을 시 훈련을 자동 중지하고자 할 때에도 검증 데이터를 사용할 수 있습니다. 기본적으로 목적 메트릭은 손실로 설정됩니다. 자동 검증 중지 기능을 켜려면 ValidationPatience 훈련 옵션을 사용하십시오.

ValidationData[]이면 훈련 중에 신경망이 검증되지 않습니다.

신경망에 훈련 중 동작과 예측 중 동작이 다른 계층(예: 드롭아웃 계층)이 있는 경우, 검증 손실이 훈련 손실보다 낮을 수 있습니다.

Shuffle 훈련 옵션에 따라 검증 데이터가 섞입니다. Shuffle"every-epoch"인 경우, 검증 데이터는 각 신경망을 검증하기 전에 섞입니다.

지원되는 형식은 사용하는 훈련 함수에 따라 달라집니다.

trainnet 함수

검증 데이터를 데이터저장소, 테이블, minibatchqueue 객체 또는 셀형 배열 {predictors,targets}로 지정합니다. 여기서 predictors는 검증 예측 변수를 포함하고 targets는 검증 목표값을 포함합니다. trainnet 함수에서 지원하는 레이아웃을 사용하여 검증 예측 변수의 값과 목표값을 지정합니다.

자세한 내용은 trainnet 함수의 입력 인수를 참조하십시오.

trainBERTDocumentClassifier 함수(Text Analytics Toolbox)

검증 데이터를 다음 값 중 하나로 지정합니다.

  • 셀형 배열 {documents,targets}. 여기서 documents는 입력 문서를 포함하고 targets는 문서 레이블을 포함합니다.

  • 테이블. 여기서 첫 번째 변수는 입력 문서를 포함하고 두 번째 변수는 문서 레이블을 포함합니다.

자세한 내용은 trainBERTDocumentClassifier (Text Analytics Toolbox) 함수의 입력 인수를 참조하십시오.

신경망 검증 빈도(단위: 반복 횟수)로, 양의 정수로 지정됩니다.

ValidationFrequency 값은 검증 메트릭을 평가하기까지 진행할 반복 횟수입니다. 검증 데이터를 지정하려면 ValidationData 훈련 옵션을 사용하십시오.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

신경망 훈련의 검증 중지 인내도로, 양의 정수 또는 Inf로 지정됩니다.

ValidationPatience는 신경망 훈련이 중단되기 전에, 검증 세트에서의 목적 메트릭이 그전의 최적 값보다 나쁘거나 같을 수 있는 최대 횟수를 지정합니다. ValidationPatienceInf이면 검증 메트릭의 값으로 인해 조기에 훈련이 중지되지는 않습니다. 메트릭의 Maximize 속성에 지정된 값에 따라 메트릭을 최대화하거나 최소화하는 것을 목표로 합니다. 목적 메트릭이 "loss"인 경우 손실 값을 최소화하는 것을 목표로 합니다.

반환되는 신경망은 OutputNetwork 훈련 옵션에 따라 다릅니다. 메트릭 값이 최적 검증(best validation)인 신경망을 반환하려면 OutputNetwork 훈련 옵션을 "best-validation"으로 설정하십시오.

R2024a 이전: 이 검증 손실 값을 사용하여 검증 인내도가 계산됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

훈련이 완료될 때 반환할 신경망으로, 다음 중 하나로 지정됩니다.

  • "auto"ValidationData가 지정된 경우 "best-validation"을 사용합니다. 그 밖의 경우에는 "last-iteration"을 사용합니다.

  • "best-validation" – 메트릭 값이 최적 검증으로 나온 훈련 반복에 해당하는 신경망을 반환합니다. 여기서 최적화할 메트릭은 ObjectiveMetricName 옵션으로 지정됩니다. 이 옵션을 사용하려면 ValidationData 훈련 옵션을 지정해야 합니다.

  • "last-iteration" – 마지막 훈련 반복에 해당하는 신경망을 반환합니다.

정규화(Regularization 및 Normalization)

L2 정규화(가중치 감쇠) 인자로, 음이 아닌 스칼라로 지정됩니다. 자세한 내용은 L2 정규화 항목을 참조하십시오.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

입력 계층 정규화를 초기화하는 옵션으로, 다음 중 하나로 지정됩니다.

  • 1(true) — 입력 계층 정규화 통계량을 초기화하고 이를 훈련 시점에 다시 계산합니다.

  • 0(false) — 정규화 통계량이 비어 있는 경우 이를 훈련 시점에 계산합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

배치 정규화 계층에서 통계량을 계산하는 모드로, 다음 중 하나로 지정됩니다.

  • "population" — 모집단 통계량을 사용합니다. 훈련 후에 훈련 데이터를 한 번 더 통과시켜 통계량을 완성하고 결과로 생성되는 평균과 분산을 사용합니다.

  • "moving" — 업데이트 단계에서 얻게 되는 동적 추정값을 사용하여 훈련 중에 통계량을 근사합니다.

    μ*=λμμ^+(1λμ)μσ2*=λσ2σ2^+(1-λσ2)σ2

    여기서 μ*σ2*는 각각 업데이트된 평균과 분산을 나타내고, λμλσ2은 각각 평균 감쇠 값과 분산 감쇠 값을 나타내고, μ^σ2^은 각각 계층 입력값의 평균과 분산을 나타내고, μσ2은 각각 이동 평균값의 최신값과 이동 분산값의 최신값을 나타냅니다. 훈련 후에 이동 평균 통계량 및 이동 분산 통계량의 가장 최신값을 사용합니다. 이 옵션은 CPU 및 단일 GPU 훈련만 지원합니다.

  • "auto""moving" 옵션을 사용합니다.

기울기 제한

기울기 임계값으로, Inf 또는 양의 스칼라로 지정됩니다. 기울기가 GradientThreshold의 값을 초과하면 기울기는 GradientThresholdMethod 훈련 옵션에 따라 잘립니다.

자세한 내용은 기울기 제한을 참조하십시오.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

기울기 임계값을 초과하는 기울기 값을 자를 때 사용할 기울기 임계값 메서드로, 다음 중 하나로 지정됩니다.

  • "l2norm" — 학습 가능한 파라미터의 기울기의 L2 노름이 GradientThreshold보다 큰 경우, L2 노름이 GradientThreshold와 같아지도록 기울기를 스케일링합니다.

  • "global-l2norm" — 전역 L2 노름 LGradientThreshold보다 큰 경우, 모든 기울기를 GradientThreshold/L배만큼 스케일링합니다. 전역 L2 노름은 모든 학습 가능한 파라미터를 고려합니다.

  • "absolute-value" — 학습 가능한 파라미터의 기울기의 개별 편도함수의 절댓값이 GradientThreshold보다 큰 경우, GradientThreshold와 같아지도록 편도함수를 스케일링하고 편도함수의 부호를 그대로 유지합니다.

자세한 내용은 기울기 제한을 참조하십시오.

시퀀스

입력 시퀀스를 채우거나 자르거나 분할하는 옵션으로, 다음 중 하나로 지정됩니다.

  • "longest" — 각 미니 배치의 시퀀스 길이가 가장 긴 시퀀스의 길이와 같아지도록 채웁니다. 이 옵션은 채우기로 인해 신경망에 잡음이 포함되더라도 데이터를 버리지 않습니다.

  • "shortest" — 각 미니 배치의 시퀀스가 가장 짧은 시퀀스와 길이가 같아지도록 자릅니다. 이 옵션은 데이터를 버리게 되더라도 채우기를 추가하지 않습니다.

입력 시퀀스 채우기, 자르기, 분할의 효과에 대한 자세한 정보는 시퀀스 채우기와 줄이기 항목을 참조하십시오.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

채우기 또는 자르기 방향으로, 다음 옵션 중 하나로 지정됩니다.

  • "right" — 시퀀스들을 오른쪽에서 채우거나 자릅니다. 시퀀스들은 동일한 시간 스텝에서 시작하며 각 시퀀스의 끝부분에서 자르기나 채우기를 수행합니다.

  • "left" — 시퀀스들을 왼쪽에서 채우거나 자릅니다. 시퀀스들이 동일한 시간 스텝에서 끝나도록 각 시퀀스의 시작 부분에서 자르기나 채우기를 수행합니다.

순환 계층은 시퀀스 데이터를 한 번에 하나의 시간 스텝씩 처리합니다. 따라서 순환 계층의 OutputMode 속성이 "last"인 경우 마지막 시간 스텝에서의 채우기가 계층 출력에 부정적인 영향을 줄 수 있습니다. 시퀀스 데이터를 왼쪽에서 채우거나 자르려면 SequencePaddingDirection 이름-값 인수를 "left"로 설정하십시오.

sequence-to-sequence 신경망의 경우(각 순환 계층의 OutputMode 속성이 "sequence"인 경우), 첫 시간 스텝들에서의 채우기가 앞쪽에 있는 시간 스텝들의 예측에 부정적인 영향을 줄 수 있습니다. 시퀀스 데이터를 오른쪽에서 채우거나 자르려면 SequencePaddingDirection 이름-값 인수를 "right"로 설정하십시오.

시퀀스 채우기 및 자르기의 효과에 대한 자세한 정보는 시퀀스 채우기와 줄이기 항목을 참조하십시오.

입력 시퀀스에 채울 값으로, 스칼라로 지정됩니다.

시퀀스를 NaN으로 채우면 신경망을 통해 오류가 전파될 수 있으므로 유의하십시오.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

하드웨어와 가속화

신경망 훈련에 사용할 하드웨어 리소스로, 다음 값 중 하나로 지정됩니다.

  • "auto" – 사용 가능한 로컬 GPU가 있으면 이를 사용합니다. 그렇지 않은 경우 로컬 CPU를 사용합니다.

  • "cpu" – 로컬 CPU를 사용합니다.

  • "gpu" – 로컬 GPU를 사용합니다.

  • "multi-gpu" – 디폴트 클러스터 프로파일에 따라 로컬 병렬 풀을 사용하여 컴퓨터 1대에서 여러 개의 GPU를 사용합니다. 기존 병렬 풀이 없는 경우 사용 가능한 GPU의 개수와 동일한 풀 크기로 병렬 풀을 시작합니다.

  • "parallel-auto" – 로컬 또는 원격 병렬 풀을 사용합니다. 기존 병렬 풀이 없는 경우 디폴트 클러스터 프로파일을 사용하여 병렬 풀을 시작합니다. 풀이 GPU를 사용할 수 있는 경우, 고유한 GPU를 갖는 워커만 훈련 계산을 수행하고 초과 워커는 유휴 상태가 됩니다. 풀에 GPU가 없는 경우, 사용 가능한 모든 CPU 워커에서 대신 훈련이 이루어집니다. (R2024a 이후)

    R2024a 이전: "parallel"을 대신 사용하십시오.

  • "parallel-cpu" – GPU를 무시하고 로컬 또는 원격 병렬 풀에서 CPU 리소스를 사용합니다. 기존 병렬 풀이 없는 경우 디폴트 클러스터 프로파일을 사용하여 병렬 풀을 시작합니다. (R2023b 이후)

  • "parallel-gpu" – 로컬 또는 원격 병렬 풀에서 GPU를 사용합니다. 초과 워커는 유휴 상태가 됩니다. 기존 병렬 풀이 없는 경우 디폴트 클러스터 프로파일을 사용하여 병렬 풀을 시작합니다. (R2023b 이후)

"gpu", "multi-gpu", "parallel-auto", "parallel-cpu", "parallel-gpu" 옵션을 사용하려면 Parallel Computing Toolbox™가 필요합니다. 딥러닝을 위해 GPU를 사용하려면 지원되는 GPU 장치도 필요합니다. 지원되는 장치에 대한 자세한 내용은 GPU 연산 요구 사항 (Parallel Computing Toolbox) 항목을 참조하십시오. 이러한 옵션 중 하나를 선택했는데 Parallel Computing Toolbox 또는 적당한 GPU가 없는 경우, 오류가 반환됩니다.

서로 다른 실행 환경을 사용해야 하는 경우에 대한 자세한 내용은 Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud 항목을 참조하십시오.

병렬로 훈련시킬 때 성능 향상을 도모하려면 MiniBatchSizeInitialLearnRate 훈련 옵션을 GPU의 개수만큼 늘려 보십시오.

R2024a 이후

훈련 중에 데이터저장소에서 데이터를 가져오고 전처리하기 위한 환경으로, 다음 값 중 하나로 지정됩니다.

  • "serial" – 직렬로 데이터를 가져오고 전처리합니다.

  • "background" – 백그라운드 풀을 사용하여 데이터를 가져오고 전처리합니다.

  • "parallel" – 병렬 워커를 사용하여 데이터를 가져오고 전처리합니다. 로컬 풀이 현재 열려 있지 않은 경우 디폴트 프로파일을 사용하여 병렬 풀을 엽니다. 로컬이 아닌 병렬 풀은 지원되지 않습니다. 이 옵션을 사용하려면 Parallel Computing Toolbox가 필요합니다. 이 옵션은 병렬 훈련(ExecutionEnvironment 옵션이 "parallel-auto", "parallel-cpu", "parallel-gpu" 또는 "multi-gpu"인 경우)에 대해 지원되지 않습니다.

"background" 또는 "parallel" 옵션을 사용하려면 입력 데이터저장소는 서브셋이 될 수 있거나 분할 가능해야 합니다. 사용자 지정 데이터저장소는 matlab.io.datastore.Subsettable 클래스를 구현해야 합니다.

Shuffle 옵션이 "never"인 경우 "background""parallel" 옵션이 지원되지 않습니다.

"background""parallel" 옵션을 사용하면 deep.gpu.deterministicAlgorithms 함수를 사용하더라도 훈련이 비결정적입니다.

미니 배치에 상당한 전처리가 필요한 경우 "background" 옵션을 사용하십시오. 스레드에서 전처리가 지원되지 않거나 워커 개수를 제어해야 하는 경우 "parallel" 옵션을 사용하십시오. 전처리 환경에 대한 자세한 내용은 Preprocess Data in the Background or in Parallel 항목을 참조하십시오.

R2024a 이전: 데이터를 병렬로 전처리하려면 DispatchInBackground 훈련 옵션을 1 (true)로 설정하십시오.

R2024a 이후

성능 최적화로, 다음 값 중 하나로 지정됩니다.

  • "auto" – 입력 신경망 및 하드웨어 리소스에 적합한 여러 최적화를 자동으로 적용합니다.

  • "none" – 모든 최적화를 비활성화합니다.

"auto" 가속화 옵션을 사용하면 성능이 향상될 수 있는 대신 초기 실행 시간이 늘어납니다. 호환되는 파라미터를 사용한 후속 호출은 더 빨리 실행됩니다. 성능 최적화는 크기와 형태가 같은 서로 다른 입력 데이터를 사용하여 함수를 여러 번 호출해야 하는 경우에 사용하십시오.

검사 지점

검사 지점 신경망을 저장할 경로로, string형 스칼라 또는 문자형 벡터로 지정됩니다.

  • 경로를 지정하지 않으면(즉, 디폴트 값인 ""을 사용하는 경우), 검사 지점 신경망은 저장되지 않습니다.

  • 경로를 지정한 경우, 이 경로에 검사 지점 신경망을 저장하고 각 신경망에 고유한 이름을 할당합니다. 그러면, 사용자는 임의의 검사 지점 신경망을 불러와 해당 신경망에서 훈련을 재개할 수 있습니다.

    폴더가 존재하지 않는 경우, 검사 지점 신경망을 저장할 경로를 지정하기 전에 먼저 폴더를 만들어야 합니다. 지정한 경로가 존재하지 않는 경우, 오류가 발생합니다.

데이터형: char | string

검사 지점 신경망의 저장 빈도로, 양의 정수로 지정됩니다.

CheckpointFrequencyUnit"epoch"인 경우 매 CheckpointFrequency회 Epoch마다 검사 지점 신경망이 저장됩니다.

CheckpointFrequencyUnit"iteration"인 경우 매 CheckpointFrequency회 반복마다 검사 지점 신경망이 저장됩니다.

이 옵션은 CheckpointPath가 비어 있지 않은 경우에만 효력이 있습니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

검사 지점 빈도 단위로, "epoch" 또는 "iteration"으로 지정됩니다.

CheckpointFrequencyUnit"epoch"인 경우 매 CheckpointFrequency회 Epoch마다 검사 지점 신경망이 저장됩니다.

CheckpointFrequencyUnit"iteration"인 경우 매 CheckpointFrequency회 반복마다 검사 지점 신경망이 저장됩니다.

이 옵션은 CheckpointPath가 비어 있지 않은 경우에만 효력이 있습니다.

예제

모두 축소

RMSProp 최적화 함수를 사용하여 신경망을 훈련시키기 위한 옵션 세트를 만듭니다. 훈련을 진행할 최대 Epoch 횟수를 20으로 설정하고, 각 반복마다 64개의 관측값을 갖는 미니 배치를 사용합니다. 제곱 기울기의 이동평균의 감쇠율과 학습률을 지정합니다. 훈련 진행 상황 플롯을 켭니다.

options = trainingOptions("rmsprop", ...
    InitialLearnRate=3e-4, ...
    SquaredGradientDecayFactor=0.99, ...
    MaxEpochs=20, ...
    MiniBatchSize=64, ...
    Plots="training-progress")
options = 
  TrainingOptionsRMSProp with properties:

                       MaxEpochs: 20
                InitialLearnRate: 3.0000e-04
               LearnRateSchedule: 'none'
             LearnRateDropFactor: 0.1000
             LearnRateDropPeriod: 10
                   MiniBatchSize: 64
                         Shuffle: 'once'
         CheckpointFrequencyUnit: 'epoch'
        PreprocessingEnvironment: 'serial'
                         Verbose: 1
                VerboseFrequency: 50
                  ValidationData: []
             ValidationFrequency: 50
              ValidationPatience: Inf
                         Metrics: []
             ObjectiveMetricName: 'loss'
            ExecutionEnvironment: 'auto'
                           Plots: 'training-progress'
                       OutputFcn: []
                  SequenceLength: 'longest'
            SequencePaddingValue: 0
        SequencePaddingDirection: 'right'
                InputDataFormats: "auto"
               TargetDataFormats: "auto"
         ResetInputNormalization: 1
    BatchNormalizationStatistics: 'auto'
                   OutputNetwork: 'auto'
                    Acceleration: "auto"
                  CheckpointPath: ''
             CheckpointFrequency: 1
        CategoricalInputEncoding: 'integer'
       CategoricalTargetEncoding: 'auto'
                L2Regularization: 1.0000e-04
         GradientThresholdMethod: 'l2norm'
               GradientThreshold: Inf
      SquaredGradientDecayFactor: 0.9900
                         Epsilon: 1.0000e-08

알고리즘

모두 확장

참고 문헌

[1] Bishop, C. M. Pattern Recognition and Machine Learning. Springer, New York, NY, 2006.

[2] Murphy, K. P. Machine Learning: A Probabilistic Perspective. The MIT Press, Cambridge, Massachusetts, 2012.

[3] Pascanu, R., T. Mikolov, and Y. Bengio. "On the difficulty of training recurrent neural networks". Proceedings of the 30th International Conference on Machine Learning. Vol. 28(3), 2013, pp. 1310–1318.

버전 내역

R2018a에 개발됨

모두 확장