Я постараюсь устранить некоторую путаницу.Это стандартный развернутый RNN:
И предположим, что o[t+1]
- самый последний шаг.
Когда все выходы фактически используются сетью, ошибка будет распространяться через все вертикальные края: до s[t+1]
с o[t+1]
, до s[t]
с o[t]
, ...,до s[0]
с o[0]
.Кроме того, все ячейки, кроме последней, получают ошибку от следующей ячейки: s[t]
от s[t+1]
, s[t-1]
от s[t]
и т. Д.
Легко заметить, что все ячейки s[0]
... s[t]
получают два сообщения об ошибках, и они суммируются (отсюда сумма).
Теперь ситуация, обсуждаемая Денни Бритцем, заключается в том, что only o[t+1]
isиспользуется сетью, а все остальные выходы игнорируются.Это эквивалентно нулевым градиентам, вытекающим из o[t]
, o[t-1]
, ..., o[0]
.Технически, общий градиент, полученный в s[i]
, по-прежнему является суммой, но это сумма одного элемента (и нуля).По сути, ошибка будет распространяться следующим образом:
o[t+1] -> s[t+1] -> s[t] -> s[t-1] -> ... -> s[0]
Несколько других замечаний:
Тогда есть функция функции потерь E = sum (E (t)) вместо этого значение E = E (T)
Я не затрагивал функцию потерь в этом примере.Потеря находится выше и сравнивает выходные данные с метками и инициирует первое обратное сообщение.В обоих случаях это одно и то же.Разница лишь в том, проходит ли сообщение об ошибке через все o[i]
или только через o[t+1]
.