Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Скачиваний:
871
Добавлен:
07.03.2016
Размер:
15.55 Mб
Скачать

3.3.2. Алгоритмы метода сопряженных градиентов

Основной алгоритм обратного распространения ошибки корректирует настраиваемые параметры в направлении наискорейшего уменьшения функционала ошибки. Но такое направление далеко не всегда является самым благоприятным направлением, чтобы за возможно малое число шагов обеспечить сходимость к минимуму функционала. Существуют направления движения, двигаясь по которым можно определить искомый минимум гораздо быстрее. В частности, это могут быть так называемые сопряженные направления, а соответствующий метод оптимизации – это метод сопряженных градиентов [18].

Если в обучающих алгоритмах градиентного спуска, управление сходимостью осуществляется с помощью параметра скорости настройки, то в алгоритмах метода сопряженных градиентов размер шага корректируется на каждой итерации. Для определения размера шага вдоль сопряженного направления выполняются специальные одномерные процедуры поиска минимума. В состав ППП NeuralNetworkToolboxвключено 5 специализированных М-функций для организации одномерного поиска:scrchbac,scrchbre,srchcha,srchgol,scrchhyb.

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

Все алгоритмы метода сопряженных градиентов на первой итерации начинают поиск в направлении антиградиента

(3.22)

Когда выбрано направление, требуется определить оптимальное расстояние (шаг поиска), на величину которого следует изменить настраиваемые параметры:

(3.23)

Затем определяется следующее направление поиска как линейная комбинация нового направления наискорейшего спуска и вектора движения в сопряженном направлении:

(3.24)

Различные алгоритмы метода сопряженного градиента различаются способом вычисления константы k.

Ниже описаны 4 алгоритма метода сопряженных градиентов.

Алгоритм cgf

Алгоритм CGF, реализующий метод Флетчера – Ривса [12, 18], использует следующее выражение для вычисления константы метода:

. (3.25)

В данном случае константа равна отношению квадрата нормы градиента на текущей к квадрату нормы градиента на предыдущей итерации.

Вновь обратимся к сети, показанной на рис.3.8, но будем использовать функцию обученияtraincgf:

net = newff([–1 2; 0 5],[3,1],{'tansig','purelin'},'traincgf');

Функция traincgf характеризуется следующими параметрами, заданными по умолчанию:

net.trainParam

ans =

epochs: 100

show: 25

goal: 0

time: Inf

min_grad: 1.0000e–006

max_fail: 5

searchFcn: 'srchcha'

scale_tol: 20

alpha: 0.0010

beta: 0.1000

delta: 0.0100

gama: 0.1000

low_lim: 0.1000

up_lim: 0.5000

maxstep: 100

minstep: 1.0000e–006

bmax: 26

Здесь epochs – максимальное количество циклов обучения; show – интервал вывода информации, измеренный в циклах; goal – предельное значение критерия обучения; time – пре­дельное время обучения; min_grad – минимальное значение градиента; max_fail – макси­маль­но допустимый уровень превышения ошибки контрольного подмно­жест­ва по срав­не­нию с обучающим; searchFcn – имя функции одномерного поиска; scale_tol – коэф­фи­ци­ент для вычисления шага tol процедуры одномерного поиска tol = delta/scale_tol; alpha – коэффициент, определяющий порог уменьшения критерия качества; beta – коэффициент, определяющий выбор шага; delta – начальный шаг разбиения интервала; gama – параметр, регулирующий изменение критерия качества; low_lim – нижняя граница изменения шага; up_lim – верхняя граница изменения шага; maxstep – максимальное значение шага; minstep – минимальное значение шага; bmax – максимальное значение шага для процедуры srchhyb.

Установим следующие значения параметров:

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.12

На рис. 3.12 приведен график изменения ошибки обучения в зависимости от числа выполненных циклов обучения.

Рис. 3.12

a = sim(net,p)

a = –1.0015 –0.9978 0.9999 0.9986

Алгоритм Флетчера – Ривса CGFработает намного быстрее, чем градиентный алгоритмCGMс выбором параметра скорости настройки, а иногда и быстрее, чем алгоритмRprop, как в рассматриваемом случае; хотя на практике это зависит от конкретной задачи. Алгоритмы метода сопряженных градиентов требуют не намного больше памяти, чем градиентные алгоритмы, поэтому их можно рекомендовать для обучения нейронных сетей с большим количеством настраиваемых параметров.

Демонстрационная программа nnd12cgиллюстрирует работу алгоритмов минимизации на основе метода сопряженных градиентов.