traingdm

Градиентный спуск с обратным распространением импульса

Синтаксис

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

Описание

traingdm является сетевой функцией обучения, которая обновляет значения веса и смещения в соответствии с градиентным спуском с импульсом.

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

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

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

net.trainParam.epochs1000

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

net.trainParam.goal0

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

net.trainParam.lr0.01

Скорость обучения

net.trainParam.max_fail6

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

net.trainParam.mc0.9

Постоянная импульса

net.trainParam.min_grad1e-5

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

net.trainParam.show25

Эпохи между показом прогресса

net.trainParam.showCommandLinefalse

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

net.trainParam.showWindowtrue

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

net.trainParam.timeinf

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

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

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

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

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

В любом случае вызов train с полученной сетью обучает сеть с traingdm.

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

Подробнее о

свернуть все

Градиентный спуск с моментом

В дополнение к traingd, существуют три других изменений градиентного спуска.

Градиентный спуск с импульсом, реализованный traingdm, позволяет сети реагировать не только на локальный градиент, но и на последние тренды на поверхности ошибки. Действуя как lowpass, импульс позволяет сети игнорировать небольшие функции в поверхности ошибки. Без импульса сеть может застрять в мелком локальном минимуме. С импульсом сеть может скользить по такому минимуму. Обсуждение импульса смотрите на стр. 12-9 документа [HDB96].

Градиентный спуск с импульсом зависит от двух параметров обучения. Значение параметра lr указывает скорость обучения, подобная простому градиентному спуску. Значение параметра mc - постоянная импульса, которая задает величину импульса. mc устанавливается между 0 (без импульса) и значениями, близкими к 1 (много импульса). Константа импульса 1 приводит к сети, которая полностью нечувствительна к локальному градиенту и, следовательно, не учится правильно.

p = [-1 -1 2 2; 0 5 0 5];
t = [-1 -1 1 1];
net = feedforwardnet(3,'traingdm');
net.trainParam.lr = 0.05;
net.trainParam.mc = 0.9;
net = train(net,p,t);
y = net(p)

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

Алгоритмы

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

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

dX = mc*dXprev + lr*(1-mc)*dperf/dX

где dXprev - это предыдущее изменение веса или смещения.

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

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

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

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

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

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

См. также

| | |

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