Для всех алгоритмов метода сопряженных градиентов направление поиска периодически переустанавливается на направление антиградиента, или, иными словами, выполняется рестарт. Это происходит в тех случаях, когда возникают проблемы со сходимостью. Например, если количество итераций превысило число настраиваемых параметров сети, либо возникли иные условия, свидетельствующие о плохой сходимости. Одна из таких стратегий рестарта реализована в алгоритме CGB, предложенном Биеле (Beale) и Пауэллом (Powell) [2, 33]. Согласно этой стратегии рестарт выполняется, если текущее и предшествующее направления градиентов слабоортогональны, и это условие определяется следующим образом:
. (3.27)
Рассмотрим работу этого алгоритма на примере нейронной сети (см. рис. 3.8)
net = newff([–1 2; 0 5],[3,1],{'tansig','purelin'},'traincgb');
Функция traincgb характеризуется теми же параметрами, заданными по умолчанию, что и функция traincgf.
Изменим установку следующих параметров:
net.trainParam.epochs = 300;
net.trainParam.show = 5;
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.14
На рис. 3.14 приведен график изменения ошибки обучения в зависимости от числа выполненных циклов обучения.
Рис. 3.14
a = sim(net,p)
a = –1.0015 –1.0038 1.0045 1.0004
Характеристики алгоритма CGB в данном случае превосходят показатели сходимости алгоритма CGP, хотя для другой задачи или других начальных параметров это может оказаться не так. С точки зрения требований к оперативной памяти для алгоритма CGB требуется 6 векторов, в то время как для алгоритма CGP – 4.