Recurrent Neural Network
这是看了台大李宏毅教授的关于RNN的课程后的一个学习笔记,写这篇笔记也是为了稍微整理整理思路。其实对LSTM的理解还很表面,目前也是停留在网络结构层面一个粗浅的理解,很多细节方面还未涉及。
RNN-Slot Filling
在将RNN之前,教授拿Slot Filling 作为例子,Slot Filling 中文名称槽填充,任务时读取句子中元素的语义成分,可以看为一个序列标注问题。序列标注问题简单来说就是给定一个一维线性输入序列 ( x 1 , x 2 , … , x n ) (x_1,x_2,\ldots,x_n) (x1,x2,…,xn),给序列中的每一个元素打上标签集合 ( l 1 , l 2 , … , l n ) (l_1,l_2,\ldots,l_n) (l1,l2,…,ln)中的某一个标签。
教授在这边举的例子:自动订票系统
当有人对系统说:I would like to arrive Taipei on Novemeber 2 n d 2_{nd} 2nd
这时候系统应该知道,Taipei 是destination ,Novemeber 2 n d 2_{nd} 2nd是time
destination 和 time 就是两个slot。所以我们就希望我们的machine是这样的
输出的是输入元素在各个slot的概率,概率最大的就是我们最后确定的slot。
但是,也会有人对系统说:I would like to leave Taipei on Novemeber 2 n d 2_{nd} 2nd
这时候 Taipei是departure 而不是destination。我们是根据leave和arrive来分辨的,这时候我们就同样希望我们的machine有记忆功能,能够记住前面的元素是什么来帮助分辨。
这时候,machine就是这样的。
这是教授ppt上的一个示意图。大致意义就是我们在进行第一个元素的标注时,将其隐层输出再作为第二个元素标注时隐层的输入。这样的话,还是刚才那个例子,我们在标注Taipei时是考虑到arrive的。这样的话,作为destination的Taipei和作为departure的Taipei是有可能被分开的。
-
RNN 的一般类型:
-
Elman Network
这里的网络就是之前提到的那种考虑之前元素的隐层输出。
-
Jordan Network
这个网络和Elman网络的区别就是,第二个元素的隐层输入变成了前一个元素输出层的输出,一个比较好的解释就是,Elman Network虽然也提供了前一个元素的相关信息,但隐层的输出相对来说信息不太明确,比较来说,输出层提供的输出信息就确定很多。
-
Bidirectional RNN
双向RNN分别从一个序列的头尾训练数据,这样一来对于序列中的一个元素来说,就即考虑了它前面的元素也考虑了它后面的元素。讲真的只能大概理解,并不能想出来他是怎么训练的。
-
-
Long short-term Memory (LSTM)
-
LSTM单元
上图所示是LSTM的一个记忆单元,我们可以很简单的看出来,相比于前面的简单RNN,LSTM对记忆单元增加了很多控制。一个LSTM记忆单元有4个输入,分别为元素的输入,Input Gate通常控制输入的程度, Forgrt Gate 通常控制对原先记忆信息的记忆程度,Output Gate 通常控制输出的程度。照下面这幅图简单情况下,可以这么理解:
-
LSTM Neural Network
上面只是对LSTM单元的一个简单理解,具体到网络结构去理解LSTM时,可以将我们之前的神经网络中的神经元替换为LSTM的memory cell,区别大都在于一般神经网络的神经元接收的一个输入,而LSTM是4个输入。
下面这幅图则是更加详细的理解, c t − 1 c^{t-1} ct−1是指由各个memory cell组成的一个记忆向量(只是我这么叫而已),对于当前元素的标注,我们首先需要将元素 x t x^t xt经过4种矩阵转换从而成为相应的4中输入( z f , z i , z , z o z^f,z^i,z,z^o zf,zi,z,zo)。之后具体的计算过程与前面所述类似:
c t = c t − 1 × σ ( z f ) + σ ( z i ) × z y t = σ ( c t ) × σ ( z o ) c^t = c^{t-1} \times \sigma(z^f) +\sigma(z^i)\times z \\ y^t = \sigma(c^t) \times \sigma(z^o) ct=ct−1×σ(zf)+σ(zi)×zyt=σ(ct)×σ(zo)
这还不够,hhhh。上面也只是最简单的LSTM,正常使用时形成 z f , z i , z , z o z^f,z^i,z,z^o zf,zi,z,zo还是需要 c t − 1 , h t − 1 c^{t-1},h^{t-1} ct−1,ht−1的参与的。
-