trainlm

Обратная связь Levenberg-Marquardt

Синтаксис

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

Описание

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

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

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

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

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

net.trainParam.epochs1000

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

net.trainParam.goal0

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

net.trainParam.max_fail6

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

net.trainParam.min_grad1e-7

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

net.trainParam.mu0.001

Начальный mu

net.trainParam.mu_dec0.1

mu фактор уменьшения

net.trainParam.mu_inc10

mu фактор увеличения

net.trainParam.mu_max1e10

Максимальный mu

net.trainParam.show25

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

net.trainParam.showCommandLinefalse

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

net.trainParam.showWindowtrue

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

net.trainParam.timeinf

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

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

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

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

Подготовить пользовательскую сеть, которая будет обучена с trainlm,

  1. Установите net.trainFcn к 'trainlm'. Это устанавливает net.trainParam к trainlmпараметры по умолчанию.

  2. Установите net.trainParam свойства к требуемым значениям.

В любом случае, вызывая train с получившейся сетью обучает сеть с trainlm.

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

Примеры

свернуть все

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

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

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

Ограничения

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

Больше о

свернуть все

Алгоритм Levenberg-Marquardt

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

H = JTJ

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

g = JTe

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

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

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

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

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

Попробуйте демонстрацию Проекта Нейронной сети nnd12m [HDB96] для рисунка эффективности пакетного алгоритма Levenberg-Marquardt.

Алгоритмы

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

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

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

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