이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

trainingOptions

심층 학습 신경망 훈련 옵션

설명

예제

options = trainingOptions(solverName)solverName으로 지정된 최적화 함수에 대한 훈련 옵션을 반환합니다. 네트워크를 훈련시키려면 훈련 옵션을 trainNetwork 함수의 입력 인수로 사용하십시오.

예제

options = trainingOptions(solverName,Name,Value)는 하나 이상의 이름-값 쌍 인수로 지정된 추가 옵션을 사용하여 훈련 옵션을 반환합니다.

예제

모두 축소

모멘텀을 사용한 확률적 경사하강법을 이용해 네트워크를 훈련시키는 옵션 세트를 만듭니다. Epoch 5회마다 학습률을 0.2배만큼 줄입니다. 훈련을 진행할 최대 Epoch 횟수를 20으로 설정하고, 각 반복마다 64개의 관측값을 갖는 미니 배치를 사용합니다. 훈련 진행 상황 플롯을 켭니다.

options = trainingOptions('sgdm', ...
    'LearnRateSchedule','piecewise', ...
    'LearnRateDropFactor',0.2, ...
    'LearnRateDropPeriod',5, ...
    'MaxEpochs',20, ...
    'MiniBatchSize',64, ...
    'Plots','training-progress')
options = 
  TrainingOptionsSGDM with properties:

                     Momentum: 0.9000
             InitialLearnRate: 0.0100
    LearnRateScheduleSettings: [1x1 struct]
             L2Regularization: 1.0000e-04
      GradientThresholdMethod: 'l2norm'
            GradientThreshold: Inf
                    MaxEpochs: 20
                MiniBatchSize: 64
                      Verbose: 1
             VerboseFrequency: 50
               ValidationData: []
          ValidationFrequency: 50
           ValidationPatience: Inf
                      Shuffle: 'once'
               CheckpointPath: ''
         ExecutionEnvironment: 'auto'
                   WorkerLoad: []
                    OutputFcn: []
                        Plots: 'training-progress'
               SequenceLength: 'longest'
         SequencePaddingValue: 0
         DispatchInBackground: 0

심층 학습을 위해 네트워크를 훈련시킬 때는 훈련 진행 상황을 모니터링하는 것이 유용한 경우가 종종 있습니다. 훈련 중에 다양한 메트릭을 플로팅하면 훈련이 어떻게 진행되고 있는지 알 수 있습니다. 예를 들어, 네트워크 정확도가 향상되고 있는지, 향상되는 속도는 어느 정도인지, 네트워크가 훈련 데이터를 과적합하기 시작하고 있는지 등을 확인할 수 있습니다.

trainingOptions에서 'training-progress''Plots' 값으로 지정하고 네트워크 훈련을 시작하면 trainNetwork는 Figure를 만들고 각 반복에서 훈련 메트릭을 표시합니다. 각 반복은 기울기의 추정값이자 네트워크 파라미터의 업데이트입니다. trainingOptions에 검증 데이터를 지정하면 trainNetwork가 네트워크를 검증할 때마다 Figure에 검증 메트릭이 표시됩니다. Figure에는 다음과 같은 내용이 플로팅됩니다.

  • 훈련 정확도 — 각 개별 미니 배치의 분류 정확도.

  • 스무딩된 훈련 정확도 — 훈련 정확도에 스무딩 알고리즘을 적용하여 얻은 스무딩된 훈련 정확도. 스무딩되지 않은 정확도보다 잡음이 적기 때문에 보다 쉽게 추세를 파악할 수 있습니다.

  • 검증 정확도 — 전체 검증 세트에 대한 분류 정확도(trainingOptions를 사용하여 지정됨).

  • 훈련 손실, 스무딩된 훈련 손실검증 손실 각 미니 배치에 대한 손실, 각 미니 배치에 대한 스무딩된 손실, 검증 세트에 대한 손실. 네트워크의 마지막 계층이 classificationLayer이면 손실 함수는 교차 엔트로피 손실이 됩니다. 분류 및 회귀 문제의 손실 함수에 대한 자세한 내용은 출력 계층 항목을 참조하십시오.

회귀 네트워크에서는 Figure가 정확도 대신 RMSE(평균 제곱 오차의 제곱근)를 플로팅합니다.

Figure는 훈련되는 각 Epoch를 음영 처리된 배경으로 표시합니다. Epoch 1회는 전체 데이터 세트를 완전히 한 번 통과하는 것을 의미합니다.

훈련 중에 오른쪽 위 코너에 있는 중지 버튼을 클릭하면 훈련을 중지하고 네트워크의 현재 상태를 반환할 수 있습니다. 예를 들어, 네트워크의 정확도가 일정해지고 더 이상 증가하지 않는 것이 분명해지면 훈련을 중지하려 할 수 있습니다. 중지 버튼을 클릭하면 훈련이 완료되기까지 얼마간의 시간이 걸릴 수 있습니다. 훈련이 완료되면 trainNetwork는 훈련된 네트워크를 반환합니다.

훈련이 끝나면 결과에서 최종 검증 정확도와 훈련이 끝난 이유를 확인합니다. 최종 검증 메트릭은 플롯에서 최종이라고 표시됩니다. 네트워크에 배치 정규화 계층이 포함되어 있는 경우, 최종 검증 메트릭이 훈련 중에 계산된 검증 메트릭과 다른 경우가 종종 있습니다. 최종 네트워크의 배치 정규화 계층은 훈련 중일 때와 다른 연산을 수행하기 때문입니다.

오른쪽에서 훈련 시간과 설정에 대한 정보를 확인합니다. 훈련 옵션에 대한 자세한 내용은 파라미터를 설정하고 컨벌루션 신경망 훈련시키기 항목을 참조하십시오.

훈련 중에 훈련 진행 상황 플로팅하기

네트워크를 훈련시키고 훈련 중에 훈련 진행 상황을 플로팅합니다.

숫자 이미지 5,000개를 포함하는 훈련 데이터를 불러옵니다. 네트워크 검증을 위해 이미지 1,000개를 따로 빼 둡니다.

[XTrain,YTrain] = digitTrain4DArrayData;

idx = randperm(size(XTrain,4),1000);
XValidation = XTrain(:,:,:,idx);
XTrain(:,:,:,idx) = [];
YValidation = YTrain(idx);
YTrain(idx) = [];

숫자 이미지 데이터를 분류할 네트워크를 구성합니다.

layers = [
    imageInputLayer([28 28 1])
    
    convolution2dLayer(3,8,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,16,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,32,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

네트워크 훈련 옵션을 지정합니다. 훈련 중에 규칙적인 간격으로 네트워크를 검증하려면 검증 데이터를 지정하십시오. Epoch당 한 번 정도씩 네트워크 검증이 실시되도록 'ValidationFrequency' 값을 선택합니다. 훈련 중에 훈련 진행 상황을 플로팅하려면 'training-progress''Plots' 값으로 지정하십시오.

options = trainingOptions('sgdm', ...
    'MaxEpochs',8, ...
    'ValidationData',{XValidation,YValidation}, ...
    'ValidationFrequency',30, ...
    'Verbose',false, ...
    'Plots','training-progress');

네트워크를 훈련시킵니다.

net = trainNetwork(XTrain,YTrain,layers,options);

입력 인수

모두 축소

네트워크 훈련에 사용할 솔버로, 다음 중 하나로 지정됩니다.

  • 'sgdm' — SGDM(Stochastic Gradient Descent with Momentum: 모멘텀을 사용한 확률적 경사하강법) 최적화 함수를 사용합니다. 'Momentum' 이름-값 쌍 인수를 사용하여 모멘텀 값을 지정할 수 있습니다.

  • 'rmsprop'— RMSProp 최적화 함수를 사용합니다. 'SquaredGradientDecayFactor' 이름-값 쌍 인수를 사용하여 제곱 기울기 이동평균의 감쇠율을 지정할 수 있습니다.

  • 'adam'— Adam 최적화 함수를 사용합니다. 'GradientDecayFactor' 이름-값 쌍 인수를 사용하여 기울기 이동평균의 감쇠율을, 'SquaredGradientDecayFactor' 이름-값 쌍 인수를 사용하여 제곱 기울기 이동평균의 감쇠율을 지정할 수 있습니다.

다양한 솔버에 대한 자세한 내용은 확률적 경사하강법 항목을 참조하십시오.

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

예: 'InitialLearnRate',0.03,'L2Regularization',0.0005,'LearnRateSchedule','piecewise'는 초기 학습률을 0.03으로, L2 정규화 인자를 0.0005로 지정하고, 주어진 Epoch 횟수마다 특정 인자를 곱하여 학습률을 떨어뜨리라고 지시합니다.

플롯 및 표시

모두 축소

네트워크 훈련 중에 표시할 플롯으로, 'Plots'와 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

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

  • 'training-progress'— 훈련 진행 상황을 플로팅합니다. 이 플롯은 미니 배치 손실과 정확도, 검증 손실과 정확도, 그리고 훈련 진행 상황에 대한 추가 정보를 보여줍니다. 이 플롯은 오른쪽 위 코너에 중지 버튼 이 있습니다. 훈련을 중지하고 네트워크의 현재 상태를 반환하려면 버튼을 클릭합니다. 훈련 진행 상황 플롯에 대한 자세한 내용은 심층 학습 훈련 진행 상황 모니터링하기 항목을 참조하십시오.

예: 'Plots','training-progress'

명령 창에 훈련 진행 상황 정보를 표시할지에 대한 표시자로, 'Verbose'와 함께 1(true) 또는 0(false)이 쉼표로 구분되어 지정됩니다.

상세 출력값은 다음과 같은 정보를 표시합니다.

분류 네트워크

필드설명
EpochEpoch 횟수. Epoch 1회는 데이터를 한 번 완전히 통과하는 것을 의미합니다.
Iteration반복 횟수. 반복 1회는 미니 배치 하나에 대응됩니다.
Time Elapsed시, 분, 초 단위의 경과된 시간.
Mini-batch Accuracy미니 배치에 대한 분류 정확도.
Validation Accuracy검증 데이터에 대한 분류 정확도. 검증 데이터를 지정하지 않은 경우에는 함수가 이 필드를 표시하지 않습니다.
Mini-batch Loss미니 배치에 대한 손실. 출력 계층이 ClassificationOutputLayer 객체인 경우, 손실은 상호 배타적인 클래스를 갖는 다중 클래스 분류 문제에 대한 교차 엔트로피 손실입니다.
Validation Loss검증 데이터에 대한 손실. 출력 계층이 ClassificationOutputLayer 객체인 경우, 손실은 상호 배타적인 클래스를 갖는 다중 클래스 분류 문제에 대한 교차 엔트로피 손실입니다. 검증 데이터를 지정하지 않은 경우에는 함수가 이 필드를 표시하지 않습니다.
Base Learning Rate기본 학습률. 소프트웨어가 계층의 학습률 인자에 이 값을 곱합니다.

회귀 네트워크

필드설명
EpochEpoch 횟수. Epoch 1회는 데이터를 한 번 완전히 통과하는 것을 의미합니다.
Iteration반복 횟수. 반복 1회는 미니 배치 하나에 대응됩니다.
Time Elapsed시, 분, 초 단위의 경과된 시간.
Mini-batch RMSE미니 배치에 대한 RMSE(제곱평균제곱근 오차).
Validation RMSE검증 데이터에 대한 RMSE. 검증 데이터를 지정하지 않은 경우에는 소프트웨어가 이 필드를 표시하지 않습니다.
Mini-batch Loss미니 배치에 대한 손실. 출력 계층이 RegressionOutputLayer 객체인 경우, 손실은 평균 제곱 오차의 절반입니다.
Validation Loss검증 데이터에 대한 손실. 출력 계층이 RegressionOutputLayer 객체인 경우, 손실은 평균 제곱 오차의 절반입니다. 검증 데이터를 지정하지 않은 경우에는 소프트웨어가 이 필드를 표시하지 않습니다.
Base Learning Rate기본 학습률. 소프트웨어가 계층의 학습률 인자에 이 값을 곱합니다.

검증 데이터를 지정하려면 'ValidationData' 이름-값 쌍을 사용하십시오.

예: 'Verbose',false

상세 출력의 빈도, 즉 명령 창에 출력하기까지 진행할 반복 횟수로, 'VerboseFrequency'와 함께 양의 정수가 쉼표로 구분되어 지정됩니다. 이 옵션은 'Verbose' 값이 true인 경우에만 효력이 있습니다.

훈련 중에 네트워크를 검증하는 경우, trainNetwork는 검증이 실시될 때마다 명령 창에도 출력합니다.

예: 'VerboseFrequency',100

미니 배치 옵션

모두 축소

훈련에 사용할 최대 Epoch 횟수로, 'MaxEpochs'와 함께 양의 정수가 쉼표로 구분되어 지정됩니다.

반복 1회는 경사하강법 알고리즘에서 미니 배치를 사용하여 손실 함수의 최소화를 향해 취한 스텝 1개에 해당합니다. Epoch 1회는 훈련 알고리즘이 전체 훈련 세트를 완전히 한 번 통과하는 것을 의미합니다.

예: 'MaxEpochs',20

각 훈련 반복마다 사용할 미니 배치의 크기로, 'MiniBatchSize'와 함께 양의 정수가 쉼표로 구분되어 지정됩니다. 미니 배치는 손실 함수의 기울기를 계산하고 가중치를 업데이트하는 데 사용되는 훈련 세트의 서브셋입니다. 확률적 경사하강법 항목을 참조하십시오.

예: 'MiniBatchSize',256

데이터 섞기 옵션으로, 'Shuffle'과 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

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

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

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

예: 'Shuffle','every-epoch'

검증

모두 축소

훈련 중에 검증에 사용할 데이터로, 이미지 데이터저장소, 데이터를 2열 테이블 또는 2열 셀형 배열로 반환하는 데이터저장소, 테이블 또는 셀형 배열로 지정됩니다. 검증 데이터의 형식은 작업의 유형에 따라 달라지며, trainNetwork 함수에 대한 유효한 입력값에 대응됩니다.

이미지 데이터

이미지 데이터에 대해, 검증 데이터를 다음 중 하나로 지정합니다.

입력값설명추가 정보
이미지 데이터저장소

categorical형 레이블이 있는 ImageDatastore 객체.

trainNetworkimds 인수
데이터저장소데이터를 2열 테이블 또는 2열 셀형 배열로 반환하는 데이터저장소로, 여기서 2열은 각각 네트워크 입력값과 예상 응답을 지정합니다.trainNetworkds 인수
테이블

테이블로, 첫 번째 열은 이미지 경로 또는 이미지를 포함하고, 뒤에 오는 열들은 응답 변수를 포함합니다.

trainNetworktbl 인수
셀형 배열 {X,Y}X

이미지로 구성된 숫자형 배열.

trainNetworkX 인수
Y

레이블로 구성된 categorical형 벡터, 숫자형 응답 변수로 구성된 행렬 또는 이미지로 구성된 배열.

trainNetworkY 인수

시퀀스 및 시계열 데이터

시퀀스 및 시계열 데이터에 대해, 검증 데이터를 다음 중 하나로 지정합니다.

입력값설명추가 정보
셀형 배열 {C,Y}C

시퀀스 또는 시계열 데이터로 구성된 셀형 배열.

trainNetworkC 인수
Y

레이블로 구성된 categorical형 벡터, categorical형 시퀀스로 구성된 셀형 배열, 숫자형 응답 변수로 구성된 행렬 또는 숫자형 시퀀스로 구성된 셀형 배열.

trainNetworkY 인수
테이블

시퀀스 또는 시계열 데이터를 포함하는 MAT 파일에 대한 절대 또는 상대 파일 경로를 포함하는 테이블.

trainNetworktbl 인수

trainNetwork는 훈련 중에 검증 데이터에 대한 검증 정확도와 검증 손실을 계산합니다. 검증 빈도를 지정하려면 'ValidationFrequency' 이름-값 쌍 인수를 사용하십시오. 검증의 손실이 더 이상 감소하지 않으면 자동으로 훈련을 중지하도록 검증 데이터를 사용할 수 있습니다. 자동 검증 중지 기능을 켜려면 'ValidationPatience' 이름-값 쌍 인수를 사용하십시오.

네트워크에 훈련 중 동작과 예측 중 동작이 다른 계층(예: 드롭아웃 계층)이 있는 경우, 검증 정확도가 훈련(미니 배치) 정확도보다 높을 수 있습니다.

검증 데이터는 'Shuffle' 값에 따라 섞입니다. 'Shuffle' 값이 'every-epoch'인 경우, 검증 데이터는 각 네트워크 검증 전에 섞입니다.

네트워크 검증 빈도(단위: 반복 횟수)로, 'ValidationFrequency'와 함께 양의 정수가 쉼표로 구분되어 지정됩니다.

'ValidationFrequency' 값은 검증 측정값을 평가하기까지 진행할 반복 횟수입니다. 검증 데이터를 지정하려면 'ValidationData' 이름-값 쌍 인수를 사용하십시오.

예: 'ValidationFrequency',20

네트워크 훈련의 검증 중지 인내도로, 'ValidationPatience'와 함께 양의 정수 또는 Inf가 쉼표로 구분되어 지정됩니다.

'ValidationPatience' 값은 네트워크 훈련을 중지하기 전에 검증 세트에 대한 손실이 그전까지의 가장 작은 손실보다 크거나 같게 나오는 건을 허용하는 횟수입니다. 자동 검증 중지 기능을 켜려면 'ValidationPatience' 값으로 양의 정수를 지정하십시오. 디폴트 값인 Inf를 사용하는 경우, 최대 Epoch 횟수 뒤에 훈련이 중지됩니다. 검증 데이터를 지정하려면 'ValidationData' 이름-값 쌍 인수를 사용하십시오.

예: 'ValidationPatience',5

솔버 옵션

모두 축소

훈련에 사용할 초기 학습률로, 'InitialLearnRate'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. 디폴트 값은 'sgdm' 솔버의 경우 0.01이고, 'rmsprop''adam' 솔버의 경우 0.001입니다. 학습률이 너무 낮으면 훈련 시간이 오래 걸립니다. 학습률이 너무 높으면 훈련이 최적의 결과보다 못한 값에 도달하거나 발산할 수 있습니다.

예: 'InitialLearnRate',0.03

데이터형: single | double

훈련 중 학습률 감소 옵션으로, 'LearnRateSchedule'과 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

  • 'none' — 전체 훈련 동안 학습률이 일정하게 유지됩니다.

  • 'piecewise' — 소프트웨어가 특정 Epoch 횟수마다 특정 인자를 곱하여 학습률을 업데이트합니다. 이 인자의 값을 지정하려면 LearnRateDropFactor 이름-값 쌍 인수를 사용하십시오. 곱셈이 이루어지기 전까지 진행할 Epoch 횟수를 지정하려면 LearnRateDropPeriod 이름-값 쌍 인수를 사용하십시오.

예: 'LearnRateSchedule','piecewise'

학습률을 낮출 Epoch의 주기로, 'LearnRateDropPeriod'와 함께 양의 정수가 쉼표로 구분되어 지정됩니다. 이 옵션은 LearnRateSchedule 값이 'piecewise'인 경우에만 유효합니다.

지정된 Epoch 횟수가 경과될 때마다 소프트웨어가 전역 학습률에 감소 인자를 곱합니다. 감소 인자는 LearnRateDropFactor 이름-값 쌍 인수를 사용하여 지정합니다.

예: 'LearnRateDropPeriod',3

학습률 감소 인자로, 'LearnRateDropFactor'와 함께 0과 1 사이의 스칼라가 쉼표로 구분되어 지정됩니다. 이 옵션은 LearnRateSchedule 값이 'piecewise'인 경우에만 유효합니다.

LearnRateDropFactor는 특정 Epoch 횟수가 경과될 때마다 학습률에 적용할 승산 인자입니다. Epoch 횟수는 LearnRateDropPeriod 이름-값 쌍 인수를 사용하여 지정합니다.

예: 'LearnRateDropFactor',0.1

데이터형: single | double

L2 정규화(가중치 감쇠) 인자로, 'L2Regularization'과 함께 음이 아닌 스칼라가 쉼표로 구분되어 지정됩니다. 자세한 내용은 L2 정규화 항목을 참조하십시오.

학습 가능한 파라미터가 있는 네트워크 계층에 대해 L2 정규화에 대한 승수를 지정할 수 있습니다. 자세한 내용은 컨벌루션 계층 및 완전 연결 계층에서 파라미터 설정하기 항목을 참조하십시오.

예: 'L2Regularization',0.0005

데이터형: single | double

모멘텀을 사용한 확률적 경사하강법의 파라미터 업데이트 단계에서 현재 반복에 직전 반복이 차지하는 비중으로, 'Momentum'과 함께 0과 1 사이의 스칼라가 쉼표로 구분되어 지정됩니다. 값이 0이면 직전 스텝의 비중이 없는 것이고, 값이 1이면 직전 스텝이 최대의 비중을 가짐을 의미합니다.

'Momentum' 값을 지정하려면 solverName'sgdm'으로 설정해야 합니다. 대부분의 경우 디폴트 값이 잘 동작합니다. 다양한 솔버에 대한 자세한 내용은 확률적 경사하강법 항목을 참조하십시오.

예: 'Momentum',0.95

데이터형: single | double

Adam 솔버에 대한 기울기 이동평균의 감쇠율로, 'GradientDecayFactor'와 함께 0과 1 사이의 스칼라가 쉼표로 구분되어 지정됩니다. 기울기 감쇠율은 [4]에서 β1로 나타냅니다.

'GradientDecayFactor' 값을 지정하려면 solverName'adam'으로 설정해야 합니다. 대부분의 경우 디폴트 값이 잘 동작합니다. 다양한 솔버에 대한 자세한 내용은 확률적 경사하강법 항목을 참조하십시오.

예: 'GradientDecayFactor',0.95

데이터형: single | double

Adam 및 RMSProp 솔버에 대한 제곱 기울기 이동평균의 감쇠율로, 'SquaredGradientDecayFactor'와 함께 0과 1 사이의 스칼라가 쉼표로 구분되어 지정됩니다. 제곱 기울기 감쇠율은 [4]에서 β2로 나타냅니다.

'SquaredGradientDecayFactor' 값을 지정하려면 solverName'adam' 또는 'rmsprop'로 설정해야 합니다. 감쇠율의 일반적인 값은 0.9, 0.99, 0.999로, 각각 평균 길이 10, 100, 1000의 파라미터 업데이트에 대응됩니다. 다양한 솔버에 대한 자세한 내용은 확률적 경사하강법 항목을 참조하십시오.

예: 'SquaredGradientDecayFactor',0.99

데이터형: single | double

Adam 및 RMSProp 솔버에 대한 분모 오프셋으로, 'Epsilon'과 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. 솔버는 0으로 나누기를 방지하기 위해 네트워크 파라미터 업데이트에서 분모에 오프셋을 더합니다.

'Epsilon' 값을 지정하려면 solverName'adam' 또는 'rmsprop'로 설정해야 합니다. 대부분의 경우 디폴트 값이 잘 동작합니다. 다양한 솔버에 대한 자세한 내용은 확률적 경사하강법 항목을 참조하십시오.

예: 'Epsilon',1e-6

데이터형: single | double

기울기 제한

모두 축소

기울기 임계값으로, 'GradientThreshold'와 함께 Inf 또는 양의 스칼라가 쉼표로 구분되어 지정됩니다. 기울기가 GradientThreshold의 값을 초과하면 기울기는 GradientThresholdMethod에 따라 잘립니다.

예: 'GradientThreshold',6

기울기 임계값을 초과하는 기울기 값을 자를 때 사용할 기울기 임계값 결정 방법으로, 'GradientThresholdMethod'와 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

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

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

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

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

예: 'GradientThresholdMethod','global-l2norm'

시퀀스 옵션

모두 축소

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

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

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

  • 양의 정수 — 각 미니 배치에 대해, 미니 배치의 가장 긴 시퀀스 길이보다 큰 지정된 길이의 가장 가까운 배수로 시퀀스를 채운 다음, 지정된 길이를 갖는 더 작은 크기의 시퀀스로 분할합니다. 분할이 이루어지면 소프트웨어가 미니 배치를 추가로 만듭니다. 전체 시퀀스가 메모리에 맞지 않으면 이 옵션을 사용하십시오. 또는 'MiniBatchSize' 옵션을 더 낮은 값으로 설정하여 미니 배치당 시퀀스 개수를 줄여 보십시오.

시퀀스 길이를 양의 정수로 지정하면 소프트웨어가 이 작은 크기의 시퀀스를 연속적인 반복을 통해 처리합니다. 네트워크는 분할된 시퀀스 사이에서 네트워크 상태를 업데이트합니다.

소프트웨어는 오른쪽에 있는 시퀀스를 채우고 자릅니다. 입력 시퀀스 채우기, 자르기, 분할의 효과에 대한 자세한 정보는 시퀀스 채우기, 자르기 및 분할 항목을 참조하십시오.

예: 'SequenceLength','shortest'

입력 시퀀스에 채울 값으로, 스칼라로 지정됩니다. 이 옵션은 SequenceLength'longest' 또는 양의 정수인 경우에만 유효합니다. 시퀀스를 NaN으로 채우면 네트워크 전체로 오류가 전파될 수 있으므로 유의하십시오.

예: 'SequencePaddingValue',-1

하드웨어 옵션

모두 축소

네트워크 훈련에 사용할 하드웨어 리소스로, 다음 중 하나로 지정됩니다.

  • 'auto' — 사용 가능한 하나의 GPU가 있으면 이를 사용합니다. 그렇지 않은 경우 CPU를 사용합니다.

  • 'cpu' — CPU를 사용합니다.

  • 'gpu' — GPU를 사용합니다.

  • 'multi-gpu' — 로컬 병렬 풀을 사용하여 컴퓨터 1대에서 여러 개의 GPU를 사용합니다. 열려 있는 풀이 없는 경우, 소프트웨어가 디폴트 병렬 설정에 따라 풀을 엽니다.

  • 'parallel' — 로컬 병렬 풀 또는 계산 클러스터를 사용합니다. 열려 있는 풀이 없는 경우, 소프트웨어가 디폴트 클러스터 프로파일을 사용하여 풀을 엽니다. 풀이 GPU를 사용할 수 있는 경우, 고유한 GPU를 갖는 워커만 훈련 계산을 수행합니다. 풀에 GPU가 없는 경우, 훈련이 모든 클러스터 CPU에서 이루어집니다.

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

GPU 옵션, 다중 GPU 옵션 및 병렬 옵션을 사용하려면 Parallel Computing Toolbox™가 필요합니다. 심층 학습에 GPU를 사용하려면 CUDA® 지원 NVIDIA® GPU(Compute Capability 3.0 이상)도 필요합니다. 이러한 옵션 중 하나를 선택했는데 Parallel Computing Toolbox 또는 적당한 GPU가 없는 경우, 오류가 반환됩니다.

병렬로 훈련시킬 때 성능 향상을 확인하려면 MiniBatchSize 훈련 옵션을 늘려서 통신 오버헤드를 상쇄해 보십시오.

장단기 기억(LSTM) 네트워크의 훈련은 단일 CPU 및 GPU 훈련만 지원합니다.

일부 입력 데이터저장소는 병렬 또는 다중 GPU 실행 환경에서 백그라운드 디스패치를 지원합니다. 이러한 데이터저장소는 augmentedImageDatastore, pixelLabelImageDatastore, denoisingImageDatastore, randomPatchExtractionDatastore입니다. 그 밖의 다른 입력 데이터저장소는 DispatchInBackgroundExecutionEnvironment'parallel' 또는 'multi-gpu' 값을 지원하지 않습니다.

예: 'ExecutionEnvironment','cpu'

여러 GPU 또는 CPU 사이의 병렬 워커 부하 분배로, 'WorkerLoad'와 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

  • 0과 1 사이의 스칼라 — 각 컴퓨터에서 네트워크 훈련 계산에 사용할 워커의 비율. 백그라운드 디스패치가 활성화된 미니 배치 데이터저장소의 데이터를 사용하여 네트워크를 훈련시키는 경우, 나머지 워커들은 백그라운드에서 데이터를 가져와서 전처리합니다.

  • 양의 정수 — 각 컴퓨터에서 네트워크 훈련 계산에 사용할 워커의 개수. 백그라운드 디스패치가 활성화된 미니 배치 데이터저장소의 데이터를 사용하여 네트워크를 훈련시키는 경우, 나머지 워커들은 백그라운드에서 데이터를 가져와서 전처리합니다.

  • 숫자형 벡터 — 병렬 풀에 있는 각 워커의 네트워크 훈련 부하. 벡터 W에 대해 워커 i는 작업(미니 배치 당 표본의 개수) 중 일정 비율(W(i)/sum(W))을 할당받습니다. 백그라운드 디스패치가 활성화된 미니 배치 데이터저장소의 데이터를 사용하여 네트워크를 훈련시키는 경우, 특정 워커에 로드 0을 할당하여 백그라운드에서 데이터를 가져오는 용도로 해당 워커를 사용할 수 있습니다. 지정된 벡터는 병렬 풀의 워커 하나당 값 하나를 가져야 합니다.

병렬 풀이 GPU를 사용할 수 있는 경우, 고유한 GPU가 없는 워커는 훈련 계산에 사용되지 않습니다. GPU가 있는 풀에 대한 디폴트 동작은 고유한 GPU를 갖는 모든 워커를 훈련 계산에 사용하고 나머지 워커를 백그라운드 디스패치에 사용하는 것입니다. 풀이 GPU을 사용할 수 없고 훈련에 CPU가 사용되는 경우, 디폴트 값은 컴퓨터당 워커 하나를 백그라운드 데이터 디스패치 용도로 사용하는 것입니다.

데이터저장소에서 훈련 데이터를 읽어 들일 때 비동기식 프리페치 대기를 사용할지 여부로, false 또는 true로 지정됩니다. 비동기식 프리페치 대기를 사용하려면 Parallel Computing Toolbox가 필요합니다.

일부 입력 데이터저장소는 병렬 또는 다중 GPU 실행 환경에서 백그라운드 디스패치를 지원합니다. 이러한 데이터저장소는 augmentedImageDatastore, pixelLabelImageDatastore, denoisingImageDatastore, randomPatchExtractionDatastore입니다. 그 밖의 다른 입력 데이터저장소는 DispatchInBackgroundExecutionEnvironment'parallel' 또는 'multi-gpu' 값을 지원하지 않습니다.

검사 지점

모두 축소

검사 지점 네트워크를 저장할 경로로, 'CheckpointPath'와 함께 문자형 벡터가 쉼표로 구분되어 지정됩니다.

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

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

    폴더가 존재하지 않는 경우, 검사 지점 네트워크를 저장할 경로를 지정하기 전에 먼저 폴더를 만들어야 합니다. 지정한 경로가 존재하지 않는 경우, trainingOptions는 오류를 반환합니다.

네트워크 검사 지점 저장에 대한 자세한 내용은 검사 지점 네트워크를 저장하고 훈련 재개하기 항목을 참조하십시오.

예: 'CheckpointPath','C:\Temp\checkpoint'

데이터형: char

훈련 중에 호출할 출력 함수로, 'OutputFcn'과 함께 함수 핸들 또는 함수 핸들로 구성된 셀형 배열이 쉼표로 구분되어 지정됩니다. trainNetwork는 훈련 시작 전에 한 번, 각 반복 후에, 그리고 훈련을 마친 후에 한 번 지정된 함수를 호출합니다. trainNetwork는 다음과 같은 필드에 정보가 담긴 구조체를 전달합니다.

필드설명
Epoch현재 Epoch 횟수
Iteration현재 반복 횟수
TimeSinceStart훈련 시작 이후 경과된 시간(단위: 초)
TrainingLoss현재 미니 배치 손실
ValidationLoss검증 데이터에 대한 손실
BaseLearnRate현재 기본 학습률
TrainingAccuracy 현재 미니 배치에 대한 정확도(분류 네트워크)
TrainingRMSE현재 미니 배치에 대한 RMSE(회귀 네트워크)
ValidationAccuracy검증 데이터에 대한 정확도(분류 네트워크)
ValidationRMSE검증 데이터에 대한 RMSE(회귀 네트워크)
State현재 훈련 상태로, 가능한 값은 "start", "iteration" 또는 "done"입니다.

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

출력 함수를 사용하여 진행 상황 정보를 표시하거나 플로팅할 수도 있고 훈련을 중단할 수도 있습니다. 훈련을 조기에 중단하려면 출력 함수가 true를 반환하도록 하십시오. 출력 함수가 true를 반환하면 훈련이 완료되고 trainNetwork는 가장 최근의 네트워크를 반환합니다. 출력 함수를 사용하는 방법을 보여주는 예제는 심층 학습 네트워크 훈련 중의 출력값 사용자 지정하기 항목을 참조하십시오.

데이터형: function_handle | cell

출력 인수

모두 축소

훈련 옵션으로, TrainingOptionsSGDM, TrainingOptionsRMSProp 또는 TrainingOptionsADAM 객체로 반환됩니다. 신경망을 훈련시키려면 훈련 옵션을 trainNetwork 함수의 입력 인수로 사용하십시오.

solverName'sgdm', 'rmsprop' 또는 'adam'인 경우, 훈련 옵션은 각각 TrainingOptionsSGDM, TrainingOptionsRMSProp 또는 TrainingOptionsADAM 객체로 반환됩니다.

알고리즘

모두 축소

초기 가중치와 편향

초기 가중치의 디폴트 값은 평균이 0이고 표준편차가 0.01인 가우스 분포입니다. 초기 편향 값의 디폴트 값은 0입니다. 가중치와 편향의 초기화를 수동으로 변경할 수 있습니다. 컨벌루션 계층에서 초기 가중치와 편향 지정하기완전 연결 계층에 초기 가중치와 편향 지정하기 항목을 참조하십시오.

확률적 경사하강법

표준 경사하강법 알고리즘은 다음과 같이 각 반복에서 손실에 대한 음의 기울기 방향으로 작은 스텝을 취하여 손실 함수를 최소화하도록 네트워크 파라미터(가중치와 편향)를 업데이트합니다.

θ+1=θαE(θ),

여기서 은 반복 횟수이고, α>0은 학습률이고, θ는 파라미터 벡터이고, E(θ)는 손실 함수입니다. 표준 경사하강법 알고리즘에서 손실 함수의 기울기 E(θ)는 전체 훈련 세트를 사용하여 계산되며, 표준 경사하강법 알고리즘은 한번에 전체 데이터 세트를 사용합니다.

반면에 확률적 경사하강법 알고리즘은 각 반복에서 훈련 데이터의 일부를 사용하여 기울기를 계산하고 파라미터를 업데이트합니다. 각 반복에는 미니 배치라는 다른 서브셋이 사용됩니다. 미니 배치를 사용하여 훈련 알고리즘이 전체 훈련 세트를 완전히 한 번 통과하는 것을 Epoch 1회라고 합니다. 확률적 경사하강법은 미니 배치를 사용하여 계산되는 파라미터 업데이트가 전체 데이터 세트를 사용할 경우 결과로 생성될 파라미터 업데이트의 잡음이 있는 추정값이어서 확률적입니다. 'MiniBatchSize' 이름-값 쌍 인수를 사용하여 미니 배치 크기를 지정하고 'MaxEpochs' 이름-값 쌍 인수를 사용하여 최대 Epoch 횟수를 지정할 수 있습니다.

모멘텀을 사용한 확률적 경사하강법

확률적 경사하강법 알고리즘은 최적해를 향해 가는 최속강하법 경로에서 진동이 발생할 수 있습니다. 이러한 진동을 줄이는 한 가지 방법으로 파라미터 업데이트에 모멘텀 항을 추가하는 것을 들 수 있습니다[2]. 모멘텀을 사용한 확률적 경사하강법(SGDM) 업데이트는 다음과 같이 표현됩니다.

θ+1=θαE(θ)+γ(θθ1),

여기서 γ는 직전 기울기 스텝이 현재 반복에서 차지하는 비중을 결정합니다. 이 값은 'Momentum' 이름-값 쌍 인수를 사용하여 지정할 수 있습니다. 모멘텀을 사용한 확률적 경사하강법 알고리즘을 사용하여 신경망을 훈련시키려면 solverName'sgdm'으로 지정하십시오. 학습률의 초기값을 α로 지정하려면 'InitialLearnRate' 이름-값 쌍 인수를 사용하십시오. 서로 다른 계층과 파라미터에 서로 다른 학습률을 지정할 수도 있습니다. 자세한 내용은 컨벌루션 계층 및 완전 연결 계층에서 파라미터 설정하기 항목을 참조하십시오.

RMSProp

모멘텀을 사용한 확률적 경사하강법은 모든 파라미터에 대해 하나의 학습률을 사용합니다. 파라미터에 따라 다를 뿐만 아니라 최적화 중인 손실 함수에 자동적으로 적응할 수 있는 학습률을 사용하여 네트워크 훈련을 개선하는 최적화 알고리즘도 있습니다. 그중 하나가 RMSProp(RMS 전파)입니다. RMSProp는 파라미터 기울기의 요소별 제곱의 이동평균을 유지합니다.

v=β2v1+(1β2)[E(θ)]2

β2는 이동평균의 감쇠율입니다. 감쇠율의 일반적인 값은 0.9, 0.99, 0.999입니다. 제곱 기울기의 대응되는 평균 길이는 1/(1-β2), 즉 각각 10, 100, 1000의 파라미터 업데이트와 같습니다. β2'SquaredGradientDecayFactor' 이름-값 쌍 인수를 사용하여 지정할 수 있습니다. RMSProp 알고리즘은 이러한 이동평균을 사용하여 각 파라미터의 업데이트를 개별적으로 정규화합니다.

θ+1=θαE(θ)v+ϵ

여기서 나눗셈은 요소별로 이루어집니다. RMSProp를 사용하면 기울기가 큰 파라미터에 대해서는 학습률이 효과적으로 감소하고, 기울기가 작은 파라미터에 대해서는 학습률이 증가합니다. ɛ은 0으로 나누기를 방지하기 위해 더해진 작은 상수입니다. ɛ은 'Epsilon' 이름-값 쌍 인수를 사용하여 지정할 수 있지만, 통상적으로 디폴트 값으로도 잘 동작합니다. RMSProp를 사용하여 신경망을 훈련시키려면 solverName'rmsprop'로 지정하십시오.

Adam

Adam(Adaptive Moment Estimation에서 유래)[4]은 모멘텀 항이 추가된 것을 제외하면 RMSProp와 유사한 파라미터 업데이트를 사용합니다. 다음과 같이 파라미터 기울기와 그 제곱 값의 요소별 이동평균을 모두 유지합니다.

m=β1m1+(1β1)E(θ)

v=β2v1+(1β2)[E(θ)]2

β1과 β2 감쇠율은 각각 'GradientDecayFactor''SquaredGradientDecayFactor' 이름-값 쌍 인수를 사용하여 지정할 수 있습니다. Adam은 이러한 이동평균을 사용하여 네트워크 파라미터를 다음과 같이 업데이트합니다.

θ+1=θαmlvl+ϵ

여러 반복 동안 기울기가 비슷한 경우에 기울기의 이동평균을 사용하면 파라미터 업데이트가 특정 방향에서 추진력(모멘텀)을 갖게 됩니다. 기울기의 대부분이 잡음인 경우, 기울기의 이동평균이 작아지므로 파라미터 업데이트도 작아집니다. ɛ은 'Epsilon' 이름-값 쌍 인수를 사용하여 지정할 수 있습니다. 디폴트 값은 대부분의 경우 잘 동작하지만, 특정 문제에서는 최대 1의 크기를 갖는 값이 더 좋은 결과를 낼 수 있습니다. Adam을 사용하여 신경망을 훈련시키려면 solverName'adam'으로 지정하십시오. 전체 Adam 업데이트는 훈련 시작 시에 나타나는 편향을 정정하는 메커니즘도 포함합니다. 자세한 내용은 [4] 항목을 참조하십시오.

'InitialLearnRate' 이름-값 쌍 인수를 사용하여 모든 최적화 알고리즘에 대한 학습률 α를 지정합니다. 학습률의 효과는 각 최적화 알고리즘마다 다르게 나타나므로 일반적으로 최적의 학습률도 달라집니다. 계층과 파라미터에 따라 달라지는 학습률을 지정할 수도 있습니다. 자세한 내용은 컨벌루션 계층 및 완전 연결 계층에서 파라미터 설정하기 항목을 참조하십시오.

기울기 제한

기울기의 크기가 기하급수적으로 증가하는 경우, 훈련의 안정성이 떨어지고 반복 몇 회만에 발산할 수도 있습니다. 이러한 "기울기 폭주"는 NaN 또는 Inf로 귀결되는 훈련 손실로 나타납니다. 기울기 제한을 사용하면 학습률이 높은 경우 및 이상값이 존재하는 경우에 훈련을 안정화하여 기울기 폭주를 방지하는 데 도움이 됩니다[3]. 기울기 제한을 사용하면 네트워크를 더 빨리 훈련시킬 수 있고, 일반적으로 학습된 작업의 정확도에 영향을 주지 않습니다.

다음과 같이 두 가지 유형의 기울기 제한이 있습니다.

  • 노름 기반 기울기 제한은 임계값을 기준으로 기울기를 다시 스케일링하며, 기울기의 방향은 바꾸지 않습니다. GradientThresholdMethod'l2norm' 값과 'global-l2norm' 값은 노름 기반 기울기 제한 방법입니다.

  • 값 기반 기울기 제한은 임계값보다 큰 편도함수를 모두 자르는데 이는 기울기의 방향이 임의로 바뀌는 결과로 이어질 수 있습니다. 값 기반 기울기 제한을 사용하면 예측할 수 없는 동작이 나타날 수 있으나, 충분히 작은 변경은 네트워크의 발산을 유발하지 않습니다. GradientThresholdMethod'absolute-value' 값은 값 기반 기울기 제한 방법입니다.

예제는 심층 학습을 사용한 시계열 예측심층 학습을 사용한 sequence-to-sequence 분류 항목을 참조하십시오.

L2 정규화

과적합을 방지하는 한 가지 방법으로 손실 함수 E(θ)에 대한 가중치에 대해 정규화 항을 추가하는 것을 들 수 있습니다[1], [2]. 정규화 항은 가중치 감쇠라고도 합니다. 정규화 항이 있는 손실 함수는 다음과 같은 형태를 갖습니다.

ER(θ)=E(θ)+λΩ(w),

여기서 w는 가중 벡터이고, λ는 정규화 인자(계수)이고, 정규화 함수 Ω(w)는 다음과 같습니다.

Ω(w)=12wTw.

편향은 정규화되지 않습니다[2]. 정규화 인자 λ'L2Regularization' 이름-값 쌍 인수를 사용하여 지정할 수 있습니다. 서로 다른 계층과 파라미터에 대해 서로 다른 정규화 인자를 지정할 수도 있습니다. 자세한 내용은 컨벌루션 계층 및 완전 연결 계층에서 파라미터 설정하기 항목을 참조하십시오.

소프트웨어가 네트워크 훈련에 사용하는 손실 함수에는 정규화 항이 포함됩니다. 그러나 훈련 중에 명령 창과 훈련 진행 상황 플롯에 표시되는 손실 값은 데이터에 대한 손실만이며 정규화 항은 포함되지 않습니다.

호환성 관련 고려 사항

모두 확장

R2018b에서 동작이 변경됨

R2018b에서 동작이 변경됨

참고 문헌

[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.

[4] Kingma, Diederik, and Jimmy Ba. "Adam: A method for stochastic optimization." arXiv preprint arXiv:1412.6980 (2014).

R2016a에 개발됨