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

TrainingOptionsSGDM

모멘텀을 사용한 확률적 경사하강법의 훈련 옵션

설명

모멘텀을 사용한 확률적 경사하강법의 훈련 옵션입니다. 학습률 정보, L2 정규화 인자, 미니 배치 등이 해당합니다.

생성

trainingOptions를 사용하고 solverName 입력 인수로 'sgdm'을 지정하여 TrainingOptionsSGDM 객체를 만듭니다.

속성

모두 확장

플롯 및 표시

네트워크 훈련 중에 표시할 플롯으로, 다음 중 하나로 지정됩니다.

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

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

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

표시되는 정보에는 Epoch 횟수, 반복 횟수, 경과된 시간, 미니 배치 손실, 미니 배치 정확도, 기본 학습률이 포함됩니다. 회귀 네트워크를 훈련시키는 경우 정확도 대신 RMSE(평균 제곱 오차의 제곱근)가 표시됩니다. 훈련 중에 네트워크를 검증하는 경우, 검증 손실과 검증 정확도(또는 RMSE)도 표시됩니다.

데이터형: logical

상세 출력의 빈도, 즉 명령 창에 출력하기까지 진행할 반복 횟수로, 양의 정수로 지정됩니다. 이 속성은 Verbose 값이 true인 경우에만 효력이 있습니다.

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

미니 배치 옵션

훈련에 사용할 최대 Epoch 횟수로, 양의 정수로 지정됩니다.

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

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

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

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

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

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

검증

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

이 옵션은 입력값이 하나만 있는 네트워크를 지원합니다.

영상 데이터

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

입력값설명추가 정보
영상 데이터저장소

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

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

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

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

영상으로 구성된 숫자형 배열.

trainNetworkX 인수
Y

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

trainNetworkY 인수

시퀀스 및 시계열 데이터

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

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

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

trainNetworksequences 인수
Y

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

trainNetworkY 인수
테이블

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

trainNetworktbl 인수

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

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

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

네트워크 검증 빈도(단위: 반복 횟수)로, 양의 정수로 지정됩니다.

ValidationFrequency 값은 검증 메트릭을 평가하기까지 진행할 반복 횟수입니다.

네트워크 훈련의 검증 중지 인내도로, 양의 정수 또는 Inf로 지정됩니다.

'ValidationPatience' 값은 네트워크 훈련을 중지하기 전에 검증 세트에 대한 손실이 그전까지의 가장 작은 손실보다 크거나 같게 나오는 건을 허용하는 횟수입니다.

솔버 옵션

훈련에 사용할 초기 학습률로, 양의 스칼라로 지정됩니다. 학습률이 너무 낮으면 훈련 시간이 오래 걸립니다. 학습률이 너무 높으면 훈련이 준최적 결과에 도달할 수 있습니다.

학습률 일정을 위한 설정으로, 구조체로 지정됩니다. LearnRateScheduleSettings는 학습률 조정 방법의 유형을 지정하는 Method 필드를 갖습니다. 가능한 방법은 다음과 같습니다.

  • 'none' — 훈련의 처음부터 끝까지 학습률이 일정하게 유지됩니다.

  • 'piecewise' — 훈련 중에 학습률이 주기적으로 떨어집니다.

Method'piecewise'인 경우, LearnRateScheduleSettings는 추가로 다음과 같은 2개의 필드를 가집니다.

  • DropRateFactor — 훈련 중에 학습률이 떨어지는 기준이 되는 승산 인자

  • DropPeriod — 훈련 중에 학습률이 조정되기까지 통과할 Epoch 횟수

trainingOptions를 사용하여 학습률 일정을 위한 설정을 지정하십시오.

데이터형: struct

L2 정규화 함수(가중치 감쇠)의 인자로, 음이 아닌 스칼라로 지정됩니다.

학습 가능한 파라미터가 있는 네트워크 계층에 대해 L2 정규화 함수에 대한 승수를 지정할 수 있습니다.

훈련에서 직전 반복의 기울기 스텝이 현재 반복에 대해 차지하는 비중으로, 0과 1 사이의 스칼라 값으로 지정됩니다. 값이 0이면 직전 스텝의 비중이 없는 것이고, 값이 1이면 직전 스텝이 최대의 비중을 가짐을 의미합니다. 다양한 솔버에 대한 자세한 내용은 확률적 경사하강법 항목을 참조하십시오.

기울기 제한

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

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

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

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

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

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

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

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

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

시퀀스 옵션

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

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

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

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

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

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

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

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

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

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

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

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

하드웨어 옵션

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

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

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

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

  • 'multi-gpu' — 디폴트 클러스터 프로파일에 따라 로컬 병렬 풀을 사용하여 컴퓨터 1대에서 여러 개의 GPU를 사용합니다. 기존 병렬 풀이 없는 경우 소프트웨어는 사용 가능한 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가 없는 경우, 오류가 반환됩니다.

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

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

trainingOptions를 사용하여 실행 환경을 지정하십시오.

데이터형: char | string

GPU 또는 CPU에 대한 워커 부하 분배로, 0과 1 사이의 스칼라, 양의 정수 또는 숫자형 벡터로 지정됩니다. 이 속성은 ExecutionEnvironment 값이 'multi-gpu' 또는 'parallel'인 경우에만 효력이 있습니다.

검사 지점

검사 지점 네트워크를 저장할 경로로, 문자형 벡터로 지정됩니다.

데이터형: char

훈련 중에 호출할 출력 함수로, 함수 핸들 또는 함수 핸들로 구성된 셀형 배열로 지정됩니다. 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

예제

모두 축소

모멘텀을 사용한 확률적 경사하강법을 이용해 네트워크를 훈련시키는 옵션 세트를 만듭니다. 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
     SequencePaddingDirection: 'right'
         DispatchInBackground: 0
      ResetInputNormalization: 1

R2016a에 개발됨