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 для примеров.

Примеры

свернуть все

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

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

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

Ограничения

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

Больше о

свернуть все

Алгоритм Levenberg-Marquardt

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

H = JTJ

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

g = JTe

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

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

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

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

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