李宏毅机器学习(二)自注意力机制

学习内容

本文以NLP为基础来介绍自注意力机制,而没有用图像为基础,但是其实两者都是相同的。
在图像中我们可以将图像切块(块的划分是自定义的),然后计算块与块之间的关系;

这里介绍了self-attention 的由来的应用

这里有几个问题需要说明:

  1. 常问的: 为什么是用dot-product来获取关系
    我的理解是,如果两个特征高度相关,那么这两个特征之间的相似元素必然很多,那么点积之后的值就会很大,也就是关系型很强; 而且使用dot-product来计算关系是一个常用的方法。

1. 预备知识

1.1 Sophisticated Input(复杂输入)必须是 Vector set

在之前的一节中,我们的输入是一个向量,然后经过回归或者是分类来得到一个标量或者类别;
但是如果我们的输入长不只是有一个,而且多个呢? 而且是可以改变的呢?

一个句子: this is a cat

我们把每个单词作为一个向量;那么整个句子就是多个可变向量;
但是一个向量(单词)怎么表示呢?

  • 第一种:我们可以以字母为单位,采用one-hot来表示一个单词;
李宏毅机器学习(二)自注意力机制_第1张图片
但是问题又来了,你这样表示的话,两个单词之间的关系你是不知道的,没有语义的资讯,都是孤零零的!
  • 第二种是:Word Embedding
李宏毅机器学习(二)自注意力机制_第2张图片
通过这里我们就可以看到,所有的单词可能一种类别的都在一起 ,这里的Word Embedding会给每个词一个向量。 具体Word Embedding是怎么表示的,[Word Embedding](https://www.zhihu.com/question/32275069)

一段语音!

这里就会把一段Sequence当作信号;比如我们选取25ms的作为一个frame;
同时我们如果想表达整个句子的话,需要 往前和往后调整10ms;
为什么设置25和10ms,这是前人证明过的,你只需要用就行了。
所以1s --》 100frames

李宏毅机器学习(二)自注意力机制_第3张图片

一个图

  1. 比如Social network中,每个人也就是每个节点就是一个向量,而每个人之间的edge就是关系,两个人可能是朋友关系或者是其它关系; 而每个人也就是每个向量就是这个人的资讯,比如它的性别、年龄和工作等等。
李宏毅机器学习(二)自注意力机制_第4张图片
2. 比如一个分子也可以看做是一个graph 比如现在比较出名的drug discovery; 一个分子就是一个模型,一个原子就是一个向量。
李宏毅机器学习(二)自注意力机制_第5张图片

1.2 输出(以上面各个输入为基础)

三种输出可能性;

Each vector has a label

李宏毅机器学习(二)自注意力机制_第6张图片
和上面的输入相对应: 如果我们输入是一个句子的话,我们以词性标注(POS tagging)作为例子,那么我们输出的就是每个单词(向量)的标签; 如果我们输入的是一个语音,每段语音(frame)也会有一个标签; 如果我们输入的是一个图,每个向量(结点=人),那么我们的输出就会是每个节点买不买某个商品;

The whole sequence has a label

李宏毅机器学习(二)自注意力机制_第7张图片
可能我们只想判断一句话的情感; 也可能判断某一段语音是谁讲的; 亦或者该分子的亲水性;

Model decides the number of labels itself(seq2seq)

李宏毅机器学习(二)自注意力机制_第8张图片
比如语音翻译和语音辨识都是seq2seq,也就是长度不一;

2. self-attention

如果输入vector set的时候都可以使用self-attention

2.1 加入FC层

我们重点说第一种,一对一的,以Sequence Labeling为例,如果你要给每个向量一个label; 我们以单独的一句话中的每个单词为基础,每个单词通过一个FC网络就可以实现了。

李宏毅机器学习(二)自注意力机制_第9张图片

2.2 加入Window

但是这样就会有一个问题,你只关心一个单词的词性,如果两个单词一样的话,一个表示动词,一个表示名词,那么这样没有交集的处理会导致FC层无法处理。 所以需要让FC层考虑更多的上下文资讯。
所以我们可以扩大视野,简称window!

李宏毅机器学习(二)自注意力机制_第10张图片
但是window也是有很大的缺点的,首先,如果我们要考虑整个句子,那么window会开的很大;其次,如果输入是多变的,那么我们的window很明显也是变化的,一个训练资料中我们要统计最长的句子多长,之后再加以设定;最后就是参数过多,容易过拟合;

2.3 加入Self-attention

李宏毅机器学习(二)自注意力机制_第11张图片

self-attention中一个标量的获得是由下面所有的一块决定的。

怎么产生 b 1 b^{1} b1, 也就需要计算 a 1 a^{1} a1 a 2 a^{2} a2 a 3 a^{3} a3的关系; 也就是 α 1 \alpha^{1} α1 α 2 \alpha^{2} α2等。

而这个关系是怎么样找到的呢? 两种方法: dot-product和Additive

李宏毅机器学习(二)自注意力机制_第12张图片

其中dot-product是将向量乘上一个矩阵W得到q,之后q · k = α \alpha α
右侧则是自己看吧!! transformer中使用的就是dot-product。
所以加入了相关性后计算如下:

李宏毅机器学习(二)自注意力机制_第13张图片

当然也可以进行softmax归一化! softmax不唯一,可以使用Relu、Norm等等。

李宏毅机器学习(二)自注意力机制_第14张图片

最后我们得到经过attention score的向量组合! 你需要清楚地知道下面三个q、k、v是什么!
而我们需要的b1就是我们所求

李宏毅机器学习(二)自注意力机制_第15张图片

同理,我们就可以得到{ a 2 、 a 3 、 a 4 a_{2}、a_{3} 、a_{4} a2a3a4} —》 { b 2 、 b 3 、 b 4 b_{2}、b_{3} 、b_{4} b2b3b4}

2.4 总结一下:

2.4.1 得到q、k、v

李宏毅机器学习(二)自注意力机制_第16张图片

当然 W q 、 W k 、 W v W^{q}、W^{k}、W^{v} WqWkWv都是矩阵!

2.4.2 得到attention score : α

下图中上方是推理第一向量得到的α的过程,下面则是将多个向量表达方式线性代数化了!
也就是K作为row, q作为了column。

李宏毅机器学习(二)自注意力机制_第17张图片

2.4.3 得到b

同样的道理

李宏毅机器学习(二)自注意力机制_第18张图片

2.4.4 最后总结

输入I —》 输出O;
中间Q是关系矩阵, A’是注意力矩阵。

李宏毅机器学习(二)自注意力机制_第19张图片

特别注意的是: 这里只有 W q 、 W k 、 W v W^{q}、W^{k}、W^{v} WqWkWv是需要学习的,其它的都是已知的,不需要训练; 为什么呢? 自己去往上翻一翻就知道了。

3. Multi-head self-attention

如果一件事有不同的形式,有很多不同的定义,需要多个head!不同的q 每个head是一种相关性,多个head就是多个相关性;
这个head也是一个超参数!!!

李宏毅机器学习(二)自注意力机制_第20张图片
最后再
李宏毅机器学习(二)自注意力机制_第21张图片

4. Position Encoding

可以看到自监督中是没有位置的定义的!
比如动词不能作为句头,动词一般充当谓语。所以需要加入位置信息。但是位置信息不是单纯的位置,而是包含了位置的其它资讯,包含了重要性(我的理解是这样的)。

李宏毅机器学习(二)自注意力机制_第22张图片

所以 e i e^{i} ei长什么样子呢? 最早的transformer(attention is all your need)
方法一: hand-crafted

李宏毅机器学习(二)自注意力机制_第23张图片

这是人设的! 但是sequence是改变的,所以很费劲

方法二: sinusoidal或者cos
最早的

方法三: 自己炼丹吧!!这是一个尚待研究的问题
比如左下角FloATER是自己创造的

5. Many Applications

Transformer 和 Bert
语音可以、图像也可以; 具体怎么做,自己看视频,因为我是做NLP的,直接省略!
比如图像中的一个pixel多个Channel; 或者是一行;

6. Self-attention v.s CNN

李宏毅机器学习(二)自注意力机制_第24张图片

CNN是精简版的Self-attention! 因为Self-attention需要的感受野是全部的。 而在CNN中,感受野是确定的!

李宏毅机器学习(二)自注意力机制_第25张图片

self-attention是一个flexible的model, 而且越是flexible的model越是需要更多的data,data不够,更容易overfitting;比如下面的图中, 我们比较了六个模型的分别使用CNN 和 Transformer的随着数据集量的增大后准确率的结果。 可以看出,数据集在少的时候,CNN是好的,但是随着数据集的增加,self-attention逐渐的更好。 这是因为感受野的不同的!

李宏毅机器学习(二)自注意力机制_第26张图片

6. Self-attention v.s RNN

因为RNN可以被Self-attention取代,就不讲RNN了。
初始是一个memory 是预定义的!,处理的是一个sequence!
第一个RNN的block吃memory和第一个vector,然后输出新的memory和经过一个FC层来做我们需要的预测;
第二个RNN的block吃上一个吐出来的东西好第二个vector!

李宏毅机器学习(二)自注意力机制_第27张图片

两者之间有很大的不同:
我们直观上可能感觉,RNN只考虑前几个的关系,而没有考虑全部;其实RNN也可以是双循环的,也可以认为是全部的关系; 所以这不是主要的区别。

  • 天涯若比邻, self-attention中即使很远离,但是只需要计算就可以了; 而RNN中第一个和最后一个还需要经历漫长的关系,不能够忘掉。

  • 不够并行处理 ; RNN是一个接着一个的;而self-attention的每个向量都是同时计算出来的。

最下面的链接将的是 ALL Transformers are RNN;

7.self-attention for graph

图的优点是有关联已经确定了,不需要再次计算了; 只需要计算强弱就行了!不需要决定有还是没有!
没有必要再学习了!
其实GNN是另一种self-attention

李宏毅机器学习(二)自注意力机制_第28张图片

GNN水也是很深的!!

8. To learn more。。。

横轴是速度,纵轴是准确率!
self-attention 首先用在Transformer中,但是它很慢,所以才有了下面的各种变形!!
但是准确率和速度兼顾的方法还需要进一步的深究!

李宏毅机器学习(二)自注意力机制_第29张图片
!

你可能感兴趣的:(知识图谱,李宏毅机器学习,知识图谱)