Слишком большая скорость обучения

Линейный нейрон обучен находить решение минимальной ошибки для простой задачи. Нейрон обучается со скоростью обучения, большей, чем та, которая предложена MAXLINLR.

X задает два шаблона входа с 1 элементом (векторами-столбцами). T задает соответствующие 1-элементные цели ( векторы-столбцы).

X = [+1.0 -1.2];
T = [+0.5 +1.0];

ERRSURF вычисляет ошибки для нейрона с областью значений возможных значений веса и смещения. PLOTES строит график этой поверхности ошибки с контурным графиком под. Лучшими значениями веса и смещения являются те, которые приводят к самой низкой точке на поверхности ошибки.

w_range = -2:0.4:2;
b_range = -2:0.4:2;
ES = errsurf(X,T,w_range,b_range,'purelin');
plotes(w_range,b_range,ES);

Figure contains 2 axes. Axes 1 with title Error Surface contains 2 objects of type surface. Axes 2 with title Error Contour contains 2 objects of type surface, contour.

MAXLINLR находит самую быструю стабильную скорость обучения для настройки линейной сети. NEWLIN создает линейный нейрон. Чтобы увидеть, что происходит, когда скорость обучения слишком велик, увеличьте скорость обучения до 225% от рекомендуемого значения. NEWLIN принимает эти аргументы: 1) Rx2 матрица минимальных и максимальных значений для R входа элементов, 2) Количество элементов в векторе выхода, 3) Вход векторе задержки и 4) скорости обучения.

maxlr = maxlinlr(X,'bias');
net = newlin([-2 2],1,[0],maxlr*2.25);

Переопределите параметры обучения по умолчанию, установив максимальное количество эпох. Это гарантирует прекращение обучения:

net.trainParam.epochs = 20;

Чтобы показать путь обучения, мы будем обучать только одну эпоху за раз и вызывать PLOTEP каждую эпоху (код не показан здесь). График показывает историю обучения. Каждая точка представляет эпоху, и синие линии показывают каждое изменение, сделанное правилом обучения (по умолчанию Widrow-Hoff).

%[net,tr] = train(net,X,T);                                                    
net.trainParam.epochs = 1;
net.trainParam.show = NaN;
h=plotep(net.IW{1},net.b{1},mse(T-net(X)));     
[net,tr] = train(net,X,T);                                                    
r = tr;
epoch = 1;
while epoch < 20
   epoch = epoch+1;
   [net,tr] = train(net,X,T);
   if length(tr.epoch) > 1
      h = plotep(net.IW{1,1},net.b{1},tr.perf(2),h);
      r.epoch=[r.epoch epoch]; 
      r.perf=[r.perf tr.perf(2)];
      r.vperf=[r.vperf NaN];
      r.tperf=[r.tperf NaN];
   else
      break
   end
end

Figure contains 2 axes. Axes 1 with title Error Surface contains 42 objects of type surface, line. Axes 2 with title Error Contour contains 22 objects of type surface, contour, line.

tr=r;

Функция train выводит обученную сеть и историю производительности обучения (tr). Здесь ошибки строятся относительно эпох обучения.

plotperform(tr);

Figure Performance (plotperform) contains an axes. The axes with title Best Training Performance is 0.625 at epoch 0 contains 6 objects of type line. These objects represent Train, Best.

Теперь мы можем использовать SIM, чтобы протестировать ассоциатор с одним из исходных входов, -1.2, и увидеть, вернет ли он цель, 1.0. Результат не очень близок к 0,5! Это связано с тем, что сеть обучалась со слишком большой скоростью обучения.

x = -1.2;
y = net(x)
y = 2.0913