自然语言处理中注意力机制---Attention

使用Multi-head Self-Attention进行自动特征学习的CTR模型

https://blog.csdn.net/u012151283/article/details/85310370

 

nlp中的Attention注意力机制+Transformer详解

https://zhuanlan.zhihu.com/p/53682800

 

 

Self-Attention与Transformer

https://zhuanlan.zhihu.com/p/47282410

https://jalammar.github.io/illustrated-transformer/

 

Attention原理和源码解析

https://zhuanlan.zhihu.com/p/43493999

 

nlp中的Attention注意力机制+Transformer详解

https://zhuanlan.zhihu.com/p/53682800

 

 

attention —— transformer ——— BERT/GPT 

 

LSTM attnention 的区别,attention 的优势

参数少

模型复杂度跟CNNRNN相比,复杂度更小,参数也更少。所以对算力的要求也就更小。

速度快

Attention 解决了 RNN 不能并行计算的问题。Attention机制每一步计算不依赖于上一步的计算结果,因此可以和CNN一样并行处理。

效果好

Attention 机制引入之前,有一个问题大家一直很苦恼:长距离的信息会被弱化,就好像记忆能力弱的人,记不住过去的事情是一样的。

Attention 是挑重点,就算文本比较长,也能从中间抓住重点,不丢失重要的信息。下图红色的预期就是被挑出来的重点。

attention 原理

第一步: query key 进行相似度计算,得到权值

第二步:将权值进行归一化,得到直接可用的权重

第三步:将权重和 value 进行加权求和

Attention N 种类型

Attention 有很多种不同的类型:Soft AttentionHard Attention、静态Attention、动态AttentionSelf Attention 等等。下面就跟大家解释一下这些不同的 Attention 都有哪些差别。

1CNN+Attention

2LSTM+Attention

3)纯Attention

Attention is all you need,没有用到CNN/RNN,乍一听也是一股清流了,但是仔细一看,本质上还是一堆向量去计算attention

 

在做attention的时候,我们需要计算query和某个key的分数(相似度),常用方法有:

1)点乘:最简单的方法,

 S(Q,K) = Q转置*K

 

2)矩阵相乘:

S(Q,K) = Q转置*K

 

3cos相似度:

S(Q,K) = Q转置*K/|Q|*|K|

 

4)串联方式:把qk拼接起来,

... 

 

5)用多层感知机也可以:

S(Q,K) = V *tanh(|W*Q+U*K|)

 

 

 

Transformer 原理

Encoder *6

 

位置编码+embedding + multi-attention +残差网络结构(缓解梯度消失问题,梯度不会为0,1+求导后的梯度值) + layer normalization [ 前馈神经网络 + res-NET结构]

 

Batch normalization:效果差(在NLP中不好用)

消除量纲影响,内部协变量偏移

缓解梯度饱和问题

batch size 小的时候效果差,因为样本长度不同,输入是动态,不能有效得到对应的均值和方差(代表的语义信息)

 

 

layer normalization: 

batch 中的样本对,不同的维度进行处理(特征维度的batch normalization),对同一句话,进行均值和方差

例子:

今天天气真不错

我爱我的家乡啊

 

双向双层LSTM (ELMO,深层难训练)

 

Decoder * 6

1)masked multi-attention : 遮盖住后面的信息,因为预测是拿不到未来时刻的信息的

2)后面的结构和encoder类似:multi-attention + encoder 的输出(K,V矩阵),和每一个decoder 的(Q矩阵)交互

3)最终softMax 输出预测的概率

  

Universe Transformer : 深度上用类似RNN的结构,同一个transformer 块被多次使用

informer … 

 

 

Universe Transformer : 深度上用类似RNN的结构,同一个transformer 块被多次使用

 

----------------------------------------------------------------------

 

informer

长序列时间序列预测(Long sequence time-series forecasting,LSTF)要求模型具有较高的预测能力,即能够准确地捕捉输出与输入之间的长期依赖关系。近年来的研究表明,Transformer具有提高预测能力的潜力。

然而,Transformer存在几个严重的问题,使其不能直接适用于LSTF问题,例如二次时间复杂度、高内存使用量和编码器-解码器体系结构固有的局限性。

为了解决这些问题,这篇文章中设计了一种基于Transformer的LSTF模型,即Informer模型,该模型具有三个显著特征: 

1)一种ProbSpare self-attention机制,它可以在时间复杂度和内存使用方面达到 nlogn   。

2)self-attention机制通过将级联层输入减半来突出主导注意,并有效地处理过长的输入序列。

3)生成式解码器虽然概念简单,但对长时间序列序列进行一次正向操作而不是step-by-step的方式进行预测,这大大提高了长序列预测的推理速度。

———

与RNN模型相比,Transformer模型在捕获远程依赖关系方面表现出了优越的性能。自注意机制可以将网络信号的最大传播路径长度减小到理论最短的O(1),避免了递归结构,因此变压器在LSTF问题上表现出很大的潜力。

但另一方面,自我注意机制违背了(b)的要求,因为它的L-二次计算和L长度输入/输出的内存消耗。一些大规模的变压器模型耗费大量资源,在NLP任务上产生了令人印象深刻的结果(Brown et al. 2020),

但数十个gpu的训练和昂贵的部署成本使这些模型在现实世界的LSTF问题上无法负担。自注意机制和变压器框架的有效性成为其应用的瓶颈对LSTF问题

 

这篇文章中,作者针对Transformer模型,提出了下面的问题,即能否改进Transformer模型,使其计算、内存和体系结构更高效,同时保持更高的预测能力?其中Transformer模型主要存在下面三个问题:

1) self-attntion机制的二次计算复杂度。

2) self-attention机制的点积操作使每层的时间复杂度和内存使用量为,对长输入进行堆叠时的内存瓶颈。

3) 预测长期产出的速度骤降。Transformer的动态decoding会导致step-by-step的推理非常慢。

 

为此目的,这篇文章的工作明确地探讨了这三个问题。首先,作者研究了self-attention机制中的稀疏性,改进了网络组件,并进行了广泛的实验。文章的所有contributions总结如下:

1) 提出了Informer,成功地提高了LSTF问题的预测能力,这验证了类Transformer模型在捕获长序列时间序列输出和输入之间的个体长期依赖性方面的潜在价值。

2) 提出了PorbSpare self-attention机制来有效地替代规范的self-attention机制,实现了 n *logn时间复杂度和  n *logn 内存使用。

3) 提出生成式Decoder获取长序列输出,只需向前一步输出,避免了误差的积累。

 

 

总结

这篇论文主要针对长序列时间序列预测问题,提出了一种长序列预测的Informer模型。具体来说,作者设计了一种ProbSparse自注意机制和distilling操作来应对Transformer的二次时间复杂度和二次内存使用的挑战。

同时,精心设计的生成式decoder减轻了传统encoder-decoder体系结构的局限性。

 

原文链接:https://blog.csdn.net/FrankieHello/article/details/113830278

posted @ 2019-10-15 16:02  静悟生慧  阅读(1144)  评论(0编辑  收藏  举报