Вопрос об алгоритме обратного распространения с искусственными нейронными сетями Порядок обновления

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

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

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

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

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

(обновление весов сразу)

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

OR

(Используя «старые» значения весов)

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

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

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

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

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

Спасибо!


person MasterZibZob    schedule 16.05.2011    source источник
comment
Вопрос на стороне: какие странные результаты вы получаете? Использование нейронных сетей требует большого опыта, и очень легко получить странные результаты, если вы не используете их правильно. Простое и понятное введение можно найти в этой рукописи.   -  person LiKao    schedule 16.05.2011


Ответы (4)


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

person MarcoS    schedule 16.05.2011

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

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

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

person LiKao    schedule 16.05.2011
comment
Привет, спасибо за ответ! Да, это то, что я подозревал. На самом деле не имеет смысла использовать обновленные веса слоя n для расчета материала для слоя n - 1. Что касается того, когда вы говорите, что мы обычно распространяем обратно дельты, а не ошибки, под «дельтами» вы подразумеваете дельту весов ( например, насколько веса должны быть изменены) или символ дельта? Потому что, если я не ошибаюсь, дельта символа обычно используется для обозначения ошибки слоя. Спасибо! - person MasterZibZob; 16.05.2011

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

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

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

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

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

person Peer Sommerlund    schedule 20.05.2011

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

person curtissv    schedule 16.06.2014