https://www.bilibili.com/video/BV1JA411c7VT?p=11&spm_id_from=333.880.my_history.page.click&vd_source=14d17a501a1dad78c613f1ba7f8f947c
输入输出
传统神经网络的输入是一个向量。
self attention
- 输入:一组向量,且长度可以不固定。比如
- NLP:一个句子由一些词组成,每个词是一个向量,长度固定;但一个句子由多少词是不确定的。
- 一段声音信号,每个窗口用一个向量表示
- 一个graph:each node as a vector
- 输出:三种情况
- 每个vector都有一个输出(sequence labeling)
- NLP:词性标注 POS taggin
- 声音信号:每一个frame的元音?
- graph:每个人会不会买这个商品
- 整个sequence有一个输出
- NLP: sentiment analysis: 这段话是消极还是积极
- 声音信号:这是谁说的
- graph:这个分子是否亲水
- 不知道多少个输出label,机器自己决定 (seq2seq)
- NLP : 语言翻译
- 声音信号:语音识别
- 每个vector都有一个输出(sequence labeling)
过程:
scalar角度:如何从a求b (single head, w.o. PE)
矩阵乘法角度:如何从a求b (single head, w.o. PE)
multi head
就是使用多组qkv,得到多组b,这些b拼接起来乘W得到最终的b.
PE
实际上还需要把position encoding和a相加再操作。
应用
主要是NLP,如bert。
如果是speech这种数据,长度太长,可以截断:
如果把image看做一排向量,也可以用transformer:
self attention V.S. CNN
CNN 类似于,只对领域求α的self attentin。
可以看这篇论文
相当于self attention加上一些限制,就是CNN。所以在样本少的时候cnn更好,样本多时相反。
self attention V.S. RNN
也有相似之处。
但self attention可以并行计算,而且离得很远的东西也可以很好的用到(RNN容易遗忘)。因此现在基本self attention可以代替RNN。
for graph
只需算有边的点的alpha,没边的直接置0