Self-attention

Self-attention (常见的network架构)

李宏毅 2021 machine learning课程中的transformer

self-attention想要解决的问题:

目前的input都是一个向量,而如果input是一系列向量(a set of vectors),并且输入的向量个数是会改变的,例如输入不同长度的句子。

在这里插入图片描述

怎么把一个词汇表示成一个向量呢?

在这里插入图片描述

1.将一个词汇转换为一个向量,最常用的方法是 One-hot Encoding,这种向量表示法 维度数就是世界上所有词汇的数目,其中的每一个维度表示一个单词,但是这种方法假设各个单词之间都没有关系,向量里没有任何语义信息

2.另一种方法 Word Embedding的向量是有语义资讯的。

还有哪些应用是需要这种 a set of vectors ?

例如 音频处理 和 一个图
在这里插入图片描述

输入是一堆向量,那么输出是什么?

可能有三种情况:
在这里插入图片描述
第一种和第二种举例:
在这里插入图片描述

详细介绍第一种情况,即Sequence Labeling:

在这里插入图片描述

更好的方法来考虑整个input sequence的信息:self-attention:

在这里插入图片描述

selt-attention是怎么运作的呢?

在这里插入图片描述
b 1 b^1 b1~ b 4 b^4 b4是一次/同时被计算出来的

接下来要判断的就是Self-attention是怎么自动决定两个向量间的相关度α的呢?

计算Attention的module:一般有两种方式
在这里插入图片描述

怎么把dot-product套用到Self-attention中呢?(以计算 b 1 b^1 b1为例)

在这里插入图片描述
在实际中, q 1 q^1 q1也会跟自己算关联度,这件事情也很重要!
在这里插入图片描述

计算到关联度α之后怎么抽取出sequence中重要的资讯呢?

在这里插入图片描述
这里展示了怎么通过一整个sequence得到向量 b 1 b^1 b1,如果向量 a 2 a^2 a2 a 1 a^1 a1 的相似度α很高,那么得到的抽出来的结果 b 1 b^1 b1 就会比较接近 v 2 v^2 v2
在这里插入图片描述
计算 b 2 b^2 b2 也是同理

从矩阵乘法角度来看self-attention的运作:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上图中应该是 α 1 , 1 ′ α_{1,1}' α1,1

总结这个过程:

在这里插入图片描述

一个扩展:Multi-head Self-attention

在这里插入图片描述

Positional Encoding

我们会发现self-attention 缺少位置信息,如果我们在做POS tagging (词性标注)时,位置信息可以有帮助,比如动词一般不会出现在句首。这个时候我们可以把位置信息加入到Self-attention中。
在这里插入图片描述
positional encoding是可以通过资料学出来的,也可以是手动给的,可以有很多种方式进行。
在这里插入图片描述

self-attention还有很多应用:

在这里插入图片描述

Self-attention和CNN的比较

在这里插入图片描述
在这里插入图片描述

Self-attention和RNN的比较

在这里插入图片描述

Self-attention for Graph

在这里插入图片描述

更多的变形:

selt-attention最大的问题就是 运算量非常大

广义的transformer就是Self-attention

速度的提升在很多情况下带来的是performance的下降
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Nismilesucc/article/details/117675277