Обучите нейронные сети с весами ошибок

В функции эффективности квадратной ошибки по умолчанию (см. Train и применить Многослойные Неглубокие Нейронные Сети) каждая квадратичная невязка вносит одинаковое значение в функцию эффективности следующим образом:

F=mse=1Ni=1N(ei)2=1Ni=1N(tiai)2

Однако тулбокс позволяет вам взвешивать каждую квадратичную невязку индивидуально следующим образом:

F=mse=1Ni=1Nwie(ei)2=1Ni=1Nwie(tiai)2

Объект взвешивания ошибок должен иметь те же размерности, что и целевые данные. Таким образом, ошибки могут быть взвешены в соответствии с временным шагом, номером выборки, номером сигнала или номером элемента. Ниже приведен пример взвешивания ошибок в конце временной последовательности более сильно, чем ошибки в начале временной последовательности. Объект взвешивания ошибок передается как последний аргумент в вызове train.

y = laser_dataset;
y = y(1:600);
ind = 1:600;
ew = 0.99.^(600-ind);
figure
plot(ew)

Figure contains an axes. The axes contains an object of type line.

ew = con2seq(ew);
ftdnn_net = timedelaynet([1:8],10);
ftdnn_net.trainParam.epochs = 1000;
ftdnn_net.divideFcn = '';
[p,Pi,Ai,t,ew1] = preparets(ftdnn_net,y,y,{},ew);
[ftdnn_net1,tr] = train(ftdnn_net,p,t,Pi,Ai,ew1);

Рисунок иллюстрирует взвешивание ошибок для этого примера. В обучающих данных имеется 600 временных шагов, и ошибки взвешиваются экспоненциально, причем последняя квадратичная невязка имеет вес 1, и квадратичная невязка на первом временном шаге имеет взвешивание 0,0024.

Ответ обученной сети показан на следующем рисунке. Если сравнить этот ответ с ответом сети, которая была обучена без экспоненциала взвешивания на квадратичных невязках, как показано Проекта Временных рядов Neural Networks с задержкой по времени, можно увидеть, что ошибки с опозданием в последовательности меньше, чем ошибки ранее в последовательности. Ошибки, которые произошли позже, меньше, потому что они способствовали более взвешенному индексу эффективности, чем более ранние ошибки.