注意力机制
开始我们先想一个问题:假设我要找工作,我怎么才能知道我在一个公司可能拿到多少工资呢?
将全公司所有人的工资进行平均?这显然不合理吧。
一个合理的想法是找到这个公司和我相同或类似岗位且与我教育经历、工作经验相似的人的工资做平均,这样的到平均显然就更接我可能拿到的工资。
其中:已知公司每个员工岗位经历等以及对应工资分别是Key和Value(K_i, V_i)
而我就是Query(Q),最后想要得到的工资就是求的Value
注意力机制的目的就是找到一个函数F[Q, (K_i, V_i)]通过Query找到相似的Key, 并根据与每个Key的相似度赋予不同的权重Weight, 通过这个权重Weight与对应Value求出目标Query的价值Value。
这个寻找Query相似的Key的 限制条件(相似度判别方法) 就是注意力。
Attention机制:神经网络接收的输入是很多大小不一的向量,并且不同向量向量之间有一定的关系,但是实际训练的时候无法充分发挥这些输入之间的关系而导致模型训练结果效果极差。注意力机制迫使模型在解码时学会将注意力集中在输入序列的特定部分,而不是仅仅依赖于decoder的输入。
定义:从大量输入信息里面选择小部分的有用信息来重点处理,并忽略其他信息,这种能力就叫做注意力(Attention)
计算:
- 输入Query、Key、Value;
- 根据Query和Key计算两者之间的相关性/相似性(常见方法点乘、余弦相似度,一般用点乘),得到注意力得分;
- 对注意力得分进行缩放scale(除以维度的根号),再softmax归一化,再得到权重系数;
- 根据权重系数对Value值进行加权求和,得到Attention Value(此时的V是具有一些注意力信息的,更重要的信息更关注,不重要的信息被忽视了);
f ( q , ( k 1 , v 1 ) , … , ( k m , v m ) ) = ∑ i = 1 m α ( q , k i ) v i ∈ R v f\left(\mathbf{q},\left(\mathbf{k}_{1}, \mathbf{v}_{1}\right), \ldots,\left(\mathbf{k}_{m}, \mathbf{v}_{m}\right)\right)=\sum_{i=1}^{m} \alpha\left(\mathbf{q}, \mathbf{k}_{i}\right) \mathbf{v}_{i} \in \mathbb{R}^{v} f(q,(k1,v1),…,(km,vm))=i=1∑mα(q,ki)vi∈Rv
α ( q , k i ) = softmax ( a ( q , k i ) ) = exp ( a ( q , k i ) ) ∑ j = 1 m exp ( a ( q , k j