一、引入
-
应用场景:输入任意长度的向量进行处理
-
从输入看:
- 文字处理(nlp)
- one-hot
- word-embedding
- 声音信号处理
每个时间窗口(window,25ms)视为帧(frame),视为向量 - graph
每个节点视为一个向量- social graph
- 分子式one-hot
- 文字处理(nlp)
-
从输出看:
- sequence labeling:输入输出数量相等(每个向量都有一个标签)
- 词性标注POS tagging
- 语音标识(每个vector对应音素phoneme
- 社交网络(每个节点(person)进行标注(是否推送商品)
- 整个输入序列只有一个输出
- 文本情感分析
- 语音辨认
- 分子的疏水性
- 由模型决定输出的数目(seq2seq)
- 翻译
- 语音辨识
- sequence labeling:输入输出数量相等(每个向量都有一个标签)
-
Sequence Labeling
- 对每一个向量用Fully-connected network分别进行处理
- 问题:忽略了序列上下文的关系
同一个向量在序列号中不同的位置、不同的上下文环境下,得到的输出可能不同(需要考虑序列) - 改进:串联若干个向量
问题:- 只能考虑固定个数,不能考虑任意长度
- 网络参数大
- 问题:忽略了序列上下文的关系
- 对每一个向量用Fully-connected network分别进行处理
二、hello,self-attention
- 特点:考虑整个序列sequence的所有向量,综合向量序列整体和单个向量个体,得到对每一个向量处理后的向量
⇒把这个向量连接一个FC,FC可以专注于处理该位置的向量,得到对应结果
- self-attention(关注整体)和fc(关注单个)可交替使用
基本原理
- 输入:a set of vectors,可能是整个network的input,也可能是某个hidden layer的output
- 输出:处理input后,b是考虑了所有的a才生成的
具体步骤
-
根据 a 1 a^1 a1这个向量,找出整个sequence中与 a 1 a^1 a1相关的其他向量
⇒哪些部分是重要的(判断label,决定class,决定regression数值)用 α \alpha α表示
-
计算Attention的模组:拿两个向量作为输入,输出 α \alpha α
q q q=query
k k k=key
- 方法一:点积dot product
输入的这两个向量分别乘上两个不同的矩阵,左边这个向量乘上矩阵 W q W^q Wq得到矩阵 q q q,右边这个向量乘上矩阵 W k W^k Wk得到矩阵 k k k;再把 q q q跟 k k k做dot product,逐元素相乘后累加得到一个标量scalar即α - 方法二 Additive
得到 q q q跟 k k k后,先串接起来,再过一个Activation Function(Normalization),再通过一个Transform,然后得到 α \alpha α.
需要计算:任意两个向量之间的关联性,作softmax(常用,也可以用其他激活函数),得到需要计算:任意两个向量之间的关联性,作softmax(常用,也可以用其他激活函数),得到 α ′ \alpha ' α′
- 方法一:点积dot product
-
分别抽取重要信息,根据关联性作加权求和得到 b b b:query key value
一次性产生所有的 b b b(不需要依序产生)
- 矩阵角度
-
①计算 k , q , v k,q,v k,q,v
W q , W k , W v W^q,W^k,W^v Wq,Wk,Wv是三个要学习的网络参数矩阵
-
②计算 α \alpha α并Normalization
-
③计算b
-
- 矩阵角度
- 唯一需要学的参数:三个矩阵
- I 是 Self-attention 的 input一排vector,每个vector拼起来当作矩阵的 column
- 这个 input 分别乘上三个矩阵, 得到 Q K V
- 这三个矩阵,接下来 Q 乘上 K 的 transpose,得到 A 。可能会做一些处理,得到 A ′ A' A′ ,叫做Attention Matrix ,生成Q矩阵就是为了得到Attention的score
-
A
′
A'
A′再乘上 V,就得到 O,O 就是 Self-attention 这个 layer 的输出,
Multi-head Self-attention
使用多个 q,k,v组合,不同的 q,k,v 负责不同种类的相关性
-
先把 a 乘上一个矩阵得到 q
-
再把 q 乘上另外两个矩阵,分别得到 q 1 q^1 q1 跟 q 2 q^2 q2 ,代表有两个 head;同理可以得到 k 1 k^1 k1, k 2 k^2 k2, v 1 v^1 v1, v 2 v^2 v2.
-
同一个“头”里的k,q,v计算b.
- 将各个头计算得到的
b
b
b拼接,通过一个 transform得到 bi,然后再送到下一层去
Positional Encoding
每个位置用一个vector
e
i
e^i
ei来表示它是sequence的第i个,加和到原向量中。
- how to get positional encoding vector
- 手工设置
- 根据资料learn
三、应用
-
nlp
-
speech
- 问题:把一段声音讯号,表示成一排向量的话,这排向量可能会非常地长;attention matrix 的计算复杂度是长度的平方需要很大的计算量、很大的存储空间
- 方法:Truncated Self-attention
看一整句话时只看一个小的范围就好——辨识这个位置有怎样的phoneme只要看这句话,跟它前后一定范围之内的资讯就可判断
-
image
每一个像素pixel就是一个三维的向量,整张图片,其实就是长乘以宽个向量的set
-
graph
- 在 Graph 上面,每一个 node 可以表示成一个向量
- node 之间是有相连的,图上的 edge 已经指示了node 跟 node 之间的关联性
- 比如:在做Attention Matrix 计算的时候,你可以只计算有 edge 相连的 node 就好
- 因为 Graph 往往是人为根据某些 domain knowledge 建出来的,已知这两个向量彼此之间没有关联,就没有必要再用机器去学习这件事情
- 因为 Graph 往往是人为根据某些 domain knowledge 建出来的,已知这两个向量彼此之间没有关联,就没有必要再用机器去学习这件事情
-
Self-attention VS CNN
- self-attention:考虑一个像素和整张图片的信息,则属于自己learn感受野的形状和大小
- CNN:只考虑范围内的信息,感受野是人为设定的
- CNN是self-attention的特例,self-attention只要设定合适的参数,就可以做到和CNN一样的事情。换言之,self-attention是更flexible的CNN。从而,self-attention需要更多的数据进行训练,否则会欠拟合,CNN的性能更好
- self-attention弹性较大,则需要较多的训练资料,当训练资料少时会overfitting
- CNN弹性较小,在训练资料少时结果较好,但训练资料多时,就无法从更大量的训练资料发挥优势
-
Self-attention VS RNN
recurrent neural network 的角色,很大一部分都可以用 Self-attention 来取代。