李宏毅机器学习学习笔记——自注意力机制

应用场景

self-attention也是一个常见的neural network框架,用来解决输入是一组向量并且向量的个数是不确定的问题。例如:

  • 文本处理
  • 语音识别
  • Drug discovery

self-attention的输出有以下3种情况:

  1. 每个向量都有一个标签,即输出跟输入数目一样。具体应用:词性标注、推荐系统。
  2. 整个sequence只输出一个标签。具体应用:语义分析、说话人识别、图片(分子结构图)识别。
  3. 输出的标签个数不确定。具体应用:机器翻译。

为什么要使用Self-attention?

对于输出与输入数目相同的情况,这种问题也称作Sequence Labeling问题。例如对句子I saw a saw中的单词进行词性标注,在这句话中,第一个saw是动词,第二个saw是名词。如果使用全连接网络来处理,有两种方法:

  1. 逐个向量处理。这种方法的缺陷是,它无法利用序列的上下文信息,全连接网络对于任意位置saw的词性预测结果必然是一样的。
  2. 考虑上下文信息,即在对saw进行词性标注时,设置一个window同时将前面几个单词和后面几个单词考虑进来。但是由于句子长度的不确定性,window设置过小,则不能将长句子中的所有单词考虑进来;window设置过大,又会使得网络参数太多,导致过拟合。

为了将整个句子的信息考虑进来,就要用到self-attention技术。self-attention网络结构:
self-attention
self-attention对于每个向量都会考虑整个sequence的信息后输出一个向量。

Self-attention计算过程

计算两个向量相关性的方法:

  1. 点乘运算(dot product)。最常用的方法。输入向量分别乘上两个不同的矩阵 W q W_{q} Wq W k W_{k} Wk 得到向量 q q q k k k ,再把 q q q k k k 做点乘。 a i a_{i} ai a j a_{j} aj 的相关度 α i , j = ( a i W q ) . ( a j W k ) \alpha_{i,j} = (a_{i}W_{q}) . (a_{j}W_{k}) αi,j=(aiWq).(ajWk)
  2. 加性运算(additive)。不对 q q q k k k 做点乘,而是串联起来后使用 t a n h tanh tanh 函数激活。 a i a_{i} ai a j a_{j} aj 的相关度 α i , j = t a n h ( ( a i W q ) + ( a j W k ) ) \alpha_{i,j} = tanh((a_{i}W_{q}) + (a_{j}W_{k})) αi,j=tanh((aiWq)+(ajWk))

在self-attention中,计算attention的步骤:
attention计算步骤

  1. 计算 q u e r y query query,即当前向量与 W q W_{q} Wq 的乘积。计算方法 : q i = W q a i q_{i} = W_{q}a_{i} qi=Wqai
  2. 计算 k e y key key,即其他向量与 W k W_{k} Wk 的乘积 。计算方法: k j = W k a j , k ∈ [ 1 , n ] k_{j} = W_{k}a_{j}, k\in[1, n] kj=Wkaj,k[1,n]
  3. 计算attetion score ( α \alpha α),即当前向量与其他向量的相关性。计算方法: α i , j = q i . k j \alpha_{i, j} = q_{i}.k_{j} αi,j=qi.kj通常情况下,也需要计算向量和自己的相关性
  4. 分数正则化(normalization)。使用softmax函数激活 α \alpha α得到 α ′ \alpha' α(也可以使用其他激活函数)。$\alpha’{i, j} = softmax(\alpha{i, j})。
  5. 计算 v a l u e value value 。根据 α ′ \alpha' α抽取sequence中重要信息。计算方法 : v j = W v a j v_{j} = W_{v}a_{j} vj=Wvaj
  6. 计算输出向量 b i b_{i} bi。计算方法 : b i = ∑ j = 1 n α i , j ′ . v j b_{i} =\sum_{j=1}^n\alpha'_{i, j}.v_{j} bi=j=1nαi,j.vj

self-attention中输出向量是同时计算出来的,不需要按序计算。
以上步骤使用矩阵操作的方式可以简单描述为:

  1. 根据输入向量I计算 Q、K、V
  2. 计算分数及正则化。
  3. 计算输出向量O

在这里插入图片描述
从这个计算过程可以看出,self-attention需要训练的参数只有 W q 、 W k 和 W v W_{q}、W_{k}和W_{v} WqWkWv

Positional Encoding

到目前为止,self-attention中没有位置信息,它不知道每个向量在sequence中的位置是什么,也不知道两个向量间的距离是多少,但是位置信息有时候也是比较重要的。例如,在词性标注问题中,也许动词在句首出现的可能性比较低。
因此,当你认为你处理的问题中,位置信息比较重要,就需要用到positional encoding技术,也就是为每一个输入向量 a i a_i ai 加上一个代表位置的向量 e i e_i ei ,告诉self-attention位置的信息。
位置变量的设计:

  1. 人工设计(hand-crafted)。
  2. 从数据中学习(研究中)。

【相关论文】

  1. Learning to encode position for transformer with continuous dynamical model_2003

Self-attention的变体

Multi-head Self-attention

在要解决的实际问题中,计算相关性时可能会需要计算多个种类的相关性,这个时候就需要设置多个q,每个q负责一个种类的相关性,相应的k、v也需要多个。这里q、k、v的个数即head的个数。
attention计算过程:

  1. 计算Q、K、V后,分别乘上另外n(n表示head个数)个矩阵,得到 Q 1 , n 、 K 1 , n 、 V 1 , n Q_{1, n}、K_{1, n}、V_{1, n} Q1,nK1,nV1,n
  2. 计算分数和正则化。对每个Q、K、V的计算过程与self-attention相同。
  3. 计算输出。将得到的nO乘以向量 W o W_o Wo得到最终输出。

Truncated Self-attention

适用于计算attention时不需要考虑整个sequence,只需要考虑sequence中的一个小范围的问题。这个时候使用Truncated Self-attention可以加快运算速度。

【相关论文】

  1. self-attention各种变体的比较:Long Range Arena: A Benchmark for Efficient Transformers_2011
  2. self-attention各种变体的介绍:Efficient Transformers: A Survey

Self-attention与其他神经网络的比较

Self-attention v.s. CNN

CNN的每个神经元只考虑一个感受野(receptive field)中的信息,Self-attention考虑的整张图片的信息。

  • CNN是简化版的Self-attention。
  • Self-attention是复杂化的CNN。

【相关论文】

  1. Self-attention与CNN的关系: On the Relationship between Self-Attention and Convolutional Layers_1911
  2. Self-attention与CNN模型的比较:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale_2010

Self-attention v.s. RNN

不同点:

  1. RNN在输出一个向量时需要考虑的向量必须在memory(记忆)中,Self-attention只需要一个q和一个k就可以了。
  2. RNN在处理输入的多个向量时不能并行处理,Self-attention可以并行处理所有输出。

【相关论文】

  1. Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention_2006

Self-attention v.s. GNN

to do…

Self-attention的其他应用

图像(image)处理

【相关论文】

  1. Self-attention GAN。Self-Attention Generative Adversarial Networks_1805
  2. DEtection Transformer(DETR)。End-to-End Object Detection with Transformers_2005

比较self-attention与CNN

图(graph)结构数据处理

比较self-attention与GNN

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值