Main Content

방사형 기저 근사

이 예제에서는 NEWRB 함수를 사용하여 데이터 점 집합으로 정의된 함수를 근사하는 방사형 기저 신경망을 만듭니다.

21개의 입력값 P와 그에 해당하는 목표값 T를 정의합니다.

X = -1:.1:1;
T = [-.9602 -.5770 -.0729  .3771  .6405  .6600  .4609 ...
      .1336 -.2013 -.4344 -.5000 -.3930 -.1647  .0988 ...
      .3072  .3960  .3449  .1816 -.0312 -.2189 -.3201];
plot(X,T,'+');
title('Training Vectors');
xlabel('Input Vector P');
ylabel('Target Vector T');

Figure contains an axes object. The axes object with title Training Vectors, xlabel Input Vector P, ylabel Target Vector T contains a line object which displays its values using only markers.

여기서는 21개의 데이터 점을 피팅하는 함수를 찾아보겠습니다. 이렇게 하는 한 가지 방법은 방사형 기저 신경망을 사용하는 것입니다. 방사형 기저 신경망은 2개의 계층으로 이루어진 신경망입니다. 즉, 방사형 기저 뉴런이 있는 은닉 계층과 선형 뉴런이 있는 출력 계층으로 이루어집니다. 다음은 은닉 계층에서 사용하는 방사형 기저 전달 함수입니다.

x = -3:.1:3;
a = radbas(x);
plot(x,a)
title('Radial Basis Transfer Function');
xlabel('Input p');
ylabel('Output a');

Figure contains an axes object. The axes object with title Radial Basis Transfer Function, xlabel Input p, ylabel Output a contains an object of type line.

은닉 계층에 있는 각 뉴런의 가중치와 편향은 방사형 기저 함수의 위치와 너비를 정의합니다. 각 선형 출력 뉴런은 이러한 방사형 기저 함수들의 가중치를 적용한 합을 형성합니다. 각 계층에 대해 올바른 가중치와 편향을 사용하고 은닉 뉴런이 충분히 많은 방사형 기저 신경망은 어떠한 함수도 원하는 정확도로 피팅할 수 있습니다. 이 예제는 3개의 방사형 기저 함수(파란색)를 스케일링하고 합해서 하나의 함수(자홍색)를 생성합니다.

a2 = radbas(x-1.5);
a3 = radbas(x+2);
a4 = a + a2*1 + a3*0.5;
plot(x,a,'b-',x,a2,'b--',x,a3,'b--',x,a4,'m-')
title('Weighted Sum of Radial Basis Transfer Functions');
xlabel('Input p');
ylabel('Output a');

Figure contains an axes object. The axes object with title Weighted Sum of Radial Basis Transfer Functions, xlabel Input p, ylabel Output a contains 4 objects of type line.

함수 NEWRB는 P와 T로 정의된 함수를 근사하는 방사형 기저 신경망을 빠르게 만들어 줍니다. NEWRB는 훈련 세트와 목표값 외에도 기대하는 오차제곱합과 산포 상수라는 2개 인수를 받습니다.

eg = 0.02; % sum-squared error goal
sc = 1;    % spread constant
net = newrb(X,T,eg,sc);
NEWRB, neurons = 0, MSE = 0.176192

신경망의 성능을 보려면 훈련 세트를 다시 플로팅하십시오. 그런 다음 동일한 범위의 입력값에 대해 신경망 응답 변수를 시뮬레이션합니다. 마지막으로 동일한 그래프에 결과를 플로팅합니다.

plot(X,T,'+');
xlabel('Input');

X = -1:.01:1;
Y = net(X);

hold on;
plot(X,Y);
hold off;
legend({'Target','Output'})

Figure contains an axes object. The axes object with xlabel Input contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Target, Output.