Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

사용자 지정 훈련 루프, 손실 함수 및 신경망 정의

대부분의 딥러닝 작업의 경우, 사전 훈련된 신경망을 사용하고 이를 사용자 자신의 데이터에 맞게 적응시킬 수 있습니다. 새로운 영상 세트를 분류할 수 있도록 전이 학습을 사용하여 컨벌루션 신경망을 다시 훈련시키는 방법을 보여주는 예제는 새로운 영상을 분류하도록 딥러닝 신경망 훈련시키기 항목을 참조하십시오. 또는 layerGraph 객체를 trainNetwork 함수 및 trainingOptions 함수와 함께 사용하여 신경망을 처음부터 만들고 훈련시킬 수 있습니다.

trainingOptions 함수가 작업에 필요한 훈련 옵션을 제공하지 않는다면 자동 미분을 사용하여 사용자 지정 훈련 루프를 만들 수 있습니다. 자세한 내용은 사용자 지정 훈련 루프를 위한 딥러닝 신경망 정의하기 항목을 참조하십시오.

Deep Learning Toolbox™가 작업에 필요한 계층을 제공하지 않는다면(손실 함수를 지정하는 출력 계층 포함) 사용자 지정 계층을 만들 수 있습니다. 자세한 내용은 사용자 지정 딥러닝 계층 정의하기 항목을 참조하십시오. 출력 계층을 사용하여 지정할 수 없는 손실 함수의 경우, 사용자 지정 훈련 루프 안에 손실을 지정할 수 있습니다. 자세한 내용은 손실 함수 지정하기 항목을 참조하십시오. 계층 그래프를 사용하여 만들 수 없는 신경망의 경우 사용자 지정 신경망을 함수로 정의할 수 있습니다. 자세한 내용은 신경망을 모델 함수로 정의하기 항목을 참조하십시오.

어느 훈련 방법을 어느 작업에 사용해야 하는지에 대한 자세한 내용은 Train Deep Learning Model in MATLAB 항목을 참조하십시오.

사용자 지정 훈련 루프를 위한 딥러닝 신경망 정의하기

신경망을 dlnetwork 객체로 정의하기

대부분의 작업에서는 trainingOptions 함수와 trainNetwork 함수를 사용하여 훈련 알고리즘 세부 정보를 제어할 수 있습니다. trainingOptions 함수가 작업에 필요한 옵션을 제공하지 않는다면(예: 사용자 지정 학습률 일정) dlnetwork 객체를 사용하여 자체 사용자 지정 훈련 루프를 정의할 수 있습니다. dlnetwork 객체를 사용하면 계층 그래프로 지정된 신경망을 자동 미분을 사용하여 훈련시킬 수 있습니다.

계층 그래프로 지정된 신경망의 경우, 계층 그래프에서 직접 dlnetwork 함수를 사용하여 dlnetwork 객체를 만들 수 있습니다.

dlnet = dlnetwork(lgraph);

dlnetwork 객체가 지원하는 계층 목록은 dlnetwork 페이지의 Supported Layers 섹션을 참조하십시오. 사용자 지정 학습률 일정을 사용하여 신경망을 훈련시키는 방법을 보여주는 예제는 Train Network Using Custom Training Loop 항목을 참조하십시오.

신경망을 모델 함수로 정의하기

계층 그래프를 사용하여 만들 수 없는 아키텍처의 경우(예: 공유 가중치가 필요한 샴 신경망), 모델을 [dlY1,...,dlYM] = model(parameters,dlX1,...,dlXN) 형식의 함수로 정의할 수 있습니다. 여기서 parameters는 신경망 파라미터를 포함하고, dlX1,...,dlXNN개의 모델 입력값에 대한 입력 데이터에 대응되고, dlY1,...,dlYMM개의 모델 출력값에 대응됩니다. 함수로 정의된 딥러닝 모델을 훈련시키려면 사용자 지정 훈련 루프를 사용하십시오. 예제는 Train Network Using Model Function 항목을 참조하십시오.

딥러닝 모델을 함수로 정의할 때는 계층 가중치를 수동으로 초기화해야 합니다. 자세한 내용은 Initialize Learnable Parameters for Model Function 항목을 참조하십시오.

사용자 지정 신경망을 함수로 정의한 경우 모델 함수는 자동 미분을 지원해야 합니다. 다음과 같은 딥러닝 연산을 사용할 수 있습니다. 여기에 나와 있는 함수는 일부에 불과합니다. dlarray 입력값을 지원하는 함수의 전체 목록은 List of Functions with dlarray Support 항목을 참조하십시오.

함수설명
avgpool평균값 풀링 연산은 입력값을 풀링 영역으로 나누고 각 영역의 평균값을 계산하여 다운샘플링을 수행합니다.
batchnorm배치 정규화 연산은 각 채널에 대한 모든 관측값에서 입력 데이터를 독립적으로 정규화합니다. 컨벌루션 신경망의 훈련 속도를 높이고 신경망 초기화에 대한 민감도를 줄이려면 컨벌루션 연산과 비선형 계층(예: relu) 사이에 배치 정규화를 사용하십시오.
crossentropy교차 엔트로피 연산은 단일 레이블 및 다중 레이블 분류 작업에서 신경망 예측과 목표값 사이의 교차 엔트로피 손실을 계산합니다.
crosschannelnorm교차 채널 정규화 연산은 여러 채널의 국소 응답을 사용하여 각 활성화를 정규화합니다. 교차 채널 정규화는 일반적으로 relu 연산을 따릅니다. 교차 채널 정규화는 국소 응답 정규화라고도 합니다.
ctcCTC 연산은 정렬되지 않은 시퀀스 간의 연결주의적 시간 분류(CTC: Connectionist Temporal Classification) 손실을 계산합니다.
dlconv컨벌루션 연산은 입력 데이터에 슬라이딩 필터를 적용합니다. 딥러닝 컨벌루션, 그룹화된 컨벌루션 및 채널별로 분리 가능한 컨벌루션에 dlconv 함수를 사용합니다.
dltranspconv전치된 컨벌루션 연산은 특징 맵을 업샘플링합니다.
embed임베드 연산은 숫자형 인덱스를 숫자형 벡터로 변환합니다. 여기서 인덱스는 이산 데이터에 대응됩니다. 임베딩을 사용하여 categorical형 값이나 숫자형 벡터와 같은 이산 데이터를 매핑하십시오.
fullyconnect완전 연결 연산은 입력값에 가중치 행렬을 곱한 다음 편향 벡터를 더합니다.
groupnorm그룹 정규화 연산은 각 관측값에 대해 그룹화된 채널 서브셋에서 입력 데이터를 독립적으로 정규화합니다. 컨벌루션 신경망의 훈련 속도를 높이고 신경망 초기화에 대한 민감도를 줄이려면 컨벌루션 연산과 비선형 계층(예: relu) 사이에 그룹 정규화를 사용하십시오.
gru게이트 순환 유닛(GRU) 연산을 사용하면 신경망이 시계열 및 시퀀스 데이터에서 시간 스텝 간의 종속성을 학습할 수 있습니다.
huberHuber 연산은 회귀 작업에서 신경망 예측과 목표값 사이의 Huber 손실을 계산합니다. 'TransitionPoint' 옵션이 1이면 smooth-L1 손실이라고도 합니다.
instancenorm인스턴스 정규화 연산은 각 관측값에 대해 각 채널에서 입력 데이터를 독립적으로 정규화합니다. 컨벌루션 신경망의 훈련 수렴을 개선하고 신경망 하이퍼파라미터에 대한 민감도를 줄이려면 컨벌루션 연산과 비선형 연산(예: relu) 사이에 인스턴스 정규화를 사용하십시오.
layernorm계층 정규화 연산은 각 관측값에 대해 모든 채널에서 입력 데이터를 독립적으로 정규화합니다. 순환 다층 퍼셉트론 신경망의 훈련 속도를 높이고 신경망 초기화에 대한 민감도를 줄이려면 학습 가능한 연산(예: LSTM, 완전 연결 연산) 다음에 계층 정규화를 사용하십시오.
leakyreluLeaky ReLU(Rectified Linear Unit) 계층 활성화 연산은 0보다 작은 모든 입력값에 고정된 스칼라 인자를 곱하는 비선형 임계값 연산을 수행합니다.
lstm장단기 기억(LSTM) 연산을 사용하면 신경망이 시계열 및 시퀀스 데이터에서 시간 스텝 간의 장기 종속성을 학습할 수 있습니다.
maxpool최댓값 풀링 연산은 입력값을 풀링 영역으로 나누고 각 영역의 최댓값을 계산하여 다운샘플링을 수행합니다.
maxunpool최댓값 언풀링 연산은 최댓값 풀링 연산의 출력값을 업샘플링하고 0으로 채워서 언풀링합니다.
mse평균 제곱 오차의 절반 연산은 회귀 작업에서 신경망 예측과 목표값 사이의 평균 제곱 오차의 절반을 계산합니다.
onehotdecode

one-hot 디코딩 연산은 분류 신경망의 출력값과 같은 확률 벡터를 분류 레이블로 디코딩합니다.

입력값 Adlarray가 될 수 있습니다. A의 형식이 지정된 경우 함수는 데이터 형식을 무시합니다.

reluReLU(Rectified Linear Unit) 활성화 연산은 0보다 작은 모든 입력값을 0으로 설정하는 비선형 임계값 연산을 수행합니다.
sigmoid시그모이드 활성화 연산은 입력 데이터에 시그모이드 함수를 적용합니다.
softmax소프트맥스 활성화 연산은 입력 데이터의 채널 차원에 소프트맥스 함수를 적용합니다.

손실 함수 지정하기

사용자 지정 훈련 루프를 사용할 때는 모델 기울기 함수의 손실을 계산해야 합니다. 신경망 가중치를 업데이트하기 위해 기울기를 계산할 때 손실 값을 사용하십시오. 손실을 계산하기 위해 다음 함수를 사용할 수 있습니다.

함수설명
softmax소프트맥스 활성화 연산은 입력 데이터의 채널 차원에 소프트맥스 함수를 적용합니다.
sigmoid시그모이드 활성화 연산은 입력 데이터에 시그모이드 함수를 적용합니다.
crossentropy교차 엔트로피 연산은 단일 레이블 및 다중 레이블 분류 작업에서 신경망 예측과 목표값 사이의 교차 엔트로피 손실을 계산합니다.
huberHuber 연산은 회귀 작업에서 신경망 예측과 목표값 사이의 Huber 손실을 계산합니다. 'TransitionPoint' 옵션이 1이면 smooth-L1 손실이라고도 합니다.
mse평균 제곱 오차의 절반 연산은 회귀 작업에서 신경망 예측과 목표값 사이의 평균 제곱 오차의 절반을 계산합니다.
ctcCTC 연산은 정렬되지 않은 시퀀스 간의 연결주의적 시간 분류(CTC: Connectionist Temporal Classification) 손실을 계산합니다.

또는 loss = myLoss(Y,T) 형식의 함수를 만들어서 사용자 지정 손실 함수를 사용할 수 있습니다. 여기서 YT는 각각 신경망 예측과 목표값이고, loss는 반환된 손실입니다.

사용자 지정 손실 함수를 사용하여 영상을 생성하는 생성적 적대 신경망(GAN)을 훈련시키는 방법을 보여주는 예제는 생성적 적대 신경망(GAN) 훈련시키기 항목을 참조하십시오.

자동 미분을 사용하여 학습 가능한 파라미터 업데이트하기

사용자 지정 훈련 루프를 사용하여 딥러닝 모델을 훈련시킬 때 소프트웨어는 학습 가능한 파라미터에 대한 손실을 최소화합니다. 손실을 최소화하기 위해, 학습 가능한 파라미터에 대한 손실의 기울기를 사용합니다. 자동 미분을 사용하여 이러한 기울기를 계산하려면 모델 기울기 함수를 정의해야 합니다.

모델 기울기 함수 정의하기

dlnetwork 객체로 지정된 모델의 경우, gradients = modelGradients(dlnet,dlX,T) 형식의 함수를 만듭니다. 여기서 dlnet은 신경망이고, dlX는 신경망 입력값이고, T는 목표값을 포함하고, gradients는 반환된 기울기를 포함합니다. 선택적으로, 기울기 함수에 추가 인수를 전달하거나(예: 손실 함수에 추가 정보가 필요한 경우) 추가 인수를 반환할 수 있습니다(예: 훈련 진행 상황 플로팅을 위한 메트릭).

함수로 지정된 모델의 경우, gradients = modelGradients(parameters,dlX,T) 형식의 함수를 만듭니다. 여기서 parameters는 학습 가능한 파라미터를 포함하고, dlX는 모델 입력값이고, T는 목표값을 포함하고, gradients는 반환된 기울기를 포함합니다. 선택적으로, 기울기 함수에 추가 인수를 전달하거나(예: 손실 함수에 추가 정보가 필요한 경우) 추가 인수를 반환할 수 있습니다(예: 훈련 진행 상황 플로팅을 위한 메트릭).

사용자 지정 훈련 루프를 위해 모델 기울기 함수를 정의하는 것에 대한 자세한 내용은 Define Model Gradients Function for Custom Training Loop 항목을 참조하십시오.

학습 가능한 파라미터 업데이트하기

자동 미분을 사용하여 모델 기울기를 평가하려면, 자동 미분이 활성화된 상태로 함수를 평가하는 dlfeval 함수를 사용하십시오. dlfeval의 첫 번째 입력값으로는 함수 핸들로 지정된 모델 기울기 함수를 전달합니다. 이어지는 입력값으로는 모델 기울기 함수에 필요한 변수를 전달합니다. dlfeval 함수의 출력값으로는 모델 기울기 함수와 동일한 출력값을 지정합니다.

기울기를 사용하여 학습 가능한 파라미터를 업데이트하기 위해 다음 함수를 사용할 수 있습니다.

함수설명
adamupdateAdam(적응적 모멘트 추정)을 사용하여 파라미터 업데이트
rmspropupdateRMSProp(RMS 전파)를 사용하여 파라미터 업데이트
sgdmupdateSGDM(모멘텀을 사용한 확률적 경사하강법)을 사용하여 파라미터 업데이트
dlupdate사용자 지정 함수를 사용하여 파라미터 업데이트

참고 항목

| | |

관련 항목