Attention机制学习

写在前面

注意力机制是一个很不错的科研创新点方向,但是没有系统记录过学习过程,这里记录科研中遇到的各种注意力机制。

1. Attention机制解释

本质上来说用到attention的任务都有Query,Key,Value三个关键components,目标则是输入query,然后根据query和key的关系以及key和value的关系求出最终的value。总结来说注意力机制可以分为三步:
1.输入Query;
2.计算Query和Key的注意力权重 α \alpha α ;
3.根据 α \alpha α来计算输入信息对Value的加权平均。

Attention机制流程(参考

1.1 Example - 根据腰围估计体重

参考视频,这个大佬up讲的非常好,值得大家去一键三连!


图1.1.1

如图1.1.1所示,这个例子是想通过输入一个腰围( q q q),得到最后的体重预测值( k k k)。每一个 k k k对应一个 v v v,但是 q q q要跟三个 k k k都有一个加权,如图1.1.2所示。

图1.1.2

其中, α ( q , k 1 ) \alpha(q, k_1) α(q,k1)这个就是注意力权重,代表着 q q q和 k 1 k_1 k1的相关性,也就是 q q q要在多大程度上参考 k 1 k_1 k1对应的 v 1 v_1 v1。 α ( q , k 1 ) \alpha(q, k_1) α(q,k1)的计算方式有很多,比如采用余弦距离、欧式距离、皮尔森等距离度量函数。但是需要注意的就是每一个注意力权重都是在经过距离函数计算之后,都要进行归一化处理。归一化处理的方式也很多,比如softmax处理。图三就是采用了欧式距离度量函数,并且采用softmax归一化处理,从而得到最终的注意力权重。

图1.1.3

现实中,我们的 q q q肯定大多是多维数据,但是计算的过程是一样的。比如说我们的 q q q不再仅包含一个腰围数据,我们还包括了胸围数据,那么这个注意力机制的计算过程就会变成如图1.1.4所示的形式。

图1.1.4
需要注意的是, k k k和 v v v不一定也要是二维的,这里up只是为了给后面的self-attention做铺垫,保持 q , k , v q,k,v q,k,v维度一致性才采用2维。图4也给出了3种计算多维数据的权重分数的计算方式。其中的点积模型和缩放点积模型计算方法需要保证 q q q和 k k k的维度是一致的,也就是self-attention中的注意力权重的计算方法。图1.1.5则给出了一个将 q , k , v q,k,v q,k,v矩阵化后采用缩放点积权重计算过程。

图1.1.5

2. 各种Attention机制

2.1 Self-Attention

自注意力机制是注意力机制的变体,他能够基于输入的数据来进行注意力机制的学习,减少了对外部的依赖,让模型更多地关注数据本身或特征的内部相关性。例如,在1.1的那个例子里头,把 Q , K , V Q,K,V Q,K,V都改成输入的 X X X。

图 2.1.1
然后采用缩放点积方式的计算则如下所示。

图 2.1.2

但是在实际应用中,我们往往会对 X X X映射到 Q , K , V Q,K,V Q,K,V的过程中做一个线性变换,比如大名鼎鼎的Transformer模型。

图 2.1.3 如图2.1.3所示,Transfomer通过引入三个可训练矩阵, 然后图2.1.2的公式就可以变成下式。

f ( X ) = s o f t m a x ( X W Q ( X W K / d ) T ) X W V f(X) = softmax(XW_Q(XW_K/\sqrt{d})^T)XW_V f(X)=softmax(XWQ(XWK/d )T)XWV

3. 问题归纳

3.1 为什么点积计算能代表向量间的相似性?

向量 A A A和 B B B的点积可以展开成下式:
A ⋅ B = ∣ A ∣ × ∣ B ∣ × c o s ( θ ) A·B=|A|\times|B|\times cos(\theta) A⋅B=∣A∣×∣B∣×cos(θ)

由上式可以看到, A A A和 B B B的相似度取决于模长和向量间的夹角。在DL中,用以计算点积之前,往往会对 A A A和 B B B进行L2等归一化操作,让 ∣ A ∣ |A| ∣A∣和 ∣ B ∣ |B| ∣B∣等于1或者处于一个较小的范围。这时候 A A A和 B B B的相似度就取决于向量夹角了。那可能会有疑问为什么不直接计算cos余弦相似度呢?因为向量点积的计算速度是最快的,虽然可能存在误差,但是也算是用误差换时间了。

To be continued...

相关推荐
奈斯。zs12 分钟前
yjs08——矩阵、数组的运算
人工智能·python·线性代数·矩阵·numpy
Melody205012 分钟前
tensorflow-dataset 内网下载 指定目录
人工智能·python·tensorflow
DisonTangor44 分钟前
阿里通义千问开源Qwen2.5系列模型:Qwen2-VL-72B媲美GPT-4
人工智能·计算机视觉
豆浩宇44 分钟前
Halcon OCR检测 免训练版
c++·人工智能·opencv·算法·计算机视觉·ocr
LLSU131 小时前
聚星文社AI软件小说推文软件
人工智能
JackieZhengChina1 小时前
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
人工智能·智能手机
ShuQiHere1 小时前
【ShuQiHere】 探索数据挖掘的世界:从概念到应用
人工智能·数据挖掘
嵌入式杂谈1 小时前
OpenCV计算机视觉:探索图片处理的多种操作
人工智能·opencv·计算机视觉
时光追逐者1 小时前
分享6个.NET开源的AI和LLM相关项目框架
人工智能·microsoft·ai·c#·.net·.netcore
东隆科技1 小时前
PicoQuant公司:探索铜铟镓硒(CIGS)太阳能电池技术,引领绿色能源革新
人工智能·能源