如上图所示,先将输入序列(Input sequence)的第一个节点[11]\begin{bmatrix}
1 \\
1
\end{bmatrix}[11]输入上图所示简易版的记忆网络中,即图中橘色的方框里面。蓝色的方框是记忆单元,里面储存着上一个时间点所计算出来信息,因为此次是第一个时间点所以先给蓝色方框赋初值[00]\begin{bmatrix}
0 \\
0
\end{bmatrix}[00]。又因为假定所有激活函数(activation function)的权重weight都是1,所有的偏置值(bias)都是0,所以经过绿色圆圈的计算得到[22]\begin{bmatrix}
2 \\
2
\end{bmatrix}[22],即1+1+0+0=2,然后要将计算出来的数值储存到蓝色方框里面去,最后经过浅红色圆圈的计算得[44]\begin{bmatrix}
4 \\
4
\end{bmatrix}[44],到此第一个时间节点就计算完毕了。
接下来重复上面的工作:
这样就得到了输出序列(output sequence)。这里要注意输入序列的顺序不能随意调整,因为随意调整的话输出序列就会不同
如上图要从一句话“arrive Taipe on November 2nd”中提取出地点和时间,就可以把这句话放入RNN里面,进行处理,因为RNN经过大量的训练中会从训练数据中总结出“arrive”这个单词后面接一个地点的概率比较大,所以大概率会得出这句话中的地点是“Taipei”,同样的,会根据前三个单词“arrive Taipe on “和"November 2nd”得出一个概率指出"November 2nd”是世间的概率比较大。
上图中绿色方框是隐藏层,可以多几个隐藏层。
Jordan Network
如下图所示Jordan Network与Elman Network的区别在于输入隐藏层的数据不同
双向RNN
参考1.
参考2.
参考3:Pytorch的RNN.