Оптимизатор ADAM в рекуррентной нейронной сети - PullRequest
0 голосов
/ 28 сентября 2018

У меня вопрос, как применить оптимизатор ADAM в рекуррентных нейронных сетях.

Обычно оптимизатор ADAM выполняется как (k представляет внешние итерации),

V_dw = beta_1 * V_dw + (1-beta_1) * dw
S_dw = beta_2 * S_dw + (1-beta_2) * dw^2
Vcorr_dw = V_dw/(1-beta_1^k)
Scorr_dw = S_dw/(1-beta_2^k)
w := w - alpha* Vcorr_dw / sqrt(Scorr_dw + epsilon)

Это делает изменения в обычных нейронных сетях, потому что у нас нет общих весов в разных слоях.Но в RNN весами являются общие параметры на каждом уровне (или временные шаги).

Вопрос в следующем: V_dw рассчитывается только на каждой внешней итерации (для чего требуется суммирование всех обновлений dw для всех слоев)?или V_dw рассчитывается при каждом обновлении для каждого слоя отдельно?

Это два разных пути.С моей точки зрения, V_dw рассчитывается только после завершения одной итерации, потому что Vcorr_dw относится к шагу итерации.Но я не уверен, прав я или нет.

Если я ошибся, какой способ лучше для веса обновления w?рассчитать V_dw на каждом слое?или вычисление V_dw только на каждой внешней итерации?

...