Главная страница
Культура
Искусство
Языки
Языкознание
Вычислительная техника
Информатика
Финансы
Экономика
Биология
Сельское хозяйство
Психология
Ветеринария
Медицина
Юриспруденция
Право
Физика
История
Экология
Промышленность
Энергетика
Этика
Связь
Автоматика
Математика
Электротехника
Философия
Религия
Логика
Химия
Социология
Политология
Геология

Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6. В. Г. Потемкин



Скачать 14.83 Mb.
Название В. Г. Потемкин
Анкор Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Дата 26.04.2017
Размер 14.83 Mb.
Формат файла doc
Имя файла Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Тип Книга
#3790
страница 12 из 50
1   ...   8   9   10   11   12   13   14   15   ...   50

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


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

Если в обучающих алгоритмах градиентного спуска, управление сходимостью осуществляется с помощью параметра скорости настройки, то в алгоритмах метода сопряженных градиентов размер шага корректируется на каждой итерации. Для определения размера шага вдоль сопряженного направления выполняются специальные одномерные процедуры поиска минимума. В состав ППП Neural Network Toolbox включено 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 иллюстрирует работу алгоритмов минимизации на основе метода сопряженных градиентов.

Алгоритм CGP


Другой вариант алгоритма сопряженного градиента – это алгоритм CGP Полака – Рибейры (Polak – Ribiére) [12, 18]. Для этого алгоритма константа метода k выражается следующим образом:

. (3.26)

Таким образом, коэффициент равен скалярному произведению приращения градиента на текущий градиент, деленному на квадрат нормы градиента на предыдущей итерации.

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

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

Функция traincgp характеризуется теми же параметрами, заданными по умолчанию, что и функция 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.13

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

Рис. 3.13

a = sim(net,p)

a = –1.0014 –1.0015 0.9977 0.9983

Характеристика сходимости алгоритма CGP во многом похожа на характеристику алгоритма CGF. На практике трудно предсказать, какой алгоритм лучше применить для решения конкретной задачи. Однако требования по памяти для алгоритма CGP несколько больше, поскольку требуется на каждой итерации 4 вектора, в то время как для алгоритма CGF – только 3.

Алгоритм CGB


Для всех алгоритмов метода сопряженных градиентов направление поиска периодически переустанавливается на направление антиградиента, или, иными словами, выполняется рестарт. Это происходит в тех случаях, когда возникают проблемы со сходимостью. Например, если количество итераций превысило число настраиваемых параметров сети, либо возникли иные условия, свидетельствующие о плохой сходимости. Одна из таких стратегий рестарта реализована в алгоритме 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.

Алгоритм SCG


Все рассмотренные выше алгоритмы, основанные на методе сопряженных градиентов, реализуют на каждой итерации процедуру одномерного поиска. Эта дорогостоящая
в вычислительном отношении процедура требует на каждой итерации несколько раз вычислять реакцию сети. Алгоритм 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.
1   ...   8   9   10   11   12   13   14   15   ...   50
написать администратору сайта