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