Привет всем, я пытался заставить ANN, которую я закодировал, работать с алгоритмом обратного распространения. Я прочитал несколько статей о них, но заметил несколько несоответствий.
Вот, кажется, суперобщий формат алгоритма:
- Введите данные
- Получить вывод
- Вычислить ошибку
- Рассчитать изменение веса
- Повторяем шаги 3 и 4, пока не достигнем входного уровня
Но вот проблема: веса должны быть обновлены в какой-то момент, очевидно. Однако, поскольку мы распространяемся обратно, нам нужно использовать веса предыдущих слоев (я имею в виду тех, которые ближе к выходному слою) при вычислении ошибки для слоев, расположенных ближе к входному слою. Но мы уже рассчитали изменения веса для слоев ближе к выходному слою! Итак, когда мы используем эти веса для расчета ошибки для слоев, расположенных ближе к входным данным, используем ли мы их старые значения или их «обновленные значения»?
Другими словами, если бы мы поместили шаг обновления весов в мой суперобщий алгоритм, это было бы:
(обновление весов сразу)
- Введите данные
- Получить вывод
- Вычислить ошибку
- Рассчитать изменение веса
- Обновите эти веса
- Повторяем шаги 3,4,5, пока не достигнем уровня ввода
OR
(Используя «старые» значения весов)
- Введите данные
- Получить вывод
- Вычислить ошибку
- Рассчитать изменение веса
- Сохраните эти изменения в матрице, но пока не меняйте эти веса.
- Повторяем шаги 3,4,5, пока не достигнем уровня ввода
- Обновите веса сразу, используя наши сохраненные значения.
В этой статье, которую я прочитал, как в аннотации примеры (те, которые основаны на рисунках 3.3 и 3.4), говорят использовать старые значения, а не сразу обновлять значения. Однако в своем «рабочем примере 3.1» они используют новые значения (хотя они говорят, что используют старые значения) для вычисления ошибки скрытого слоя.
Кроме того, в моей книге «Введение в машинное обучение» Этема Алпайдина, хотя есть много абстрактных вещей, которые я еще не понимаю, он говорит: «Обратите внимание, что изменение веса первого слоя delta-w_hj использует вес второго слоя v_h. Следовательно, мы должны вычислить изменения в обоих слоях и обновить веса первого слоя, используя старое значение весов второго слоя, а затем обновить второй слой веса».
Честно говоря, действительно кажется, что они просто ошиблись и все веса обновляются одновременно в конце, но я хочу быть уверен. Моя ANN дает мне странные результаты, и я хочу быть уверен, что причина не в этом.
Кто-нибудь знает?
Спасибо!