trainlm

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

Описание

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

пример

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

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

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 функция эффективности.

Больше о

свернуть все

Алгоритм Levenberg-Marquardt

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

H = JTJ(1)

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

g = JTe(2)

где 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 с 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 смещения. Каждая переменная настроена согласно 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