Vector set as input
-one-hot encoding: 有缺陷,因为假设词汇彼此之间没有关系,没有语义资讯
-word embedding:
每一个词汇都是一个向量,含有语义资讯。
一个句子是一排长度为1的向量。
一段语音是一排向量,因为会根据25ms的window移动10ms每次来切割语音变一排向量。
社交网络也可以当成一堆向量
分子也是一堆向量,其中每一个原子是一个向量
Self-attention输出是什么?
三种类型:
Type1: 输出同等数量的label。
E.g. 词性标注POS tagging; 音标标注HW2; 社交网络的节点会不会买某一个商品;
Type2: 仅输出一个label。
E.g. Sentiment analysis; speaker语者辨认; hydrophilicity亲水性判断。
Type3: 机器自己决定输出多少个label
E.g. Seq2Seq,比如翻译、语音辨识。
今天只讲Type1输出:
如果单独每个向量fully-connected去处理,有缺陷,语言的上下文不会考虑。
解决:前后context串起来形成一个window一起fully-connected处理。
但是这种方法还是有极限,怎么解决?
Self-attention
解决就是Self-attention,会处理一整个sequence的资讯。
Self-attention和fully-connected可以交替处理,最有名的一篇paper是attention is all you need.
Self-attention的输入是一串vector,这个input可能是input或者a hidden layer。
Self-attention会计算2个vector之间的关联,计算方法有Dot-product, Additive等,最常用是Dot-product。
[dotproduct]
Dot-product的计算
先算attention score,再normalization,比如用soft-max。
attention score的计算,先输入的vector α乘以一个transform得到query,这个query跟其他α的key相乘就得到attention score。
每一个 α再乘以Wv得到新向量v。再乘以attention score得到b的输出。
b1到b4不需要顺次计算,是同时计算。
Self-attention矩阵运算
每个 α产生 q k v,
qi=wq αi
按照矩阵计算:左边4个q相乘,右边wq乘以4个α。
同理,Ki和vi也可以这么计算。
q k做inner product得到attention score。
4个操作拼起来可以看作是k1到k4的矩阵乘上q1得到一个新的矩阵就是attention score α1,1到α1,4。
再4组attention score 矩阵相乘,等号右侧是k1到k4乘以q1到q4。
左侧attention score 矩阵再做normalization,比如softmax。得到新矩阵A‘。
v1到v4拼起来得到v矩阵,再乘以A‘就得到b的矩阵输出。
Self-attention矩阵运算总结
只有Wq,Wk,Wv需要学习。
Self-attention的进阶版本——Multi-head Self-attention
计算多种相关,Different types of relevance。
Positional Encoding
目前没有关于位置的资讯。
每一个位置加一个positional vector ei
这个vector是人设的,hand-crafted
Self-attention的应用
Self-attention用于语音
语音讯号非常长,计算量比较大,所以这时候引入truncated self-attention,告诉机器不用看整句话只看一部分,至于这部分多大是人为设定的。
Self-attention用于影像
图像也可以当成一组vector
Self-attention v.s. CNN
Self-attention比较复杂,CNN比较简单,
有一篇文章讲CNN是一种特殊的Self-attention,Self-attention只要设定合适的参数可以做跟CNN一摸一样的事情。
随着资料越来越多,self-attention表现超过CNN。
Self-attention v.s. RNN
- Self-attention可以考虑很远的vector
-
RNN没有办法平行化
Self-attention for Graph
在算attention matrix的时候可以只计算有edge相连的node。
Self-attention用于graph其实就是一种GNN。
一些ref
我自己的summary:
Self-attention的输入是一堆vector,输出可以是同等数量label (POS tagging)或者一个label (setiment analysis)或者自训练label (Seq2Seq)。第一种情况的计算方式是dot-product,也就是input经过Wq Wk做inner product得到attention score,再softmax,再乘以Wv得到output。还需要加上一个人为设置的positional vector。Self-attention可用于transformer、BERT、语音、图像等。用于语音可以做truncated处理,用于图像的时候,CNN可以算一种特殊的Self-attention,如果资料很多,表现超过CNN。Self-attention相较于RNN的优势是可以平行化。