exponenta event banner

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

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

X определяет два одноэлементных входных шаблона (векторы столбцов). 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 матрица значений min и max для R входных элементов, 2) количество элементов в выходном векторе, 3) вектор задержки ввода и 4) скорость обучения.

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

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

net.trainParam.epochs = 20;

Чтобы показать путь обучения мы будем обучать только одну эпоху за раз и вызывать ПЛОТЕП каждую эпоху (код здесь не показан). На сюжете показана история тренировки. Каждая точка представляет эпоху, и синие линии показывают каждое изменение, внесенное правилом обучения (по умолчанию 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;

Функция поезда выводит обученную сеть и историю выполнения обучения (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