一、前言
本文章作为学习2023年《李宏毅机器学习课程》的笔记,感谢台湾大学李宏毅教授的课程,respect!!!
二、大纲
- 何为self-Attention?
- 原理剖析
- self-Attention VS CNN、RNN、GNN
三、何为self-Attention?
2014年就提出,但发扬光大是在2017年的Transformer 论文《Attention Is All You Need》。广泛应用在seq2seq模型中,这里就不得不举几个seq2seq的应用场景。
- seq2seq(sequence to sequence)
顾名思义就是输入是序列,输出也是序列,简言之输入是一排向量,输出是另外一排向量,例如:
四、原理剖析
- 划重点:self-attention的精髓就是考虑上下文语义信息。
那如何考虑上下文语义信息呢? 对,就是计算相关性。
例如输入是一个句子,那就不单单考虑一个词了,而是和句子中不同位置的词语计算相关性,对应输出得分。
那如何计算相关性呢?
那就有百百中做法,现在举两种常见方法:
1、Dot-product
设有两个矩阵Wq和Wk,输入经过它们得到输出,再做点乘能够计算成输入的相关性a,具体这两个矩阵长啥样就是我们要训练出来的。
2、Additive
设有两个矩阵Wq和Wk,输入经过它们得到输出,然后相加并送入激活函数tanh,再经过W得到输出a。
感觉抽象的话,就只需要记住这步操作就是要把计算相关性的矩阵参数学出来,这是目的。
知道怎么计算了,那就实做一下。
说明: 要计算a1和a2、a3、a4的相关性,那就采用上述的dot-product方法两两计算,再送入softmax。q常称为query,k称为key。
接下来,再找一个v矩阵,可以理解v这个矩阵是输入的资讯,根据q和k内积的相关性得分来抽取资讯。
位置咨询(Positional Encoding)
位置资讯就是在输入时候加入e,是人为设置的。
以上就是self-attention的原理了。
小结
self-attention就是找三个矩阵q、k、v,前两个用于计算相关性,后一个的资讯信息。一言以蔽之就是根据相关性把资讯抽出来。优点是平行计算,加快速度。
变种(Multi-head Self-attention)
- multi-head Self-attention
就是q,k,v可以分成多个,相互独立进行运算
五、self-Attention 对比
self-Attention VS CNN
self-attention 应用在目标检测、CNN上,CNN的感受野考虑的是周围8个像素的资讯,self-attention则计算整图并动态生成感受野,其实就是挑选与当前像素相关的像素。
self-Attention VS RNN
RNN一步步往下,并不是并行化,而self-attention并行给出输出,一次到位速度取胜。
self-Attention VS GNN
因为图有边相接,所以self-attention与哪个节点有关可以直接表达出来。
六、小结
至此,self-attention的技术介绍完毕,整体理解运算过程,记住q,k,v三个主要的矩阵,重点应用于seq2seq模型,尤其是现在爆红的chatGPT也是用的Transformer,而transformer的核心就是self-attention。