输入任意长度个向量进行处理。
特点:考虑整个序列sequence的所有向量,综合向量序列整体和单个向量个体,得到对每一个向量处理后的向量
⇒将这个向量链接一个FC,FC可以专注于处理这一个位置的向量,得到对应结果。
其中,self-attention 的功能是处理整个 sequence 的信息,而 FC 则是处理某一个位置的信息,
Self-attention+FC可以交替使用
知名文章:Attention is all you need ⇒Transformer
输入:一串的 Vector,这个 Vector 可能是整个 Network 的 Input,也可能是某个 Hidden Layer 的 Output
输出:处理 Input 以后,每一个 bi 都是考虑了所有的 ai 以后才生成出来的
具体步骤如下:
1. 以 a1 为例,根据 a1 这个向量,找出整个 sequence 中跟 a1 相关的其他向量 ⇒ 计算哪些部分是重要的,求出 ai 和 a1 的相关性(影响程度大的就多考虑点),用 α 表示
2. 计算相关性:有 点积 和 additive 两种方法计算相关性。
✔️方法一 dot product:
输入的这两个向量分别乘上两个不同的矩阵,左边这个向量乘上矩阵 W^q得到矩阵 q,右边这个向量乘上矩阵 W^k得到矩阵 k;再把 q跟 k做dot product,逐元素相乘后累加得到一个 scalar就是α
方法二 Additive:
得到 q跟 k后,先串接起来,再过一个Activation Function(Normalization),再通过一个Transform,然后得到 α
需要计算:任意两个向量之间的关联性,作softmax【不一定要用,也可以用其他激活函数】,得到
把 a1 乘上 Wq 得到 q,叫做 Query(就像是搜寻相关文章的关键字,所以叫做 Query)
然后将 ai 都要乘 Wq 得到 k,叫做 Key,把这个Query q1 和 Key ki 进行 点积操作 就得到 相关性 α( α 叫做 Attention Score,表示 Attention计算出的 vector 之间的相关性)
attention score 还要经过一层 softmax 才能用于后续处理,其中 softmax 也可以换成其他的 activation function
3. 分别抽取重要信息,根据关联性作加权求和得到 bi
(一次性并行计算出 bi ,不需要依次先后得出)
优点:bi 是并行计算得出
① 计算 k,q,v (其中 Wq 、Wk 和 Wv 都是要学习的网络参数矩阵)
② 计算 α 并 Normalization
③ 计算 b
综合:
其中,
唯一需要学的参数:三个矩阵
使用多个 q k v 组合,不同的 q k v 负责不同种类的相关性
例如在下图中,一共有2类, 1类的放在一起算,2类的放在一起算。相关性变多了,所以参数也增加了,原来只需要三个 W 矩阵,现在需要六个 W 矩阵
每个向量所处的“位置”需要被编码
方法:每个位置用一个 vector ei 来表示它是 sequence 的第 i 个。加和到原向量中。
如何产生positional encoding vector尚待研究
BERT
问题:
把一段声音讯号,表示成一排向量的话,这排向量可能会非常地长;attention matrix 的计算复杂度是长度的平方需要很大的计算量、很大的存储空间
方法:Truncated Self-attention
要看一整句话,只看一个小的范围就好——辨识这个位置有什麼样的phoneme只要看这句话,跟它前后一定范围之内的资讯就可以判断
每一个 pixel就是一个三维的向量,整张图片其实就是长乘以宽个向量的set
CNN 可以看成简化版的 self-attention,CNN 就是只计算感受域中的相关性的self-attention。
结论:
CNN 就是 Self-attention 的特例,Self-attention 只要设定合适的参数,就可以做到跟 CNN 一模一样的事情
self attention 是更 flexible 的 CNN
⇒ self-attention需要 更多的数据 进行训练,否则会 欠拟合;否则CNN的性能更好
recurrent neural network 的角色,很大一部分都可以用 Self-attention 来取代了
Recurrent Neural Network跟 Self-attention 做的事情其实也非常像,它们的 input 都是一个 vector sequence
RNN 其实也可以是双向的,从而使得 memory 的 hidden output,其实也可以看作是考虑了整个 input 的 sequence
主要区别:
并行输出,速度更快,效率更高:
很多的应用都往往把 RNN 的架构,逐渐改成 Self-attention 的架构
Self-attention for Graph⇒一种GNN
冷知识:有人说广义的 Transformer,指的就是 Self-attention
Self-attention 有非常非常多的变形,Self-attention 它最大的问题就是,它的运算量非常地大
paper:Long Range Arena比较了各种不同的 Self-attention 的变形
Efficient Transformers: A Survey 这篇 paper,介绍各式各样 Self-attention 的变形