笔记 李宏毅Transformer讲解

Hung-yi Lee李宏毅的课,没有废话,重难点都讲了,可以说是非常棒了

视频地址https://www.youtube.com/watch?v=ugWDIIOHtPA&ab_channel=Hung-yiLee

1. Seq2Seq采用RNN不能并行化,使用CNN代替RNN

例如CNN三角形选取旁边3个ai, 每个三角形(RNN)不需要等其他三角形计算完再计算,因此可以并行化

笔记 李宏毅Transformer讲解

2. 记住有一种新的layer,叫做Self-Attention Layer,可以代替RNN

输入输出也与RNN一样,都是Sequence

biRNN虽然也可以获得全部输入信息,但是Self-Attention可以并行化啊

笔记 李宏毅Transformer讲解

3. Self-Attention是怎么做的呢?

q, k其实都是a乘以一个矩阵

笔记 李宏毅Transformer讲解

q, k是怎么用的呢?

q去与每一个k做点乘得到权重,除以sqrt(d)是为了消除点乘带来的常数放大

笔记 李宏毅Transformer讲解

拿到权重系数alpha有什么用呢?

首先进行一个softmax

笔记 李宏毅Transformer讲解

然后与每个v相乘,再相加,得到bi

笔记 李宏毅Transformer讲解

同样的方法可以得到b2

笔记 李宏毅Transformer讲解

这样b1, b2, b3, b4都能被并行的算出来

笔记 李宏毅Transformer讲解

4. 将b1, b2, b3, b4的计算合成为矩阵计算

首先得到K, V, Q

笔记 李宏毅Transformer讲解

计算alpha1系列:

笔记 李宏毅Transformer讲解

同理可计算alpha2, alpha3,alpha4

笔记 李宏毅Transformer讲解

A经过softmax得到bar(a),

再将得到的系数矩阵与V相乘,得到bi,bi组成的矩阵记为O

笔记 李宏毅Transformer讲解

整个过程如图:

反正最后就是几个矩阵乘法

笔记 李宏毅Transformer讲解

5. Self-Attention的一个变形: Multi-head Self-Attention

n头机制就是n个W矩阵,得到n个q, k, v

这里以n=2为例

笔记 李宏毅Transformer讲解

 这样的话对于ai能得到两个bi,bi_1和bi_2

笔记 李宏毅Transformer讲解

我们可以将两个bi concatenate(连接)起来 ,但是如果维度你不喜欢,乘以一个矩阵使它变成你想要的维度

笔记 李宏毅Transformer讲解

Multi-head有什么好处呢?也就是为什么要做Multi-head?
有些head是看距离比较远的信息,有些head是看周围的信息,这样的话每个head都能学到一些信息

6. Position embedding为什么是与ai直接相加?

首先为什么需要position embedding?因为在做attention的时候不管是远处还是邻近都是同样的对待,同样的做attention,这样就失去了原有的位置信息

其次,位置和值相加,代表着什么?为什么能这么做?李宏毅提供了一个与原paper不一样的理解角度,最终得到的运算是一样的,但讲法不一样

如果对xi append 一个one-hot的位置编码,与矩阵W相乘,根据矩阵的分块乘法,这等于两者分开相乘再相加

笔记 李宏毅Transformer讲解

这两部分其实就相当于ai和ei,所以在可以相加

下面是看不懂的W_p的可视化hhh

笔记 李宏毅Transformer讲解

7. Self-Attention用于Seq2Seq是什么样子的..

传统的Seq2Seq:内部使用的RNN

笔记 李宏毅Transformer讲解

使用Self-Attention后:就是用Self-Attention layer代替RNN layer

笔记 李宏毅Transformer讲解

8. Transformer中的encoder和decoder详解

encoder: 包括Multi-head Attention层、Add层、Norm层

Multi-head Attention层得到的bi的维度,经过映射,和self-Attention是一样的;

Add层是有一个残差加入;

Norm层不是用的Batch norm而是Layer norm,Layer norm经常用于RNN中;

Feed forward层会对每个bi进行一些处理;

笔记 李宏毅Transformer讲解

decoder: 与encoder相比,多的新结构是Mask multi-head attention,其实就是只用到前面已经生成的output来参与attention,这也很显然啊,还没有产生出来的东西怎么拿来用啊...

笔记 李宏毅Transformer讲解

9. Attention visualization

在原始paper的最终版本附有一些可视化

两个word之间都会计算权重,weight越大线条越粗

笔记 李宏毅Transformer讲解

有一个非常神奇的现象:Attention能准确的理解"it",tired的时候it指向animal,wide的时候it指向了street,nb!!

笔记 李宏毅Transformer讲解

再看看Multi-head Attention的可视化:展现不同的head的确关注到了不同的信息

笔记 李宏毅Transformer讲解

10. Some Example Application

1) page2page: wiki文章生成wiki文章

没有transformer的做不了,因为Input有长达1e6个单词,RNN不能并行,训练起来太慢了

笔记 李宏毅Transformer讲解

2)Universal transformer:将之前横轴是RNN,换成深度上是RNN

笔记 李宏毅Transformer讲解