exponenta event banner

traincgf

Сопряжение обратного распространения градиента с обновлениями Флетчера-Ривза

Синтаксис

net.trainFcn = 'traincgf'
[net,tr] = train(net,...)

Описание

traincgf - сетевая обучающая функция, которая обновляет значения веса и смещения согласно сопряженному градиентному обратному распространению с обновлениями Флетчера-Ривза.

net.trainFcn = 'traincgf' устанавливает сеть trainFcn собственность.

[net,tr] = train(net,...) обучает сеть с помощью traincgf.

Обучение происходит в соответствии с traincgf параметры обучения, показанные здесь с их значениями по умолчанию:

net.trainParam.epochs1000

Максимальное количество периодов для обучения

net.trainParam.show25

Периоды между дисплеями (NaN для без дисплеев)

net.trainParam.showCommandLinefalse

Создание выходных данных командной строки

net.trainParam.showWindowtrue

Показать графический интерфейс пользователя для обучения

net.trainParam.goal0

Цель производительности

net.trainParam.timeinf

Максимальное время обучения в секундах

net.trainParam.min_grad1e-10

Минимальный градиент производительности

net.trainParam.max_fail6

Максимальное количество сбоев проверки

net.trainParam.searchFcn'srchcha'

Имя подпрограммы поиска строк для использования

Параметры, относящиеся к методам поиска строк (не все используются для всех методов):

net.trainParam.scal_tol20

Разделить на delta для определения допуска для линейного поиска.

net.trainParam.alpha0.001

Масштабный коэффициент, определяющий достаточное снижение perf

net.trainParam.beta0.1

Масштабный коэффициент, определяющий достаточно большой размер шага

net.trainParam.delta0.01

Начальный размер шага в шаге определения местоположения интервала

net.trainParam.gama0.1

Параметр, позволяющий избежать небольшого снижения производительности, обычно устанавливается на 0.1 (см. srch_cha)

net.trainParam.low_lim0.1

Нижний предел изменения размера шага

net.trainParam.up_lim 0.5

Верхний предел изменения размера шага

net.trainParam.maxstep100

Максимальная длина шага

net.trainParam.minstep1.0e-6

Минимальная длина шага

net.trainParam.bmax26

Максимальный размер шага

Использование в сети

Можно создать стандартную сеть, использующую traincgf с feedforwardnet или cascadeforwardnet.

Подготовка пользовательской сети для обучения traincgf,

  1. Набор net.trainFcn кому 'traincgf'. Эти наборы net.trainParam кому traincgfПараметры по умолчанию.

  2. Набор net.trainParam свойств к требуемым значениям.

В любом случае вызов train с результирующей сетью направляет сеть с traincgf.

Примеры

свернуть все

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

Здесь нейронную сеть обучают предсказывать процентное содержание жира в организме.

[x, t] = bodyfat_dataset;
net = feedforwardnet(10, 'traincgf');
net = train(net, x, t);
y = net(x);

Подробнее

свернуть все

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

Все алгоритмы сопряженного градиента начинаются с поиска в самом крутом направлении спуска (отрицательном от градиента) на первой итерации.

p0 =−g0

Затем выполняется поиск линии, чтобы определить оптимальное расстояние для перемещения вдоль текущего направления поиска:

xk + 1 = xkαkpk

Затем определяют следующее направление поиска так, чтобы оно было сопряжено с предыдущими направлениями поиска. Общая процедура определения нового направления поиска состоит в объединении нового наиболее крутого направления спуска с предыдущим направлением поиска:

pk = gk + βkpk − 1

Различные варианты алгоритма сопряженного градиента отличаются тем, каким образом вычисляется константа βk. Для обновления Флетчер-Ривз процедура

βk = gkTgkgk 1Tgk − 1

Это отношение нормы в квадрате текущего градиента к норме в квадрате предыдущего градиента.

Описание алгоритма сопряженного градиента Флетчера-Ривза см. в разделах [FlRe64] или [HDB96].

Алгоритмы сопряженного градиента обычно намного быстрее, чем обратное распространение переменной скорости обучения, и иногда быстрее, чем trainrp, хотя результаты варьируются от одной проблемы к другой. Алгоритмы сопряженного градиента требуют лишь немного большего объема памяти, чем более простые алгоритмы. Поэтому эти алгоритмы хороши для сетей с большим количеством весов.

Попробуйте демонстрацию дизайна нейронной сети nnd12cg [HDB96] для иллюстрации производительности алгоритма сопряженного градиента.

Алгоритмы

traincgf может обучать любую сеть, если ее функции веса, чистого ввода и переноса имеют производные функции.

Обратное распространение используется для расчета производных производительности perf в отношении переменных веса и смещения X. Каждая переменная корректируется в соответствии со следующим:

X = X + a*dX;

где dX - направление поиска. Параметр a выбирается для минимизации производительности вдоль направления поиска. Функция поиска строк searchFcn используется для определения местоположения минимальной точки. Первое направление поиска - это негатив градиента производительности. В последующих итерациях направление поиска вычисляется из нового градиента и предыдущего направления поиска в соответствии с формулой

dX = -gX + dX_old*Z;

где gX - градиент. Параметр Z может быть вычислено несколькими различными способами. Для вариации Флетчера-Ривза сопряженного градиента вычисляется в соответствии с

Z = normnew_sqr/norm_sqr;

где norm_sqr - нормальный квадрат предыдущего градиента и normnew_sqr - нормальный квадрат текущего градиента. Более подробное описание алгоритма см. на стр. 78 раздела Шкалы (Введение в нелинейную оптимизацию).

Обучение прекращается при возникновении любого из следующих условий:

  • Максимальное количество epochs (повторы) достигается.

  • Максимальная сумма time превышено.

  • Производительность минимизирована для goal.

  • Градиент производительности падает ниже min_grad.

  • Производительность проверки возросла более чем max_fail раз с момента последнего уменьшения (при использовании проверки).

Ссылки

Весы, Л.Е., Введение в нелинейную оптимизацию, Нью-Йорк, Спрингер-Верлаг, 1985

Представлен до R2006a