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...

相关推荐
THMAIL13 分钟前
深度学习从入门到精通 - LSTM与GRU深度剖析:破解长序列记忆遗忘困境
人工智能·python·深度学习·算法·机器学习·逻辑回归·lstm
Gyoku Mint16 分钟前
NLP×第六卷:她给记忆加了筛子——LSTM与GRU的贴靠机制
人工智能·深度学习·神经网络·语言模型·自然语言处理·gru·lstm
励志不掉头发的内向程序员23 分钟前
C++进阶——继承 (1)
开发语言·c++·学习
悠哉悠哉愿意31 分钟前
【数学建模学习笔记】机器学习分类:随机森林分类
学习·机器学习·数学建模
YF云飞1 小时前
数据仓库进化:Agent驱动数智化新范式
数据仓库·人工智能·ai
悠哉悠哉愿意1 小时前
【数学建模学习笔记】机器学习分类:KNN分类
学习·机器学习·数学建模
ningmengjing_1 小时前
理解损失函数:机器学习的指南针与裁判
人工智能·深度学习·机器学习
四谎真好看1 小时前
Java 学习笔记(进阶篇2)
java·笔记·学习
程序猿炎义2 小时前
【NVIDIA AIQ】自定义函数实践
人工智能·python·学习
小陈phd2 小时前
高级RAG策略学习(四)——上下文窗口增强检索RAG
人工智能·学习·langchain