Я пишу реализацию RNN с нуля, и, несмотря на чтение нескольких руководств , у меня все еще есть пара вещей, которые мне нужно проверить из этой диаграммы, на которую я ссылаюсь ниже , прежде чем я перейти к кодированию:
- Потеря, также известная как градиент на выходе, рассчитывается так же, как в обычном нейроне с прямой связью net. Другими словами, функция потерь
L = 0.5 * square(target - output)
работает, и мне нужно только целевое значение и выходные данные для его вычисления для каждого временного шага; - Чтобы вычислить градиент grad_w для W (см. Диаграмму), он же вес между состояниями S (t-1) и S (t), мы берем градиент для этого веса для временного шага t, который равен
grad_s(t) * S(t-1)
, и добавляем его ко всем прошлым градиентам. Так, для временного шага t = 0, grad_w(0) = 0
, для временного шага t = 1, grad_w(1) = 0 + grad_s(1) * S(0)
, и для временного шага t = 2, grad_w(2)= grad_w(1) + grad_s(2) * S(1)
и т. Д.
Верны ли эти предположения?