对于神经网络而言,每一个样本的输入与输入直接都是独立的,即预测的结果之间并没有联系
而对于RNN而言:不仅仅是有当前的输入,而且上一层的隐藏层也将进行输入,用于进行结果的预测。因此每一个输入都与之前的输入可以通过隐藏层的输入而产生联系。
这种特性在自然语言的处理中使用较广,即当前输入预测下一个词,与上一层隐藏层的传入有关
RNN的前向传播
比如预测ot结果,即输入xt,预测下一个词的结果即为ot,
st表示的是当前隐藏层的个数,V表示将st进行np.argmax求得预测类别, 使用softmax计算损失值函数
输入的话分为两步:当前预测值得输入和上一个隐藏层的输出,通过st = f(Uxt + Wst - 1) 获得当前隐藏层的结果,进行ot的预测
RNN的反向传播
当预测结果E3进行反向传播时,先经过一个dloss/dprobs, 即损失值对softamx概率的反向求导,然后分为两步:一步是对u的求导,即dout * dx, 另外一步是
ds3/ ds2 进行求导,即dout * W, 在此之前也需要一步relu的求导, 一步一步向后传,直到传到第一个输入层