在自然语言处理(nlp)中最基本的对一句话的处理是能够理解句子的意思,比如有一句话是:我是学生,我需要写_____。这里需要知道句子前面的意思才能对句子进行填空,在我们理解这一段话的过程中我们一定是基于之前所学的,比如学生的定义,学生一天需要做什么,才能准确对他的行为进行预测,这就是RNN的精华所在,你不可能放弃所有的东西,从某一个方面单独切入,你的所做所想肯定和之前的东西有一定的关联性,也就是说思维具有了连续性。
传统的神经网络中,在处理这一块时,由于不具有连续性,比如在电影中你根据现在的这一刻的电影画面你要推断下一刻会发生什么,这是很难的,因为你不知道之前发生了什么,没有因果关系,所以你无法进行预测,RNN的存在就是为了解决这个问题,它是带有环的网络,使得信息可持续传播称为可能,这很有用,当你在进行语音处理的时候,通过一段话的连续的语义更能理解这一句话的具体意思。
RNN一般的形式,一连串的节点A,接收输入xt,输出ht,这个环使得信息从网络的一个时步传到下一个时步。
上图中太抽象了,但是如果仔细思考一下就会发现,他与普通的神经网络没什么区别,可以认为RNN是一个同一网络的多个副本,每个副本都传递消息给后继者。再详细展开:
展开后的形状类似链状的图形,这种链的性质表明,RNN与序列和列表密切相关,从上图可以看出,RNN是一系列时序图,它们是天生的适合分析带有时序相关的神经网络,每个单元不仅输出 ht,还会输出当前单元的状态Ct到下一个单元中(正是借助这个链,实现了对之前信息的记忆)。
首先考虑一下两个问题:
在第一个问题中,无需其他的上下文就知道,此处应该填入的信息是“天空”二字,对于这种相关信息和需要填入的是相隔很近的情况,RNNs可以借助很近的上文就能得到结果,如下图所示。输出h3和h0隔得很近:
在第二个问题中,在相隔很近的语义中可以得出应该是要填入一门语言,但是在细化一下,应该填入什么语言呢,这就需要在找到句首的那句话才能确定,但是RNN在差距很大的时候,RNN就很难学习到信息,进而给出答案。
Long Short Term Memory网络,它是一个特殊的RNN,能够学习长期依赖问题。
LTSM明确旨在避免长期依赖问题,长时间记住信息是他们的默认行为,所有递归神经网络都具有神经网络重复模块链的形式。在标准RNN中,该重复模块将具有非常简单的结构,例如单个tanh层。
RNN是如何工作的?,如下图所示:它首先由结构重复的单元组成,每个单元仅有一个tanh层,将xt和ht-1联合加权并经过tanh函数激活输出到下一个时序中,并且每个单元的隐藏状态Ct与ht相同。
。tanh(x)函数,sinh(x),cosh(x):
取值范围如下:
LTSM中也有类似的链状结构,但重复模块具有不同结构,如下图所示,每个重复模块有四个,并且他们以一种非常特殊的方式进行交互。
要想理解LTSM,首先要先了解一下几个符号:
在上图中,每一行都携带一个整个向量,从一个节点的输出到其他节点的输入。
对LTSM的理解首先是要关注cell状态,也就是说下图中的水平线,可以看到这个cell的从上一个状态Ct-1经过这个单位运算后输出的状态变为Ct,LTSM就是靠这个链条实现的长期依赖,LTSM不仅需要向这个链条添加之前的信心还要具备处理信息的能力,这个时候就借助了“门”结构来实现这些能力。
“门”是一种选择通过信息的方式,也就是过滤信息。它们由S形神经网络层和逐点乘法运算组成。
第一步,sigmoid函数的的取值范围在0和1之间,当取0时,不让xt任何信息进入这个单元Ct中,如果等于1就允许全部进入。LSTM具有三个这样的门,用于保护和控制电池状态。
经过这一步之后:
带入函数后得到以下公式:
在这个公式中wf和bf分别代表sigmind节点的权重系数和偏置项,这和线性回归y=wx+b是一个样的道理,在之前的语言预测模型中,基于之前的文本预测当前单元t的下一个单词,在t-1中如果保存着当前的话题种类,但是当输入新的话题xt的时候,如果要丢弃旧的话题,经过这一步之后Ct的状态完成了一部分,即丢弃旧话题保存新话题的种类。
第二步,在需要存储的新话题的种类到Ct中需要经过一下两个子步骤:sigmind层决定我们接下来要更新哪些值、tanh决定创建新的向量值
在语言预测模型中,我们将要添加的新话题类别添加到单元状态中,以此来代替将要丢弃的旧话题,下图为数据流动公式:
第三步,联合第二步的1和2,以此来生成一个更新到Ct中,这一步真正完成了 Ct-1 到 Ct 的更新。
具体就是将上一单元的旧状态Ct-1*ft(第一步的分析结果)+新添加的种类it更新到Ct中
第四步,在得到Ct之后,这个时候t单元还没输出任何东西,这个时候只得到一个隐含的需要输出给Ct+1的单元的Ct,因此需要确定最后的输出ht,如下图所示,ht的输出单元是单数还是复数,这样才确定某个词语后面需不需要加s等。
相比于RNN,LTSM中从上一个单元输入个下一个单元的东西有两个,第一个:Ct,本单元的状态,ht本单元的输出,而每个单元需要处理的数据也有两个,上一个单元的状态和上一单元的输出,还有本单元的输入xt。
第一步的作用就是:按照权重选择ht-1和xt需要输入到本单元你的大小
第二步的作用就是:计算第一步输入的数据中那些需要保留,那些需要丢弃
第三步的作用就是:根据第一步和第二部的结果整和输入更新本单元的状态Ct
第四步的作用就是:根据第三步的Ct计算输出ht
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。