我已经使用python从零开始实现了基于LSTM的RNN,这似乎是可以学习的,即,我可以看到平均交叉熵随着时间的推移而下降,但是在某些时候它开始上下波动,所以我开始对梯度表示怀疑计算。我遵循Colah’s Blog
中定义的标准LSTMRNN上方的密集层,所以:
最后,损失函数定义为:
要更新密集层的权重,我计算:
在时间步长T = 3时,从密集层发送到RNN的错误信号:
在t = 2时,我们计算梯度并将其与在t = 3时计算出的梯度相加
在每个时间步结束时,我将所有梯度求和
这迭代直到t = 1,并且我以相同的方式计算了每个参数的梯度。最后,我应用梯度下降算法来更新参数。
我们通常将从t = 3向后传递到t = 2,就像使用任何标准前馈网络一样。关于,我仍然不确定其传入梯度应该是什么,因为它不依赖于先前的隐藏状态,还是独立的?
这些步骤正确吗?如果没有,有人可以解释一下是什么问题吗?