이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
파라미터를 설정하고 컨벌루션 신경망 훈련시키기
컨벌루션 신경망의 계층 지정하기에서 설명하는 대로 신경망의 계층을 정의했다면 다음 단계는 신경망의 훈련 옵션을 설정하는 것입니다.trainingOptions
함수를 사용하여 전역 훈련 파라미터를 정의합니다. 신경망을 훈련시키려면trainingOptions
에서 반환되는 객체를trainNetwork
함수의 입력 인수로 사용하십시오. 예를 들면 다음과 같이 합니다.
options = trainingOptions('adam'); trainedNet = trainNetwork(data,layers,options);
학습 가능한 파라미터가 있는 계층에도 학습 파라미터를 조정하기 위한 옵션이 있습니다. 자세한 내용은컨벌루션 계층 및 완전 연결 계층에서 파라미터 설정하기항목을 참조하십시오.
솔버와 최대 Epoch 횟수 지정하기
trainNetwork
는 확률적 경사하강법의 다양한 변형을 사용하여 신경망을 훈련시킬 수 있습니다.trainingOptions
의solverName
인수를 사용하여 최적화 알고리즘을 지정합니다. 이러한 알고리즘은 손실 함수에 대한 음의 기울기 방향으로 작은 스텝을 취하여 손실을 최소화하도록 신경망 파라미터를 업데이트합니다.
최초 시도에 사용하기 좋은 최적화 함수는'adam'
(Adaptive Moment Estimation에서 유래) 솔버입니다. 또는'rmsprop'
(RMS 전파) 및'sgdm'
(모멘텀을 사용한 확률적 경사하강법) 최적화 함수를 사용해 보고 훈련이 향상되는지 확인해 보십시오. 솔버마다 더 효과적인 결과를 얻을 수 있는 문제가 각각 다릅니다. 다양한 솔버에 대한 자세한 내용은확률적 경사하강법항목을 참조하십시오.
솔버는 각 스텝에서 데이터의 서브셋을 사용하여 파라미터를 업데이트합니다. 이러한 서브셋을미니 배치라고 합니다.trainingOptions
의'MiniBatchSize'
이름——값쌍인수를사용하여 미니 배치의 크기를 지정할 수 있습니다. 각 파라미터 업데이트를반복이라고 합니다. 전체 데이터 세트를 완전히 한 번 통과하는 것을Epoch라고 합니다.trainingOptions
의'MaxEpochs'
이름——값쌍인수를사용하여 훈련을 실시할 최대 Epoch 횟수를 지정할 수 있습니다. 디폴트 값은 30입니다. 하지만 신경망이 소규모이거나 대부분의 학습이 이미 완료되어 미세 조정 및 전이 학습을 하는 경우에는 Epoch 횟수를 더 적게 선택할 수 있습니다.
데이터는 기본적으로 훈련을 시작하기 전에 한 번 섞입니다.'Shuffle'
이름——값쌍인수를사용하여 이 설정을 변경할 수 있습니다.
학습률을 지정하고 수정하기
trainingOptions
의'InitialLearnRate'
이름——값쌍인수를사용하여 전역 학습률을 지정할 수 있습니다. 기본적으로,trainNetwork
는 전체 훈련을 실시하는 내내 이 값을 사용합니다. 원하는 경우 특정 Epoch 횟수마다 학습률에 인자를 곱하여 학습률을 수정할 수 있습니다. 훈련을 실시하는 내내 고정된 작은 학습률을 사용하는 대신, 훈련을 시작할 때는 좀더 큰 학습률을 선택하고 최적화를 하면서 이 값을 점진적으로 줄일 수 있습니다. 이렇게 하면 훈련 시간이 단축되고, 훈련이 진행됨에 따라 손실의 최솟값에 다가갈수록 더 작은 스텝을 취할 수 있습니다.
팁
훈련 중에 미니 배치 손실이NaN
이 된다면 학습률이 너무 높은 것일 수 있습니다. 학습률을 예를 들어 3배 줄인 다음 신경망 훈련을 다시 시작해 보십시오.
학습률을점진적으로줄이려면'LearnRateSchedule','piecewise'
이름——값쌍인수를사용하십시오. 이 옵션을 선택하면trainNetwork
는 Epoch 10회마다 학습률에 0.1을 곱합니다.'LearnRateDropFactor'
이름——값쌍인수를사용하여 초기 학습률을 줄일 인자를 지정하고'LearnRateDropPeriod'
이름——값쌍인수를사용하여 얼마의 Epoch 횟수 후에 초기 학습률을 줄일지 지정할 수 있습니다.
검증 데이터 지정하기
훈련 중에 신경망 검증을 수행하려면trainingOptions
의'ValidationData'
이름——값쌍인수를사용하여 검증 데이터를 지정하십시오. 기본적으로,trainNetwork
는 50회 반복마다 검증 데이터의 응답 변수를 예측하고 검증 손실 및 정확도(회귀 신경망의 경우 RMS 오차)를 계산하여 신경망을 검증합니다.'ValidationFrequency'
이름——값쌍인수를사용하여 검증 빈도를 변경할 수 있습니다. 신경망에 훈련 중 동작과 예측 중 동작이 다른 계층(예: 드롭아웃 계층)이 있는 경우, 검증 정확도가 훈련(미니 배치) 정확도보다 높을 수 있습니다. 검증의 손실이 더 이상 감소하지 않으면 자동으로 훈련을 중지하도록 검증 데이터를 사용할 수 있습니다. 자동 검증 중지 기능을 켜려면'ValidationPatience'
이름——값쌍인수를사용하십시오.
훈련을 진행하는 동안 일정 간격으로 검증을 수행하면 신경망이 훈련 데이터에 대해 과적합되고 있는지 판단할 수 있습니다. 흔히 발생하는 문제는 신경망이 새로운 데이터에 대해 정확한 예측을 가능하게 해주는 일반적인 특징을 학습하는 것이 아니라 단순히 훈련 데이터를 "기억"해 버리는 것입니다. 신경망이 과적합되고 있는지 확인하려면 훈련 손실과 정확도를 그에 대응하는 검증 메트릭과 비교해 보십시오. 훈련 손실이 검증 손실보다 크게 낮거나 훈련 정확도가 검증 정확도보다 크게 높다면 신경망이 과적합되고 있는 것입니다.
과적합을 줄이려면 데이터 증대를 추가해 볼 수 있습니다.augmentedImageDatastore
를 사용하여 입력 영상에 대해 무작위 변환을 수행하십시오. 이렇게 하면 신경망이 사물의 정확한 위치와 방향을 기억하는 것을 방지하는 데 도움이 됩니다. 또는'L2Regularization'
이름——값쌍인수를사용하여 L2정규화를 늘리고, 컨벌루션 계층 뒤에 배치 정규화 계층을 사용하고, 드롭아웃 계층을 추가해 볼 수도 있습니다.
하드웨어 리소스 선택하기
사용 가능한 경우trainNetwork
는 기본적으로 훈련에 GPU를 사용합니다. GPU를 사용할 수 없으면trainNetwork
는 CPU를 사용합니다. 또는'ExecutionEnvironment'
이름——값쌍인수를사용하여 사용하려는 실행 환경을 지정할 수도 있습니다. 단일 CPU('cpu'
),단일GPU ('gpu'
), 복수의 GPU('multi-gpu'
) 또는 로컬 병렬 풀이나 계산 클러스터('parallel'
)를 지정할 수 있습니다.'cpu'
를 제외한 모든 옵션에는 Parallel Computing Toolbox™가 필요합니다. GPU에서 훈련시키려면 지원되는 GPU 장치가 필요합니다. 지원되는 장치에 대한 자세한 내용은릴리스별 GPU 지원(Parallel Computing Toolbox)항목을 참조하십시오.
검사 지점 신경망을 저장하고 훈련 재개하기
Deep Learning Toolbox™를 사용하면 훈련 중에 매 Epoch 후에 신경망을 .mat 파일로 저장할 수 있습니다. 신경망 또는 데이터 세트의 규모가 커서 훈련시키는 데 오래 걸리는 경우에는 이와 같이 주기적으로 저장하는 것이 특히 유용합니다. 어떤 이유로 훈련이 중단된 경우, 마지막으로 저장된 검사 지점 신경망에서부터 훈련을 재개할 수 있습니다.trainNetwork
가 검사 지점 신경망을 저장하도록 하려면trainingOptions
의'CheckpointPath'
이름——값쌍인수를사용하여 경로의 이름을 지정해야 합니다. 지정한 경로가 존재하지 않는 경우,trainingOptions
는 오류를 반환합니다.
trainNetwork
는 검사 지점 신경망 파일에 자동으로 고유한 이름을 할당합니다.net_checkpoint__351__2018_04_12__18_09_52.mat
라는 예제 이름에서 351은 반복 횟수이고,2018_04_12
는 날짜이고,18_09_52
는trainNetwork
가 신경망을 저장한 시간입니다. 검사 지점 신경망 파일은 파일을 더블 클릭하거나 명령줄에서 load 명령을 사용하여 불러올 수 있습니다. 예를 들면 다음과 같습니다.
load net_checkpoint__351__2018_04_12__18_09_52.mat
trainNetwork
에 대한 입력 인수로 신경망의 계층을 사용하여 훈련을 재개할 수 있습니다. 예를 들면 다음과 같습니다.
trainNetwork(XTrain,YTrain,net.Layers,options)
컨벌루션 계층 및 완전 연결 계층에서 파라미터 설정하기
컨벌루션계층및완전연결계층과같이학습가능한파라미터가있는계층에서,학습파라미터를trainingOptions
로 지정된 전역 값과 다르게 설정할 수 있습니다. 예를 들어, 편향이나 가중치에 대한 학습률을 조정하기 위해 각각 계층의BiasLearnRateFactor
속성이나WeightLearnRateFactor
속성에 대해 값을 지정할 수 있습니다.trainNetwork
함수는trainingOptions
를 이러한 인자와 함께 사용하여, 지정한 학습률을 곱합니다. 마찬가지로, 각각BiasL2Factor
속성과WeightL2Factor
속성을 지정하여 이러한 계층의 가중치와 편향에 대한 L2정규화 인자를 지정할 수도 있습니다.trainNetwork
는trainingOptions
를 이러한 인자와 함께 사용하여, 지정한 L2인자를 곱합니다.
컨벌루션 계층 및 완전 연결 계층의 가중치 초기화하기
계층 가중치는 학습 가능한 파라미터입니다. 계층의Weights
속성을 사용하여 가중치에 대한 초기값을 직접 지정할 수 있습니다. 신경망을 훈련시킬 때 계층의Weights
속성이 비어 있지 않으면trainNetwork
는Weights
속성을 초기값으로 사용합니다.Weights
속성이 비어 있으면trainNetwork
는 계층의WeightsInitializer
속성으로 지정된 이니셜라이저를 사용합니다.
신경망 훈련시키기
신경망의 계층과 훈련 파라미터를 지정한 후에는 훈련 데이터를 사용하여 신경망을 훈련시킬 수 있습니다. 데이터, 계층 및 훈련 옵션은 모두 아래 예제에서처럼trainNetwork
함수의 입력 인수가 됩니다.
layers = [imageInputLayer([28 28 1]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,'Stride',2) fullyConnectedLayer(10) softmaxLayer classificationLayer]; options = trainingOptions('adam'); convnet = trainNetwork(data,layers,options);
훈련 데이터는 배열, 테이블 또는ImageDatastore
객체일 수 있습니다. 자세한 내용은trainNetwork
함수 도움말 페이지를 참조하십시오.
참고 항목
trainingOptions
|trainNetwork
|Convolution2dLayer
|FullyConnectedLayer