Доброго время суток! Скажите пожалуйста, правильно ли я понял алгоритм backpropagation .
Пример сети.
Входные данные = Sample матрица размером 784x1
Входной слой = Input, матрица размером 10х784
Скрытый слой = Hidden, матрица размером 10х10
Выходной слой = Out, матрица размером 10х10
После прямого распространения получили:
Слой А = Sample * Input
Слой B = А * Hidden
Слой C = B * Out
Сам backpropagation .
1) Что бы обновить вес на последнем слое - Out нам нужно
delta =(Ожидаемый - Результат сети) * на производную функции активации слоя Out
gradient = (матрицу слоя C транспонируем и умножаем на матрицу delta) * скорость обучения
new_weight = слой Out - gradient
2) Что бы обновить на скрытом слое и последующих мне нужно
delta = ошибку предыдущего слоя( delta Out) * на производную функции активации слоя Hidden
gradient = (матрицу слоя B транспонируем и умножаем на матрицу delta) * скорость обучения
new_weight = слой Hidden - gradient
Я реализовал это в коде,но при обновление весов у меня получаются разные матрицы и я не могу произвести последнею операцию. Умножение на функцию активации я специально опустил .
И так ошибка в алгоритме. Есть замечательная книга "Создай свою нейросеть" от автора Тарика Рашида в ней отлично объясняется алгоритм . Не рекламы ради .
За много десятков лет в ИТ впервые вижу человека, который вот так уверенно заявляет "я уверен в своем коде", а в коде при этом несколько сотен строк как минимум. Но если уверен, то конечно - удачи в поисках ошибки.