Transformer Attention is all you need 部分解析

这里记录的是我本人对Transformer 也就是 Attention is all you need 这篇文章的部分解析,这里仅为个人的看法和意见,欢迎纠正和改错。

首先为什么要用Transformer,与其他端到端的模型或者序列模型相比,Transformer 的优势在哪

作者在文章中提到,RNN、LSTM 和 GRU 网络已在序列模型、语言建模、机器翻译等应用中取得不错的效果。循环结构 (recurrent) 的语言模型和编码器 - 解码器体系结构取得了不错的进展。
但是,RNN 是顺序执行的,也就是上一个Token 进行计算之后,才能进行下一个Token 的计算,这对于一个长序列来说,需要耗费很长的时间。
另一方面,虽然也有使用CNN 作为端到端的基础模型的做法,且CNN可以实现并行计算,但是CNN 的计算次数随着序列长度的增加也会增加。
因此,作者提出了Transformer 这种结构,文章中采用的是6个encoder 和6个decoder。通过Selfattention 和 fully connected feed-forward network 这两个子层 组成一个encoder 两个子层之间采用 层正则和残差连结,详细模型可以查看其他文章。
decoder 与 encoder 类似,但是多了一个Masked self-attention。这里也是transformer 设计比较巧妙的地方,采用Masked self-attention 将当前位置之后的Token mask掉,避免在预测时提前看到答案。

那说了这么多,Transformer 的优点在哪?

  1. Transforemr 由于没有采用RNN 和CNN 的结构,在进行encoder 的时,可以并行处理所有的Token,相比于RNN 和CNN 在序列长度较长的输入时,耗费的时间更短,这里作者也在文章中对复杂度进行了分析。
  2. 自注意力可以产生更具可解释性的模型。我们可以从模型中检查注意力分布。各个注意头 (attention head) 可以学会执行不同的任务。

Position embedding

这里需要注意的是,由于Transformer 没有采用类似RNN 和CNN 的结构,其并行计算时是会忽略掉位置特征的,而对于序列来讲,位置特征又是比较重要的部分,所以作者采用Position embedding 的方法。
关于 Position embedding 《Convolutional Sequence to Sequence》这篇文章里有提到,但是这篇文章的 Position embedding 是学习得到的。(具体细节之后有时间会再写一篇解析)
而Transformer 的则是采用三角函数 sin 和 cos,作者提到这两种方法的效果都差不多,但是 作者这种方法在进行预测时可以处理 在训练中没有见过的长度的序列。
形象的可以参考这篇文章 link
这里需要注意的是,将position embedding 的矩阵与 输入矩阵相加的方法 等于在输入矩阵后拼接一个 position 矩阵再做线性变化,所以相加和拼接基本类似。

Mutil-head Self attention

Mutil-head 可以类似与 在CNN 中的不同卷积核。

由于Transformer 比较经典,讲述的人比较多,这里就不赘述,详细介绍可以参考https://blog.csdn.net/aaalswaaa1/article/details/103942346

Feed Forward

这里需要注意的是,在这层中,没有改变输入的相对位置信息

残差网络连接

sub layer 之间采用的是残差连接

注意decoder 的Attention Q 是encoder 的输出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值