RNN - это глубокая нейронная сеть (DNN), где каждый уровень может принимать новые входные данные, но иметь те же параметры. BPT - это модное слово для обратного распространения в такой сети, которое само по себе является модным словом для градиентного спуска.
Скажем , что РНН выходов у т в каждом шаге и
е р г ö г т = ( у т - у т ) 2y^t
errort=(yt−y^t)2
Чтобы узнать вес, нам нужны градиенты, чтобы функция отвечала на вопрос "насколько изменение параметра влияет на функцию потерь?" и переместите параметры в направлении, заданном:
∇errort=−2(yt−y^t)∇y^t
Т.е. у нас есть DNN, где мы получаем отзывы о том, насколько хорош прогноз на каждом уровне. Поскольку изменение параметра будет изменять каждый уровень в DNN (временной шаг), и каждый уровень вносит свой вклад в предстоящие результаты, это необходимо учитывать.
Возьмем простую одноуровневую сеть, чтобы увидеть это полуявным образом:
y^t+1=∂∂ay^t+1=∂∂by^t+1=∂∂cy^t+1=⟺∇y^t+1=f(a+bxt+cy^t)f′(a+bxt+cy^t)⋅c⋅∂∂ay^tf′(a+bxt+cy^t)⋅(xt+c⋅∂∂by^t)f′(a+bxt+cy^t)⋅(y^t+c⋅∂∂cy^t)f′(a+bxt+cy^t)⋅⎛⎝⎜⎡⎣⎢0xty^t⎤⎦⎥+c∇y^t⎞⎠⎟
С скорость обучения шаг один учебный тогда:
[ ~ ~ б ~ с ] ← [ б с ] + δ ( у т - у т ) ∇ у тδ
⎡⎣⎢a~b~c~⎤⎦⎥←⎡⎣⎢abc⎤⎦⎥+δ(yt−y^t)∇y^t
∇y^t+1∇y^tt
error=∑t(yt−y^t)2
Может быть, каждый шаг будет давать приблизительное направление, которого достаточно для агрегирования? Это может объяснить ваши результаты, но мне было бы интересно услышать больше о вашем методе / функции потери! Также будет интересно сравнение с оконным ANN с двумя временными шагами.
edit4: После прочтения комментариев кажется, что ваша архитектура не RNN.
ht
Ваша модель: без состояния - скрытое состояние перестраивается на каждом шаге.
Edit2: добавлено больше ссылок на DNN. Edit3: исправлен шаг градации и некоторые нотации edit5: исправлена интерпретация вашей модели после вашего ответа / уточнения.