注意力机制基础
理论
首先回忆一下卷积
一、卷积基于的两个原则
1、平移不变性
一个分类器,比如说我想识别小丁,那这个分类器进行分类的时候,应该是对于位置信息不敏感的,也就是说无论小丁出现在图片上的哪个位置,我用训练好的分类器,参数不变都是可以识别出哪个是小丁的
2、局部性
就是我不需要看到全局的信息,只需要看到周围一部分信息就行了
二、从全连接层应用上面连个原则变成卷积层
先说结论:
从全连接层
变成卷积层
变换过程:
类比在简单的全连接层,输入的x是有k个特征的向量,,w是二维矩阵大小(k * i),输出h是有i个特征的向量
现在我们的输入是x一张图片,二维矩阵,那么参数w变成了四维,输出h也是一个二维矩阵,
k,l相当于像素本身的信息,i,j相当于像素的位置信息
这里v是w的重新表示
然后根据平移不变性,参数v应该不依赖于i,j的信息,所以
即
再根据局部性,并不需要我们看那么远的信息,即限制了a,b的大小(上下或者左右动),当动的范围超过就不要了
即
总结:平移不变性解释了为什么我可以用同一个卷积核扫过整张图片
局部性解释了,为什么我要用那么大的一个卷积核
注意力机制
简单来说卷积关注的是一个像素点周围,也就是卷积核大小的信息,但这些信息未必是最应该被关心的,注意力机制则是显示的考虑随意线索(意思是有意关心的线索)
- 随意线索被称之为查询
- 每一个线索是一个值(value)和不随意线索(key)的对
- 通过注意力池化层有偏向性的选择某些输入
具体注意力机制是怎么发展成现在的样子呢?
一、非参的注意力池化层
- 给定数据
- 平均池化层是最简单的方案:
这里是query,即一个新数据进来的时候,关注的是所有信息的平均
- 更好的方案是60年代提出的Nadaraya-Waston
核
回归
:query
:key
:value
K是核函数,类似SVM,用来计算新数据x(query)和旧数据(key)之间的距离,相当于对所有给定数据算百分比权重 (像softmax),乘对应的value,思想上像KNN
如果K使用高斯核
那么
二、参数化注意力机制
在之前的基础上引入可学习的w
学习一个w来决定注意力,这里的w还是一个标量,以上我们讨论的都是q,k,v都是标量的情况
总结
:
:注意力分数
之后:注意力权重
拓展到高维
以上我们讨论的都是q,k,v都是标量的情况
,现在拓展到高维
注意力:
现在问题在于如何计算,有两种方式
- Additive Attention
- 可学习参数:
最后计算出是一个数,相当于把key和query合并起来放到一个隐藏层大小为h,输出为1的单隐藏层MLP中
适用于q,k,v大小不同的情况
- Scaled Dot-Product Attention(transformer用的)
- 如果query和key是同样的长度
,那么可以
- 向量化版本:n个query,m个key-value
- 注意力分数:
- 注意力池化:
这时候你可能问Dot-Product Attention,没有可学习参数啊,在transformer里,Q,K,V是一个词向量通过三个矩阵映射过来的