Все рассмотренные выше алгоритмы, основанные на методе сопряженных градиентов, реализуют на каждой итерации процедуру одномерного поиска. Эта дорогостоящая
в вычислительном отношении процедура требует на каждой итерации несколько раз вычислять реакцию сети. Алгоритм SCG, предложенный Моллером (Moller) [29], позволяет избежать излишних затрат. Этот алгоритм объединяет идеи метода сопряженных градиентов с квазиньютоновыми методами, и в частности использует подход, реализованный в алгоритме LM Левенберга – Марквардта.
Вновь обратимся к сети, показанной на рис. 3.7, но будем использовать функцию
обучения trainrp:
net = newff([–1 2; 0 5],[3,1],{'tansig','purelin'},'trainscg');
Функция trainrp характеризуется следующими параметрами, заданными по умолчанию:
net.trainParam
ans =
epochs: 100
show: 25
goal: 0
time: Inf
min_grad: 1.0000e–006
max_fail: 5
sigma: 5.0000e–005
lambda: 5.0000e–007
Первые 6 параметров рассматривались ранее. Поясним назначение последних двух параметров; параметр sigma управляет весом аппроксимированной матрицы Гессе, параметр lambda позволяет учесть степень неточности аппроксимации.
Изменим установки некоторых параметров:
net.trainParam.epochs = 300;
net.trainParam.show = 10;
net.trainParam.goal = 1e–5;
p = [–1 –1 2 2;0 5 0 5];
t = [–1 –1 1 1];
net = train(net,p,t); % Рис.3.15
На рис. 3.15 приведен график изменения ошибки обучения в зависимости от числа выполненных циклов обучения.
Рис. 3.15
a = sim(net,p)
a = –1.0007 –1.0012 0.9986 1.0018
Алгоритм SCG может потребовать большего числа итераций, чем другие алгоритмы метода сопряженных градиентов, но при этом количество вычислений на каждой итерации существенно сокращено. Требования по памяти для алгоритма SCG примерно такие же, как и для метода CGF.