详细讲解RNN+LSTM+Tree_LSTM(Tree-Long Short Term Memory)基于树状长短期记忆网络
详细讲解RNN+LSTM+Tree-LSTM基于树状长短期记忆网络
详细讲解RNN+LSTM+Tree_LSTM(Tree-Long Short Term Memory)基于树状长短期记忆网络
一、RNN
要讲解Tree_LSTM,这必须得从RNN开始说起,那要讲解循环神经网络RNN,我们得先看看简单神经网络长个什么样子,如下图所示
简单神经网络是这样的,输入层x进入隐藏层s,在经过输出产生最后的结果y。通过调整权重Win和Wout就可以达到学习的效果。
通常情况下,深度神经网络都是水平方向延申的,例如卷积神经网络CNN,隐层数量很多,但是由于没有考虑到单个隐层在时间上、时序上的变化,这在识别不同图片的应用中可能对结果没有影响,但要将其放在识别文字的应用中,没有办法结合上下文语义,就不太适用了。
RNN的定义是:一种以序列数据做为输入来进行建模的深度学习模型。
RNN关注隐层的每个神经元在时间维度上的不断成长和变化,如下图,网络结构没有发生变化,没有添加新的神经元,但是沿着时间轴的重复,建立了时序上的关联,这里的层级拓展并非神经元数量的增加,而是标识隐层在不同时刻的状态,并在隐层之间建立关联。
如果用Ws表示层级间的权重矩阵,那么RNN通常会假定不同的层级(时刻)共享一个Ws,从而达到减少训练参数的效果。
在神经元模型中,隐藏层输出公式的矩阵表达 : S = f ( UX + b )
对于RNN : St = f (UXt + WSt-1 + b ) b是偏置项,多了一项WSt-1,这样建立起隐层在不同时刻的迭代关系。
最终的 Ot = g(VSt) 这里的g()【sigmoid】和f()【tanh】都是激活函数
换而言之,就是让神经网络具有了某种记忆的能力。
当然,你也可能会看到以下这样的RNN图,其实意思都一样,只不过表示方式不同。
那么通过以上描述,应该对RNN稍微有一些了解了,接下来说说RNN的缺陷。
虽然RNN在时序上建立起了联系,有一定的记忆性,当根据研究表明,当词项长度超过500时,RNN的识别效果就会变得很差。
同时,由于RNN在所有隐层共享同一组W权值矩阵,梯度在反向传播过程中,数值不是越来越小(若干零点几的小数相乘最终趋于0),就是越来越大(若干大于1的数相乘最终趋于很大的数),从而导致梯度消失或者梯度爆炸,这是RNN的缺点。
二、LSTM 长短期记忆网络
和RNN相比,LSTM在RNN的基础上添加了一条新的时间链,记录long-term memory,用c表示,同时增加了两条链之间的关联关系。
将原本的平面图形旋转成3D图形,再次观察其特点。
以计算t时刻为例,计算隐层状态St时,除了输入和前一时刻,还要包含当前时刻的Ct。
我们将LSTM模型关联结构放大,将St和Ct的一条线拆分成三条,其中包含了两条更加细致的操作f1和f2。
f1相当于一块橡皮,根据上一时刻的记忆St-1和当前输入Xt,决定要删除和修改哪些记录(公式中,矩阵元素相乘时会抹掉0元素,也就相当于选择性遗忘了部分记忆)被称之为遗忘门。
f2相当于一支铅笔,根据上一时刻的记忆St-1和当前输入Xt,决定添加哪些记录,将上一时刻和此刻发生的进行梳理和归纳被称之为输入门。
那么最终的Ct = f1 * Ct-1 + f2
计算得到的Ct除了会继续向下传递,还会被用来更新当前短期记忆St,最后计算输出yt,输出门,同时保持短期记忆链St和长期记忆链Ct,并且相互更新。
这就是LSTM的本质原理啦!!!
我们在资料中看到的这样的图,其实和上面的描述一样,只不过表示方式不同。
遗忘门
σ其实就是sigmoid函数,将整体映射到0~1之间,这样我们可以规定一个值(例如0.5)大于0.5可以通过,小于不能通过。
输入门
输出门
那么,掌握了遗忘门、输入门和输出门之后,我们对LSTM就基本了解了。
接下来我们聊聊LSTM的缺点
上面说到,RNN在词项超过500时,识别效果会较差,而在RNN基础上改进的LSTM,经过实践证明,当词项长度超过700时,效果也并不理想。
同时无法学习到树状结构层次上的特征。
那么针对LSTM,后来有很多学者提出了改进版本,例如Bi-LSTM(双向长短期记忆网络),那么在一定程序上降低了梯度消失和梯度爆炸的程序,但还是无法解决长序列问题。
如何有效的学习语法语境是否和句子结构的关系??
三、Tree-LSTM 基于树状长短期记忆网络
有学者提出通过构建短语结构语法树来描述如何自顶向下的生成一个句子,反过来,句子也可以用短语结构语法来递归分解。如下图
那么如果我们通过原本的RNN或者LSTM模型仅仅从顺序上去学习信息就无法学习到这种树状结构层次上的特征;另外,对于句子间不仅仅存在层级关系,还存在依存关系。
依存语法理论认为:词与词之间存在主从关系,这是一种二元不等价关系,在句子中,若一个词修饰另外一个词,则称修饰词为从属词(dependent),被修饰词为支配词(head),两者之间的语法关系称为依存关系(dependency relation)。
参考这篇文献 《Improved Semantic Representations From Tree-Structured Long Short-Term Memory》
链式LSTM网络
具有任意分支结点的树形LSTM网络
空白框表示LSTM的一个单元,文本序列为{x1,x2,x3,x4,x5,x6}
x做为输入序列,y是每个x输入后经过LSTM的一个时间片段的预测输出(y4的产生依赖于x4的输入;y5的产生依赖于x5的输入;y6的产生依赖于x6的输入;y2的产生依赖于x2的输入;y3的产生依赖于y4y5y6的输入;y1的产生依赖于y2x1y3的输入;)
那么如何计算呢?
我们先找到y2y4y5y6的产生依赖于x2,x4,x5,x6都已经存在,那么就可以通过x2,x4,x5,x6分别通过自己的隐层,得到对应的y2y4y5y6;类似的y3也能够产生;最终计算出y1。
作者针对上述句子间关系对应的两种类型:层级关系和依存关系,提出了Tree-LSTM对应的两种类型
图中为作者提出的树状长短期记忆网络结构,与标准LSTM单元一样,每个Tree-LSTM单元包含输入和输出门ij和oj,一个记忆单元cj和隐藏状态hj。标准LSTM单元和Tree-LSTM单元之间的区别在于门控向量和记忆单元更新依赖于所有与之相关子单元状态。此外,TreeLSTM单元不是单一的遗忘门,而是为每个子结点k包含一个遗忘门fjk。这允许Tree-LSTM单元有选择地从子结点中获取信息。
(一)Child-Sum Tree-LSTMs (Dependency Tree-LSTMs)
顾名思义,适用于子节点个数不定或者子节点乱序的树结构。该模型是将子节点的隐藏层都求和然后再去更新父节点的隐藏层
对于Child-Sum Tree-LSTMs结构,由于它的单元更新依赖于之前与之相关的所有子单元,所以我们要对子单元隐藏层的输出进行求和,做为当前输入的一部分。同样对于遗忘门的输出值,由于每一个子单元都有一个遗忘门,所以要对子单元的遗忘门输出值进行求和。
(二)N-ary Tree - LSTMs(Constituency Tree-LSTMs)
适用于每个子单元的个数最多是N ,且子单元之间有序。
对于N-ary Tree-LSTMs结构,由于每个子单元的个数最多是N ,所以在计算当前时刻的输出时,需要将N个子单元的输出值进行1-N求和做为当前输出的一部分。
以上就是关于Tree-LSTM的个人见解!!!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)