20210915_NLP之transformer_attention和transformer

一、attention和transformer

在这里插入图片描述


来源

Datewhle29期__NLP之transformer :

  • erenup(多多笔记),北京大学,负责人
  • 张帆,Datawhale,天津大学,篇章4
  • 张贤,哈尔滨工业大学,篇章2
  • 李泺秋,浙江大学,篇章3
  • 蔡杰,北京大学,篇章4
  • hlzhang,麦吉尔大学,篇章4
  • 台运鹏 篇章2
  • 张红旭 篇章2

学习资料地址:
https://datawhalechina.github.io/learn-nlp-with-transformers/#/
github地址:
https://github.com/datawhalechina/learn-nlp-with-transformers

1.1 图解attention

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

1.1.1 seq2seq框架

  • 含义: 输入一个序列输出另一个序列
  • 经典例子:机器翻译任务,文本摘要任务
    请添加图片描述

1.1.2 seq2seq细节

  • seq2seq模型编码器(Encoder)解码器(Decoder) 组成。绿色的编码器会处理输入序列中的每个元素并获得输入信息,这些信息会被转换成为一个黄色的向量(称为context向量)。当我们处理完整个输入序列后,编码器把 context向量 发送给紫色的解码器,解码器通过context向量中的信息,逐个元素输出新的序列。

请添加图片描述

  • context向量

请添加图片描述

context向量对应上图中间浮点数向量。在下文中,我们会可视化这些数字向量,使用更明亮的色彩来表示更高的值,如上图右边所示


  • RNN模型处理输入序列方式 :

  • 假设序列输入是一个句子,这个句子可以由n个词表示: s e n t e n c e = { w 1 , w 2 , . . . , w n } sentence=\{w_1,w_2,...,w_n\} sentence={w1,w2,...,wn}

  • RNN首先将句子中的每一个词映射成为一个向量得到一个向量序列: X = { x 1 , x 2 , . . . , x n } X = \{x_1, x_2,...,x_n\} X={x1,x2,...,xn},每个单词映射得到的向量通常又叫做:word embedding。

  • 然后在处理第 t ∈ [ 1 , n ] t \in [1,n] t[1,n]个时间步的序列输入 x t x_t xt时,RNN网络的输入和输出可以表示为: h t = R N N ( x t , h t − 1 ) h_{t} = RNN(x_t, h_{t-1}) ht=RNN(xt,ht1)
    输入:RNN在时间步t的输入之一为单词 w t w_t wt经过映射得到的向量 x t x_t xt
    输入:RNN另一个输入为上一个时间步t-1得到的hidden state向量 h t − 1 h_{t-1} ht1,同样是一个向量。
    输出:RNN在时间步t的输出为 h t h_t ht hidden state向量。

图例

请添加图片描述

即 t=2时 利用1个时间步得到 hidden state#0(隐藏层状态)和第2个时间步的输入向量input#1,来得到新的输出hidden state#1


  • 以此类推, n个时间后, 解码器根据 hidden state#n(context向量) 输出

请添加图片描述

1.1.3 attention

  • 以上两个问题:
    1. 单个向量很难包含所有文本序列的信息
    1. RNN递归地编码文本序列使得模型在处理长文本时面临非常大的挑战

引入attention: 使得seq2seq模型可以有区分度、有重点地关注输入序列。

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

  • A. 首先,编码器会把更多的数据传递给解码器。编码器把所有时间步的 hidden state(隐藏层状态)传递给解码器,而不是只传递最后一个 hidden state(隐藏层状态),如下面的动态图所示:

请添加图片描述

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

  • 由于编码器中每个 hidden state(隐藏层状态)都对应到输入句子中一个单词,那么解码器要查看所有接收到的编码器的 hidden state(隐藏层状态)。
    给每个 hidden state(隐藏层状态)计算出一个分数(我们先忽略这个分数的计算过程)。
    所有hidden state(隐藏层状态)的分数经过softmax进行归一化。
    将每个 hidden state(隐藏层状态)乘以所对应的分数,从而能够让高分对应的 hidden state(隐藏层状态)会被放大,而低分对应的 hidden state(隐藏层状态)会被缩小。
    将所有hidden state根据对应分数进行加权求和,得到对应时间步的context向量。

请添加图片描述
动态图:在第4个时间步,编码器结合attention得到context向量的5个步骤。

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

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

注意力模型的解码器 RNN 的输入包括:一个word embedding 向量,和一个初始化好的解码器 hidden state,图中是hinith_{init}hinit​。
RNN 处理上述的 2 个输入,产生一个输出和一个新的 hidden state,图中为h4。
注意力的步骤:我们使用编码器的所有 hidden state向量和 h4 向量来计算这个时间步的context向量(C4)。
我们把 h4 和 C4 拼接起来,得到一个橙色向量。
我们把这个橙色向量输入一个前馈神经网络(这个网络是和整个模型一起训练的)。
根据前馈神经网络的输出向量得到输出单词:假设输出序列可能的单词有N个,那么这个前馈神经网络的输出向量通常是N维的,每个维度的下标对应一个输出单词,每个维度的数值对应的是该单词的输出概率。
在下一个时间步重复1-6步骤。

请添加图片描述

1.2 图解transformer

1.2.1Transformer整体结构图

请添加图片描述

1.2.2 内部细节

输入处理 (以文本序列为例) → 词的最终向量由词向量位置向量构成

  • 词向量
    在这里插入图片描述

  • 位置向量 :可得到的新向量,可以为模型提供更多有意义的信息,比如词的位置,词之间的距离等。
    在这里插入图片描述

1.2.3 self Attention

  • Self Attention机制是,当前词会直接关注到自己句子中前后相关的所有词语,如下图 it的例子:请添加图片描述

上图所示的it是一个真实的例子,是当Transformer在第5层编码器编码“it”时的状态,可视化之后显示it有一部分注意力集中在了“The animal”上,并且把这两个词的信息融合到了"it"中。

1.3 attention代码

  • 作为新手还在研究中…
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值