trainrp

Упругое обратное распространение

Синтаксис

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

Описание

trainrp является сетевой функцией обучения, которая обновляет значения веса и смещения в соответствии с алгоритмом упругого обратного распространения (Rprop).

net.trainFcn = 'trainrp' устанавливает сетевую trainFcn свойство.

[net,tr] = train(net,...) обучает сеть с trainrp.

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

net.trainParam.epochs1000

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

net.trainParam.show25

Эпохи между отображениями (NaN при отсутствии отображений)

net.trainParam.showCommandLinefalse

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

net.trainParam.showWindowtrue

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

net.trainParam.goal0

Цель эффективности

net.trainParam.timeinf

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

net.trainParam.min_grad1e-5

Минимальный градиент эффективности

net.trainParam.max_fail6

Максимальные отказы валидации

net.trainParam.lr0.01

Скорость обучения

net.trainParam.delt_inc1.2

Шаг к изменению веса

net.trainParam.delt_dec0.5

Уменьшение на изменение веса

net.trainParam.delta00.07

Начальное изменение веса

net.trainParam.deltamax50.0

Максимальное изменение веса

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

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

Чтобы подготовить пользовательскую сеть для обучения с trainrp,

  1. Задайте net.trainFcn на 'trainrp'. Это устанавливает net.trainParam на trainrpпараметры по умолчанию.

  2. Задайте net.trainParam свойства к желаемым значениям.

В любом случае вызов train с полученной сетью обучает сеть с trainrp.

Примеры

Вот задача, состоящая из входов p и целевые t быть решенным сетью.

p = [0 1 2 3 4 5];
t = [0 0 0 1 1 1];

Двухслойная сеть прямого распространения с двумя скрытыми нейронами и эта функция обучения создается.

Создайте и протестируйте сеть.

net = feedforwardnet(2,'trainrp');

Здесь сеть обучена и протестирована.

net.trainParam.epochs = 50;
net.trainParam.show = 10;
net.trainParam.goal = 0.1;
net = train(net,p,t);
a = net(p)

См. help feedforwardnet и help cascadeforwardnet для других примеров.

Подробнее о

свернуть все

Упругое обратное распространение

Многослойные сети обычно используют сигмоидные передаточные функции в скрытых слоях. Эти функции часто называются «квасящими» функциями, потому что они сжимают бесконечную входную область значений в конечную выходную область значений. Сигмоидные функции характеризуются тем, что их склоны должны приближаться к нулю, когда вход становится большим. Это вызывает проблему, когда вы используете наискорейший спуск для обучения многослойной сети с сигмоидными функциями, потому что градиент может иметь очень маленькую величину и, следовательно, вызывать небольшие изменения в весах и смещениях, хотя веса и смещения далеки от их оптимальных значений.

Цель алгоритма настройки с упругим обратным распространением (Rprop) состоит в том, чтобы исключить эти вредные эффекты величин частных производных. Только знак производной может определить направление обновления веса; величина производной не влияет на обновление веса. Размер изменения веса определяется отдельным значением обновления. Значение обновления для каждого веса и смещения увеличивается в несколько раз delt_inc всякий раз, когда производная функции эффективности относительно этого веса имеет один и тот же знак для двух последовательных итераций. Значение обновления уменьшается на множитель delt_dec всякий раз, когда производная относительно этого веса изменяет знак от предыдущей итерации. Если производная равна нулю, значение обновления остается неизменным. Всякий раз, когда веса колеблются, изменение веса уменьшается. Если вес продолжает изменяться в том же направлении в течение нескольких итераций, величина изменения веса увеличивается. Полное описание алгоритма Rprop приведено в [RiBr93].

Следующий код воссоздает предыдущую сеть и обучает ее с помощью алгоритма Rprop. Параметры обучения для trainrp являются epochs, show, goal, time, min_grad, max_fail, delt_inc, delt_dec, delta0, и deltamax. Первые восемь параметров обсуждались ранее. Последние два являются начальным размером шага и максимальным размером шага, соответственно. Эффективность Rprop не очень чувствительна к настройкам параметров обучения. В приведенном ниже примере параметры обучения остаются равными значениям по умолчанию:

p = [-1 -1 2 2;0 5 0 5];
t = [-1 -1 1 1];
net = feedforwardnet(3,'trainrp');
net = train(net,p,t);
y = net(p)

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

Алгоритмы

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

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

dX = deltaX.*sign(gX);

где элементы deltaX все инициализированы в delta0, и gX - градиент. При каждой итерации элементы deltaX изменяются. Если элемент gX изменяет знак с одной итерации на следующий, затем соответствующий элемент deltaX уменьшается на delta_dec. Если элемент gX поддерживает тот же знак от одной итерации к следующей, затем соответствующий элемент deltaX увеличивается на delta_inc. См. Ридмиллер, М. и Х. Браун, «Прямой адаптивный метод для более быстрого обучения с подкреплением: алгоритм RPROP», Труды Международной конференции IEEE по нейронной Networks,1993, стр. 586-591.

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

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

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

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

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

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

Ссылки

Ридмиллер, М. и Х. Браун, «Прямой адаптивный метод для более быстрого обучения с подкреплением: Алгоритм RPROP», Труды Международной конференции IEEE по нейронной Networks,1993, стр. 586-591.

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