exponenta event banner

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]. Применение Levenberg-Marquardt для обучения нейронной сети описано в [HaMe94] и начинается на стр. 12-19 [HDB96]. Этот алгоритм, по-видимому, является самым быстрым методом для обучения нейронных сетей среднего размера (до нескольких сотен весов). Он также имеет эффективную реализацию в программном обеспечении MATLAB ®, поскольку решение матричного уравнения является встроенной функцией, поэтому его атрибуты становятся еще более выраженными в среде MATLAB.

Попробуйте демонстрацию дизайна нейронной сети 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 может обучать любую сеть, если ее функции веса, чистого ввода и переноса имеют производные функции.

Обратное распространение используется для вычисления якобиана 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