Graph Embedding学习笔记(3):Graph Convolution Networks
笔记
从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相关推荐
- Graph Wavenet 学习笔记
Graph Wavenet 学习笔记 Graph Wavenet 学习笔记 当前研究的limitation 文章的主要贡献 采用的方法 图卷积层 a diffusion convolution lay ...
- DeepWeak: Reasoning Common Software Weaknesses via Knowledge Graph Embedding 阅读笔记
DeepWeak: Reasoning Common Software Weaknesses via Knowledge Graph Embedding 阅读笔记 Article Background ...
- V-REP学习笔记之Graph
V-REP学习笔记之Graph graph是仿真中可以记录,可视和导出数据的一个工具.将某一特定物体的数据类型以数据流的形式记录下来,可用以下三种方式可视化: Time graphs:time vs ...
- 深度学习笔记:Deep Residual Networks with Dynamically Weighted Wavelet Coefficients for Fault Diagnosis of
深度学习笔记:Deep Residual Networks with Dynamically Weighted Wavelet Coefficients for Fault Diagnosis of ...
- Word Embedding 学习笔记
Word Embedding 学习笔记--GloVe 与 word2vec 完成日期:2019.02.25 文章目录 Word Embedding 学习笔记--GloVe 与 word2vec 一. ...
- cs224w(图机器学习)2021冬季课程学习笔记9 Graph Neural Networks 2: Design Space
诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 1. A General Perspective on Graph Neural Networks ...
- TensorFlow学习笔记(一)---graph,op,tensor,Session,Variables,Tensorboard
1. 机器学习 深度学习 算法 分类:神经网络(简单) 神经网络(深度) 回归 ...
- Boost Graph Library-BGL学习笔记1
首先需要说明的是BGL是一个增强STL map的通用类库,这个库是一个仅有header文件的C++库,不需要分开编译.我发现很多文章上来就讲怎么用,其实安装和导入可能会让一些人卡一会儿,做法也比较简单 ...
- 数据结构与算法学习笔记——图(Graph)
什么是图: 无向图:可以理解QQ中的互加好友 无向图: 可以理解为微博中的关注 图的一些概念: 顶点:图中的元素(A,B,C,D....) 边: 图中的一个顶点可以与任意其他顶点建立连接关系,这种建立 ...
最新文章
- Windows Live Writer 测试日志
- codeforces D Good Substrings(hash)
- 初识遗传算法 蚁群算法
- C语言Stock span 库存跨度问题(附完整源码)
- linux 键盘记录,学习笔记 kali linux 关于MS17-101漏洞攻击与键盘记录
- 【复习】使用 SQLiteDatabase 操作 SQLite 数据库
- 蓝凌ekp开发_蓝凌OA系统,蓝凌EKP,蓝凌KK__房地产案例应用__恒大集团
- SpringBoot和缓存
- U3D性能分析 Profiling
- Linux安装MySQL8.0
- 橱柜高度与身高对照表_厨房台面高度是多少 厨房台面如何选购
- php at,PHP的at符号
- android binder机制分析 以MediaPlayer为例子
- 建立ssh隧道_快速掌握 SSH 端口转发,助力远程工作
- Ubuntu easypr的配置
- 天猫魔盘显示无法连接到服务器,天猫魔盘变身USB无线网卡设置图文教程详解
- MacTips-MacTalk
- HIT软件构造 软件生命周期 配置管理
- 用c语言简单的指针求进制,求助!C语言用指针函数实现十进制转,十六进制,八进制,二进制...
- https://juejin.im/entry/559f1d31e4b0876bf61e4d20
热门文章
- python网上课程-python完整课程
- python安装包-Python安装包+安装教程
- python编写程序-Python 编程速成(推荐)
- 安装tensorflow-gpu2.0 报错:ERROR: Cannot uninstall 'wrapt'
- Pycharm出现out of memory 的终极解决方法
- javascript高级程序设计之基本概念
- UVa978 - Lemmings Battle!(优先级队列)
- 使用iframe call server及iframe target使用例
- HDU1002 Problem II(大数相加)(C++题解)
- 企业架构:现代数据架构的特征