笔记 李宏毅Transformer讲解

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

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

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

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

 

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

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

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

 

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

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

 

q, k是怎么用的呢?

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

 

 

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

首先进行一个softmax

 

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

 

同样的方法可以得到b2

 

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

 

 

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

首先得到K, V, Q

 

计算alpha1系列:

 

同理可计算alpha2, alpha3,alpha4

 

A经过softmax得到bar(a),

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

 

整个过程如图:

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

 

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

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

这里以n=2为例

 

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

 

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

 

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

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

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

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

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

 

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

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

 

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

传统的Seq2Seq:内部使用的RNN

 

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

 

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进行一些处理;

 

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

 

9. Attention visualization

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

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

 

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

 

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

 

10. Some Example Application

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

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

 

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

 

posted @ 2021-10-26 00:34  Rogn  阅读(314)  评论(0编辑  收藏  举报