--- title: Graph Attention Networks (图注意力网络) date: 2021-3-11 19:48:22 updated: 2022-05-22 11:15:31 tags: - 图神经网络 - GAT - 特征学习 categories: 论文阅读笔记 keywords: description: top_img: comments: cover: toc: toc_number: toc_style_simple: copyright: copyright_author: copyright_author_href: copyright_url: copyright_info: katex: true highlight_shrink: aside: --- 在本节中,我们将介绍用于构建任意图注意力网络的构建块层(通过堆叠该层),并直接概述其与神经图处理领域的先前工作相比的理论和实践优势和局限性。 我们将从描述单个图形注意层开始,作为我们实验中使用的所有 GAT 架构中使用的唯一层。 我们使用的特定注意设置密切遵循 Bahdanau 等人的工作。 (2015)——但该框架与注意力机制的特定选择无关。 我们层的输入是一系列的节点特征,$\mathbf{h}=\left\{\vec{h}_{1}, \vec{h}_{2}, \ldots, \vec{h}_{N}\right\}, \vec{h}_{i} \in \mathbb{R}^{F}$,其中 N 是节点数,F 是每个节点中的特征数。该层产生一组新的节点特征(可能具有不同的基数$F^{\prime}$),$\mathbf{h}^{\prime}=\left\{\vec{h}_{1}^{\prime}, \vec{h}_{2}^{\prime}, \ldots, \vec{h}_{N}^{\prime}\right\}$,$\vec{h}_{i}^{\prime} \in \mathbb{R}^{F^{\prime}}$,作为它的输出。 为了获得足够的表达能力将输入特征转化为更高层次的特征,至少需要一个可学习的线性变换。为此,作为初始步骤,将由_weight matrix_$\mathbf{W} \in \mathbb{R}^{F^{\prime} \times F}$参数化的共享线性变换应用于每个节点。然后我们在节点上执行_self-attention_--一种共享的注意机制a:$\mathbb{R}^{F^{\prime}} \times \mathbb{R}^{F^{\prime}} \rightarrow \mathbb{R}$计算_attention coefficients_: $e_{i j}=a\left(\mathbf{W} \vec{h}_{i}, \mathbf{W} \vec{h}_{j}\right)$ 这表明节点$j$的特征对节点$i$的_importance_。在其最一般的公式中,该模型允许每个节点参与每一个其他节点,_dropping all structural information_。我们通过执行_masked attention_将图结构注入到机制中--我们只为节点计算了$e_{i j}$,这里的$j \in \mathcal{N}_{i}$,$\mathcal{N}_{i}$是途中节点$i$的某个_neighborhood。_在我们的实验中,这都将确切地是$i$(包括$i$)的一阶邻居。为了使系数在不同节点之间易于比较,我们使用 softmax 函数在 $j$的所有选择中对它们进行归一化: $\alpha_{i j}=\operatorname{softmax}_{j}\left(e_{i j}\right)=\frac{\exp \left(e_{i j}\right)}{\sum_{k \in \mathcal{N}_{i}} \exp \left(e_{i k}\right)}$ 在我们的实验中,注意力机制 a 是一个单层前馈神经网络,由权重向量$\overrightarrow{\mathbf{a}} \in \mathbb{R}^{2 F^{\prime}}$参数化,并应用 LeakyReLU 非线性(负输入斜率$\alpha = 0.2$)。完全展开后,注意力机制计算的系数(如图 1(左)所示)可以表示为: $\alpha_{i j}=\frac{\exp \left(\operatorname{LeakyReLU}\left(\overrightarrow{\mathbf{a}}^{T}\left[\mathbf{W} \vec{h}_{i} \| \mathbf{W} \vec{h}_{j}\right]\right)\right)}{\sum_{k \in \mathcal{N}_{i}} \exp \left(\operatorname{LeakyReLU}\left(\overrightarrow{\mathbf{a}}^{T}\left[\mathbf{W} \vec{h}_{i} \| \mathbf{W} \vec{h}_{k}\right]\right)\right)}$ 其中·T 表示转置,‖是拼接操作。 一旦获得,归一化的注意系数被用来计算对应于它们的特征的线性组合,以用作每个节点的最终输出特征(在潜在的应用可一个非线性激活函数$\sigma$之后): $\vec{h}_{i}^{\prime}=\sigma\left(\sum_{j \in \mathcal{N}_{i}} \alpha_{i j} \mathbf{W} \vec{h}_{j}\right)$ ![image.png](https://cdn.nlark.com/yuque/0/2022/png/2888751/1650851876758-ec807e70-1e5b-473b-839c-ff4a950e71a8.png#clientId=ue285f646-f58a-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=233&id=u0730e849&margin=%5Bobject%20Object%5D&name=image.png&originHeight=436&originWidth=844&originalType=binary&ratio=1&rotation=0&showTitle=false&size=68892&status=done&style=none&taskId=u93bf424a-6a46-447c-bbf8-e635e6a7eec&title=&width=450.1333333333333) 图1:左图:我们的模型使用的注意机制$a\left(\mathbf{W} \vec{h}_{i}, \mathbf{W} \vec{h}_{j}\right)$,通过权重向量$\overrightarrow{\mathbf{a}} \in \mathbb{R}^{2 F^{\prime}}$初始化,应用LeakyReLU激活)。右图:节点1在其邻域上的多头注意(K=3个头)的插图。不同的箭头样式和颜色表示独立的注意力计算。来自每个头部的聚集特征被拼接或平均以获得$\vec{h}_{1}^{\prime}$。 为了稳定自我注意的学习过程,我们发现扩展我们的机制以使用_multi-head attention_是有益的,类似于Vaswani等人。(2017年)。具体地说,$K$个独立的注意机制执行等式4(上面式子)的变换,然后将它们的特征拼接起来,产生以下输出特征表示: $\vec{h}_{i}^{\prime}=\|_{k=1}^{K} \sigma\left(\sum_{j \in \mathcal{N}_{i}} \alpha_{i j}^{k} \mathbf{W}^{k} \vec{h}_{j}\right)$ 其中,||表示拼接,$\alpha^K_{ij}$是由第$k$个注意机制($\alpha^{k}$)计算的归一化注意系数,$\mathbf{W}^k$是对应的输入线性变换的权重矩阵。请注意,在此设置中,最终返回的输出$h^{\prime}$将由每个结点的$KF^{\prime}$特征(而不是$F^\prime$)组成。 特别是,如果我们在网络的最后(预测)层上执行多头注意,拼接不再合理-相反,我们使用_averaging_,并推迟应用最终的非线性激活函数(对于分类问题通常是Softmax或Logistic Sigmoid),直到那时: $\vec{h}_{i}^{\prime}=\sigma\left(\frac{1}{K} \sum_{k=1}^{K} \sum_{j \in \mathcal{N}_{i}} \alpha_{i j}^{k} \mathbf{W}^{k} \vec{h}_{j}\right)$ 多头图注意层的聚集过程如图1(右)所示。