Main Content

파라미터를 설정하고 컨벌루션 신경망 훈련시키기

trainnet 함수에 대한 훈련 옵션을 지정하려면 trainingOptions 함수를 사용하십시오. 결과로 생성되는 options 객체를 trainnet 함수에 전달하십시오.

예를 들어, 다음과 같은 옵션을 지정하는 training options 객체를 생성하려면

  • ADAM(적응적 모멘트 추정) 솔버를 사용하여 훈련시킵니다.

  • 최대 Epoch 4회만큼 훈련을 진행합니다.

  • 훈련 진행 상황을 플롯에서 모니터링하고 정확도 메트릭을 모니터링합니다.

  • 상세 출력값을 비활성화합니다.

다음을 사용하십시오.

options = trainingOptions("adam", ...
    MaxEpochs=4, ...
    Plots="training-progress", ...
    Metrics="accuracy", ...
    Verbose=false);

이 훈련 옵션들을 사용하여 신경망을 훈련시키려면 다음을 사용하십시오.

net = trainnet(data,layers,lossFcn,options);

참고

이 항목에서는 일반적으로 사용되는 몇몇 훈련 옵션을 간략히 설명합니다. 여기에 나와 있는 옵션은 일부에 불과합니다. 전체 목록을 보려면 trainingOptions 항목을 참조하십시오.

솔버

솔버는 훈련 함수가 학습 가능한 파라미터를 최적화하기 위해 사용하는 알고리즘입니다. trainingOptions 함수의 첫 번째 인수를 사용하여 솔버를 지정하십시오. 예를 들어, Adam 최적화 함수의 디폴트 설정을 사용하는 training options 객체를 생성하려면 다음을 사용하십시오.

options = trainingOptions("adam");

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

작업의 유형이 다르면 보다 효과적인 솔버도 달라질 수 있습니다. 많은 경우 최초 시도에 사용하기 좋은 최적화 함수는 Adam 솔버입니다.

모니터링 옵션

훈련 진행 상황을 모니터링하려면 훈련 메트릭을 플롯으로 표시하면 됩니다. 예를 들어, 정확도를 플롯에서 모니터링하고 세부 정보 출력을 비활성화하려면 다음을 사용하십시오.

options = trainingOptions("adam", ...
    Plots="training-progress", ...
    Metrics="accuracy", ...
    Verbose=false);

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

데이터 형식 옵션

대부분의 딥러닝 신경망과 함수는 입력 데이터의 각기 다른 차원에 대해 다른 방식으로 연산을 수행합니다.

예를 들어, LSTM 연산은 입력 데이터의 시간 차원에 대해 반복 작업을 수행하고 배치 정규화 연산은 입력 데이터의 배치 차원에 대해 정규화를 수행합니다.

대부분의 경우 훈련 데이터를 그대로 신경망에 전달해도 됩니다. 가지고 있는 데이터의 레이아웃이 신경망에서 필요로 하는 형식과 다르다면 데이터 형식을 사용하여 데이터의 레이아웃을 지정할 수 있습니다.

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

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

  • "S" — 공간

  • "C" — 채널

  • "B" — 배치

  • "T" — 시간

  • "U" — 지정되지 않음

예를 들어, 첫 번째, 두 번째, 세 번째 차원이 각각 채널, 관측값, 시간 스텝에 대응되는 시퀀스 배치를 포함하는 배열이 있다고 가정하겠습니다. 이 배열이 "CBT"(채널, 배치, 시간) 형식을 갖도록 지정할 수 있습니다.

가지고 있는 데이터의 레이아웃이 신경망에서 필요로 하는 형식과 다른 경우, 데이터의 형태를 바꾸어 전처리하는 방법보다 데이터 형식의 정보를 제공하는 방법이 대개 더 쉽습니다. 예를 들어, 첫 번째, 두 번째, 세 번째 차원이 각각 채널, 관측값, 시간 스텝에 대응되는 시퀀스 데이터를 지정하려면, 아래와 같이 입력 데이터의 형식을 "CBT"(채널, 배치, 시간)로 지정하십시오.

options = trainingOptions("adam", ...
    InputDataFormats="CBT");

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

확률적 솔버 옵션

확률적 솔버는 데이터의 미니 배치에 대해 반복을 수행하면서 신경망의 학습 가능한 파라미터를 업데이트하는 방식으로 신경망을 훈련시킵니다. 미니 배치, Epoch(훈련 데이터를 한 번 완전히 통과하는 것), 학습률을 제어하는 확률적 솔버 옵션을 비롯하여 SGDM(모멘텀을 사용한 확률적 경사하강법) 솔버의 모멘텀 같은 여러 솔버 관련 설정을 지정할 수 있습니다. 예를 들어, 미니 배치 크기 16, 초기 학습률 0.01을 지정하려면 다음을 사용하십시오.

options = trainingOptions("adam", ...
    MiniBatchSiize=16, ...
    InitialLearnRate=0.01);

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

훈련 중에 미니 배치 손실이 NaN이 된다면 학습률이 너무 높은 것일 수 있습니다. 학습률을 예를 들어 3배 줄인 다음 신경망 훈련을 다시 시작해 보십시오.

L-BFGS 솔버 옵션

L-BFGS(메모리 제한 Broyden–Fletcher–Goldfarb–Shanno) 솔버는 전체 배치 솔버입니다. 즉, 한 번의 반복으로 전체 훈련 세트를 처리합니다. 반복(훈련 데이터를 한 번 완전히 통과하는 것), 직선 탐색을 제어하는 L-BFGS 솔버 옵션과 여러 다른 솔버 관련 설정을 지정할 수 있습니다. 예를 들어, L-BFGS를 사용하여 2000회 반복해서 훈련시키도록 지정하고 강력한 울프(Wolfe) 조건을 만족하는 학습률을 찾으려면 다음을 사용하십시오.

options = trainingOptions("lbfgs", ...
    MaxIterations=2000, ...
    LineSearchMethod="strong-wolfe");

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

검증 옵션

홀드아웃 검증 데이터 세트를 사용하여 훈련 진행 상황을 모니터링할 수 있습니다. 훈련을 진행하는 동안 일정 간격으로 검증을 수행하면 신경망이 훈련 데이터에 대해 과적합되고 있는지 판단할 수 있습니다. 신경망이 과적합되고 있는지 확인하려면 훈련 메트릭을 검증 메트릭과 비교해 보십시오. 훈련 메트릭이 검증 메트릭보다 크게 나은 경우 신경망이 과적합될 수 있습니다. 예를 들어, 검증 데이터 세트를 지정하고 100회의 반복마다 신경망을 검증하려면 다음을 사용하십시오.

options = trainingOptions("adam", ...
    ValidationData={XValidation,TValidation}, ...
    ValidationFrequency=100);

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

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

정규화(Regularization 및 Normalization) 옵션

정규화를 사용하여 과적합을 방지하고 수렴을 개선할 수 있습니다. Regularization 정규화는 손실 함수에 벌점 항을 추가하여 과적합을 방지하는 데 도움을 줍니다. Normalization 정규화는 입력 데이터를 표준 범위로 스케일링하여 수렴과 안정성을 개선시킬 수 있습니다. 예를 들어, L2 정규화 인자를 0.0002로 지정하려면 다음을 사용하십시오.

options = trainingOptions("adam", ...
    L2Regularization=0.0002);

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

기울기 제한(기울기 자르기) 옵션

큰 기울기로 인해 훈련 과정에서 오류가 발생하는 것을 방지하려면 기울기의 크기를 제한하면 됩니다. 예를 들어, 크기가 2가 되도록 기울기를 스케일링하려면 다음을 사용하십시오.

options = trainingOptions("adam", ...
    GradientThresholdMethod="absolute-value", ...
    GradientThreshold=2);

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

시퀀스 옵션

신경망을 훈련시키려면 일반적으로 고정 크기 데이터(예: 동일한 채널 수와 시간 스텝 수를 갖는 시퀀스)가 필요합니다. 시퀀스의 길이가 동일하도록 시퀀스의 배치를 변환하려면 채우기 옵션과 자르기 옵션을 지정하면 됩니다. 예를 들어, 각 미니 배치의 왼쪽을 채워서 시퀀스 길이를 동일하게 만들려면 다음을 사용하십시오.

options = trainingOptions("adam", ...
    SequencePaddingDirection="left");

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

하드웨어와 가속화 옵션

기본적으로 사용 가능한 지원되는 GPU가 있으면 GPU를 사용하여 훈련을 수행합니다. GPU를 사용하려면 Parallel Computing Toolbox™ 라이선스가 필요합니다. 지원되는 장치에 대한 자세한 내용은 GPU 연산 요구 사항 (Parallel Computing Toolbox) 항목을 참조하십시오. 하드웨어와 가속화 옵션을 추가적으로 지정할 수 있습니다. 예를 들어, 디폴트 클러스터 프로파일에 따라 로컬 병렬 풀을 사용하여 컴퓨터 1대에서 여러 개의 GPU를 사용하도록 지정하려면 다음을 사용하십시오.

options = trainingOptions("adam", ...
    ExecutionEnvironment="multi-gpu");

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

검사 지점 옵션

대규모 신경망과 대용량 데이터셋의 경우 훈련을 실행하는 데 시간이 오래 걸릴 수 있습니다. 훈련 중에 신경망을 주기적으로 저장하려면 검사 지점 신경망을 저장하면 됩니다. 예를 들어, 검사 지점 신경망을 Epoch 5회마다 "checkpoints" 폴더에 저장하려면 다음을 사용하십시오.

options = trainingOptions("adam", ...
    CheckpointPath="checkpoints", ...
    CheckpointFrequency=5);

어떤 이유로 훈련이 중단된 경우, 마지막으로 저장된 검사 지점 신경망에서부터 훈련을 재개할 수 있습니다.

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

참고 항목

| |

관련 항목