技术大神|Transformers是一种图神经网络( 二 )


文章图片
其中 , Q^k^ , K^k^ , V^k^是第k个注意力头的可学习的权重 , O是降维投影 , 为了匹配特征的维度 。
多个头可以让注意力机制从本质上“对冲赌注” , 观察前一层隐藏特征的不同的转换或不同的方面 。 我们稍后会详细讨论 。
尺度问题以及前馈层
Transformer架构的一个关键问题是 , 词的特征在注意力机制之后可能是不同尺度 , (1)这是由于当对其他的单词特征进行求和的时候 , 这些单词的权重可能有非常shape的分布 。 (2)在个体的特征向量层面上 , 拼接多个注意力头可能输出不同的尺度的值 , 导致最后的值具有很宽的动态范围 。 照传统的ML的经验 , 在pipeline中添加一归一化层似乎是合理的 。
Transformer通过LayerNorm克服了问题 , 它在特征级别归一化和学习仿射变换 。 此外 , 通过特征维度的平方根来缩放点积注意力有助于抵消问题(1) 。
最后 , 作者提出了另一个控制尺度问题的“技巧”:一个position-wise的2层MLP 。 多头的注意力之后 , 通过一个可学习的权重 , 他们把向量*h_i^{?+1}*投影到更高的维度上 , 然后通过ReLU再投影回原来的尺寸 , 再接另一个归一化:
技术大神|Transformers是一种图神经网络
文章图片
老实说 , 我不确定这个过于参数化的前馈子层背后的确切直觉是什么 , 而且似乎也没有人对它提出问题!我认为LayerNorm和缩放的点积并没有完全解决这个问题 , 所以大的MLP是一种独立地重新缩放特征向量的hack 。
Transformer层的最终看起来是这样的:
技术大神|Transformers是一种图神经网络
文章图片
Transformer架构也非常适合深度网络 , 使得NLP社区在模型参数和数据方面都能进行扩展 。 每个多头注意子层和前馈子层的输入和输出之间的残差连接是叠加Transformer层的关键(但为了清楚起见在图中省略) 。
用GNNs构建图的表示
让我们暂时离开NLP 。
图神经网络(GNNs)或图卷积网络(GCNs)构建图数据中的节点和边的表示 。 它们通过邻域聚合(或消息传递)来实现 , 其中每个节点从其邻域收集特征 , 以更新其周围的局部的图结构的表示 。 堆叠几个GNN层使模型能够在整个图中传播每个节点的特征——从它的邻居传播到邻居的邻居 , 等等 。
技术大神|Transformers是一种图神经网络
文章图片
以这个表情社交网络为例:GNN产生的节点特征可以用于预测任务 , 如识别最有影响力的成员或提出潜在的联系
在其最基本的形式中 , GNN在第?层通过对节点自身的特征和邻居节点的特征非线性变换的方式进行聚合 , 更新节点i的隐藏特征h:
技术大神|Transformers是一种图神经网络
文章图片
其中U、V为GNN层的可学习权重矩阵 , σ为ReLU等非线性变换 。
邻居节点的总和*j∈N(i)*可以被其他输入大小不变的聚合函数代替 , 比如简单的mean/max , 或者更强大的函数 , 比如通过注意力机制的加权和 。
听起来耳熟吗?
也许一个pipeline有助于建立联系:
技术大神|Transformers是一种图神经网络
文章图片
如果我们将多个并行的邻域头进行聚合 , 并将邻域j的求和替换为注意力机制 , 即加权和 , 我们就得到图注意力网络(GAT) 。 加上归一化和前馈MLP , 看 , 我们得到一个图Transformer!
句子是完全联通的词图
为了使这种联系更加明确 , 可以把一个句子看作是一个完全连通的图 , 其中每个单词都与其他单词相连 。 现在 , 我们可以使用GNN为图(句子)中的每个节点(单词)构建特征 , 然后我们可以使用它执行NLP任务 。