区块链技术博客
www.b2bchain.cn

详解Transformer

这篇文章主要介绍了详解Transformer的讲解,通过具体代码实例进行20231 讲解,并且分析了详解Transformer的详细步骤与相关技巧,需要的朋友可以参考下https://www.b2bchain.cn/?p=20231

本文实例讲述了2、树莓派设置连接WiFi,开启VNC等等的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7039.html。具体如下:

文章目录

  • 参考文章
  • 前言
    • 采用attention机制的原因
  • Transformer详解
    • 1.1 从整体上来看Transformer
    • 1.2 输入编码
    • 1.3 Self-Attention
    • 1.4 矩阵方式计算Self-Attention
      • Q、K、V的解释
    • 1.5 Multi-Head Attention
    • 1.6 Encoder-Decoder Attention
    • 1.7 损失层
  • 2. 位置编码
  • 3 总结
    • 优点
    • 缺点
  • 附录
    • 李宏毅机器学习self-attention计算过程
    • multi-head attention

参考文章

详解Transformer (Attention Is All You Need)

The Illustrated Transformer

李宏毅机器学习

前言

Transformer中完全抛弃了传统的CNNRNN,整个网络结果完全是由Attention机制组成。
更准确地讲,Transformer由且仅由self-AttentionFeed Forward Neural Netword组成。

一个基于Transformer的可训练的神经网络通过堆叠Transformer的形式进行搭建,作者的实验是通过搭建编码器和解码器各6层,总共12层的Encoder-Decoder,并在机器翻译中取得了BLEU值的新高。

采用attention机制的原因

RNN(或者LSTM、GRU等)的计算限制为是顺序计算,也就是说RNN相关算法只能从左到右依次进行计算或者从右向左进行计算。

这导致的问题

  1. 时刻t的计算依赖t-1时刻的计算结果,这限制了模型的并行处理能力;
  2. 顺序计算的过程中信息会丢失,尽管LSTM等门机制的结构一定程度上缓解了长期依赖的问题,但是对应特别长期的依赖现象,LSTM依旧无能为力

详解Transformer
transformer的提出解决了上述问题,首先其使用了attention机制,将序列中的任意两个位置之间的距离缩小为一个常量;
其次它不是类似RNN的顺序结构,因此具有良好的并行性,符合GPU框架,可用GPU进行加速

详解Transformer

Transformer详解

1.1 从整体上来看Transformer

论文中的验证Transformer的实验室是基于机器翻译的,下面我们就以机器翻译为例子详细剖析Transformer的结构,在机器翻译中,Transformer可概括为下图
详解Transformer
Transformer的本质是一个Encoder-Decoder的结构,上图表示为以下

详解Transformer
论文中设计的编码器是由6个编码block组成,同样解码器是6个解码block组成。
与所有的生成模型相同的是,编码器(Encoder)的输出作为解码器(Decoder)的输入,如下图所示

详解Transformer

分析每个encoder的详细结构:
Transformerencoder中,数据首先会经过self-Attention模块,得到一个加权之后的特征向量 Z Z Z,这个 Z Z Z就是论文公式中的 A t t e n t i o n ( Q , K , V ) Attention(Q,K,V) Attention(Q,K,V):
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V (1) Attention(Q,K,V) = softmax(frac{QK^T}{sqrt{d_k}})Vtag{1} Attention(Q,K,V)=softmax(dk QKT)V(1)

该公式的实际含义将在后面进行解释

得到 Z Z Z之后,它会被送到encoder的下一个模块,即Feed Forward Neural Network
这个全连接层有两层,第一层的**函数是ReLU,第二层是一个线性**函数,表示为:
F N N ( Z ) = m a x ( 0 , Z W 1 + b 1 ) W 2 + b 2 (2) FNN(Z) = max(0,ZW_1+b_1)W_2 +b_2tag{2} FNN(Z)=max(0,ZW1+b1)W2+b2(2)

Encoder的结构图如下所示
详解Transformer
Decoder的结构图如下图所示

其与Encoder的不同之处在于Decoder多了一个Encoder-Decoder Attention,两个Attention分别用于计算输入和输出的权值:

  1. Self-Attention:当前翻译和已经翻译的前文之间的关系
  2. Encoder-Decoder Attention:当前翻译和编码的特征向量之间的关系

详解Transformer

1.2 输入编码

上一节讲述Transformer的主要框架,下面我们将介绍它的输入数据。
如下图所示,首先通过Word2Vec等词嵌入方法将输入语料转化为特征向量,论文中使用的词嵌入的维度为 d m o d e l = 512 d_{model}=512 dmodel=512

详解Transformer

如下图所示这里我们可以看出Transformer的关键,每个位置的xencoder中有着自己的路径。
self-Attention中的这些路径之间存在依赖性,但是Feed Forward layer不需要这些依赖性,因此可以并行处理经过FeedForwardLayer的路径

详解Transformer

如下图所示,经过了第一个encoder得到相应的结果,然后作为下一个Encoder的输入

详解Transformer

1.3 Self-Attention

Self-AttentionTransformer的核心内容,其为输入变量的每个单词学习一个权重,例如下面的示例,找出it所代指的内容

The animal didn't cross the street because it was too tired 

通过加权之后得到类似下图的加权表示

详解Transformer

self-attention中,每个单词有 3 3 3个不同的向量,分别是 Q Q Q(Query向量)、 K K K(Key向量)、 V V V(Value向量),长度均为 64 64 64
它们是通过 3 3 3不同的权值矩阵由嵌入向量 X X X乘以三个不同的权值矩阵 W Q 、 W K 、 W V W^Q、W^K、W^V WQWKWV得到,其中三个矩阵的shape也相同,均为 512 × 64 512 times 64 512×64
详解Transformer
详解Transformer
Query,Key,Value是什么意思?它们在Attention的计算中扮演着什么角色?
Attention的计算方法,过程如下

  1. 将输入单词转为嵌入向量

  2. 根据嵌入向量得到 q 、 k 、 v q、k、v qkv三个向量

  3. 为每个向量计算一个score:score = q ⋅ k =q cdot k =qk;
    详解Transformer

  4. 为了梯度的稳定,Transformer使用了score归一化,即除以 d k sqrt{d_k} dk

  5. score施以softmax**函数
    详解Transformer

  6. softmax点乘Value v v v,得到加权的每个输入向量的评分 v v v

  7. 相加之和得到最终结果 z : z = ∑ v z:z = sum v zz=v
    详解Transformer

1.4 矩阵方式计算Self-Attention

论文中的 Q 、 V 、 K Q、V、K QVK的计算方式

详解Transformer

详解Transformer

Q、K、V的解释

Query,Key,Value的概念取自于信息检索系统,
举个简单的搜索的例子来说。当你在某电商平台搜索某件商品(年轻女士冬季穿的红色薄款羽绒服)时,你在搜索引擎上输入的内容便是Query,然后搜索引擎根据Query为你匹配Key(例如商品的种类,颜色,描述等),然后根据QueryKey的相似度得到匹配的内容(Value)。

self-attention中的 Q , K , V Q,K,V QKV也是起着类似的作用,在矩阵计算中,点积是计算两个矩阵相似度的方法之一,因此式1中使用了 Q K T QK^T QKT 进行相似度的计算。接着便是根据相似度进行输出的匹配,这里使用了加权匹配的方式,而权值就是querykey的相似度。

1.5 Multi-Head Attention

Muiti-Head Attention相当于 h h h个不同的Self-Attention的集成(ensemble),这里以 h = 8 h=8 h=8举例说明

Multi-Head Attention的输出分为三步

  1. 将数据 X X X分别输入到图13所示的 8 8 8个self-attention中,得到8个加权后的特征矩阵 Z i , i ∈ { 1 , 2 , . . . . , 8 } Z_i,i in lbrace 1,2,….,8 rbrace Zi,i{1,2,....,8}
  2. 8 8 8 Z i Z_i Zi按列拼成一个大的特征矩阵
  3. 特征矩阵经过一层全连接后得到输出 Z Z Z

1.6 Encoder-Decoder Attention

在解码器中,Transformer block比编码器多了一个encoder-decoder attention
encoder-decoder attention中, Q Q Q 来之与解码器的上一个输出, K K K V V V则来自于与编码器的输出。其计算方式完全和图10的过程相同。

由于在机器翻译中,解码过程是一个顺序操作的过程,也就是当解码第 k k k 个特征向量时,我们只能看到第 k − 1 k-1 k1及其之前的解码结果,论文中把这种情况下的multi-head attention叫做masked multi-head attention。

1.7 损失层

解码器解码之后,解码的特征向量经过一层**函数为softmax的全连接层得到每个单词概率的输出向量。此时我们便可以通过CTC等损失函数训练模型了。

一个完整可训练的网络结构便是encoder和decoder的堆叠(各N各,N=6),我们从下图看到完整的Transformer的结构
详解Transformer

2. 位置编码

截至目前为止,我们所介绍的Transformer模型并没有捕捉顺序序列的能力,也就是说其并不在意句子的顺序,无论顺序如何产生的结果都会类似。这就相当于Transformer是一个功能更强大的词袋模型而已。

为了解决这个问题,论文中在编码词向量时引入了位置编码(Position Embedding)的特征,具体来说,位置编码会在词向量中加入了单词的位置信息,这样Transformer就能区分不同位置的单词了。

如何编码位置信息,常见模式:a.根据数据学习;b.自己设计编码规则

作者采用第二种方式,这个位置编码是一个长度为 d m o d e l d_{model} dmodel的特征向量,这样便于和词向量进行单位加操作,如图16
详解Transformer
论文给出的编码公式如下:

P E ( p o s , 2 i ) = s i n ( p o s 1000 0 2 i d m o d e l ) PE(pos,2i) = sin(frac{pos}{10000^{frac{2i}{d_{model}}}}) PE(pos,2i)=sin(10000dmodel2ipos)
P E ( p o s , 2 i + 1 ) = c o s ( p o s 1000 0 2 i d m o d e l ) PE(pos,2i+1) = cos(frac{pos}{10000^{frac{2i}{d_{model}}}}) PE(pos,2i+1)=cos(10000dmodel2ipos)

  • pos表示单词的位置
  • i表示单词的维度

Google开源算法中找到get_timing_signal_1d()

作者这么设计的原因是考虑到在NLP任务重,除了单词的绝对位置,单词的相对位置也非常重要。
根据公式 s i n ( α + β ) = s i n α c o s β + c o s α s i n β sin(alpha + beta) = sinalpha cosbeta + cosalpha sinbeta sin(α+β)=sinαcosβ+cosαsinβ 以及 c o s ( α + β ) = c o s α c o s β − s i n α s i n β cos(alpha + beta) = cosalpha cosbeta – sinalpha sin beta cos(α+β)=cosαcosβsinαsinβ ,这表明位置 k + p k+p k+p 的位置向量可以表示为位置 k k k的特征向量的线性变化,这为模型捕捉单词之间的相对位置关系提供了非常大的便利。

3 总结

优点

  1. 虽然Transformer最终也没有逃脱传统学习的套路,Transformer也只是一个全连接(或者是一维卷积)加Attention的结合体。但是其设计已经足够有创新,因为其抛弃了在NLP中最根本的RNN或者CNN并且取得了非常不错的效果,算法的设计非常精彩,值得每个深度学习的相关人员仔细研究和品位。

  2. Transformer的设计最大的带来性能提升的关键是将任意两个单词的距离是 1 1 1,这对解决NLP中棘手的长期依赖问题是非常有效的。

  3. Transformer不仅仅可以应用在NLP的机器翻译领域,甚至可以不局限于NLP领域,是非常有科研潜力的一个方向。

  4. 算法的并行性非常好,符合目前的硬件(主要指GPU)环境。

缺点

  1. 粗暴的抛弃RNNCNN虽然非常炫技,但是它也使模型丧失了捕捉局部特征的能力,RNN + CNN + Transformer的结合可能会带来更好的效果。

  2. Transformer失去的位置信息其实在NLP中非常重要,而论文中在特征向量中加入Position Embedding也只是一个权宜之计,并没有改变Transformer结构上的固有缺陷。

附录

权当一个辅助参考 

李宏毅机器学习self-attention计算过程

详解Transformer
详解Transformer
详解Transformer
详解Transformer

multi-head attention

详解Transformer
详解Transformer
详解Transformer

本文转自互联网,侵权联系删除详解Transformer

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 详解Transformer
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们