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+βkpk1

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

βk=gkTgkgk1Tgk1

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

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

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

Попробуйте демонстрацию Neural Network Design nnd12cg [HDB96] для рисунка эффективности сопряженного алгоритма градиента.

Алгоритмы

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

Backpropagation используется для вычисления производных от 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 Scales (Введение в нелинейную оптимизацию).

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

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

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

  • Эффективность минимизирована до goal.

  • Градиент эффективности падает ниже min_grad.

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

Ссылки

Шкалы, L.E., Введение в нелинейную оптимизацию, Нью-Йорк, Springer-Verlag, 1985

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