zoukankan      html  css  js  c++  java
  • 图神经网络入门

    拜读了Jure Leskovec的《Representation Learning on Networks》才明白图神经网络到底在学什么,是如何学的,不同GNN模型之间的关系是什么。总的来说,不同类型的模型都是在探讨如何利用图的节点信息去生成节点(图)的embedding表示

    图表示学习的两大主流思想

    • 线性化思想
      • Deepwalk,Node2vec,LINE
    • 图神经网络
      • GCN,GraphSAGE,Gated GNN,subgraph embedding

    Node embedding

    image-20201122094426114

    目标:编码节点使其在embedding空间的相似性近似为在原网络的相似性

    • 定义编码器encoder
    • 定义节点相似性函数
    • 优化参数使 (similarity(u, v) approx z_v^Tz_u)

    可以看出,前两步是node embedding的核心。

    第一个问题:如何映射节点到低维空间?

    参考word2vec,借助embedding-lookup就可以

    image-20201122101546380image-20201122101605110

    第二个问题:如何定义节点相似性?

    1. Adjacency-based similarity

    • Similarity function 定义为原网络中两节点之间的边的权重

    • 用点积近似边是否存在

      image-20201122100458809

    • 找到使损失最小化的 embedding matrix (Z in R^{d*|V|})

    2. Multi-hop similarity

    考虑 k-hop 节点

    上述方法的大致思想都是:

    1. 定义节点对的相似性
    2. 优化embedding去近似它们的相似性

    3.Random walk approaches

    DeepWalk,Node2vec

    Graph neural networks

    图G:

    • V 顶点集
    • A 邻接矩阵
    • (Xin R^{m*|V|})为节点特征矩阵
      • 文本、图像,例如社交网络中人口学信息
      • 节点的度,聚类系数等

    如何表示节点

    • 核心思想:根据邻居节点生成节点的embedding

      image-20201122111304416

      每个节点拥有独立的计算图

    • how to aggregate information across the layers

      • 最简单的方法就是 求均值

        image-20201122112219124

        image-20201122112247138

      • 其他方法......

    • 定义loss训练模型

      • 无监督
      • 有监督

    下面不同的GNN算法都是在探索如何利用邻域节点生成当前节点的embedding表示

    • GNN基础思想

      [mathbf{h}_{v}^{k}=sigmaleft(mathbf{W}_{k} sum_{u in N(v)} frac{mathbf{h}_{u}^{k-1}}{|N(v)|}+mathbf{B}_{k} mathbf{h}_{v}^{k-1} ight) ]

    • GCN

      [mathbf{h}_{v}^{k}=sigmaleft(mathbf{W}_{k} sum_{u in N(v) cup v} frac{mathbf{h}_{u}^{k-1}}{sqrt{|N(u)||N(v)|}} ight) ]

    • GraphSAGE

      [mathbf{h}_{v}^{k}=sigmaleft(left[mathbf{W}_{k} cdot operatorname{AGG}left(left{mathbf{h}_{u}^{k-1}, forall u in N(v) ight} ight), mathbf{B}_{k} mathbf{h}_{v}^{k-1} ight] ight) ]

      AGG函数可以定义为:

      • Mean

        [mathrm{AGG}=sum_{u in N(v)} frac{mathbf{h}_{u}^{k-1}}{|N(v)|} ]

      • Pool

        [mathrm{AGG}=sigmaleft(left{mathrm{Q} mathrm{h}_{u}^{k-1}, forall u in N(v) ight} ight) ]

      • LSTM

        [mathrm{AGG}=mathrm{LSTM}left(left[mathbf{h}_{u}^{k-1}, forall u in pi(N(v)) ight] ight) ]

    • Gated Graph Neural Networks

      [mathbf{m}_{v}^{k}=mathbf{W} sum_{u in N(v)} mathbf{h}_{u}^{k-1} ]

      [mathbf{h}_{v}^{k}=operatorname{GRU}left(mathbf{h}_{v}^{k-1}, mathbf{m}_{v}^{k} ight) ]

    上述方法都是nodel-level embeddings,如何embedding图?

    • Subgraph Embeddings

      image-20201122150048851

      • 可以对子图的节点求和
      • 引入“虚拟节点”表示子图

    以上内容仅是对图神经网络初步了解的学习,[1]非常适合入门GNN,推荐大家阅读,有问题欢迎交流。

    [1] Jure Leskovec, 《Representation Learning on Networks》http://snap.stanford.edu/proj/embeddings-www/

  • 相关阅读:
    正则表达式随笔
    linux 命令大全
    oracle merge into
    存储过程else if
    存储过程 loop
    存储过程 函数
    存储过程使用集合来存储查询
    存储过程使用游标和索引
    存储过程使用%rowtype定义游标类型的变量提取emp数据
    ORACLE 存储过程 like 样例
  • 原文地址:https://www.cnblogs.com/gongyanzh/p/14019679.html
Copyright © 2011-2022 走看看