Main Content

traingda

적응적 학습률 역전파를 사용한 경사하강법

설명

net.trainFcn = 'traingda'는 신경망의 trainFcn 속성을 설정합니다.

[trainedNet,tr] = train(net,...)traingda를 사용하여 신경망을 훈련시킵니다.

traingda는 적응적 학습률을 사용한 경사하강법에 따라 가중치와 편향 값을 업데이트하는 신경망 훈련 함수입니다.

아래에 디폴트 값과 함께 표시된 다음의 traingda 훈련 파라미터에 따라 훈련이 이루어집니다.

  • net.trainParam.epochs — 훈련할 최대 Epoch 횟수. 디폴트 값은 1000입니다.

  • net.trainParam.goal — 성능 목표. 디폴트 값은 0입니다.

  • net.trainParam.lr — 학습률. 디폴트 값은 0.01입니다.

  • net.trainParam.lr_inc — 학습률 증가 비율. 디폴트 값은 1.05입니다.

  • net.trainParam.lr_dec — 학습률 감소 비율. 디폴트 값은 0.7입니다.

  • net.trainParam.max_fail — 최대 검증 실패 횟수. 디폴트 값은 6입니다.

  • net.trainParam.max_perf_inc — 최대 성능 증가. 디폴트 값은 1.04입니다.

  • net.trainParam.min_grad — 최소 성능 기울기. 디폴트 값은 1e-5입니다.

  • net.trainParam.show — 다음 표시까지 진행할 Epoch 횟수(표시하지 않으려면 NaN). 디폴트 값은 25입니다.

  • net.trainParam.showCommandLine — 명령줄 출력값 생성. 디폴트 값은 false입니다.

  • net.trainParam.showWindow — 훈련 GUI 표시. 디폴트 값은 true입니다.

  • net.trainParam.time — 훈련을 진행할 최대 시간(단위: 초). 디폴트 값은 inf입니다.

입력 인수

모두 축소

입력 신경망으로, network 객체로 지정됩니다. network 객체를 만들려면 feedforwardnet 또는 narxnet 등을 사용하십시오.

출력 인수

모두 축소

훈련된 신경망으로, network 객체로 반환됩니다.

훈련 기록(epochperf)으로, 신경망 훈련 함수(net.NET.trainFcn)에 따라 필드가 결정되는 구조체로 반환됩니다. 다음과 같은 필드를 포함할 수 있습니다.

  • 훈련, 데이터 분할, 성능 함수와 파라미터

  • 훈련, 검증, 테스트 세트의 데이터 분할 인덱스

  • 훈련, 검증, 테스트 세트의 데이터 분할 마스크

  • Epoch 횟수(num_epochs) 및 최적의 Epoch(best_epoch).

  • 훈련 상태 이름 목록(states).

  • 훈련 전체에 걸쳐 기록된 각 상태 이름에 대한 필드

  • 최적의 신경망의 성능(best_perf, best_vperf, best_tperf)

세부 정보

모두 축소

신경망 사용

feedforwardnet 또는 cascadeforwardnet으로 traingda를 사용하는 표준 신경망을 만들 수 있습니다. traingda를 사용하여 훈련할 사용자 지정 신경망을 준비하려면 다음을 수행하십시오.

  1. net.trainFcn'traingda'로 설정합니다. 이렇게 하면 net.trainParamtraingda의 디폴트 파라미터로 설정됩니다.

  2. net.trainParam 속성을 원하는 값으로 설정합니다.

두 경우 모두, 그 결과 생성되는 신경망에 train을 호출하면 이 신경망을 traingda를 사용하여 훈련시킵니다.

예제는 help feedforwardnethelp cascadeforwardnet을 참조하십시오.

적응적 학습률 역전파를 사용한 경사하강법

표준 최속강하법에서는 훈련의 처음부터 끝까지 학습률이 일정하게 유지됩니다. 알고리즘의 성능은 학습률이 어떻게 설정되었는지에 따라 매우 민감하게 반응합니다. 학습률을 너무 높게 설정하면 알고리즘에서 진동이 발생할 수 있으며 안정성이 떨어지게 됩니다. 학습률이 너무 작으면 알고리즘이 수렴하는 데 오래 걸립니다. 훈련을 시작하기 전에 최적의 학습률 설정을 판단하기란 쉽지 않으며, 알고리즘이 성능 표면상을 움직이므로 최적의 학습률은 훈련 과정이 진행되는 동안 변합니다.

훈련 과정 동안 학습률이 변경되도록 허용하면 최속강하법 알고리즘의 성능을 개선할 수 있습니다. 적응적 학습률은 학습의 안정성을 유지하는 범위 내에서 학습 스텝 크기를 가급적 크게 유지하도록 시도합니다. 학습률은 국소 오차 표면의 복잡함에 대응할 수 있도록 만들어집니다.

적응적 학습률을 사용하려면 traingd가 사용하는 훈련 절차를 일부 변경해야 합니다. 먼저 초기 신경망 출력값과 오차가 계산됩니다. 각 Epoch에서 현재 학습률을 사용하여 새로운 가중치와 편향이 계산됩니다. 그런 다음 새로운 출력값과 오차가 계산됩니다.

모멘텀과 마찬가지로, 새로운 오차가 기존 오차보다 미리 정의된 배율인 max_perf_inc(일반적으로 1.04)을 초과하여 커지는 경우 새로운 가중치와 편향은 사용되지 않습니다. 또한, 학습률도 감소됩니다(일반적으로 lr_dec = 0.7을 곱한 만큼). 그렇지 않은 경우 새로운 가중치와 편향 등을 사용하게 됩니다. 새로운 오차가 기존 오차보다 작으면 학습률이 증가됩니다(일반적으로 lr_inc = 1.05를 곱한 만큼).

이 절차는 학습률을 증가시키지만 오차를 크게 키우지 않으면서 신경망이 학습할 수 있는 한도까지만 증가시킵니다. 이를 통해 국소 영역에 대한 최적 학습률에 근접한 값이 얻어집니다. 학습률을 더 크게 하여도 안정적인 학습이 가능하다면 학습률이 증가됩니다. 학습률이 너무 높아서 오차 감소를 보장하기 어려워지면 안정적인 학습이 재개될 때까지 감소됩니다.

적응적 학습률을 사용한 역전파 훈련은 함수 traingda로 구현됩니다. 이 함수는 추가적인 훈련 파라미터 max_perf_inc, lr_dec, lr_inc를 갖는다는 점을 제외하면 traingd와 동일하게 호출됩니다. 다음은 이전의 2계층 신경망을 훈련시키기 위해 이 함수를 호출하는 방법입니다.

p = [-1 -1 2 2; 0 5 0 5];
t = [-1 -1 1 1];
net = feedforwardnet(3,'traingda');
net.trainParam.lr = 0.05;
net.trainParam.lr_inc = 1.05;
net = train(net,p,t);
y = net(p)

알고리즘

traingda는 신경망의 가중치, 순 입력값, 전달 함수가 도함수를 갖는 한 어떤 신경망도 훈련시킬 수 있습니다.

역전파는 가중치와 편향 변수 X에 대한 성능 dperf의 도함수를 계산하기 위해 사용됩니다. 각 변수는 경사하강법에 따라 조정됩니다.

dX = lr*dperf/dX

각 Epoch에서 성능이 목표 방향으로 감소하면 학습률이 lr_inc배만큼 증가합니다. 성능 증가량이 max_perf_inc배를 초과하면 학습률이 lr_dec배만큼 조정되고 성능 증가를 유발한 변경 사항은 적용되지 않습니다.

다음 조건 중 하나라도 충족되면 훈련이 중지됩니다.

  • epochs(반복)의 최대 횟수에 도달함.

  • time의 최대 값이 초과됨.

  • 성능이 goal로 최소화됨.

  • 성능 기울기가 min_grad 아래로 떨어짐.

  • (검증을 사용하는 경우) 검증 성능(검증 오류)이 마지막으로 감소한 이후로 max_fail배 넘게 증가함.

버전 내역

R2006a 이전에 개발됨

참고 항목

| | |