有记忆的神经网络就是循环神经网络(Recurrent Neural Network)。
一、循环神经网络(RNN)的引出
1.1 槽填充(Slot Filling)
- 如下图,一个关键元素就是一个槽位(Slot),从用户交互中抽取出的这个槽位对应的取值,就是填充(Filling)
- 下面的槽位(Slot)有两个,分别是目的地(destination)和到达时间(arrival time)
1.2 词的表示方法
1.2.1 1-of-N Encoding(独热编码)
在知道总共有几个词的情况下使用。
- vector中元素数量就等于所有word的数量,对1个单词来说只需要vector中对应元素为1,其余元素都是0即可
- 但这种vector一点都不信息丰富(informative),任意两个vector都是不一样的,无法建立起同类word之间的联系(比如cat和dog都是动物)。
1.2.2 Beyond 1-of-N Encoding
- 为独热编码增加“other”维度
- Word Hashing:词向量的每一个维度表示一个序列,如果词中出现该序列则标记1
1.3 使用前馈神经网络解决槽位填充问题
按照解决多分类问题的思路使用前馈神经网络来解决槽位填充问题,但是使用前馈神经网络有一定的局限性。
- 输入:词向量
- 输出:该词属于某一槽位的概率
1.4 使用前馈神经网络存在的问题
如图,Taipei一词属于哪个槽位还与其上下文有关,因此解决该问题的神经网络需要具有记忆,由此引入了具有记忆的神经网络——循环神经网络(RNN)。
二、RNN工作原理
2.1 RNN直观的架构
循环神经网络相当于在全连接网络的隐藏层加入多个"memory"节点(需要赋初值),隐藏层的输出值被保存在memory中,由此完成了“记忆”的过程。
- 隐藏层的输入除了输入层的输入以外还包括memory中保存的数据;
- 隐藏层的输出除了要传播到输出层以外还会用于更新memory中的值。
其简单架构如下:
2.2 RNN详细的架构
循环网络在每一时间 t t t有相同的网络结构,假设输入 x x x为 n n n维向量,隐含层的神经元个数为 m m m,输出层的神经元个数为 r r r,则 U U U的大小为 n × m n \times m n×m维; W W W是上一次 a t − 1 a_{t-1} at−1的作为这一次输入的权重矩阵,大小为 m × m m \times m m×m维; V V V是连输出层的权重矩阵,大小为 m × r m \times r m×r维。而 x t x_t xt、 a t a_t at和 o t o_t ot都是向量,它们各自表示的含义如下:
- x t x_t xt是时刻 t t t的输入;
- a t a_t at是时刻 t t t的隐层状态。它是网络的记忆。 a t a_t at基于前一时刻的隐层状态和当前时刻的输入进行计算,即