如何理解注意力机制

如何理解注意力机制,第1张

如何理解注意力机制

b站视频讲解-5min

深度学习其实就是想学习一个模型可以用于实现 o u t p u t = f ( i n p u t ) output=f(input) output=finput

注意力机制的目的就是对所有的输入向量执行简单的线性加权,所以需要训练模型学习最优的权重值 α,

但是,实际情况中我们不能简单的学习权重,因为输入的向量的长度是可变的,所以需要求解的权重参数 α 的数目也因此是可变的。

此外,对于权重的值,有一个限制,需要进行归一化处理。(也就是α的和应该等于1)。

因此,为了得到权重,注意力机制巧妙地使用了key和query。
类似于python字典的每个value都会有对应的key,自注意机制就是key为value本身的情况。

以普通的注意力机制为例:

当我们有query了,而且有一序列的keys值,就可以使用点积 q·k计算权重α的值,后面加一个非线性函数一般使用tanh,加softmax使得结果归一化。
得到权重α之后,output的计算就是权重α与输入值v的加权。

在上述步骤中,忽略了一个很重要的问题,所有的k、q、v都是固定的,无法学习,因此,在注意力机制中对k、q、v引入了可学习的参数矩阵:Wk、Wq、Wv。

注意力权重&注意力分数


注意力分数:没有经过归一化的注意力得分
注意力权重:经过归一化后的注意力权重,所有值的和为1

扩展到高维度

如何设计a

最常用的两个注意力函数是加法注意和点积注意计算:
虽然两者在理论上的复杂性相似,但点积注意力在实践中更快且更节省空间,因为它可以使用高度优化的矩阵乘法代码来实现。

而对于d较小的情况,这两种机制的表现相似,加法注意力优于点积注意力

Additive Attention


当k,q长度不一样的时候最常用的做法。

Scaled Dot-Product Attention


上述,第一个公式中除以根号d,是想让a对长度不呢么敏感。

如上计算得到的注意力分数a的每一行都是一个query的注意力得分。
然后对行数据进行softmax计算,得到每一行是一个query的注意力权重。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/739431.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存