Main Content

trainbfg

BFGS 준뉴턴 역전파

설명

예제

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

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

trainbfg는 BFGS 준뉴턴(quasi-Newton) 방법에 따라 가중치와 편향 값을 업데이트하는 신경망 훈련 함수입니다.

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

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

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

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

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

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

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

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

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

  • net.trainParam.searchFcn — 사용할 직선 탐색 루틴의 이름. 디폴트 값은 'srchbac'입니다.

직선 탐색 방법과 관련된 파라미터는 다음과 같습니다. (모든 파라미터가 모든 방법에 사용되는 것은 아닙니다.)

  • net.trainParam.scal_tol — 선형 탐색의 허용오차를 구하기 위해 델타로 나눔. 디폴트 값은 20입니다.

  • net.trainParam.alpha — perf의 충분한 감소를 결정하는 스케일링 인자. 디폴트 값은 0.001입니다.

  • net.trainParam.beta — 충분히 큰 스텝 크기를 결정하는 스케일링 인자. 디폴트 값은 0.1입니다.

  • net.trainParam.delta — 간격 위치 스텝의 초기 스텝 크기. 디폴트 값은 0.01입니다.

  • net.trainParam.gamma — 성능의 작은 감소를 방지하는 파라미터(보통 0.1로 설정, srch_cha 참조). 디폴트 값은 0.1입니다.

  • net.trainParam.low_lim — 스텝 크기 변경 하한. 디폴트 값은 0.1입니다.

  • net.trainParam.up_lim — 스텝 크기 변경 상한. 디폴트 값은 0.5입니다.

  • net.trainParam.maxstep — 최대 스텝 길이. 디폴트 값은 100입니다.

  • net.trainParam.minstep — 최소 스텝 길이. 디폴트 값은 1.0e-6입니다.

  • net.trainParam.bmax — 최대 스텝 크기. 디폴트 값은 26입니다.

  • net.trainParam.batch_frag — 여러 개의 배치가 있는 경우, 각각 독립적인 것으로 간주됩니다. 0이 아닌 값은 모두 조각화된 배치를 의미하므로, 이전에 훈련된 Epoch의 마지막 계층 조건은 다음 Epoch의 초기 조건으로 사용됩니다. 디폴트 값은 0입니다.

예제

모두 축소

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

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

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

{"String":"Figure Neural Network Training (24-Jul-2022 21:29:38) 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)

세부 정보

모두 축소

신경망 사용

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

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

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

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

BFGS 준뉴턴 역전파

뉴턴 방법은 빠른 최적화를 달성하기 위한 켤레 기울기법의 대안입니다. 뉴턴 방법의 기본적인 단계는 다음과 같습니다.

xk+1=xkAk1gk

여기서 Ak1은 가중치와 편향의 현재 값에서의 성능 지수로 구성된 헤세 행렬(2계 도함수)입니다. 뉴턴 방법은 켤레 기울기법보다 빠르게 수렴하는 경우가 많습니다. 그러나 피드포워드 신경망의 헤세 행렬을 계산하는 데 사용하기에는 복잡하고 비용이 많이 듭니다. 뉴턴 방법을 기반으로 하나 2계 도함수를 계산할 필요가 없는 알고리즘의 종류가 있습니다. 이를 준뉴턴(또는 시컨트) 방법이라고 합니다. 준뉴턴 방법에서는 알고리즘의 각 반복에서 근사 헤세 행렬을 업데이트합니다. 업데이트는 기울기의 함수로 계산됩니다. 발표된 연구 자료 중에서 가장 성공적인 준뉴턴 방법은 BFGS(Broyden, Fletcher, Goldfarb, and Shanno) 업데이트입니다. 이 알고리즘은 trainbfg 루틴에 구현되어 있습니다.

BFGS 알고리즘에 대한 설명은 [DeSc83]에서 확인할 수 있습니다. 이 알고리즘은 일반적으로 켤레 기울기법보다 비교적 적은 반복 후에 수렴하지만 반복당 더 많은 연산량과 더 많은 저장 공간이 필요합니다. 근사 헤세 행렬을 저장해야 하고, 차원이 n x n(n은 신경망에 있는 가중치와 편향의 개수와 같음)이기 때문입니다. 규모가 큰 신경망에는 Rprop 또는 켤레 기울기 알고리즘 중 하나를 사용하는 것이 나을 수 있습니다. 그러나 규모가 작은 신경망의 경우 trainbfg가 효율적인 훈련 함수가 될 수 있습니다.

알고리즘

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

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

X = X + a*dX;

여기서 dX는 탐색 방향입니다. 파라미터 a는 탐색 방향을 따라 성능이 최소화되도록 선택됩니다. 직선 탐색 함수 searchFcn을 사용하여 극솟점을 찾습니다. 첫 번째 탐색 방향은 성능 기울기의 음수 값입니다. 이후 이어지는 반복에서 탐색 방향은 다음 수식에 따라 계산됩니다.

dX = -H\gX;

여기서 gX는 기울기이고 H는 근사 헤세 행렬입니다. BFGS 준뉴턴 방법에 대한 자세한 내용은 Gill, Murray, Wright의 Practical Optimization(1981)의 119페이지를 참조하십시오.

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

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

  • time의 최대 값이 초과됨.

  • 성능이 goal로 최소화됨.

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

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

참고 문헌

[1] Gill, Murray, & Wright, Practical Optimization, 1981

버전 내역

R2006a 이전에 개발됨