前言
上一期介绍了神经语言模型基础以及词向量表示。在开始介绍其他语言模型前,有必要了解一下它们的基础结构:RNN以及LSTM。
RNN(Recurrent Neural Networks)
网络结构
最简单的循环神经网络就是一个单层隐含层结构的网络;隐含层激活函数为tanh,输出层激活函数为softmax函数。因此和NNLM一样,RNN的输出为预测的概率,范围在0~1之间。
运作方式
RNN每一次运算都会将隐含层的输出储存起来(记为a),并在下一次运算时也作为输入的一部分(与x进行加权)参与计算。在第一个x输入时会首先为a设置一个初始值a0。
通过不断对这个简单的神经网络输入进行训练,每一次的训练又和上一次的运算有关,循环这个过程,因此被称作循环神经网络。
RNN采用基于时间的BPTT算法,该算法与BP算法并无差异,只是在导数中加入了运行的次数考虑。
这里需要注意的是,RNN在每一次运算中会将上一次存储在隐含层中的结果清除掉,存进新的结果。在训练时,RNN本身只是一个简单的单输入网络,只是在不同的时间点下不同的输入进入同一个RNN而已。
由于RNN的上一次输入会影响下一次输出,因此RNN能够更好的参照之前的输入进行学习,这就很适合实现像NLP中需要关联上下文进行学习理解的想法了。
上图是一个举例,通过RNN,虽然输入相同的词(Taipei)