技术文档Self-Attention 机制

Self-Attention 机制

AITransformer
内容

用一句话解释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这个向量?

  1. 找到整个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

  1. 计算q k v
  2. 计算$\alpha$ - attention score

softmax让每一列的值相加为1 其他激活函数如relu也可以

A' - attention matrix

  1. 计算b 貌似也不是叉乘 就是点乘并求和

  2. 总结 (未知)需要学习的参数只有Wq Wk 和 Wv

multi-head Self-attention

用几个head也是需要调的超参数 几个head=几个q 说明这一个问题有多个关联的向量需要关注

self-attention 加上 位置信息 - positional encoding

  • self-attention里面没有位置信息
  • 每个位置都有独一无二的位置向量 $e^i$