自然语言处理之Transformer

  1. 自然语言处理之文本处理步骤
  2. 自然语言处理之特征提取和嵌入
  3. 深度学习之注意力机制attention

这篇文章是自然语言处理的第四篇,上篇讲到attention机制,这篇文章主要介绍一下attention的极致应用。全文都是我自己理解,有兴趣的可以看看这篇文章:The Illustrated Transformer,真的写的太好了。这位博主还是Udacity上的老师,我在上自然语言处理的时候讲师就是他,当时还吐槽他的说话语气很乖,没想到能够看到他写的这么好的文章,真的不能以貌取人呀。。

在Transformer之前,attention机制主要是建立在rnn的基础上,每次我们使用attention都是用decoder中的hidden state 和encoder中所有的hidden state经过得分函数的处理(具体处理可以看深度学习之注意力机制attention,里面有深入讲解)得到加权矩阵之后进行合成,再和decoder中的hidden state进行相关处理得到我们最后的输出,这样就会产生一个问题:我们的decoder都是建立在rnn的基础之上的,而rnn是需要串行来处理的,这样的速度是很慢的,Transformer的最大创新点在于摈弃了rnn的架构,直接采用attention机制,这样在计算的时候可以采用并行的来处理,精确度也提高了。

Encoder

muti-head attention

Transformer的主要架构也是采用了encoder和decoder,不过它的encoder里面没有cnn或者rnn,只包含一个muti-head attention和Feed Forword nn,其中每个muti-head attention 都由n个self-attention组成,self-attention中存在三个权重矩阵WQ,WK,WV, 单词经过embedding之后分别与WQ,WK,WV三个权重矩阵做矩阵想乘得到Q,K,V三个矩阵,将Q,K点乘得到权重矩阵,之后经过softmax的变换得到比例,再和V矩阵相乘得到最终的输入矩阵Z,在muti-head attention中有n个self-attention就会得到n个z矩阵,将他们拼接起来之后和另外一个w0矩阵相乘得到muti-head attention的结果。

Feed forward nn

和普通的nn网络没有什么区别,只不过在Feed forward和muti-head之间加了add-norm层,另外也使用了残差网络。

同时为了能够像rnn一样知道每个向量的顺序,在单词做Embedding之后加上了position向量,用来记录位置。

扫描二维码关注公众号,回复: 5980511 查看本文章

Decoder

decoder相比encoder多了一个encoder-decoder attention, 编码器开始处理输入序列。然后将顶部编码器的输出变换为一组注意力向量K和V。这些将在每个解码器的“encoder-decoder attention” 层使用,这有助于解码器集中注意力在输入序列的合适位置。接下来的步骤会一直重复此过程,直到遇到结束符。下一时间步骤中,每个步骤的输出被发送到其底部解码器中,解码器就像编码器那样弹出他们的解码结果。就像对编码器输入所做的那样,我们对解码器输入中嵌入位置进行编码来指示每个词的位置。

解码器中的self-attention层与编码器中的操作方式略有不同:

  • 在解码器中,仅允许 self-attention层 关注输出序列中较早的位置。这是通过在计算self-attention中softmax步骤前屏蔽未来位置(将它们设置为-inf)实现的。
  • “Encoder-Decoder Attention” 层就像多头注意力(multiheader self-attention)一样工作———而“Encoder-Decoder Attention” 层从其下面的层创建其Queries矩阵,并从编码器堆栈的输出中获取Keys和Values矩阵。

参考文章

The Illustrated Transformer

可视化理解Transformer结构

猜你喜欢

转载自blog.csdn.net/m0_37327467/article/details/89350040