笔记

从Graph的视角看CNN,上图左右两个部分是等价的。左子图每个网格的通道,对应右子图每个节点的一个属性,左子图卷积核的参数相当于右子图边的权重。所谓3x3卷积就是右子图9个节点属性的加权平均(注意右子图中中间节点自己指向自己的边)。

CNN目前主流的应用场景都是规则的空间结构数据,比如图像是2D grids,语音和文本是1D grids。

在Graph上应用CNN,面临了较大的挑战:空间结构不规整,每个节点的邻接节点数量不同,如何将变长的空间结构转化为定长的空间结构

目前,将变长转化为定长的思路主要有两个:一个方法比较直接,也比较暴力,就是对节点之间的关系进行排序,强行按照预设好的参数取出排序最前面的几个节点作为邻接节点,从而将Graph的不定长结构转化为定长结构,典型代表Patchy-SAN;另一个方法稍微优雅一些,也属于典型的不定长变定长的思路,本质是加权求和,典型代表是Kipf & Welling (ICLR 2017),目前GCN讨论的都是该作者提供的思路。

Patchy-SAN

上图讲解了PATCHY-SAN方法的总体流程。第一步是node sequence selection,输入数据是最底层的Graph,将Graph节点按照进行排序,取出前w个节点。第二步是Neighborhood Assembly,即对于选出来的每个节点逐个构建邻域,方法很简单就是BFS,先搜索直接相邻的一级邻域,再搜索下一级邻域,直到找到超过k个邻居位置。第三步是Neighborhood Normalization,因为BFS搜索出来的邻域有可能超过k个,也有可能不足k个,需要normalize为k个,具体方法是以选出来的每个节点为root,从邻域中找出前k个与root最接近的节点。

上图讲解了neighborhood normalization后怎么转化为标准的CNN问题进行求解。对于每个节点,normalized neighborhoods可以理解为CNN中receptive fields,节点和边的属性attributes可以理解为CNN中的channel。扁平状的长方体表示节点attribute,正方体表示边的attribute(可以理解为边是通过邻接矩阵k*k的方式表示)

对于选出的每个节点,normalize后的数据维度是[wk, n],使用M个一维的receptive fields为k,stride为k的卷积核,对n个通道的节点属性进行卷积,就可以得到上图所示的效果,输出数据维度是[w, M]。同样的,对于每条边,normalize后的数据维度是[wk^2, n],使用M'个一维的receptive fields为k^2,stride为k^2的的卷积核,对m个通道的边属性进行卷积,输出数据维度是[w, M']。之后就可以使用任意的神经网络结构对Graph进行建模了。

Neighborhood Normalization是这篇文章的关键,上图是作者对这个步骤的讲解,具体含义还没有搞明白。

GCN

问题定义:学习一个函数,输入数据是节点的属性和图的邻接矩阵,输出是一个NXF的特征矩阵,F是每个节点的输出特征数。

For these models, the goal is then to learn a function of signals/features on a graph G=(V,E) which takes as input:

  • A feature description xi for every node i; summarized in a N×D feature matrix X (N: number of nodes, D: number of input features)
  • A representative description of the graph structure in matrix form; typically in the form of an adjacency matrix A (or some function thereof)

and produces a node-level output Z (an N×F feature matrix, where F is the number of output features per node). Graph-level outputs can be modeled by introducing some form of pooling operation

先看一个简单的函数定义:

先看括号内的式子,含义很简单,就是当前节点的输出等于邻接节点的加权平均。sigma函数是做一次非线性变换,以增强模型的能力,文章用ReLU。

上面这个式子有两个局限性,一是A只考虑了邻接节点,缺少自身节点的信息,可以用A+I来替换A,以保持与传统卷积定义一致。二是加权平均没有归一化处理,可以用节点的出入度来归一化,我们用度矩阵D表示。综上,作者做了以下调整,得到了图卷积操作:

看一下作者搭建的GCN结构。第一层,输出的每个节点只包含了一级邻接节点的信息;第二层,输出的每个节点包含了上一个隐层的一级邻接节点的信息,相当于输入层多级邻接节点的信息。层级越高,信息越宏观。

附录

Graph Convolution Networks

SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS

Learning Convolutional Neural Networks for Graphs

Patchy-SAN讲义

极验公众号-浅析图卷积神经网络

雷锋网

Graph Embedding学习笔记(3):Graph Convolution Networks相关推荐

  1. Graph Wavenet 学习笔记

    Graph Wavenet 学习笔记 Graph Wavenet 学习笔记 当前研究的limitation 文章的主要贡献 采用的方法 图卷积层 a diffusion convolution lay ...

  2. DeepWeak: Reasoning Common Software Weaknesses via Knowledge Graph Embedding 阅读笔记

    DeepWeak: Reasoning Common Software Weaknesses via Knowledge Graph Embedding 阅读笔记 Article Background ...

  3. V-REP学习笔记之Graph

    V-REP学习笔记之Graph graph是仿真中可以记录,可视和导出数据的一个工具.将某一特定物体的数据类型以数据流的形式记录下来,可用以下三种方式可视化: Time graphs:time vs ...

  4. 深度学习笔记:Deep Residual Networks with Dynamically Weighted Wavelet Coefficients for Fault Diagnosis of

    深度学习笔记:Deep Residual Networks with Dynamically Weighted Wavelet Coefficients for Fault Diagnosis of ...

  5. Word Embedding 学习笔记

    Word Embedding 学习笔记--GloVe 与 word2vec 完成日期:2019.02.25 文章目录 Word Embedding 学习笔记--GloVe 与 word2vec 一. ...

  6. cs224w(图机器学习)2021冬季课程学习笔记9 Graph Neural Networks 2: Design Space

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 1. A General Perspective on Graph Neural Networks ...

  7. TensorFlow学习笔记(一)---graph,op,tensor,Session,Variables,Tensorboard

    1.   机器学习                         深度学习 算法 分类:神经网络(简单)          神经网络(深度)     回归                       ...

  8. Boost Graph Library-BGL学习笔记1

    首先需要说明的是BGL是一个增强STL map的通用类库,这个库是一个仅有header文件的C++库,不需要分开编译.我发现很多文章上来就讲怎么用,其实安装和导入可能会让一些人卡一会儿,做法也比较简单 ...

  9. 数据结构与算法学习笔记——图(Graph)

    什么是图: 无向图:可以理解QQ中的互加好友 无向图: 可以理解为微博中的关注 图的一些概念: 顶点:图中的元素(A,B,C,D....) 边: 图中的一个顶点可以与任意其他顶点建立连接关系,这种建立 ...

最新文章

  1. Windows Live Writer 测试日志
  2. codeforces D Good Substrings(hash)
  3. 初识遗传算法 蚁群算法
  4. C语言Stock span 库存跨度问题(附完整源码)
  5. linux 键盘记录,学习笔记 kali linux 关于MS17-101漏洞攻击与键盘记录
  6. 【复习】使用 SQLiteDatabase 操作 SQLite 数据库
  7. 蓝凌ekp开发_蓝凌OA系统,蓝凌EKP,蓝凌KK__房地产案例应用__恒大集团
  8. SpringBoot和缓存
  9. U3D性能分析 Profiling
  10. Linux安装MySQL8.0
  11. 橱柜高度与身高对照表_厨房台面高度是多少 厨房台面如何选购
  12. php at,PHP的at符号
  13. android binder机制分析 以MediaPlayer为例子
  14. 建立ssh隧道_快速掌握 SSH 端口转发,助力远程工作
  15. Ubuntu easypr的配置
  16. 天猫魔盘显示无法连接到服务器,天猫魔盘变身USB无线网卡设置图文教程详解
  17. MacTips-MacTalk
  18. HIT软件构造 软件生命周期 配置管理
  19. 用c语言简单的指针求进制,求助!C语言用指针函数实现十进制转,十六进制,八进制,二进制...
  20. https://juejin.im/entry/559f1d31e4b0876bf61e4d20

热门文章

  1. python网上课程-python完整课程
  2. python安装包-Python安装包+安装教程
  3. python编写程序-Python 编程速成(推荐)
  4. 安装tensorflow-gpu2.0 报错:ERROR: Cannot uninstall 'wrapt'
  5. Pycharm出现out of memory 的终极解决方法
  6. javascript高级程序设计之基本概念
  7. UVa978 - Lemmings Battle!(优先级队列)
  8. 使用iframe call server及iframe target使用例
  9. HDU1002 Problem II(大数相加)(C++题解)
  10. 企业架构:现代数据架构的特征