GAT图注意力网络

GAT(Graph Attention Networks),加入了注意力机制的图神经网络,与GCN不同的是,其消息传递的权重是通过注意力机制得到。
GAT的计算过程:
a i j = s o f t m a x j e i j e x p ( e i j ) Σ k ∈ N i e x p ( e i k ) a_{ij}=softmax_{j}e_{ij}\frac{exp(e_{ij})}{\Sigma_{k∈N_i}exp(e_{ik})} aij=softmaxjeijΣkNiexp(eik)exp(eij)     (1)
e i j = L e a k y R e L U ( α T [ W h i ∣ ∣ W h j ] ) e_{ij}=LeakyReLU(α^T[Wh_i||Wh_j]) eij=LeakyReLU(αT[WhiWhj])  (2)
下面来详细解析这个公式
GAT图注意力网络_第1张图片
a i j a_{ij} aij代表的是节点j传递到节点i时要乘上的权重
h i h_i hi h j h_j hj;是当前输入层的节点i和节点j的特征表示, W W W是线性变换矩阵,形状是 W ∈ R F × F ′ W∈R^{F×F'} WRF×F,其中F就是输入特征的维度。F’是输出特征的维度。
||是向量拼接操作,原本维度为F的 h i h_i hi h j h_j hj;经过 W W W线性变换后维度均变为 F ′ F' F,经过拼接后得到维度为2F’的向量。此时再点乘一个维度为2F’的单层矩阵 α \alpha α的转置,然后经LeakyReLU激活后得到1维的 e i j e_{ij} eij
得到所有的 e i j e_{ij} eij后, 再进行softmax操作,得到注意力权重 a i j a_{ij} aij

那么LeakyReLU函数是什么?
R e L U ( x ) = { x , x ≥ 0 0 , x < 0 ReLU(x)=\begin{cases} x, x ≥ 0\\ 0, x < 0 \\ \end{cases} ReLU(x)={x,x00,x<0
L e a k y R e L U ( x ) = { x , x ≥ 0 α x , x < 0 LeakyReLU(x)=\begin{cases} x, x ≥ 0\\ \alpha x, x < 0 \\ \end{cases} LeakyReLU(x)={x,x0αx,x<0
GAT图注意力网络_第2张图片
ReLU函数属于“非饱和激活函数”,由公式可见ReLU就是将所有负值都设为0。如果大多数的参数都为负值,那么显然ReLU的激活能力会大大折扣。
LeakyReLU在负值部分赋予了一个负值斜率 α \alpha α。如此一来负值是会根据 α \alpha α的值变化,而不会都为0。
LeakyReLu又衍生出了:PReLU(parametric rectified inear参数化线性修正),负值斜率由训练数据决定的RReLU(randomized rectified linear随机线性修正),负值斜率是在一个范围内随机取值,且会在训练过程中随机变化。

GAT图注意力网络_第3张图片
计算节点的在当前GAT网络层的输出向量 h i ′ h_{i}' hi,即可描述为:
h i ′ = σ ( Σ j ∈ N i α i j W h j ) h_{i}'=\sigma(\Sigma_{j∈N_i}\alpha_{ij}Wh_{j}) hi=σ(ΣjNiαijWhj)   (3)
其中 σ ( ⋅ ) \sigma(·) σ()代表任意激活函数, N i N_i Ni代表节点i的一阶邻居集, W W W与注意力计算中的 W W W是一样的。到这就是一个消息传递,并用加权求和的方式进行消息聚合的计算过程。
在GAT中,我们可以进行多次消息传递操作,然后将每次得到的向量拼接或者求平均。这称之为多头注意力(Multi-Head Attention),请看如下公式:
(GAT的论文中建议在GAT网络中间的隐藏层采取拼接操作,而最后一层采取平均操作。)
拼接每一层单头消息传递得到的向量:
GAT图注意力网络_第4张图片
平均每一层单头消息传递得到的向量:
GAT图注意力网络_第5张图片
GAT图注意力网络_第6张图片

你可能感兴趣的:(机器学习,算法,分类)