【Paper Reading】自注意力机制以及在Alphafold2中的应用( 三 )


而RNN虽然理论上可对长序列进行建模,且对位置信息敏感,但同样会有因时序拖长导致梯度消失,上下文的信息感受范围任然受限 。
如果我们使用原始的全连接网络:
在传统的全连接网络学习完成后,参数是固定值(即权重W) 。但是固定形状的权重W不能处理变长序列 。比如把“我爱我家”输成“啊我爱我家”,句意没有太多的变化,但是由于原句向右移位1格,原本有效的权重会产生错位,形成错误的预测 。因此我们需要动态地根据当前输入,生成网络权重,这种根据输入变化的动态权重即为注意力()的来源 。
在注意力机制中,全连接的思想是不变的 。
拓展一下,全连接还可以扩展为图(Graph):
每个词可以是一个节点Node,各个节点之间全连接 。每个节点的更新依赖于其他所有节点 。从而还可以用图神经网络的方法解决问题 。
综上所述,我们不再让权重W成为固定可学习的参数,而让它动态生成,我们将这个权重表示为:α;
α的产生源自于对变长序列的连接操作,是一种动态的关注度(即注意力),任何向量都会对整个句子产生一个注意力的分布 。
机制的计算
有了上面的理解,我们就可以理解机制的计算过程了:
我们假设此时有一个外来的查询向量q(query),需要了解q在整个句子中的关注度,即注意力 。
一共分为2步:
第一步,q乘以每个词向量x,即做向量内积,内积体现了两个向量之间的相关程度 。
内积得到各自的分数s,相当于q对各个词进行一次打分(score),接着对score进行归一化处理 。后,所有打分加和为1,可视作一种α的概率分布 。
α n = p ( z = n ∣ X , q ) =? ( s ( x n , q ) ) = exp ? ( s ( x n , q ) ) ∑ j = 1 N exp ? ( s ( x j , q ) ) \begin{} \{n} &=p(z=n \mid \{X}, \{q}) \\ &=\{}\left(s\left(\{x}_{n}, \{q}\right)\right) \\ &=\frac{\exp \left(s\left(\{x}_{n}, \{q}\right)\right)}{\sum_{j=1}^{N} \exp \left(s\left(\{x}_{j}, \{q}\right)\right)} \end{} αn??=p(z=n∣X,q)=(s(xn?,q))=∑j=1N?exp(s(xj?,q))exp(s(xn?,q))??
第二步,有了α的分布,就可以对所有的输入x做一个期望:
即各自对应的α乘以x,加和,就得到了最终查询词q之于整句话X的注意力 。
att ? ( X , q ) = ∑ n = 1 N α n x n = E z ~ p ( z ∣ X , q ) [ x z ] \begin{} \{att}(\{X}, \{q}) &=\sum_{n=1}^{N} \{n} \{x}_{n} \\ &=\{E}_{z \sim p(z \mid \{X}, \{q})}\left[\{x}_{z}\right] \end{} att(X,q)?=n=1∑N?αn?xn?=Ez~p(z∣X,q)?[xz?]?
注意这个加和会随着query向量q变化,因此查询的东西一变,这个期望就可能变化 。
Self- 自注意力机制
我们由此看到机制解决了两个问题:
1.解决了变长的问题 。之前的全连接方式,如果输入向量是变长会出问题;
2.解决了一句话内两个词之间的依赖关系,这个依赖关系更多的是依靠内容,而不是依靠前后的位置关系 。因为最后的注意力值是一个权重加和,是一个标量 。
那么如果查询向量query(q)是来自自身输入的向量的情况是怎么样的呢:
在上图的例子中,我们用第一个词“The”来查询整句话进行打分评估 。查询向量query(q)变成了来自自身输入的向量,即自己注意到自己,这就是 Self- 。只要有预先学习好的权重W,就可以进行自注意力的计算了 。
因此,这个Self-可以作为神经网络模型的单独一层,具有汇聚所有节点的信息的特性,并算得每个节点在所有信息中的综合期望(关注度),即可以理解为每个节点在整体中的自注意力是多少 。
Query-Key-Value (QKV) 模型
自注意力机制的应用,最著名的就是模型了,在模型中,自注意力机制特化成了Q K V模型: