В функции эффективности квадратной ошибки по умолчанию (см. Train и применить Многослойные Неглубокие Нейронные Сети) каждая квадратичная невязка вносит одинаковое значение в функцию эффективности следующим образом:
Однако тулбокс позволяет вам взвешивать каждую квадратичную невязку индивидуально следующим образом:
Объект взвешивания ошибок должен иметь те же размерности, что и целевые данные. Таким образом, ошибки могут быть взвешены в соответствии с временным шагом, номером выборки, номером сигнала или номером элемента. Ниже приведен пример взвешивания ошибок в конце временной последовательности более сильно, чем ошибки в начале временной последовательности. Объект взвешивания ошибок передается как последний аргумент в вызове train
.
y = laser_dataset; y = y(1:600); ind = 1:600; ew = 0.99.^(600-ind); figure plot(ew)
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 с задержкой по времени, можно увидеть, что ошибки с опозданием в последовательности меньше, чем ошибки ранее в последовательности. Ошибки, которые произошли позже, меньше, потому что они способствовали более взвешенному индексу эффективности, чем более ранние ошибки.