Self-Attention 机制
用一句话解释attention:It calculates the correlation weights between elements in the input sequence, allowing the model to automatically "focus" on the most useful information when processing a certain position
什么是attention
你会注意什么? 大数据:什么数据都有,重要的,不重要的
- 对于重要的数据,我们要使用
- 对于不重要的数据我们不使用 对于一个模型(CNN,LSTM),很难决定什么重要,什么不重要。
example1: Query,Key,Value的概念取自于信息检索系统,举个简单的搜索的例子来说。当你在某电商平台搜索某件商品(年轻女士冬季穿的红色薄款羽绒服)时,你在搜索引擎上输入的内容便是Query。 然后搜索引擎根据Query为你匹配Key(例如商品的种类,颜色,描述等)。 然后根据Query和Key的相似度得到匹配的内容(Value)。
Attention计算
$${Attention}(Q,K,V) = \text{softmax}!\left(\frac{QK^{\top}}{\sqrt{d_k}}\right) V $$
Q,K
- 形状
[4,4,16,16]4个batch 4个head 16x16的正方形矩阵
16x16个样本对应的token之间关注度大小(这个怎么得来的呢?)
softmax:把一行数字变成百分比的形式,它们的和是1
Self-Attention
data input/output
input
vector set as input: 词汇->向量 Encoding
- one-hot vector:向量长度就是所有词汇个数,0/1表示一个内容
- 缺点是不包含语义信息 word embedding: embedding的向量是有语义信息的
- word embedding可以画成坐标图看特征关系
- word embedding怎么得到的:https://www.youtube.com/watch?v=X7PH3NuYW0Q
output
- each vector has a label
- POS tagging: 词性标注 标注一个句子里面的词是名词/动词/形容词...
- I saw a saw -> N V DET N
- the whole sequence has a label
- this is good -> positive (Sentiment Analysis) 一整个句子只需要一个label
- 不知道要输出多少个label,机器自己决定要输出多少label(Seq to Seq)
- 翻译
- 语音辨识
Sequence Labeling
方法1:FC - Fully connected network 每个向量输入到FC中+考虑上下文context(neighbours/window) 方法2: Self-attention
Self-attention
输入几个vector就输出几个vector,输出的vector考虑所有序列内容得到的 交替使用这俩:
- Self-attention处理整个sequence的信息
- fully connected network专注处理某个位置的信息
output
怎么产生b1这个向量?
- 找到整个seq里面和a1相关的向量:每一个向量和a1向量的关联程度用$\alpha$表示
相关性计算 $\alpha$ 的方法
输入:两个向量 a1 a4 输出:关联度$\alpha$ 计算方法:输入向量分布乘上两个矩阵Wq Wk,得到q和k
- dot-product:q和k做点乘
- additive:q和k串起来,过一个activation function然后过transform
点乘方法计算output "b"
input a -> q k v
- query q
- 现在的目标是通过a1的特征去计算b1的值
- $q^1=W^q a^1$
- key k
- 所有的input值都乘$W^K$计算k
- $k^2=W^k a^2$
- 关联度$\alpha=q \cdot k$ (点乘 -> 标量)
- value
- $v^1=W^v a^1$
- output $\mathbf{b}^1 = \sum_i \left( \alpha'_{1,i} \times \mathbf{v}^i \right)$
- 叉乘 -> 向量
数学上如何计算b?
使用矩阵计算
[a1 a2 a3 a4] 合成四列矩阵 I
- 计算q k v
- 计算$\alpha$ - attention score
softmax让每一列的值相加为1 其他激活函数如relu也可以
A' - attention matrix
-
计算b 貌似也不是叉乘 就是点乘并求和
-
总结 (未知)需要学习的参数只有Wq Wk 和 Wv
multi-head Self-attention
用几个head也是需要调的超参数 几个head=几个q 说明这一个问题有多个关联的向量需要关注
self-attention 加上 位置信息 - positional encoding
- self-attention里面没有位置信息
- 每个位置都有独一无二的位置向量 $e^i$