trainlm

Левенберг-Марквардтская обратная практика

Описание

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

пример

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

trainlm - функция сетевого обучения, которая обновляет значения веса и смещения в соответствии с оптимизацией Левенберга-Марквардта.

trainlm часто является самым быстрым алгоритмом обратного распространения в тулбоксе и настоятельно рекомендуется в качестве алгоритма с первым выбором, хотя и требует большей памяти, чем другие алгоритмы.

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

  • net.trainParam.epochs - Максимальное количество эпох для обучения. Значение по умолчанию является 1000.

  • net.trainParam.goal - Цель эффективности. Значение по умолчанию 0.

  • net.trainParam.max_fail - Максимальные отказы в валидации. Значение по умолчанию 6.

  • net.trainParam.min_grad - Минимальный градиент эффективности. Значение по умолчанию 1e-7.

  • net.trainParam.mu - Начальная mu. Значение по умолчанию является 0,001.

  • net.trainParam.mu_dec - Коэффициент уменьшения для mu. Значение по умолчанию является 0,1.

  • net.trainParam.mu_inc - Коэффициент увеличения для mu. Значение по умолчанию является 10.

  • net.trainParam.mu_max - Максимальное значение для mu. Значение по умолчанию 1e10.

  • net.trainParam.show - Эпохи между отображениями (NaN при отсутствии отображений). Значение по умолчанию является 25.

  • net.trainParam.showCommandLine - Сгенерируйте выход в командной строке. Значение по умолчанию false.

  • net.trainParam.showWindow - Показать обучающий графический интерфейс пользователя. Значение по умолчанию true.

  • net.trainParam.time - Максимальное время обучения в секундах. Значение по умолчанию inf.

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

Примеры

свернуть все

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

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

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

Входные параметры

свернуть все

Входная сеть, заданная как сетевой объект. Чтобы создать сетевой объект, используйте для примера, feedforwardnet или narxnet.

Выходные аргументы

свернуть все

Обученная сеть, возвращается как network объект.

Обучающая запись (epoch и perf), возвращается как структура, поля которой зависят от функции сетевого обучения (net.NET.trainFcn). Он может включать такие поля, как:

  • Обучение, деление данных и эффективность функции и параметры

  • Индексы деления данных для наборов для обучения, валидации и тестирования

  • Маски деления данных для валидации обучения и тестирования наборов

  • Количество эпох (num_epochs) и лучшая эпоха (best_epoch).

  • Список имен состояний обучения (states).

  • Поля для каждого имени состояния, регистрирующие его значение на протяжении всего обучения

  • Выступления лучшей сети (best_perf, best_vperf, best_tperf)

Ограничения

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

Подробнее о

свернуть все

Алгоритм Левенберга-Марквардта

Как и методы квази-Ньютона, алгоритм Левенберга-Марквардта был разработан, чтобы приблизиться к скорости обучения второго порядка без необходимости вычислять матрицу Гессия. Когда функция эффективности имеет форму суммы квадратов (как типично для обучения сетей прямого распространения), то матрица Гессия может быть аппроксимирована как

H = JTJ(1)

и градиент может быть вычислен как

g = JTe(2)

где J - матрица Якобия, которая содержит первые производные сетевых ошибок относительно весов и смещений, и e является вектором сетевых ошибок. Матрица Якобия может быть вычислена через стандартный метод обратного распространения (см. [HaMe94]), который намного менее сложен, чем вычисление матрицы Гессия.

Алгоритм Левенберга-Марквардта использует это приближение к матрице Гессия в следующем обновлении Ньютона:

xk+1=xk[JTJ+μI]1JTe

Когда скалярная µ равна нулю, это просто метод Ньютона, использующий приблизительную матрицу Гессия. Когда µ большая, это становится градиентным спуском с небольшим шагом размером. Метод Ньютона быстрее и точнее около минимума ошибок, поэтому цель состоит в том, чтобы сместиться в сторону метода Ньютона как можно быстрее. Таким образом, µ уменьшается после каждого успешного шага (уменьшение функции эффективности) и увеличивается только тогда, когда предварительный шаг увеличивает функцию эффективности. Таким образом, функция эффективности всегда уменьшается при каждой итерации алгоритма.

Исходное описание алгоритма Левенберга-Марквардта приведено в [Marq63]. Применение Левенберга-Марквардта к обучению нейронной сети описано в [HaMe94] и начиная со стр. 12-19 [HDB96]. Этот алгоритм, по-видимому, является самым быстрым методом для настройки нейронных сетей с feedforward умеренного размера (до нескольких сотен весов). Он также имеет эффективную реализацию в MATLAB® программное обеспечение, поскольку решение матричного уравнения является встроенной функцией, поэтому его атрибуты становятся еще более выраженными в среде MATLAB.

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

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

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

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

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

В любом случае вызов train с полученной сетью обучает сеть с trainlm. См. feedforwardnet и cascadeforwardnet для примеров.

Алгоритмы

trainlm Поддержки обучение с валидацией и тестовыми векторами, если сеть NET.divideFcn свойство устанавливается в функцию деления данных. Векторы валидации используются, чтобы остановить обучение раньше, если эффективность сети на векторах валидации не улучшается или остается прежней для max_fail эпох в строку. Тестовые векторы используются как дополнительная проверка того, что сеть хорошо обобщается, но не оказывают никакого эффекта на обучение.

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

Backpropagation используется для вычисления якобианской jX от эффективности perf относительно переменных веса и смещения X. Каждая переменная корректируется согласно Левенбергу-Марквардту,

jj = jX * jX
je = jX * E
dX = -(jj+I*mu) \ je

где E все ошибки и I - матрица тождеств.

Адаптивное значение mu увеличивается на mu_inc до тех пор, пока вышеуказанное изменение не приведет к уменьшению значения эффективности. Затем изменение вносится в сеть и mu уменьшается на mu_dec.

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

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

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

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

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

  • mu превышает mu_max.

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

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