zoukankan      html  css  js  c++  java
  • 图注意力网络-Graph Attention Network (GAT)

    图注意力网络-Graph Attention Network (GAT)

    GAT(graph attention networks)网络,处理的是图结构数据。它与先前方法不同的是,它使用了masked self-attention层。原来的图卷积网络所存在的问题需要使用预先构建好的图。而在本文模型中,图中的每个节点可以根据邻域节点的特征,为其分配不同的权值。GAT结构很简单,功能很强大,模型易于解释。文章的实验证明,GAT模型可以有效地适用于基于图的归纳学习问题与转导学习问题。

    1. 图注意力层-Graph Attentional Layer

    1.1 图注意力层要做什么

    对于一个(N)节点的图,我们一共会构造(N)个图注意力网络,因为每一个节点都需要对于其邻域节点训练相应的注意力。而图注意力网络的层数(K)则根据需要决定。我们在这里先分析(K=1),即一个单层图注意力网络的工作原理。

    单层图注意力网络的输入为一个向量集(h = {vec{h_1},vec{h_2},...,vec{h_N}},vec{h_i}in R^F),输出为一个向量集(h'={vec{h_1'},vec{h_2}',...,vec{h_N'}},vec{h_i'}in R^{F'})。即,通过图注意力层后,原本的节点信息(vec{h_i})被更新为了(vec{h_i'})。为了使得网络能够从原始输入中提取更加深层次的信息,通常而言,(F' > F),即图注意力层是一个将信号升维的网络。

    1.2 图注意力层是如何工作的

    下图为节点(i)单的单层图注意力网络的其中一个邻域节点(j)的结构表示。
    截屏2021-02-06 下午9.10.08

    对于节点(i),考虑其邻域节点(j)对其的注意力权重的计算过程。

    输入为两个向量(vec{h_i},vec{h_j}in R^F),为了将它们变换到(R^{F'}),我们引入一个待学习的权重矩阵(WinR^{F' imes F}),以及一个待学习的向量(vec{a}in R^{2F'})

    • 做两个运算: (W * vec{h_i})(W * vec{h_j}),得到两个(R^{F'})维向量。
    • 计算节点(i)在节点(j)上的注意力值(e_{ij} = alpha(Wvec{h_i},Wvec{h_j}))(alpha)是一个(R^{F'} imesR^{F'} o R)的映射。
    • 最后对于节点(i)的所有邻域节点求得(e)后,利用(softmax)完成注意力权重的归一化操作。

    具体到计算过程即为

    [egin{align} &e_{ij} = LeakyReLU(vec{a}^T [Wvec{h_i}||Wvec{h_j}]) \ &alpha_{ij} = softmax(e_{ij}) = frac{exp{(LeakyReLU(vec{a}^T [Wvec{h_i}||Wvec{h_j}])})}{sum_{jin N_i}exp{(LeakyReLU(vec{a}^T [Wvec{h_i}||Wvec{h_j}]))}} end{align} ]

    在归一化所有节点的注意力权重后,就可以通过图注意力层进行节点的信息提取了。整个网络的输出值(vec{h_i'})计算公式如下(其中(sigma)表示激活函数):

    [vec{h_i'} = sigma(sum_{jin N_i}alpha_{ij}Wvec{h_j}) ]

    2. 多层图注意力网络(Multi-head Attention)

    截屏2021-02-06 下午9.43.48

    上图为一个三层图注意力网络。多层注意力机制存在的意义在于:不同的特征可能需要分配不同的注意力权重,如果仅仅用单层注意力层,则对于该邻域节点的所有属性都采用了相同的注意力权重,这样将会减弱模型的学习能力。

    在引入了多层注意力网络后,进一步调整公式为

    [vec{h_i'} = {||}_{k=1}^K sigma(sum_{jin N_i}alpha_{ij}^k W^kvec{h_j}) ]

    特殊情况:如果我们将多层注意力网络应用到最后一层(输出层),应该将公式改为

    [vec{h_i'} = sigma(frac{1}{K} sum_{k=1}^Ksum_{jin N_i}alpha_{ij}^k W^kvec{h_j}) ]

    ---- suffer now and live the rest of your life as a champion ----
  • 相关阅读:
    四组API
    常用的辅助类(必会
    时间戳
    SpringMVC JSON乱码解决
    数据显示到前端
    ubuntu vim字体高亮
    vi编辑文件保存后,提示""vimrc" E212: Can't open file for writing Press ENTER or type command to continu"
    C语言程序设计100例之(25):确定进制
    C语言程序设计100例之(24):数制转换
    C语言程序设计100例之(23):数列求和
  • 原文地址:https://www.cnblogs.com/popodynasty/p/14383305.html
Copyright © 2011-2022 走看看