我有一个问题,如何在循环神经网络中应用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
?