【DL】3 Transformer入门——李宏毅机器学习课程笔记

Transformer

  • 1. 为什么要使用Self-attention?
  • 2. Self-Attention
    • 2.1 基本思想
    • 2.2 平行化(矩阵)计算
    • 2.3 Multi-head Self-attention
    • 2.4 Positional Encoding
  • 3. Transformer结构
  • 4. Attention可视化
  • 5. 应用场景
  • 小结

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

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

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

【DL】3 Transformer入门——李宏毅机器学习课程笔记_第1张图片
输出b1-b4时把每一个a1-a4都处理过,这样不容易被平行化,这样就有人提出了CNN来代替RNN进行处理(CNN可以平行处理):

【DL】3 Transformer入门——李宏毅机器学习课程笔记_第2张图片
这样每个CNN只能考虑一段时间的信息,其实只要叠足够的层数,等同于蓝色的Filter已经看了所有的句子(较高层的滤波器可以考虑较长的序列)

【DL】3 Transformer入门——李宏毅机器学习课程笔记_第3张图片
问题是需要叠很多层,所以提出了Self-Attention的方法:

【DL】3 Transformer入门——李宏毅机器学习课程笔记_第4张图片

2. Self-Attention

2.1 基本思想

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

【DL】3 Transformer入门——李宏毅机器学习课程笔记_第5张图片
拿每个 query q 去对每个key k 做 attention,Attention可以自己设计:

【DL】3 Transformer入门——李宏毅机器学习课程笔记_第6张图片
【DL】3 Transformer入门——李宏毅机器学习课程笔记_第7张图片
【DL】3 Transformer入门——李宏毅机器学习课程笔记_第8张图片
b2的计算是可以同时进行的,b3、b4同理:
【DL】3 Transformer入门——李宏毅机器学习课程笔记_第9张图片
如果之前的听不懂,只需要知道有一个Self-attention层,输入输出如下所示:

【DL】3 Transformer入门——李宏毅机器学习课程笔记_第10张图片

2.2 平行化(矩阵)计算

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

【DL】3 Transformer入门——李宏毅机器学习课程笔记_第11张图片
为了简单起见,忽略√,把k做转置操作:

【DL】3 Transformer入门——李宏毅机器学习课程笔记_第12张图片
把q2拿出来:
【DL】3 Transformer入门——李宏毅机器学习课程笔记_第13张图片
下面做weighted sum:
【DL】3 Transformer入门——李宏毅机器学习课程笔记_第14张图片
再把之前的计算快速看一遍:
【DL】3 Transformer入门——李宏毅机器学习课程笔记_第15张图片
反正就是一堆矩阵乘法,用 GPU 可以加速

2.3 Multi-head Self-attention

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

【DL】3 Transformer入门——李宏毅机器学习课程笔记_第16张图片
【DL】3 Transformer入门——李宏毅机器学习课程笔记_第17张图片
【DL】3 Transformer入门——李宏毅机器学习课程笔记_第18张图片
好处是:有可能不同的head关注的点不一样

2.4 Positional Encoding

  • Self-attention中没有位置信息,例如’我打了他’和’他打了我’是一样的,这显然是不合理的
  • 原稿:每个位置都有一个唯一的位置向量^(未从数据中学习)
    【DL】3 Transformer入门——李宏毅机器学习课程笔记_第19张图片
  • 换言之:每个附加一个one-hot向量,代表了位置的信息
    【DL】3 Transformer入门——李宏毅机器学习课程笔记_第20张图片
    原论文的WP是手设的,图片如下:

【DL】3 Transformer入门——李宏毅机器学习课程笔记_第21张图片
这样我们原来的Seq2seq with Attention中的RNN都可以用Self-attention换掉:

【DL】3 Transformer入门——李宏毅机器学习课程笔记_第22张图片
一个关于Self-Attention的Seq2seq modle动画演示:
【DL】3 Transformer入门——李宏毅机器学习课程笔记_第23张图片

3. Transformer结构

以汉英翻译为例:

【DL】3 Transformer入门——李宏毅机器学习课程笔记_第24张图片
接下来看看里面每一个Encoder、Decoder在做什么事:
【DL】3 Transformer入门——李宏毅机器学习课程笔记_第25张图片

4. Attention可视化

Attention 可视化:
【DL】3 Transformer入门——李宏毅机器学习课程笔记_第26张图片
编码器对单词“it”从第5层到第6层的自我注意力分布进行了英法翻译训练(八个注意力头中的一个):

【DL】3 Transformer入门——李宏毅机器学习课程笔记_第27张图片
Multi-head Attention,显然下面红色的做的是一个Local Attention:
【DL】3 Transformer入门——李宏毅机器学习课程笔记_第28张图片

5. 应用场景

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

【DL】3 Transformer入门——李宏毅机器学习课程笔记_第29张图片

  • Transformer后面有一个变形叫做Universal Transformer:
    【DL】3 Transformer入门——李宏毅机器学习课程笔记_第30张图片
  • 影像处理 Self-Attention GAN:

【DL】3 Transformer入门——李宏毅机器学习课程笔记_第31张图片

小结

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

你可能感兴趣的:(【课程学习】,人工智能,神经网络,机器学习,循环神经网络,attention)