Вопрос об алгоритме обратного распространения с искусственными нейронными сетями - порядок обновления - PullRequest
12 голосов
/ 16 мая 2011

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

Здесь, кажется, супер общий формат алгоритма:

  1. Введите ввод
  2. Получить вывод
  3. Ошибка вычисления
  4. Расчет изменения веса
  5. Повторять шаги 3 и 4, пока мы не достигнем уровня ввода

Но вотпроблема: веса должны быть обновлены в какой-то момент, очевидно.Тем не менее, поскольку мы возвращаемся к распространению, нам нужно использовать веса предыдущих слоев (я имею в виду те, что ближе к выходному слою) при расчете ошибки для слоев, расположенных ближе к входному слою.Но мы уже рассчитали изменение веса слоев ближе к выходному слою!Итак, когда мы используем эти весовые коэффициенты для вычисления ошибки для слоев, расположенных ближе к входу, используем ли мы их старые значения или их «обновленные значения»?

Другими словами, если бы мы поставили шагобновления весов в моем супер общем алгоритме, это было бы:

(немедленное обновление весов)

  1. Дать ввод
  2. Получить вывод
  3. Ошибка вычисления
  4. Расчет изменения весов
  5. Обновление этих весов
  6. Повторяйте шаги 3,4,5, пока мы не достигнем уровня ввода

ИЛИ

(с использованием "старых" значений весов)

  1. Дать ввод
  2. Получить вывод
  3. Ошибка вычисления
  4. Рассчитать изменение в весах
  5. Сохраните эти изменения в матрице, но пока не изменяйте эти веса
  6. Повторяйте шаги 3, 4, 5, пока мы не достигнем уровня ввода
  7. Обновите все веса сразу, используя наши сохраненные значения

В эта статья, которую я прочитал , в обоих abstrДействующие примеры (основанные на рисунках 3.3 и 3.4) говорят, что они должны использовать старые значения, а не обновлять их немедленно.Тем не менее, в своем «рабочем примере 3.1» они используют новые значения (даже если они говорят, что они используют старые значения) для расчета ошибки скрытого слоя.

Кроме того, в моей книге«Введение в машинное обучение Этема Алпайдина», хотя есть много абстрактных вещей, которые я еще не понимаю, он говорит: «Обратите внимание, что изменение веса первого слоя delta-w_hj использует вес второго слоя v_hПоэтому мы должны рассчитать изменения в обоих слоях и обновить весовые коэффициенты первого уровня, используя значение old весовых коэффициентов второго уровня, а затем обновить весовые коэффициенты второго уровня. "

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

Кто-нибудь знает?

Спасибо!

Ответы [ 4 ]

2 голосов
/ 16 мая 2011

Обычно вы распространяете дельты, а не ошибки. Эти дельты рассчитываются на основе ошибок, но они не означают одно и то же. Получив дельты для слоя n (считая от входа к выходу), вы используете эти дельты и веса для слоя n для вычисления дельт для слоя n-1 (один ближе к входу). Дельты имеют значение только для старого состояния сети, а не для нового состояния, поэтому вы всегда должны использовать старые веса для распространения дельт на вход.

Дельты в некотором смысле означают, сколько каждая часть NN имеет , внесенную ранее в ошибку, а не то, насколько она будет влиять на ошибку на следующем шаге (потому что вы не знаете фактическую ошибку пока).

Как и в большинстве методов машинного обучения, он, вероятно, все еще будет работать, если вы используете обновленные веса, но он может сходиться медленнее.

2 голосов
/ 16 мая 2011

Насколько я знаю, вам следует немедленно обновить веса.Цель обратного распространения состоит в том, чтобы найти веса, которые минимизируют ошибку ANN, и это делается путем градиентного спуска.Я думаю, что описание алгоритма на странице Wikipedia довольно хорошее.Вы также можете дважды проверить его реализацию в joone engine.

1 голос
/ 20 мая 2011

Если вы просто обучите его на одной паре ввода-вывода, моя интуиция будет заключаться в немедленном обновлении весов, потому что градиент не постоянен. Но я не думаю, что ваша книга упоминает только одну пару ввода-вывода. Обычно вы получаете ANN, потому что у вас есть много выборок ввода-вывода из функции, которую вы хотели бы смоделировать с помощью ANN. Таким образом, ваши циклы должны повторяться с шага 1, а не с шага 3.

Если мы помечаем ваши два метода как новые -> онлайн и старые -> офлайн, то у нас есть два алгоритма.

  • Онлайн-алгоритм хорош, когда вы не знаете, сколько образцов отношений ввода-вывода вы увидите, и вы не возражаете против некоторой случайности в том, как обновляются веса.

  • Автономный алгоритм хорош, если вы хотите оптимально разместить определенный набор данных. Чтобы избежать наложения образцов в вашем наборе данных, вы можете разделить его на тренировочный набор и тестовый набор. Вы используете тренировочный набор для обновления весов и тестовый набор, чтобы измерить, насколько хорошо вы подходите. Когда ошибка в тестовом наборе начинает увеличиваться, все готово.

Какой алгоритм лучше всего зависит от цели использования ИНС. Поскольку вы говорите об обучении до тех пор, пока не достигнете «входного уровня», я предполагаю, что вы тренируетесь до тех пор, пока выходные данные не будут в точности соответствовать целевому значению в наборе данных. В этом случае вам нужен автономный алгоритм. Если бы вы строили программу игры в нарды, онлайн-алгоритм был бы лучше, потому что у вас есть неограниченный набор данных.

0 голосов
/ 16 июня 2014

В этой книге автор говорит о том, что весь смысл алгоритма обратного распространения состоит в том, что он позволяет эффективно вычислять все веса за один раз. Другими словами, использование «старых ценностей» эффективно. Использование новых значений более затратно в вычислительном отношении, и поэтому люди используют «старые значения» для обновления весов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...