이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
사용자 지정 훈련 루프, 손실 함수 및 신경망 정의
대부분의 딥러닝 작업의 경우, 사전 훈련된 신경망을 사용하고 이를 사용자 자신의 데이터에 맞게 적응시킬 수 있습니다. 새로운 영상 세트를 분류할 수 있도록 전이 학습을 사용하여 컨벌루션 신경망을 다시 훈련시키는 방법을 보여주는 예제는 새로운 영상을 분류하도록 딥러닝 신경망 훈련시키기 항목을 참조하십시오. 또는 layerGraph
객체를 trainNetwork
함수 및 trainingOptions
함수와 함께 사용하여 신경망을 처음부터 만들고 훈련시킬 수 있습니다.
trainingOptions
함수가 작업에 필요한 훈련 옵션을 제공하지 않는다면 자동 미분을 사용하여 사용자 지정 훈련 루프를 만들 수 있습니다. 자세한 내용은 사용자 지정 훈련 루프를 위한 딥러닝 신경망 정의하기 항목을 참조하십시오.
Deep Learning Toolbox™가 작업에 필요한 계층을 제공하지 않는다면(손실 함수를 지정하는 출력 계층 포함) 사용자 지정 계층을 만들 수 있습니다. 자세한 내용은 사용자 지정 딥러닝 계층 정의하기 항목을 참조하십시오. 출력 계층을 사용하여 지정할 수 없는 손실 함수의 경우, 사용자 지정 훈련 루프 안에 손실을 지정할 수 있습니다. 자세한 내용은 손실 함수 지정하기 항목을 참조하십시오. 계층 그래프를 사용하여 만들 수 없는 신경망의 경우 사용자 지정 신경망을 함수로 정의할 수 있습니다. 자세한 내용은 신경망을 모델 함수로 정의하기 항목을 참조하십시오.
어느 훈련 방법을 어느 작업에 사용해야 하는지에 대한 자세한 내용은 Train Deep Learning Model in MATLAB 항목을 참조하십시오.
사용자 지정 훈련 루프를 위한 딥러닝 신경망 정의하기
신경망을 dlnetwork
객체로 정의하기
대부분의 작업에서는 trainingOptions
함수와 trainNetwork
함수를 사용하여 훈련 알고리즘 세부 정보를 제어할 수 있습니다. trainingOptions
함수가 작업에 필요한 옵션을 제공하지 않는다면(예: 사용자 지정 학습률 일정) dlnetwork
객체를 사용하여 자체 사용자 지정 훈련 루프를 정의할 수 있습니다. dlnetwork
객체를 사용하면 계층 그래프로 지정된 신경망을 자동 미분을 사용하여 훈련시킬 수 있습니다.
계층 그래프로 지정된 신경망의 경우, 계층 그래프에서 직접 dlnetwork
함수를 사용하여 dlnetwork
객체를 만들 수 있습니다.
net = dlnetwork(lgraph);
dlnetwork
객체가 지원하는 계층 목록은 dlnetwork
페이지의 섹션을 참조하십시오. 사용자 지정 학습률 일정을 사용하여 신경망을 훈련시키는 방법을 보여주는 예제는 Train Network Using Custom Training Loop 항목을 참조하십시오.
신경망을 모델 함수로 정의하기
계층 그래프를 사용하여 만들 수 없는 아키텍처의 경우(예: 공유 가중치가 필요한 샴 신경망), 모델을 [Y1,...,YM] = model(parameters,X1,...,XN)
형식의 함수로 정의할 수 있습니다. 여기서 parameters
는 신경망 파라미터를 포함하고, X1,...,XN
은 N
개의 모델 입력값에 대한 입력 데이터에 대응되고, Y1,...,YM
은 M
개의 모델 출력값에 대응됩니다. 함수로 정의된 딥러닝 모델을 훈련시키려면 사용자 지정 훈련 루프를 사용하십시오. 예제는 Train Network Using Model Function 항목을 참조하십시오.
딥러닝 모델을 함수로 정의할 때는 계층 가중치를 수동으로 초기화해야 합니다. 자세한 내용은 Initialize Learnable Parameters for Model Function 항목을 참조하십시오.
사용자 지정 신경망을 함수로 정의한 경우 모델 함수는 자동 미분을 지원해야 합니다. 다음과 같은 딥러닝 연산을 사용할 수 있습니다. 여기에 나와 있는 함수는 일부에 불과합니다. dlarray
입력값을 지원하는 함수의 전체 목록은 List of Functions with dlarray Support 항목을 참조하십시오.
함수 | 설명 |
---|---|
attention | 어텐션 연산은 가중 곱셈 연산을 사용하여 입력값의 일부에 집중하여 연산을 수행합니다. |
avgpool | 평균값 풀링 연산은 입력값을 풀링 영역으로 나누고 각 영역의 평균값을 계산하여 다운샘플링을 수행합니다. |
batchnorm | 배치 정규화 연산은 각 채널에 대한 모든 관측값에서 입력 데이터를 독립적으로 정규화합니다. 컨벌루션 신경망의 훈련 속도를 높이고 신경망 초기화에 대한 민감도를 줄이려면 컨벌루션 연산과 비선형 계층(예: relu ) 사이에 배치 정규화를 사용하십시오. |
crossentropy | 교차 엔트로피 연산은 단일 레이블 및 다중 레이블 분류 작업에서 신경망 예측과 목표값 사이의 교차 엔트로피 손실을 계산합니다. |
crosschannelnorm | 교차 채널 정규화 연산은 여러 채널의 국소 응답을 사용하여 각 활성화를 정규화합니다. 교차 채널 정규화는 일반적으로 relu 연산을 따릅니다. 교차 채널 정규화는 국소 응답 정규화라고도 합니다. |
ctc | CTC 연산은 정렬되지 않은 시퀀스 간의 연결주의적 시간 분류(CTC: Connectionist Temporal Classification) 손실을 계산합니다. |
dlconv | 컨벌루션 연산은 입력 데이터에 슬라이딩 필터를 적용합니다. 딥러닝 컨벌루션, 그룹화된 컨벌루션 및 채널별로 분리 가능한 컨벌루션에 dlconv 함수를 사용합니다. |
dlode45 | 신경망 상미분 방정식(ODE) 연산은 지정된 ODE의 해를 반환합니다. |
dltranspconv | 전치된 컨벌루션 연산은 특징 맵을 업샘플링합니다. |
embed | 임베드 연산은 숫자형 인덱스를 숫자형 벡터로 변환합니다. 여기서 인덱스는 이산 데이터에 대응됩니다. 임베딩을 사용하여 categorical형 값이나 숫자형 벡터와 같은 이산 데이터를 매핑하십시오. |
fullyconnect | 완전 연결 연산은 입력값에 가중치 행렬을 곱한 다음 편향 벡터를 더합니다. |
gelu | GELU(Gaussian Error Linear Unit) 활성화 연산은 가우스 분포의 확률에 따라 입력값에 가중치를 부여합니다. |
groupnorm | 그룹 정규화 연산은 각 관측값에 대해 그룹화된 채널 서브셋에서 입력 데이터를 독립적으로 정규화합니다. 컨벌루션 신경망의 훈련 속도를 높이고 신경망 초기화에 대한 민감도를 줄이려면 컨벌루션 연산과 비선형 계층(예: relu ) 사이에 그룹 정규화를 사용하십시오. |
gru | 게이트 순환 유닛(GRU) 연산을 사용하면 신경망이 시계열 및 시퀀스 데이터에서 시간 스텝 간의 종속성을 학습할 수 있습니다. |
huber | Huber 연산은 회귀 작업에서 신경망 예측과 목표값 사이의 Huber 손실을 계산합니다. 'TransitionPoint' 옵션이 1이면 smooth-L1 손실이라고도 합니다. |
instancenorm | 인스턴스 정규화 연산은 각 관측값에 대해 각 채널에서 입력 데이터를 독립적으로 정규화합니다. 컨벌루션 신경망의 훈련 수렴을 개선하고 신경망 하이퍼파라미터에 대한 민감도를 줄이려면 컨벌루션 연산과 비선형 연산(예: relu ) 사이에 인스턴스 정규화를 사용하십시오. |
l1loss | L1 손실 연산은 신경망 예측값과 목표값이 주어진 경우 L1 손실을 계산합니다. Reduction 옵션이 "sum" 이고 NormalizationFactor 옵션이 "batch-size" 일 때 계산된 값을 평균 절대 오차(MAE)라고 합니다. |
l2loss | L2 손실 연산은 신경망 예측값과 목표값이 주어진 경우 L2 손실(L2 노름의 제곱에 기반함)을 계산합니다. Reduction 옵션이 "sum" 이고 NormalizationFactor 옵션이 "batch-size" 일 때 계산된 값을 평균 제곱 오차(MSE)라고 합니다. |
layernorm | 계층 정규화 연산은 각 관측값에 대해 모든 채널에서 입력 데이터를 독립적으로 정규화합니다. 순환 다층 퍼셉트론 신경망의 훈련 속도를 높이고 신경망 초기화에 대한 민감도를 줄이려면 학습 가능한 연산(예: LSTM, 완전 연결 연산) 다음에 계층 정규화를 사용하십시오. |
leakyrelu | Leaky ReLU(Rectified Linear Unit) 계층 활성화 연산은 0보다 작은 모든 입력값에 고정된 스칼라 인자를 곱하는 비선형 임계값 연산을 수행합니다. |
lstm | 장단기 기억(LSTM) 연산을 사용하면 신경망이 시계열 및 시퀀스 데이터에서 시간 스텝 간의 장기 종속성을 학습할 수 있습니다. |
maxpool | 최댓값 풀링 연산은 입력값을 풀링 영역으로 나누고 각 영역의 최댓값을 계산하여 다운샘플링을 수행합니다. |
maxunpool | 최댓값 언풀링 연산은 최댓값 풀링 연산의 출력값을 업샘플링하고 0으로 채워서 언풀링합니다. |
mse | 평균 제곱 오차의 절반 연산은 회귀 작업에서 신경망 예측과 목표값 사이의 평균 제곱 오차의 절반을 계산합니다. |
onehotdecode | one-hot 디코딩 연산은 분류 신경망의 출력값과 같은 확률 벡터를 분류 레이블로 디코딩합니다. 입력값 |
relu | ReLU(Rectified Linear Unit) 활성화 연산은 0보다 작은 모든 입력값을 0으로 설정하는 비선형 임계값 연산을 수행합니다. |
sigmoid | 시그모이드 활성화 연산은 입력 데이터에 시그모이드 함수를 적용합니다. |
softmax | 소프트맥스 활성화 연산은 입력 데이터의 채널 차원에 소프트맥스 함수를 적용합니다. |
손실 함수 지정하기
사용자 지정 훈련 루프를 사용할 때는 모델 기울기 함수의 손실을 계산해야 합니다. 신경망 가중치를 업데이트하기 위해 기울기를 계산할 때 손실 값을 사용하십시오. 손실을 계산하기 위해 다음 함수를 사용할 수 있습니다.
함수 | 설명 |
---|---|
softmax | 소프트맥스 활성화 연산은 입력 데이터의 채널 차원에 소프트맥스 함수를 적용합니다. |
sigmoid | 시그모이드 활성화 연산은 입력 데이터에 시그모이드 함수를 적용합니다. |
crossentropy | 교차 엔트로피 연산은 단일 레이블 및 다중 레이블 분류 작업에서 신경망 예측과 목표값 사이의 교차 엔트로피 손실을 계산합니다. |
l1loss | L1 손실 연산은 신경망 예측값과 목표값이 주어진 경우 L1 손실을 계산합니다. Reduction 옵션이 "sum" 이고 NormalizationFactor 옵션이 "batch-size" 일 때 계산된 값을 평균 절대 오차(MAE)라고 합니다. |
l2loss | L2 손실 연산은 신경망 예측값과 목표값이 주어진 경우 L2 손실(L2 노름의 제곱에 기반함)을 계산합니다. Reduction 옵션이 "sum" 이고 NormalizationFactor 옵션이 "batch-size" 일 때 계산된 값을 평균 제곱 오차(MSE)라고 합니다. |
huber | Huber 연산은 회귀 작업에서 신경망 예측과 목표값 사이의 Huber 손실을 계산합니다. 'TransitionPoint' 옵션이 1이면 smooth-L1 손실이라고도 합니다. |
mse | 평균 제곱 오차의 절반 연산은 회귀 작업에서 신경망 예측과 목표값 사이의 평균 제곱 오차의 절반을 계산합니다. |
ctc | CTC 연산은 정렬되지 않은 시퀀스 간의 연결주의적 시간 분류(CTC: Connectionist Temporal Classification) 손실을 계산합니다. |
또는 loss = myLoss(Y,T)
형식의 함수를 만들어서 사용자 지정 손실 함수를 사용할 수 있습니다. 여기서 Y
와 T
는 각각 신경망 예측과 목표값이고, loss
는 반환된 손실입니다.
사용자 지정 손실 함수를 사용하여 영상을 생성하는 생성적 적대 신경망(GAN)을 훈련시키는 방법을 보여주는 예제는 생성적 적대 신경망(GAN) 훈련시키기 항목을 참조하십시오.
자동 미분을 사용하여 학습 가능한 파라미터 업데이트하기
사용자 지정 훈련 루프를 사용하여 딥러닝 모델을 훈련시킬 때 소프트웨어는 학습 가능한 파라미터에 대한 손실을 최소화합니다. 손실을 최소화하기 위해, 학습 가능한 파라미터에 대한 손실의 기울기를 사용합니다. 자동 미분을 사용하여 이러한 기울기를 계산하려면 모델 기울기 함수를 정의해야 합니다.
모델 손실 함수 정의하기
dlnetwork
객체로 지정된 모델의 경우, [loss,gradients] = modelLoss(net,X,T)
형식의 함수를 만듭니다. 여기서 net
은 신경망이고, X
는 신경망 입력값이고, T
는 목표값을 포함하고, loss
와 gradients
는 각각 반환된 손실과 반환된 기울기입니다. 선택적으로, 기울기 함수에 추가 인수를 전달하거나(예: 손실 함수에 추가 정보가 필요한 경우) 추가 인수를 반환할 수 있습니다(예: 업데이트된 신경망 상태).
함수로 지정된 모델의 경우, [loss,gradients] = modelLoss(parameters,X,T)
형식의 함수를 만듭니다. 여기서 parameters
는 학습 가능한 파라미터를 포함하고, X
는 모델 입력값이고, T
는 목표값을 포함하고, loss
와 gradients
는 각각 반환된 손실과 반환된 기울기를 포함합니다. 선택적으로, 기울기 함수에 추가 인수를 전달하거나(예: 손실 함수에 추가 정보가 필요한 경우) 추가 인수를 반환할 수 있습니다(예: 업데이트된 모델 상태).
사용자 지정 훈련 루프를 위해 모델 손실 함수를 정의하는 것에 대한 자세한 내용은 Define Model Loss Function for Custom Training Loop 항목을 참조하십시오.
학습 가능한 파라미터 업데이트하기
자동 미분을 사용하여 모델 손실 함수를 평가하려면, 자동 미분이 활성화된 상태로 함수를 평가하는 dlfeval
함수를 사용하십시오. dlfeval
의 첫 번째 입력값으로는 함수 핸들로 지정된 모델 손실 함수를 전달합니다. 이어지는 입력값으로는 모델 손실 함수에 필요한 변수를 전달합니다. dlfeval
함수의 출력값으로는 모델 손실 함수와 동일한 출력값을 지정합니다.
기울기를 사용하여 학습 가능한 파라미터를 업데이트하기 위해 다음 함수를 사용할 수 있습니다.
함수 | 설명 |
---|---|
adamupdate | Adam(적응적 모멘트 추정)을 사용하여 파라미터 업데이트 |
rmspropupdate | RMSProp(RMS 전파)를 사용하여 파라미터 업데이트 |
sgdmupdate | SGDM(모멘텀을 사용한 확률적 경사하강법)을 사용하여 파라미터 업데이트 |
lbfgsupdate | 메모리 제한 BFGS(L-BFGS)를 사용하여 파라미터 업데이트 |
dlupdate | 사용자 지정 함수를 사용하여 파라미터 업데이트 |
참고 항목
dlarray
| dlgradient
| dlfeval
| dlnetwork
관련 항목
- 생성적 적대 신경망(GAN) 훈련시키기
- Train Network Using Custom Training Loop
- Specify Training Options in Custom Training Loop
- Define Model Loss Function for Custom Training Loop
- Update Batch Normalization Statistics in Custom Training Loop
- Update Batch Normalization Statistics Using Model Function
- Make Predictions Using dlnetwork Object
- Make Predictions Using Model Function
- Train Network Using Model Function
- Initialize Learnable Parameters for Model Function
- Train Deep Learning Model in MATLAB
- 사용자 지정 딥러닝 계층 정의하기
- List of Functions with dlarray Support
- Automatic Differentiation Background
- Use Automatic Differentiation In Deep Learning Toolbox