NLP之transformer-Task02attention&transformer

本此学习内容由datawhale提供,非常感谢datawhale。学习内容

Attention相关原理

背景:Attention出现的原因是什么?

潜在的答案:基于循环神经网络(RNN)一类的seq2seq模型,在处理长文本时遇到了挑战,而对长文本中不同位置的信息进行attention有助于提升RNN的模型效果。

1. 什么是seq2seq模型?

eq2seq是一种常见的NLP模型结构,全称是:sequence to sequence,翻译为“序列到序列”。顾名思义:从一个文本序列得到一个新的文本序列。

2. 基于RNN的seq2seq模型如何处理文本/长文本序列?

seq2seq基本模型

我们看到seq2seq模型里面是由encoder编码器和decoder解码器组成的。左边绿色部分是输入文本,文本通过seq2seq模型得到了一个新的文本,也就是右边部分。

(1)编码器的工作:

基于RNN的seq2seq模型中的编码器在第1个时间步是如何工作:

编码器的工作

我们只要知道,我们的输入是    hidden state#0和input#1,输出得到了一个hidden state#1。

之后编码器逐步得到hidden state并传输最后一个hidden state给解码器。

(2)编码器的工作:

结合编码器处理输入序列,一起来看下解码器如何一步步得到输出序列的l。与编码器类似,解码器在每个时间步也会得到 hidden state(隐藏层状态),而且也需要把 hidden state(隐藏层状态)从一个时间步传递到下一个时间步。

右边部分为解码器工作

编码器首先按照时间步依次编码每个法语单词,最终将最后一个hidden state也就是context向量传递给解码器,解码器根据context向量逐步解码得到英文输出。

3. seq2seq模型处理文本序列(特别是长文本序列)时会遇到什么问题?

困难:基于RNN的seq2seq模型编码器所有信息都编码到了一个context向量中,便是这类模型的瓶颈。一方面单个向量很难包含所有文本序列的信息,另一方面RNN递归地编码文本序列使得模型在处理长文本时面临非常大的挑战(比如RNN处理到第500个单词的时候,很难再包含1-499个单词中的所有信息了) 。通过attention技术,seq2seq模型极大地提高了机器翻译的质量。归其原因是:attention注意力机制,使得seq2seq模型可以有区分度、有重点地关注输入序列。

4.基于RNN的seq2seq模型如何结合attention来解决问题3并提升模型效果?

注意力模型与经典的seq2seq模型主要有2点不同:

A. 首先,编码器会把更多的数据传递给解码器。编码器把所有时间步的 hidden state(隐藏层状态)传递给解码器,而不是只传递最后一个 hidden state(隐藏层状态),如下面红色圈起来部分,显然经典的模型只是有hidden State3。而注意力模型是有hidden State1,hidden State2,hidden State3。

注意力模型


B. 注意力模型的解码器在产生输出之前,做了一个额外的attention处理。如下图所示,具体为:

1.由于编码器中每个 hidden state(隐藏层状态)都对应到输入句子中一个单词,那么解码器要查看所有接收到的编码器的 hidden state(隐藏层状态)。

2.给每个 hidden state(隐藏层状态)计算出一个分数(我们先忽略这个分数的计算过程)。

3.所有hidden state(隐藏层状态)的分数经过softmax进行归一化。

4.将每个 hidden state(隐藏层状态)乘以所对应的分数,从而能够让高分对应的  hidden state(隐藏层状态)会被放大,而低分对应的  hidden state(隐藏层状态)会被缩小。

5.将所有hidden state根据对应分数进行加权求和,得到对应时间步的context向量

attention处理

所以,attention可以简单理解为:一种有效的加权求和技术,其艺术在于如何获得权重。

--------

现在,让我们把所有内容都融合到下面的图中,来看看结合注意力的seq2seq模型解码器全流程,动态图展示的是第4个时间步:

1.注意力模型的解码器 RNN 的输入包括:一个word embedding 向量,和一个初始化好的解码器 hidden state,图中是hinith_{init}hinit。

2.RNN 处理上述的 2 个输入,产生一个输出和一个新的 hidden state,图中为h4。

3.注意力的步骤:我们使用编码器的所有 hidden state向量和 h4 向量来计算这个时间步的context向量(C4)。

4.我们把 h4 和 C4 拼接起来,得到一个橙色向量。

5.我们把这个橙色向量输入一个前馈神经网络(这个网络是和整个模型一起训练的)。

6根据前馈神经网络的输出向量得到输出单词:假设输出序列可能的单词有N个,那么这个前馈神经网络的输出向量通常是N维的,每个维度的下标对应一个输出单词,每个维度的数值对应的是该单词的输出概率。

在下一个时间步重复1-6步骤。

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

transformer 相关原理

Transformer最开始提出来解决机器翻译任务,因此可以看作是seq2seq模型的一种。

transformer模型结构

由于时间关系,这里先把重要的图放上,下次再补回。因为之前学过,有点印象。

encoder-decoder


6层编码和6层解码器


Self-Attention 的计算过程和逻辑


多头注意力机制


2层Transformer示意图

你可能感兴趣的:(NLP之transformer-Task02attention&transformer)