traingda

Градиентное спуск с адаптивной обратным распространением скорости обучения

Синтаксис

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

Описание

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

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

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

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

net.trainParam.epochs1000

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

net.trainParam.goal0

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

net.trainParam.lr0.01

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

net.trainParam.lr_inc1.05

Отношение к увеличению скорости обучения

net.trainParam.lr_dec0.7

Отношение к снижению скорости обучения

net.trainParam.max_fail6

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

net.trainParam.max_perf_inc1.04

Максимальное увеличение эффективности

net.trainParam.min_grad1e-5

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

net.trainParam.show25

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

net.trainParam.showCommandLinefalse

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

net.trainParam.showWindowtrue

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

net.trainParam.timeinf

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

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

Можно создать стандартную сеть, которая использует traingda с feedforwardnet или cascadeforwardnet. Чтобы подготовить пользовательскую сеть для обучения с traingda,

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

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

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

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

Подробнее о

свернуть все

Градиентное спуск с адаптивной регрессией скорости обучения

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

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

Адаптивная скорость обучения требует некоторых изменений в процедуре обучения, используемой traingd. Во-первых, вычисляются исходный выход сети и ошибка. В каждую эпоху новые веса и смещения вычисляются с использованием текущей скорости обучения. Затем вычисляются новые выходы и ошибки.

Как и в случае с импульсом, если новая ошибка превышает старую ошибку больше, чем предопределенное отношение, max_perf_inc (обычно 1.04), новые веса и смещения отбрасываются. В сложение скорости обучения уменьшается (обычно умножением на lr_dec = 0.7). В противном случае сохраняются новые веса и т.д. Если новая ошибка меньше, чем старая, скорость обучения увеличивается (обычно умножением на lr_inc = 1.05).

Эта процедура увеличивает скорость обучения, но только в той степени, в которой сеть может учиться без больших увеличений ошибок. Таким образом, получается почти оптимальная скорость обучения для локальной местности. Когда большая скорость обучения может привести к стабильному обучению, темп обучения увеличивается. Когда скорость обучения слишком высок, чтобы гарантировать уменьшение ошибки, он уменьшается, пока не возобновится стабильное обучение.

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

Обучение Backpropagation с адаптивной скоростью обучения реализовано с функцией traingda, который называется прямо как traingd, за исключением дополнительных параметров обучения max_perf_inc, lr_dec, и lr_inc. Вот как это называется, чтобы обучить предыдущую двухуровневую сеть:

p = [-1 -1 2 2; 0 5 0 5];
t = [-1 -1 1 1];
net = feedforwardnet(3,'traingda');
net.trainParam.lr = 0.05;
net.trainParam.lr_inc = 1.05;
net = train(net,p,t);
y = net(p)

Алгоритмы

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

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

dX = lr*dperf/dX

В каждую эпоху, если эффективность уменьшается к цели, то скорость обучения увеличивается на множитель lr_inc. Если эффективность увеличивается больше, чем коэффициент max_perf_inc, скорость обучения корректируется фактором lr_dec и изменение, которое увеличило эффективность, не производится.

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

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

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

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

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

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

См. также

| | |

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