论文阅读GNN阅读笔记
Posted 小松不菜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了论文阅读GNN阅读笔记相关的知识,希望对你有一定的参考价值。
A gentle introduction on gnn
前言
发表在distill的文章
图神经网络在应用上才刚刚开始
搭建了一个GNN playground
什么是图
图是表示实体之间的关系
可以分别表示成点向量、边向量、图向量
图可以分为有向图和无向图
数据是怎么表示成图
图片表示成图:
把图上的每一个像素都映射成图上的一个点
边是像素之间的关系
文本表示成图:
上一个词和下一个词之间有一条有向边
化学表示图:
每一个原子表示成一个点
社交网络表示成一个图:
人物在场景里同时出现
数据集:
Qm9 化学分子式
Cora 论文引用
wikipedia 知识图 引用图
在图上可以定义什么问题
图层面
比如给一张图,对图进行分类
顶点层面
节点分类
边层面
边的属性预测
将机器学习用在图上会遇到什么挑战
图的四个属性:点属性、边属性、图的全局属性、连接性
连接性可以通过邻接矩阵来表示
存储高效并且存储无关的
图神经网络
v1 最简单的GNN
对于点、边、图,分别构造一个MLP
进去以后得到了更新后的三种向量
比如做节点二分类,就在后面加一个输出维度为2的全连接层,再加一层softmax,就可以得到输出。
如果是n类,就加一个输出维度为n的全连接层,再加一层softmax。
pooling
对一个点的向量做预测
把全局向量、边的向量加起来;不过维度要一致,否则要做投影
所有边和顶点的向量加起来,可以得到全局的向量
总结
GNN一个层里就是三个MLP,对原图做transform
在图转换为向量以后,加一个分类层就可以做预测了
但是这种方法有局限性,没有考虑到连接信息,没有把图的信息更新到结构里
v2 信息传递
aggregate 把邻居的向量加起来,聚合后,再更新
这里相当于卷积,但是权重都是一样的
顶点和边之间的交换
可以交替交换
全局信息的交换
Master node
这个点是一个虚拟的点,可以和所有的点和边相连
把所有的顶点和边的信息都拿过来汇聚
这样对三类属性都可以学到预测的向量
其实有点像attention mechanism
基于消息传递的图神经网络
GNN playground
把gnn的训练程序嵌入到javascript
在浏览器里运行的
可以选图神经网络有多少层
可以改变超参数,重新进行训练
这个东西超参数比较难调
相关技术
不同类型的图
可能有很多别的图,比如multigraph,比如图可能是分层的
采样
如果图太大,可能要做采样
随机采样一些点,把这些点的邻居找出来,只在子图上做计算,减少内存
做随机游走,规定最多随机走几步,就可以得到子图
batch
inductive biases
gnn的假设是保持了图的对称性
不同的汇聚操作
求和、求平均
没有一个聚合的操作是比另一个更好的
所以在实际应用中可能要找一个适合的办法
GCN
GCN就是带了aggregation的神经网络
每一个点都是以自己为中心的往前走k步的子图的汇聚
GCN可以认为是有n个子图
dual
可以做对偶
在图上做卷积,做random work,都是在矩阵上做乘法
和pagerank的思想有点像
GAT
在图上做汇聚的时候每个点的权重是相同的
卷积的权重是对位置不敏感的
所以可以用注意力机制的的办法
做点乘,以后做softmax
图的可解释性
图到底学到了什么东西
结论
写作:非常流畅
gnn就是对属性做变换,但是不改变图的结构
怎么做预测,就是最后做输出层
如果有缺失可以用一个聚合的操作,弥补缺失的属性
消息交换,可以通过汇聚的方法把图上的信息进行汇聚
实验部分对于每个超参数对结果的影响是怎么样的
最后对gnn相关的技术进行了展开
交互图蕴藏了很多信息,美观直观
图既是一个优点也是一个缺点,图数据的可视化是比较难的
distill写作的门槛太高
尽量的使用图和文字来描述,而不是公式和代码
在图上做优化是很难的,因为它的架构很稀疏
图神经网络对超参数很敏感
所以图神经网络的门槛比较高
图神经网络在工业界的应用是比较少的
CVPR 2020 论文阅读笔记(三维点云/三维重建)
参考技术A 论文地址: https://arxiv.org/abs/2003.00410
前置文章:10/16、10/17、10/18
本文提出了Point Fractal Network(PF-Net),旨在从不完整的点云数据中恢复点云,克服了之前方法修改现有数据点、引入噪声和产生几何损失的缺点。
由前置文章可知,之前的点云修复方法是输入不完整的点云,输出完整的点云,但这样会导致原有信息的缺失。这篇文章提出PF-Net,主要特点有三个:
网络的整体结构如下:
网络详细推理步骤如下:
损失函数使用完整性损失和对抗损失的加权平均,完整性损失使用L-GAN中提出的CD距离:
对抗损失使用GAN中常见的损失函数
感觉这篇文章对多尺度的运用非常极致,在编码器、解码器和CMLP中都应用了这种思想,最后的效果也非常不错,很值得借鉴。
论文地址: https://arxiv.org/abs/1612.00593
PointNet提出一种基础的网络结构,可以用于点云分类、部分分割和语义分割等多种任务。在这篇文章之前,点云数据的处理方式是将点云数据转换为多个二维的视图或三维的体素形式,然后应用2D/3D CNN进行处理,但这样引入了多余的体积,效率不高。本文是第一个直接使用点云数据的神经网络。(其实可以这样类比,在二维图像处理中,假设图像是二值化的,传统方法是将这个图像直接丢到CNN里面,但如果背景特别多会比较浪费资源。直接使用点云数据相当于直接将前景像素的坐标输入到神经网络里面,对稀疏数据会有比较好的性能,但因为以下三个问题导致直接使用坐标信息比较困难)
由于点云的排列是无序的(可以想象,点云中任意一点排在前面对点云的表达都是相同的)、点云之间是有相互作用的(相邻的点云才能构成形状)、点云在某些变换下具有不变性(比如旋转不会改变点云的类别)这些特性,要求神经网络既能处理无序的数据,又能捕捉全局的结构特征,同时对刚性变换不敏感。基于这些条件,作者提出了如下的网络结构:
可以简要分析一下网络的工作流程,以点云分类问题为例:
感觉网络的结构虽然简单,但是却很好地满足了点云数据自身特性对神经网络的要求。而且我觉得在图像处理中,也有时候必须用到坐标信息或者一些标量特征,这篇文章的方法对于怎样将这些特征融合进CNN里面也有一定的启发意义。
论文地址: http://proceedings.mlr.press/v80/achlioptas18a.html
这篇文章的主要工作是:
首先来看衡量两个点云相似程度的指标部分,作者首先给出了两个距离,EMD和CD:
在计算上,CD更为简便,而且EMD是不可导的。
基于这两种距离,作者引入了三种衡量两个点云相似程度的指标:JSD、Coverage和MMD:
定义了指标后,就可以实现自动编码器和生成模型了。作者提到了四种结构,分别是:
作者同时验证了AE的一些其他功能,比如如果给AE的编码器输入不完整的点云数据,即可训练得到点云复原的模型。使用SVM对低维表示进行分类,即可进行点云分类的任务,证明AE在点云数据形式中的潜在应用较为广泛。
论文地址: http://papers.nips.cc/paper/7095-pointnet-deep-hierarchical-feature-learning-on-point-se
PointNet++针对PointNet提取局部信息能力不强的弊端,提出了一种层次神经网络,可以更好地提取局部信息。其中心思想是将整个点云分割成若干个小部分来提取信息,然后将每个小部分整合成较大的部分,提取更高层次的信息。类似于CNN中卷积和下采样的思想。首先来看网络结构图:
网络大概可以分为两个部分,左边是层次的点云特征提取网络,右边是针对不同任务的解码网络。
特征提取分为若干个set abstraction模块,每个模块又分为采样层、分组层和特征提取层。
得到了较高层次的特征后,对不同的任务需要不同的解码网络。对分类网络来说比较简单,使用全连接即可。对分割网络来说,由于对每个点都需要输出数值,则需要类似上采样的操作。具体的实现作者使用了插值的方法,将较少的点插值到较多的点上去。首先找到插值的目标坐标,然后寻找K个距离最近的已知点,以距离的倒数作为权重,将K个点的特征做加权平均,作为这个点的特征。然后使用之前特征提取中得到的该点的特征与当前特征做一个拼接,即可得到最终特征(类似U-Net的skip connection)。公式如下:
感觉这篇文章和PF-Net的思想差不多,都是希望提取多尺度的特征。但是思路不一样,都值得借鉴。
以上是关于论文阅读GNN阅读笔记的主要内容,如果未能解决你的问题,请参考以下文章
SurfaceDefectsDetectionBasedonAdaptiveMultiscaleImageCollectionandConvolutionalNeuralNetworks-论文阅读笔记