TrainingOptionsADAM
Adam 최적화 함수의 훈련 옵션
설명
Adam(Adaptive Moment Estimation: 적응적 모멘트 추정) 최적화 함수의 훈련 옵션입니다. 학습률 정보, L2 정규화 인자, 미니 배치 등이 해당합니다.
생성
trainingOptions
를 사용하고 첫 번째 입력 인수로 'adam'
을 지정하여 TrainingOptionsADAM
객체를 만듭니다.
속성
플롯 및 표시
Plots
— 신경망 훈련 중에 표시할 플롯
'none'
(디폴트 값) | 'training-progress'
신경망 훈련 중에 표시할 플롯으로, 다음 중 하나로 지정됩니다.
'none'
— 훈련 중에 플롯을 표시하지 않습니다.'training-progress'
— 훈련 진행 상황을 플로팅합니다. 이 플롯은 미니 배치 손실과 정확도, 검증 손실과 정확도, 그리고 훈련 진행 상황에 대한 추가 정보를 보여줍니다. 이 플롯은 오른쪽 위 코너에 중지 버튼이 있습니다. 이 버튼을 클릭하면 훈련이 중지되고 신경망의 현재 상태가 반환됩니다. 훈련 플롯 내보내기를 클릭하여 훈련 플롯을 영상 또는 PDF로 저장할 수 있습니다. 훈련 진행 상황 플롯에 대한 자세한 내용은 딥러닝 훈련 진행 상황 모니터링하기 항목을 참조하십시오.
Verbose
— 훈련 진행 상황 정보를 표시할지에 대한 표시자
1
(true) (디폴트 값) | 0
(false)
명령 창에 훈련 진행 상황 정보를 표시할지에 대한 표시자로, 1
(true) 또는 0
(false)으로 지정됩니다.
상세 출력값은 다음과 같은 정보를 표시합니다.
분류 신경망
필드 | 설명 |
---|---|
Epoch | Epoch 횟수. Epoch 1회는 데이터를 한 번 완전히 통과하는 것을 의미합니다. |
Iteration | 반복 횟수. 반복 1회는 미니 배치 하나에 대응됩니다. |
Time Elapsed | 시, 분, 초 단위의 경과된 시간. |
Mini-batch Accuracy | 미니 배치에 대한 분류 정확도. |
Validation Accuracy | 검증 데이터에 대한 분류 정확도. 검증 데이터를 지정하지 않은 경우에는 함수가 이 필드를 표시하지 않습니다. |
Mini-batch Loss | 미니 배치에 대한 손실. 출력 계층이 ClassificationOutputLayer 객체인 경우, 손실은 상호 배타적인 클래스를 갖는 다중 클래스 분류 문제에 대한 교차 엔트로피 손실입니다. |
Validation Loss | 검증 데이터에 대한 손실. 출력 계층이 ClassificationOutputLayer 객체인 경우, 손실은 상호 배타적인 클래스를 갖는 다중 클래스 분류 문제에 대한 교차 엔트로피 손실입니다. 검증 데이터를 지정하지 않은 경우에는 함수가 이 필드를 표시하지 않습니다. |
Base Learning Rate | 기본 학습률. 소프트웨어가 계층의 학습률 인자에 이 값을 곱합니다. |
회귀 신경망
필드 | 설명 |
---|---|
Epoch | Epoch 횟수. Epoch 1회는 데이터를 한 번 완전히 통과하는 것을 의미합니다. |
Iteration | 반복 횟수. 반복 1회는 미니 배치 하나에 대응됩니다. |
Time Elapsed | 시, 분, 초 단위의 경과된 시간. |
Mini-batch RMSE | 미니 배치에 대한 RMSE(제곱평균제곱근 오차). |
Validation RMSE | 검증 데이터에 대한 RMSE. 검증 데이터를 지정하지 않은 경우에는 소프트웨어가 이 필드를 표시하지 않습니다. |
Mini-batch Loss | 미니 배치에 대한 손실. 출력 계층이 RegressionOutputLayer 객체인 경우, 손실은 평균 제곱 오차의 절반입니다. |
Validation Loss | 검증 데이터에 대한 손실. 출력 계층이 RegressionOutputLayer 객체인 경우, 손실은 평균 제곱 오차의 절반입니다. 검증 데이터를 지정하지 않은 경우에는 소프트웨어가 이 필드를 표시하지 않습니다. |
Base Learning Rate | 기본 학습률. 소프트웨어가 계층의 학습률 인자에 이 값을 곱합니다. |
훈련이 중지될 때 상세 출력값은 중지 이유를 표시합니다.
검증 데이터를 지정하려면 ValidationData
훈련 옵션을 사용하십시오.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
VerboseFrequency
— 상세 출력의 빈도
50
(디폴트 값) | 양의 정수
상세 출력의 빈도, 즉 명령 창에 출력하기까지 진행할 반복 횟수로, 양의 정수로 지정됩니다. 이 옵션은 Verbose
훈련 옵션이 1
(true)인 경우에만 효력이 있습니다.
훈련 중에 신경망을 검증하는 경우, trainNetwork
는 검증이 실시될 때마다 명령 창에도 출력합니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
미니 배치 옵션
MaxEpochs
— 최대 Epoch 횟수
30
(디폴트 값) | 양의 정수
훈련에 사용할 최대 Epoch 횟수로, 양의 정수로 지정됩니다.
반복 1회는 경사하강법 알고리즘에서 미니 배치를 사용하여 손실 함수의 최소화를 향해 취한 스텝 1개에 해당합니다. Epoch 1회는 훈련 알고리즘이 전체 훈련 세트를 완전히 한 번 통과하는 것을 의미합니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
MiniBatchSize
— 미니 배치의 크기
128
(디폴트 값) | 양의 정수
각 훈련 반복마다 사용할 미니 배치의 크기로, 양의 정수로 지정됩니다. 미니 배치는 손실 함수의 기울기를 계산하고 가중치를 업데이트하는 데 사용되는 훈련 세트의 서브셋입니다.
훈련 샘플의 개수가 미니 배치 크기로 균등하게 나뉘지 않는 경우, trainNetwork
는 각 Epoch의 최종 전체 미니 배치에 담기지 않는 훈련 데이터를 버립니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Shuffle
— 데이터 섞기 옵션
'once'
(디폴트 값) | 'never'
| 'every-epoch'
데이터 섞기 옵션으로, 다음 중 하나로 지정됩니다.
'once'
— 훈련 전에 훈련 데이터와 검증 데이터를 1회 섞습니다.'never'
— 데이터를 섞지 않습니다.'every-epoch'
— 각 훈련 Epoch 전에 훈련 데이터를 섞고, 각 신경망 검증 전에 검증 데이터를 섞습니다. 훈련 샘플의 개수가 미니 배치 크기로 균등하게 나뉘지 않는 경우,trainNetwork
는 각 Epoch의 최종 전체 미니 배치에 담기지 않는 훈련 데이터를 버립니다. 매 Epoch마다 동일한 데이터가 버려지지 않도록 하려면Shuffle
훈련 옵션을'every-epoch'
로 설정하십시오.
검증
ValidationData
— 훈련 중에 검증에 사용할 데이터
[]
(디폴트 값) | 데이터저장소 | 테이블 | 셀형 배열
훈련 중에 검증에 사용할 데이터로, []
, 검증 예측 변수와 검증 응답 변수를 포함하는 데이터저장소, 테이블 또는 셀형 배열로 지정됩니다.
trainNetwork
함수에서 지원하는 것과 동일한 형식을 사용하여 검증 예측 변수와 검증 응답 변수를 지정할 수 있습니다. 검증 데이터를 데이터저장소, 테이블 또는 셀형 배열 {predictors,responses}
로 지정할 수 있습니다. 여기서 predictors
는 검증 예측 변수를 포함하고 responses
는 검증 응답 변수를 포함합니다.
자세한 내용은 trainNetwork
함수의 images
, sequences
및 features
입력 인수를 참조하십시오.
trainNetwork
는 훈련 중에 검증 데이터에 대한 검증 정확도와 검증 손실을 계산합니다. 검증 빈도를 지정하려면 ValidationFrequency
훈련 옵션을 사용하십시오. 검증의 손실이 더 이상 감소하지 않으면 자동으로 훈련을 중지하도록 검증 데이터를 사용할 수 있습니다. 자동 검증 중지 기능을 켜려면 ValidationPatience
훈련 옵션을 사용하십시오.
신경망에 훈련 중 동작과 예측 중 동작이 다른 계층(예: 드롭아웃 계층)이 있는 경우, 검증 정확도가 훈련(미니 배치) 정확도보다 높을 수 있습니다.
검증 데이터는 Shuffle
훈련 옵션에 따라 섞입니다. Shuffle
이 'every-epoch'
인 경우, 검증 데이터는 각 신경망을 검증하기 전에 섞입니다.
ValidationData
가 []
이면 훈련 중에 신경망이 검증되지 않습니다.
ValidationFrequency
— 신경망 검증 빈도
50
(디폴트 값) | 양의 정수
신경망 검증 빈도(단위: 반복 횟수)로, 양의 정수로 지정됩니다.
ValidationFrequency
값은 검증 메트릭을 평가하기까지 진행할 반복 횟수입니다. 검증 데이터를 지정하려면 ValidationData
훈련 옵션을 사용하십시오.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ValidationPatience
— 검증 중지 인내도
Inf
(디폴트 값) | 양의 정수
신경망 훈련의 검증 중지 인내도로, 양의 정수 또는 Inf
로 지정됩니다.
ValidationPatience
는 신경망 훈련이 중단되기 전까지 검증 세트에서의 손실이 그전까지의 가장 작은 손실보다 크거나 같아도 되는 횟수를 지정합니다. ValidationPatience
가 Inf
이면 검증 손실의 값으로 인해 조기에 훈련이 중지되지는 않습니다.
반환되는 신경망은 OutputNetwork
훈련 옵션에 따라 다릅니다. 검증 손실이 가장 적은 신경망을 반환하려면 OutputNetwork
훈련 옵션을 "best-validation-loss"
로 설정하십시오.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
OutputNetwork
— 훈련이 완료될 때 반환할 신경망
'last-iteration'
(디폴트 값) | 'best-validation-loss'
훈련이 완료될 때 반환할 신경망으로, 다음 중 하나로 지정됩니다.
'last-iteration'
– 마지막 훈련 반복에 해당하는 신경망을 반환합니다.'best-validation-loss'
– 검증 손실이 가장 적은 훈련 반복에 해당하는 신경망을 반환합니다. 이 옵션을 사용하려면ValidationData
훈련 옵션을 지정해야 합니다.
솔버 옵션
InitialLearnRate
— 초기 학습률
0.001
(디폴트 값) | 양의 스칼라
훈련에 사용할 초기 학습률로, 양의 스칼라로 지정됩니다.
학습률이 너무 낮으면 훈련 시간이 오래 걸릴 수 있습니다. 학습률이 너무 높으면 훈련이 최적의 결과보다 못한 값에 도달하거나 발산할 수 있습니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
LearnRateScheduleSettings
— 학습률 일정을 위한 설정
구조체
읽기 전용 속성입니다.
학습률 일정을 위한 설정으로, 구조체로 지정됩니다. LearnRateScheduleSettings
는 학습률 조정 방법의 유형을 지정하는 Method
필드를 갖습니다. 가능한 방법은 다음과 같습니다.
'none'
— 훈련의 처음부터 끝까지 학습률이 일정하게 유지됩니다.'piecewise'
— 훈련 중에 학습률이 주기적으로 떨어집니다.
Method
가 'piecewise'
인 경우, LearnRateScheduleSettings
는 추가로 다음과 같은 2개의 필드를 가집니다.
DropRateFactor
— 훈련 중에 학습률이 떨어지는 기준이 되는 승산 인자DropPeriod
— 훈련 중에 학습률이 조정되기까지 통과할 Epoch 횟수
trainingOptions
를 사용하여 학습률 일정을 위한 설정을 지정하십시오.
데이터형: struct
L2Regularization
— L2 정규화 인자
0.0001
(디폴트 값) | 음이 아닌 스칼라
L2 정규화(가중치 감쇠) 인자로, 음이 아닌 스칼라로 지정됩니다. 자세한 내용은 L2 정규화 항목을 참조하십시오.
학습 가능한 파라미터를 포함하는 신경망 계층에 대해 L2 정규화에 대한 승수를 지정할 수 있습니다. 자세한 내용은 컨벌루션 계층 및 완전 연결 계층에서 파라미터 설정하기 항목을 참조하십시오.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
SquaredGradientDecayFactor
— 제곱 기울기 이동평균의 감쇠율
0.999
(디폴트 값) | 1
보다 작은 음이 아닌 스칼라
Epsilon
— 분모 오프셋
1e-8
(디폴트 값) | 양의 스칼라
Adam 솔버에 대한 분모 오프셋으로, 양의 스칼라로 지정됩니다.
솔버는 0으로 나누기를 방지하기 위해 신경망 파라미터 업데이트에서 분모에 오프셋을 더합니다. 디폴트 값은 대부분의 작업에서 잘 동작합니다.
자세한 내용은 Adam 항목을 참조하십시오.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ResetInputNormalization
— 입력 계층 정규화를 초기화하는 옵션
1
(true) (디폴트 값) | 0
(false)
입력 계층 정규화를 초기화하는 옵션으로, 다음 중 하나로 지정됩니다.
1
(true) — 입력 계층 정규화 통계량을 초기화하고 이를 훈련 시점에 다시 계산합니다.0
(false) — 정규화 통계량이 비어 있는 경우 이를 훈련 시점에 계산합니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
BatchNormalizationStatistics
— 배치 정규화 계층에서 통계량을 계산하는 모드
'population'
(디폴트 값) | 'moving'
배치 정규화 계층에서 통계량을 계산하는 모드로, 다음 중 하나로 지정됩니다.
'population'
– 모집단 통계량을 사용합니다. 훈련 후에 소프트웨어는 훈련 데이터를 한 번 더 통과시켜 통계량을 완성하고 결과로 생성되는 평균과 분산을 사용합니다.'moving'
– 업데이트 단계에서 얻게 되는 동적 추정값을 사용하여 훈련 중에 통계량을 근사합니다.여기서 와 는 각각 업데이트된 평균과 분산을 나타내고, 와 은 각각 평균 감쇠 값과 분산 감쇠 값을 나타내고, 과 은 각각 계층 입력값의 평균과 분산을 나타내고, 와 은 각각 이동 평균값의 최신값과 이동 분산값의 최신값을 나타냅니다. 훈련 후에 소프트웨어는 이동 평균 통계량 및 이동 분산 통계량의 가장 최신값을 사용합니다. 이 옵션은 CPU 및 단일 GPU 훈련만 지원합니다.
기울기 제한
GradientThreshold
— 기울기 임계값
Inf
(디폴트 값) | 양의 스칼라
기울기 임계값으로, Inf
또는 양의 스칼라로 지정됩니다. 기울기가 GradientThreshold
의 값을 초과하면 기울기는 GradientThresholdMethod
훈련 옵션에 따라 잘립니다.
자세한 내용은 기울기 제한을 참조하십시오.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
GradientThresholdMethod
— 기울기 임계값 결정 방법
'l2norm'
(디폴트 값) | 'global-l2norm'
| 'absolute-value'
기울기 임계값을 초과하는 기울기 값을 자를 때 사용할 기울기 임계값 메서드로, 다음 중 하나로 지정됩니다.
'l2norm'
— 학습 가능한 파라미터의 기울기의 L2 노름이GradientThreshold
보다 큰 경우, L2 노름이GradientThreshold
와 같아지도록 기울기를 스케일링합니다.'global-l2norm'
— 전역 L2 노름 L이GradientThreshold
보다 큰 경우, 모든 기울기를GradientThreshold/
L배만큼 스케일링합니다. 전역 L2 노름은 모든 학습 가능한 파라미터를 고려합니다.'absolute-value'
— 학습 가능한 파라미터의 기울기의 개별 편도함수의 절댓값이GradientThreshold
보다 큰 경우,GradientThreshold
와 같아지도록 편도함수를 스케일링하고 편도함수의 부호를 그대로 유지합니다.
자세한 내용은 기울기 제한을 참조하십시오.
시퀀스 옵션
SequenceLength
— 시퀀스를 채우거나 자르는 옵션
"longest"
(디폴트 값) | "shortest"
| 양의 정수
입력 시퀀스를 채우거나 자르거나 분할하는 옵션으로, 다음 중 하나로 지정됩니다.
"longest"
— 각 미니 배치의 시퀀스 길이가 가장 긴 시퀀스의 길이와 같아지도록 채웁니다. 이 옵션은 채우기로 인해 신경망에 잡음이 포함되더라도 데이터를 버리지 않습니다."shortest"
— 각 미니 배치의 시퀀스가 가장 짧은 시퀀스와 길이가 같아지도록 자릅니다. 이 옵션은 데이터를 버리게 되더라도 채우기를 추가하지 않습니다.양의 정수 — 각 미니 배치에 대해, 미니 배치에서 가장 긴 시퀀스의 길이에 맞춰 시퀀스를 채운 다음, 지정된 길이를 갖는 더 작은 크기의 시퀀스로 분할합니다. 분할이 이루어지면 소프트웨어가 미니 배치를 추가로 만듭니다. 데이터의 시퀀스 길이가 지정된 시퀀스 길이로 균등하게 나뉘지 않는 경우, 해당 시퀀스의 끝을 포함하는 미니 배치의 길이는 지정된 시퀀스 길이보다 짧습니다. 전체 시퀀스가 메모리에 맞지 않으면 이 옵션을 사용하십시오. 또는
MiniBatchSize
옵션을 더 낮은 값으로 설정하여 미니 배치당 시퀀스 개수를 줄여 보십시오.
입력 시퀀스 채우기, 자르기, 분할의 효과에 대한 자세한 정보는 시퀀스 채우기, 자르기 및 분할 항목을 참조하십시오.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
| string
SequencePaddingDirection
— 채우기 또는 자르기 방향
"right"
(디폴트 값) | "left"
채우기 또는 자르기 방향으로, 다음 중 하나로 지정됩니다.
"right"
— 시퀀스들을 오른쪽에서 채우거나 자릅니다. 시퀀스들은 동일한 시간 스텝에서 시작하며 소프트웨어가 시퀀스들의 끝부분에서 자르기나 채우기를 수행합니다."left"
— 시퀀스들을 왼쪽에서 채우거나 자릅니다. 시퀀스들이 동일한 시간 스텝에서 끝나도록 소프트웨어가 시퀀스들의 시작 부분에서 자르기나 채우기를 수행합니다.
순환 계층은 시퀀스 데이터를 한 번에 하나의 시간 스텝씩 처리하기 때문에 순환 계층의 OutputMode
속성이 'last'
인 경우 마지막 시간 스텝에서의 채우기가 계층 출력에 부정적인 영향을 줄 수 있습니다. 시퀀스 데이터를 왼쪽에서 채우거나 자르려면 SequencePaddingDirection
옵션을 "left"
로 설정하십시오.
sequence-to-sequence 신경망의 경우(각 순환 계층의 OutputMode
속성이 'sequence'
인 경우), 첫 시간 스텝들에서의 채우기가 앞쪽에 있는 시간 스텝들의 예측에 부정적인 영향을 줄 수 있습니다. 시퀀스 데이터를 오른쪽에서 채우거나 자르려면 SequencePaddingDirection
옵션을 "right"
로 설정하십시오.
입력 시퀀스 채우기, 자르기, 분할의 효과에 대한 자세한 정보는 시퀀스 채우기, 자르기 및 분할 항목을 참조하십시오.
SequencePaddingValue
— 시퀀스에 채울 값
0
(디폴트 값) | 스칼라
입력 시퀀스에 채울 값으로, 스칼라로 지정됩니다.
이 옵션은 SequenceLength
가 "longest"
또는 양의 정수인 경우에만 유효합니다. 시퀀스를 NaN
으로 채우면 신경망 전체로 오류가 전파될 수 있으므로 유의하십시오.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
하드웨어 옵션
ExecutionEnvironment
— 신경망 훈련에 사용할 하드웨어 리소스
'auto'
(디폴트 값) | 'cpu'
| 'gpu'
| 'multi-gpu'
| 'parallel'
신경망 훈련에 사용할 하드웨어 리소스로, 다음 중 하나로 지정됩니다.
'auto'
— 사용 가능한 하나의 GPU가 있으면 이를 사용합니다. 그렇지 않은 경우 CPU를 사용합니다.'cpu'
— CPU를 사용합니다.'gpu'
— GPU를 사용합니다.'multi-gpu'
— 디폴트 클러스터 프로파일에 따라 로컬 병렬 풀을 사용하여 컴퓨터 1대에서 여러 개의 GPU를 사용합니다. 기존 병렬 풀이 없는 경우 소프트웨어는 사용 가능한 GPU의 개수와 동일한 풀 크기로 병렬 풀을 시작합니다.'parallel'
— 디폴트 클러스터 프로파일에 따라 로컬 또는 원격 병렬 풀을 사용합니다. 기존 병렬 풀이 없는 경우 소프트웨어는 디폴트 클러스터 프로파일을 사용하여 병렬 풀을 시작합니다. 풀이 GPU를 사용할 수 있는 경우, 고유한 GPU를 갖는 워커만 훈련 계산을 수행합니다. 풀에 GPU가 없는 경우, 사용 가능한 모든 CPU 워커에서 대신 훈련이 이루어집니다.
서로 다른 실행 환경을 사용해야 하는 경우에 대한 자세한 내용은 Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud 항목을 참조하십시오.
'gpu'
옵션, 'multi-gpu'
옵션, 'parallel'
옵션을 사용하려면 Parallel Computing Toolbox™가 필요합니다. 딥러닝을 위해 GPU를 사용하려면 지원되는 GPU 장치도 필요합니다. 지원되는 장치에 대한 자세한 내용은 GPU 연산 요구 사항 (Parallel Computing Toolbox) 항목을 참조하십시오. 이러한 옵션 중 하나를 선택했는데 Parallel Computing Toolbox 또는 적당한 GPU가 없는 경우, 오류가 반환됩니다.
병렬로 훈련시킬 때 성능 향상을 도모하려면 MiniBatchSize
및 InitialLearnRate
훈련 옵션을 GPU의 개수만큼 늘려 보십시오.
'multi-gpu'
및 'parallel'
옵션은 상태 파라미터가 있는 사용자 지정 계층을 포함하는 신경망 또는 훈련 시간에 상태를 유지하는 내장 계층을 포함하는 신경망을 지원하지 않습니다. 예를 들면 다음과 같은 경우입니다.
LSTMLayer
,BiLSTMLayer
또는GRULayer
객체와 같은 순환 계층(SequenceLength
훈련 옵션이 양의 정수인 경우)BatchNormalizationLayer
객체(BatchNormalizationStatistics
훈련 옵션이'moving'
으로 설정된 경우)
WorkerLoad
— 병렬 워커 부하 분배
0
과 1
사이의 스칼라 | 양의 정수 | 숫자형 벡터
여러 GPU 또는 CPU 사이의 병렬 워커 부하 분배로, 다음 중 하나로 지정됩니다.
0
과1
사이의 스칼라 — 각 컴퓨터에서 신경망 훈련 계산에 사용할 워커의 비율. 백그라운드 디스패치가 활성화된 미니 배치 데이터저장소의 데이터를 사용하여 신경망을 훈련시키는 경우, 나머지 워커들은 백그라운드에서 데이터를 가져와서 전처리합니다.양의 정수 — 각 컴퓨터에서 신경망 훈련 계산에 사용할 워커의 개수. 백그라운드 디스패치가 활성화된 미니 배치 데이터저장소의 데이터를 사용하여 신경망을 훈련시키는 경우, 나머지 워커들은 백그라운드에서 데이터를 가져와서 전처리합니다.
숫자형 벡터 — 병렬 풀에 있는 각 워커의 신경망 훈련 부하. 벡터
W
에 대해 워커i
는 작업(미니 배치 당 표본의 개수) 중 일정 비율(W(i)/sum(W)
)을 할당받습니다. 백그라운드 디스패치가 활성화된 미니 배치 데이터저장소의 데이터를 사용하여 신경망을 훈련시키는 경우, 특정 워커에 로드 0을 할당하여 백그라운드에서 데이터를 가져오는 용도로 해당 워커를 사용할 수 있습니다. 지정된 벡터는 병렬 풀의 워커 하나당 값 하나를 가져야 합니다.
병렬 풀이 GPU를 사용할 수 있는 경우, 고유한 GPU가 없는 워커는 훈련 계산에 사용되지 않습니다. GPU가 있는 풀에 대한 디폴트 동작은 고유한 GPU를 갖는 모든 워커를 훈련 계산에 사용하고 나머지 워커를 백그라운드 디스패치에 사용하는 것입니다. 풀이 GPU을 사용할 수 없고 훈련에 CPU가 사용되는 경우, 디폴트 값은 컴퓨터당 워커 하나를 백그라운드 데이터 디스패치 용도로 사용하는 것입니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
DispatchInBackground
— 백그라운드 디스패치를 활성화할지 지정하는 플래그
0
(false) (디폴트 값) | 1
(true)
데이터저장소에서 훈련 데이터를 읽어 들일 때 백그라운드 디스패치(비동기식 프리페치 대기)를 활성화할지 지정하는 플래그로, 0
(false) 또는 1
(true)로 지정됩니다. 백그라운드 디스패치를 사용하려면 Parallel Computing Toolbox가 필요합니다.
DispatchInBackground
는 분할 가능한 데이터저장소에서만 지원됩니다. 자세한 내용은 Use Datastore for Parallel Training and Background Dispatching 항목을 참조하십시오.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
검사 지점
CheckpointPath
— 검사 지점 신경망을 저장할 경로
""
(디폴트 값) | 문자형 벡터
검사 지점 신경망을 저장할 경로로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.
경로를 지정하지 않으면(즉, 디폴트 값인
""
을 사용하는 경우), 검사 지점 신경망은 저장되지 않습니다.경로를 지정한 경우,
trainNetwork
는 이 경로에 검사 지점 신경망을 저장하고 각 신경망에 고유한 이름을 할당합니다. 그러면, 사용자는 임의의 검사 지점 신경망을 불러와 해당 신경망에서 훈련을 재개할 수 있습니다.폴더가 존재하지 않는 경우, 검사 지점 신경망을 저장할 경로를 지정하기 전에 먼저 폴더를 만들어야 합니다. 지정한 경로가 존재하지 않는 경우,
trainingOptions
는 오류를 반환합니다.
CheckpointFrequency
와 CheckpointFrequencyUnit
옵션은 검사 지점 신경망의 저장 빈도를 지정합니다.
신경망 검사 지점 저장에 대한 자세한 내용은 검사 지점 신경망을 저장하고 훈련 재개하기 항목을 참조하십시오.
데이터형: char
| string
CheckpointFrequency
— 검사 지점 신경망을 저장할 빈도
1
(디폴트 값) | 양의 정수
검사 지점 신경망의 저장 빈도로, 양의 정수로 지정됩니다.
CheckpointFrequencyUnit
이 'epoch'
인 경우 매 CheckpointFrequency
Epoch마다 검사 지점 신경망이 저장됩니다.
CheckpointFrequencyUnit
이 'iteration'
인 경우 매 CheckpointFrequency
반복마다 검사 지점 신경망이 저장됩니다.
이 옵션은 CheckpointPath
가 비어 있지 않은 경우에만 효력이 있습니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
CheckpointFrequencyUnit
— 검사 지점 빈도 단위
'epoch'
(디폴트 값) | 'iteration'
검사 지점 빈도 단위로, 'epoch'
또는 'iteration'
으로 지정됩니다.
CheckpointFrequencyUnit
이 'epoch'
인 경우 매 CheckpointFrequency
Epoch마다 검사 지점 신경망이 저장됩니다.
CheckpointFrequencyUnit
이 'iteration'
인 경우 매 CheckpointFrequency
반복마다 검사 지점 신경망이 저장됩니다.
이 옵션은 CheckpointPath
가 비어 있지 않은 경우에만 효력이 있습니다.
OutputFcn
— 출력 함수
함수 핸들 | 함수 핸들로 구성된 셀형 배열
훈련 중에 호출할 출력 함수로, 함수 핸들 또는 함수 핸들로 구성된 셀형 배열로 지정됩니다. trainNetwork
는 훈련 시작 전에 한 번, 각 반복 후에, 그리고 훈련을 마친 후에 한 번 지정된 함수를 호출합니다. trainNetwork
는 다음과 같은 필드에 정보를 포함하는 구조체를 전달합니다.
필드 | 설명 |
---|---|
Epoch | 현재 Epoch 횟수 |
Iteration | 현재 반복 횟수 |
TimeSinceStart | 훈련 시작 이후 경과된 시간(단위: 초) |
TrainingLoss | 현재 미니 배치 손실 |
ValidationLoss | 검증 데이터에 대한 손실 |
BaseLearnRate | 현재 기본 학습률 |
TrainingAccuracy | 현재 미니 배치에 대한 정확도(분류 신경망) |
TrainingRMSE | 현재 미니 배치에 대한 RMSE(회귀 신경망) |
ValidationAccuracy | 검증 데이터에 대한 정확도(분류 신경망) |
ValidationRMSE | 검증 데이터에 대한 RMSE(회귀 신경망) |
State | 현재 훈련 상태로, 가능한 값은 "start" , "iteration" 또는 "done" 입니다. |
특정 필드가 계산되지 않았거나 출력 함수에 대한 특정 호출과 관련이 없는 경우, 해당 필드는 빈 배열을 포함하게 됩니다.
출력 함수를 사용하여 진행 상황 정보를 표시하거나 플로팅할 수도 있고 훈련을 중단할 수도 있습니다. 훈련을 조기에 중단하려면 출력 함수가 1
(true)을 반환하도록 하십시오. 출력 함수가 1
(true)을 반환하면 훈련이 완료되고 trainNetwork
가 마지막 신경망을 반환합니다. 출력 함수를 사용하는 방법을 보여주는 예제는 딥러닝 신경망 훈련 중의 출력값 사용자 지정하기 항목을 참조하십시오.
데이터형: function_handle
| cell
예제
Adam 최적화 함수의 훈련 옵션 만들기
Adam 최적화 함수를 사용하여 신경망을 훈련시키기 위한 옵션 세트를 만듭니다. 훈련을 진행할 최대 Epoch 횟수를 20으로 설정하고, 각 반복마다 64개의 관측값을 갖는 미니 배치를 사용합니다. 제곱 기울기의 이동평균의 감쇠율과 학습률을 지정합니다. 훈련 진행 상황 플롯을 켭니다.
options = trainingOptions("adam", ... InitialLearnRate=3e-4, ... SquaredGradientDecayFactor=0.99, ... MaxEpochs=20, ... MiniBatchSize=64, ... Plots="training-progress")
options = TrainingOptionsADAM with properties: GradientDecayFactor: 0.9000 SquaredGradientDecayFactor: 0.9900 Epsilon: 1.0000e-08 InitialLearnRate: 3.0000e-04 LearnRateSchedule: 'none' LearnRateDropFactor: 0.1000 LearnRateDropPeriod: 10 L2Regularization: 1.0000e-04 GradientThresholdMethod: 'l2norm' GradientThreshold: Inf MaxEpochs: 20 MiniBatchSize: 64 Verbose: 1 VerboseFrequency: 50 ValidationData: [] ValidationFrequency: 50 ValidationPatience: Inf Shuffle: 'once' CheckpointPath: '' CheckpointFrequency: 1 CheckpointFrequencyUnit: 'epoch' ExecutionEnvironment: 'auto' WorkerLoad: [] OutputFcn: [] Plots: 'training-progress' SequenceLength: 'longest' SequencePaddingValue: 0 SequencePaddingDirection: 'right' DispatchInBackground: 0 ResetInputNormalization: 1 BatchNormalizationStatistics: 'population' OutputNetwork: 'last-iteration'
알고리즘
Adam
Adam(Adaptive Moment Estimation에서 유래)[1]은 모멘텀 항이 추가된 것을 제외하면 RMSProp와 유사한 파라미터 업데이트를 사용합니다. 다음과 같이 파라미터 기울기와 그 제곱 값의 요소별 이동평균을 모두 유지합니다.
β1과 β2 감쇠율은 각각 GradientDecayFactor
와 SquaredGradientDecayFactor
훈련 옵션을 사용하여 지정할 수 있습니다. Adam은 이러한 이동평균을 사용하여 신경망 파라미터를 다음과 같이 업데이트합니다.
여러 반복 동안 기울기가 비슷한 경우에 기울기의 이동평균을 사용하면 파라미터 업데이트가 특정 방향에서 추진력(모멘텀)을 갖게 됩니다. 기울기의 대부분이 잡음인 경우, 기울기의 이동평균이 작아지므로 파라미터 업데이트도 작아집니다. ɛ은 Epsilon
훈련 옵션을 사용하여 지정할 수 있습니다. 디폴트 값은 대부분의 경우 잘 동작하지만, 특정 문제에서는 최대 1의 크기를 갖는 값이 더 좋은 결과를 낼 수 있습니다. Adam을 사용하여 신경망을 훈련시키려면 'adam'
을 trainingOptions
의 첫 번째 입력값으로 지정하십시오. 전체 Adam 업데이트는 훈련 시작 시에 나타나는 편향을 정정하는 메커니즘도 포함합니다. 자세한 내용은 [1] 항목을 참조하십시오.
InitialLearnRate
훈련 옵션을 사용하여 모든 최적화 알고리즘에 대한 학습률 α를 지정합니다. 학습률의 효과는 각 최적화 알고리즘마다 다르게 나타나므로 일반적으로 최적의 학습률도 달라집니다. 계층과 파라미터에 따라 달라지는 학습률을 지정할 수도 있습니다. 자세한 내용은 컨벌루션 계층 및 완전 연결 계층에서 파라미터 설정하기 항목을 참조하십시오.
L2 정규화
과적합을 방지하는 한 가지 방법으로 손실 함수 에 대한 가중치에 대해 정규화 항을 추가하는 것을 들 수 있습니다[1], [2]. 정규화 항은 가중치 감쇠라고도 합니다. 정규화 항이 있는 손실 함수는 다음과 같은 형태를 갖습니다.
여기서 는 가중 벡터이고, 는 정규화 인자(계수)입니다. 정규화 함수 는 다음과 같습니다.
편향은 정규화되지 않습니다[2]. 정규화 인자 는 L2Regularization
훈련 옵션을 사용하여 지정할 수 있습니다. 서로 다른 계층과 파라미터에 대해 서로 다른 정규화 인자를 지정할 수도 있습니다. 자세한 내용은 컨벌루션 계층 및 완전 연결 계층에서 파라미터 설정하기 항목을 참조하십시오.
소프트웨어가 신경망 훈련에 사용하는 손실 함수에는 정규화 항이 포함됩니다. 그러나 훈련 중에 명령 창과 훈련 진행 상황 플롯에 표시되는 손실 값은 데이터에 대한 손실만이며 정규화 항은 포함되지 않습니다.
기울기 제한
기울기의 크기가 기하급수적으로 증가하는 경우, 훈련의 안정성이 떨어지고 반복 몇 회만에 발산할 수도 있습니다. 이러한 "기울기 폭주"는 NaN
또는 Inf
로 귀결되는 훈련 손실로 나타납니다. 기울기 제한을 사용하면 학습률이 높은 경우 및 이상값이 존재하는 경우에 훈련을 안정화하여 기울기 폭주를 방지하는 데 도움이 됩니다[3]. 기울기 제한을 사용하면 신경망을 더 빨리 훈련시킬 수 있고, 일반적으로 학습된 작업의 정확도에 영향을 주지 않습니다.
다음과 같이 두 가지 유형의 기울기 제한이 있습니다.
노름 기반 기울기 제한은 임계값을 기준으로 기울기를 다시 스케일링하며, 기울기의 방향은 바꾸지 않습니다.
GradientThresholdMethod
의'l2norm'
값과'global-l2norm'
값은 노름 기반 기울기 제한 방법입니다.값 기반 기울기 제한은 임계값보다 큰 편도함수를 모두 자르는데 이는 기울기의 방향이 임의로 바뀌는 결과로 이어질 수 있습니다. 값 기반 기울기 제한을 사용하면 예측할 수 없는 동작이 나타날 수 있으나, 충분히 작은 변경은 신경망의 발산을 유발하지 않습니다.
GradientThresholdMethod
의'absolute-value'
값은 값 기반 기울기 제한 방법입니다.
참고 문헌
[1] Kingma, Diederik, and Jimmy Ba. "Adam: A method for stochastic optimization." arXiv preprint arXiv:1412.6980 (2014).
버전 내역
R2018a에 개발됨R2022b: trainNetwork
는 SequenceLength
훈련 옵션을 정수로 지정한 경우 분할하기 전에 미니 배치를 가장 긴 시퀀스의 길이에 맞춰 채움
R2022b부터, trainNetwork
함수를 사용하여 시퀀스 데이터로 신경망을 훈련시킬 때 SequenceLength
옵션이 정수인 경우, 각 미니 배치에서 가장 긴 시퀀스의 길이에 맞춰 시퀀스들을 채운 다음 이들 시퀀스를 지정된 시퀀스 길이를 갖는 미니 배치로 분할합니다. 미니 배치의 시퀀스 길이가 SequenceLength
로 균등하게 나뉘지 않는 경우, 마지막 분할 미니 배치의 길이는 SequenceLength
보다 짧습니다. 이 동작은 채우기 값만 포함하는 시간 스텝에서 신경망이 훈련되는 것을 방지합니다.
이전 릴리스에서는, 미니 배치의 길이보다 크거나 같은 SequenceLength
의 가장 가까운 배수에 해당하는 길이가 되도록 미니 배치 시퀀스들을 채운 다음 데이터를 분할합니다. 이 동작을 재현하려면 데이터의 미니 배치를 전처리할 때 사용자 지정 훈련 루프를 사용하여 이 동작을 구현하십시오.
R2018b: ValidationPatience
훈련 옵션의 디폴트 값은 Inf
R2018b부터 ValidationPatience
훈련 옵션의 디폴트 값은 Inf
입니다. 즉, 검증을 통한 자동 중지가 꺼져 있습니다. 이 동작은 데이터로부터 충분한 학습이 이루어지기 전에 훈련이 중지되는 것을 방지합니다.
이전 버전의 디폴트 값은 5
였습니다. 이 동작을 재현하려면 ValidationPatience
옵션을 5
로 설정하십시오.
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)