博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【DL】3 Transformer入门——李宏毅机器学习课程笔记
阅读量:3915 次
发布时间:2019-05-23

本文共 1531 字,大约阅读时间需要 5 分钟。

Transformer

1. 为什么要使用Self-attention?

Transformer的中文意思是’变形金刚’,其一个很经典的应用就是BERT,Transformer实际上是Seq2seq model with “Self-attention”

一般提到要处理一个Sequence,最常使用的是RNN:

在这里插入图片描述

输出b1-b4时把每一个a1-a4都处理过,这样不容易被平行化,这样就有人提出了CNN来代替RNN进行处理(CNN可以平行处理):

在这里插入图片描述

这样每个CNN只能考虑一段时间的信息,其实只要叠足够的层数,等同于蓝色的Filter已经看了所有的句子(较高层的滤波器可以考虑较长的序列)

在这里插入图片描述

问题是需要叠很多层,所以提出了Self-Attention的方法:

在这里插入图片描述

2. Self-Attention

2.1 基本思想

最早来自于论文《Attention is all you need.》(https://arxiv.org/abs/1706.03762):

在这里插入图片描述

拿每个 query q 去对每个key k 做 attention,Attention可以自己设计:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
b2的计算是可以同时进行的,b3、b4同理:
在这里插入图片描述
如果之前的听不懂,只需要知道有一个Self-attention层,输入输出如下所示:

在这里插入图片描述

2.2 平行化(矩阵)计算

接下来进一步说明Self-attention是如何进行平行化计算的

在这里插入图片描述

为了简单起见,忽略√𝑑,把k做转置操作:

在这里插入图片描述

把q2拿出来:
在这里插入图片描述
下面做weighted sum:
在这里插入图片描述
再把之前的计算快速看一遍:
在这里插入图片描述
反正就是一堆矩阵乘法,用 GPU 可以加速

2.3 Multi-head Self-attention

Self-attention有一个变形(Multi-head Self-attention), (2 heads as example):

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
好处是:有可能不同的head关注的点不一样

2.4 Positional Encoding

  • Self-attention中没有位置信息,例如’我打了他’和’他打了我’是一样的,这显然是不合理的
  • 原稿:每个位置都有一个唯一的位置向量𝑒^𝑖(未从数据中学习)
    在这里插入图片描述
  • 换言之:每个𝑥𝑖附加一个one-hot向量𝑝𝑖,代表了位置的信息
    在这里插入图片描述
    原论文的WP是手设的,图片如下:

在这里插入图片描述

这样我们原来的Seq2seq with Attention中的RNN都可以用Self-attention换掉:

在这里插入图片描述

一个关于Self-Attention的Seq2seq modle:
在这里插入图片描述

3. Transformer结构

以汉英翻译为例:

在这里插入图片描述

接下来看看里面每一个Encoder、Decoder在做什么事:
在这里插入图片描述

4. Attention可视化

Attention :

在这里插入图片描述
编码器对单词“it”从第5层到第6层的自我注意力分布进行了(八个注意力头中的一个):

在这里插入图片描述

Multi-head Attention,显然下面红色的做的是一个Local Attention:
在这里插入图片描述

5. 应用场景

  • 如果可以使用seq2seq,那么就可以使用transformer,例如:

在这里插入图片描述

  • Transformer后面有一个变形叫做:
    在这里插入图片描述
  • 影像处理 Self-Attention GAN:

在这里插入图片描述

小结

  1. 问题提出:使用RNN不能平行处理,每一个输出需要考虑所有的输入,CNN需要叠很多层
  2. 原来的Attention只是一个句子生成一个隐层或者Memory Network一个句子生成两个向量?这里Self-Attention把一个输入的embedded分成三个部分,分别用其中两个来匹配,另一个储存着信息
  3. 插入时间的维度的操作好像懂了,但是为什么不能通过训练学出来?
  4. Transformer的结构还是很复杂的,动手编程实现一下

转载地址:http://jwtrn.baihongyu.com/

你可能感兴趣的文章
C#-WinForm跨线程修改UI界面
查看>>
Amazing 2020
查看>>
代码改变世界,也改变了我
查看>>
【Git】Git-常用命令备忘录(一)
查看>>
2021,未来可期
查看>>
阿星Plus:基于abp vNext开源一个博客网站
查看>>
写给自己,2020的年终总结
查看>>
使用 ML.NET 识别乐高颜色块
查看>>
Flash 生命终止,HTML5能否完美替代?
查看>>
ML.NET生成器带来了许多错误修复和增强功能以及新功能
查看>>
微信适配国产操作系统:原生支持 Linux
查看>>
我的2020年终总结:新的角色,新的开始
查看>>
“开源、共享、创新” 2020 中国.NET开发者大会小结
查看>>
C# 9 新特性 —— 增强的模式匹配
查看>>
. NET5一出,. NET岗面试普遍喊难,真相是…
查看>>
强烈推荐:SiteServer CMS开源免费的企业级CMS系统!
查看>>
如何在 ASP.NET Core 中使用 NLog 的高级特性
查看>>
对CORS OPTIONS预检请求的一些思考
查看>>
.NET/C#程序开发中如何更优美地实现失败任务重试的逻辑?
查看>>
【Git】Git-常用命令备忘录(二)
查看>>