Main Content

trainlm

Levenberg-Marquardt 역전파

설명

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

예제

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

trainlm은 Levenberg-Marquardt 최적화 알고리즘에 따라 가중치와 편향 값을 업데이트하는 신경망 훈련 함수입니다.

trainlm은 툴박스에서 가장 빠른 역전파 알고리즘인 경우가 많으며, 여타 알고리즘보다 메모리를 많이 요구하긴 하지만 가장 먼저 선택하는 지도 학습 알고리즘으로 강력 추천되고 있습니다.

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

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

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

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

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

  • net.trainParam.mu — 초기 mu. 디폴트 값은 0.001입니다.

  • net.trainParam.mu_decmu의 감소 인자. 디폴트 값은 0.1입니다.

  • net.trainParam.mu_incmu의 증가 인자. 디폴트 값은 10입니다.

  • net.trainParam.mu_maxmu의 최댓값. 디폴트 값은 1e10입니다.

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

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

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

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

검증 벡터는 검증 벡터에 대한 신경망 성능이 증가하지 않거나 max_fail회 Epoch 연속으로 변화가 없으면 훈련을 조기에 중지하는 데 사용됩니다. 테스트 벡터는 신경망이 잘 일반화되고 있는지 추가로 확인하는 데 사용되지만 훈련에는 영향을 주지 않습니다.

예제

모두 축소

이 예제에서는 trainlm 훈련 함수를 사용하여 신경망을 훈련시키는 방법을 다룹니다.

체지방 비율을 예측하도록 신경망을 훈련시킵니다.

[x, t] = bodyfat_dataset;
net = feedforwardnet(10, 'trainlm');
net = train(net, x, t);

{"String":"Figure Neural Network Training (24-Jul-2022 21:30:01) contains an object of type uigridlayout.","Tex":[],"LaTex":[]}

y = net(x);

입력 인수

모두 축소

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

출력 인수

모두 축소

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

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

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

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

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

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

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

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

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

제한 사항

이 함수는 성능을 제곱 오차의 평균 또는 합이라고 가정하는 야코비 행렬을 계산에 사용합니다. 따라서 이 함수를 사용하여 훈련된 신경망은 mse 또는 sse 성능 함수를 사용해야 합니다.

세부 정보

모두 축소

Levenberg-Marquardt 알고리즘

Levenberg-Marquardt 알고리즘은 준뉴턴 방법과 마찬가지로 헤세 행렬을 계산하지 않고 2계 훈련 속도를 높이기 위해 고안되었습니다. (피드포워드 신경망을 훈련시킬 때 일반적으로 볼 수 있듯이) 성능 함수가 제곱합의 형태를 가지면 헤세 행렬을 다음과 같이 근사하고

H = JTJ(1)

기울기를 다음과 같이 계산할 수 있습니다.

g = JTe(2)

여기서 J는 가중치와 편향에 대한 신경망 오차의 1계 도함수를 포함하는 야코비 행렬이고, e는 신경망 오차로 구성된 벡터입니다. 야코비 행렬은 헤세 행렬 계산보다 훨씬 간단한 표준 역전파 기법([HaMe94] 참조)을 통해 계산할 수 있습니다.

Levenberg-Marquardt 알고리즘은 뉴턴 방법과 유사한 다음 업데이트에서 이러한 헤세 행렬에 대한 근사를 사용합니다.

xk+1=xk[JTJ+μI]1JTe

스칼라 µ가 0인 경우, 이것은 근사 헤세 행렬을 사용하는 뉴턴 방법이 됩니다. µ가 큰 값인 경우, 이것은 스텝 크기가 작은 경사하강법이 됩니다. 뉴턴 방법은 오차 최솟값에 가까워질수록 속도와 정확도가 높아지므로 목표는 가급적 빨리 뉴턴 방법으로 전환하는 것입니다. 따라서 µ는 성공적인 스텝(성능 함수가 감소됨)이 끝날 때마다 감소되고, 성능 함수를 증가시킬 것으로 보이는 스텝인 경우에만 증가됩니다. 그 결과 성능 함수는 알고리즘의 각 반복에서 항상 감소됩니다.

Levenberg-Marquardt 알고리즘에 대한 설명은 [Marq63]에서 확인할 수 있습니다. 신경망 훈련에 Levenberg-Marquardt 알고리즘을 적용하는 방법은 [HaMe94] 및 [HDB96]의 12-19페이지에서 확인할 수 있습니다. 이 알고리즘은 중간 크기의 피드포워드 신경망(가중치가 최대 수백인 경우)을 가장 빨리 훈련시키는 방법으로 보입니다. MATLAB®에도 효율적으로 구현되어 있는데, 행렬 방정식의 해가 내장 함수이기 때문에 MATLAB 환경에서 그 특성이 훨씬 더 잘 구현됩니다.

배치 Levenberg-Marquardt 알고리즘의 성능에 대한 설명을 보려면 신경망 설계 데모 nnd12m [HDB96]을 시도해 보십시오.

신경망 사용

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

  1. NET.trainFcntrainlm으로 설정합니다. 이렇게 하면 NET.trainParamtrainlm의 디폴트 파라미터로 설정됩니다.

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

두 경우 모두, 그 결과 생성되는 신경망에 train을 호출하면 이 신경망을 trainlm을 사용하여 훈련시킵니다. 예제는 feedforwardnetcascadeforwardnet을 참조하십시오.

알고리즘

trainlm은 신경망의 NET.divideFcn 속성이 데이터 분할 함수로 설정된 경우, 검증 벡터와 테스트 벡터를 사용하여 훈련을 지원합니다. 검증 벡터는 검증 벡터에 대한 신경망 성능이 증가하지 않거나 max_fail회 Epoch 연속으로 변화가 없으면 훈련을 조기에 중지하는 데 사용됩니다. 테스트 벡터는 신경망이 잘 일반화되고 있는지 추가로 확인하는 데 사용되지만 훈련에는 영향을 주지 않습니다.

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

역전파는 가중치와 편향 변수 X에 대한 성능 perf의 야코비 행렬 jX을 계산하기 위해 사용됩니다. 각 변수는 Levenberg-Marquardt 알고리즘에 따라 조정됩니다.

jj = jX * jX
je = jX * E
dX = -(jj+I*mu) \ je

여기서 E는 모든 오차이고 I는 단위 행렬입니다.

위에서 보여진 변경의 결과로 성능 값이 감소될 때까지 조정 값 mumu_inc만큼 증가합니다. 그런 다음 변경이 신경망에 적용되고, mumu_dec만큼 감소됩니다.

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

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

  • time의 최대 값이 초과됨.

  • 성능이 goal로 최소화됨.

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

  • mumu_max를 초과함.

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

버전 내역

R2006a 이전에 개발됨