lstm 挖掘和抽象 输入单元的相关性_深度详解RNN,LSTM,Seq2Seq,Attention机制和Transformer...

ba2c7bb7898a93b562beb271b68b2a87.png

前段时间参加了一些比赛,自己重新整理了NLP的一些基础知识和现在的前沿技术。感觉越复杂的网络虽然效果大概率会越好,但是他的可解释性实在是差。。。

目录:

  • 循环神经网络(RNN)
  • 长短记忆神经网络(LSTM)
  • Seq2Seq模型
  • Attention机制在NLP中的应用
  • Transformer
  • 总结

RNN

我对RNN的理解关键在于循环二字,t时刻的状态依靠t-1时刻的状态,而t-1时刻的状态又依靠t-2时刻的状态,因此t时刻的状态是由该单元前的所有状态所共同决定的。对于RNN整体的结构我们可以抽象成下图1所示:

938914c1e9f2350cb5d9028ebbcfdee6.png

因此他的抽象函数为:

equation?tex=S%28t%29%3Df%28S%28t-1%29%2C%5Ctheta%29+%5C%5C

图中的

equation?tex=S%28t%29状态单元可展开为RNN中的hidden-unit,如下图2:

b8b5ccf23d7968b202d6fd6e4720bb7b.png

那么

equation?tex=S%28t%29的抽象函数可等效于下式:

equation?tex=h%28t%29%3Df%28h%28t-1%29%2Cx%28t%29%2C%5Ctheta%29%29+%5C%5C

在实际应用中RNN中当前的每个hidden-unit由前一个hidden-unit的输出和输入序列label所共同决定,

equation?tex=%5Ctheta为网络中每层所要训练的参数。若把RNN的训练结构完全展开我们可以得到以下这幅图3:

fafbedd0ca8e1244847678bff626ce04.png

图三我们仔细分析,不过就是将一个个图二中的单元连接起来,每个单元又进行自己的输出,与y(Label)共同作用于损失函数上,得出损失值,在训练过程中不断地迫使损失函数朝收敛的方向前进。

以上就是RNN最基本结构的工作方式,设计思想就是认为序列中前面的每一个单元都会对其后面的预测产生影响,因此在生成下一个序列时要把全部的序列都考虑进去,然后不断循环。但是我们可以很容易的看出其问题在于“全部”,在数学层面上思考,由于训练的参数间会存在极大的相关性,因此其反向传播会有梯度消失的可能。而就主观地来说,一个句子里的任意一部分也都不会和这个句子的所有部分有关系,由此就有了LSTM模型。

LSTM

LSTM的出现主要为了解决长序列训练过程中梯度消失和爆炸的问题,LSTM提出了门的概念,其定义了三种门结构:

equation?tex=f:遗忘门(forget gate),把
equation?tex=c%5E%28t-1%29相对应的不重要的信息删去;
equation?tex=i:选择门(imformation gate),选择有用的信息;
equation?tex=o:输出门(output gate),决定哪些能作为当前状态输出的。

首先还是从其模型的结构进行解释,从宏观上来看,LSTM在RNN的hidden-unit中(

equation?tex=x%28t%29
equation?tex=h%28t%29之间)加入了一个cell单元A,我看到很多其他解释都没有提到这一点,而只是单纯把图4搬出来:

b17e1c5fa044d9024d70c0991318f04a.png

其主要目的在于使网络具有对序列信息提取的随机性和选择性,有效降低训练参数间的相关性。在数学层面上,每个cell都是三输入三输出单元,其结构图5会更清晰地展现:

8bb115f57b70bab816f42aae9dc24797.png

其中三个门控都有自己的控制函数和训练参数:

equation?tex=z%5Ef%3D%5Csigma%28w%5Ef%5Cbegin%7Bbmatrix%7Dh%5E%7B%28t-1%29%7D%5C%5Cx%5Et%5Cend%7Bbmatrix%7D%29%5C%5C
equation?tex=z%5Ei%3D%5Csigma%28w%5Ei%5Cbegin%7Bbmatrix%7Dh%5E%7B%28t-1%29%7D%5C%5Cx%5Et%5Cend%7Bbmatrix%7D%29%5C%5C
equation?tex=z%5Eo%3D%5Csigma%28w%5Eo%5Cbegin%7Bbmatrix%7Dh%5E%7B%28t-1%29%7D%5C%5Cx%5Et%5Cend%7Bbmatrix%7D%29%5C%5C通过不断地训练会对
equation?tex=w参数进行修正以达到最好的拟合效果,
equation?tex=y%5Et为每个单元的输出,结合公式和图,LSTM的输入输出关系就一目了然了。

但是LSTM或是RNN进行序列分析都是基于某段序列之前的信息来对当前序列进行推断,而正常来说我们理解序列一般是根据全局的信息来进行判断得出的,由此下文会提到如何解决这种问题的普适方法,Attention机制。

Seq2Seq

在谈论Attention机制之前,我们先来了解以下encoder-decoder结构。

Seq2Seq其实就是非常典型的encoder-decoder结构,其基本思想就是通过两个RNN网络,一个作为encoder,另一个作为decoder。上面指的RNN结构其实是一种广义上的RNN结构,包括其各种各样的变体。encoder通过把输入序列转换成指定长的向量,decoder通过把encoder输出的向量映射成想要转换的目标序列。下面是Seq2Seq的两种结构:

00c8f84c699c58482adbb28ff2a27dd4.png
语义向量只作初始化参数参与运算

95dec83900cc6e853af4b68e373eb99c.png
语义向量参与解码的每一个过程

Seq2Seq由于是基于RNN做序列特征提取的,因此RNN对长序列处理效果不佳的缺陷也带到了该模型中去。接下来将会开始介绍Attention机制如何解决这个问题。

Attention机制在NLP中的应用

这里主要介绍Attention机制在NLP中的应用,关于CV上的介绍我会再另外开一篇文章。

在读完谷歌那篇论文《Attention Is All You Need》后,我认为Attention机制实际上是一种相当普适的方法,它能够直接嵌入原网络中加强对中心特征的选择。Attention机制其实也是一种Seq2Seq的方式,attention模型最大的区别就在于它不在要求编码器将所有输入信息都编码进一个固定长度的向量之中,在encoder和decoder中均有不同的地方。

  1. 在encoder中的hidden-state会堆叠起来,一起传给decoder。

a1b073a2819d8d11019dec57937f3902.png
  1. decoder中每个节点通过对每个hidden state进行选择计算hidden state中对当前节点的关联程度。

1f066679204f51ac3bdabf83d68a71dc.png

主要的工作原理大概就是这样,具体计算在下文的Transformer中有详细介绍。总结一下:Attention机制最重要的是对所有输入都会进行选择性采纳,类似于CV中的pooling,或者LSTM中的gate作用,但不同的是他是动态选择的概念。

Transformer

Transformer其实也是一个encoder-decoder模型,但是它是完全基于Attention机制的。首先我们先看模型图:

0988ce7c74442687f51f5fe7c705f2ee.png

模型左边是encoder,右边是decoder,在input的一开始先把离散的序列通过Embedding全部联系起来。图中的Q(query),K(key)和V(Value)都分别由input序列于权重矩阵相乘获得,三者的值均不相同,但维度是一致的。由于要计算注意力得分因此图中的K,V和Q的顺序是固定的。经过词嵌入处理的KVQ会进入到Multi-Head Attention中:

6baf1a911f487249541b2d6f31992696.png

具体的工作方式我在图中标注的很清楚了,值得一提的是为了避免

equation?tex=QK%5ET的维度过大,使softmax梯度值过小,造成反向传播难以进行,因此选择使用
equation?tex=%5Csqrt%7Bd_k%7D进行缩放处理。

Transformer中涉及到两种mask,在上两图中我并未编注出来。

equation?tex=%5Cbegin%7Bcases%7D+padding%5C+%5C+mask+%5C%5C%5C%5C+sequence%5C+%5C+mask+%5Cend%7Bcases%7D%5C%5C

padding mask类似于CNN中的padding修改输入图片尺寸的方法,为了使序列对齐,较短的序列会使用负无穷来进行补齐,同时Attention并不会关注到补齐位置,这种padding方法用在Scaled Dot-Product Attention中。

sequence mask用在decoder的self-attention部分,主要为了加入时序的信息,让注意力关注在

equation?tex=t时前的输出。

总结

总结一下,整个NLP学下来思路其实还是很清晰的,但是其数学方面上的解释却越来越模糊,以上都是在我在学习比赛过程中的一些收获,如果有观点不同的地方欢迎讨论。接下来会补上有关Attention机制CV上的应用和BERT的介绍。

Vaswani, Ashish, et al. "Attention is all you need." Advances in neural information processing systems. 2017.
Seq2Seq模型概述​www.jianshu.com
de0625898b60b2480aaf4eb51a447fb6.png

版权声明:本文为weixin_31960565原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。