Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CS224W 18.1-Limitations of Graph Neural Network

CS224W 18.1-Limitations of Graph Neural Network

作者头像
Houye
发布于 2020-04-07 07:54:50
发布于 2020-04-07 07:54:50
8390
举报
文章被收录于专栏:图与推荐图与推荐

视频地址,课件和笔记可见官网。

前面一直在说GNN非常吊,效果非常好. GNN就没有缺点和局限?

这一节就聊聊GNN的局限

GNN的关键在于对图结构的捕获,也就是邻居的聚合. 但是,现存的GNN有两大缺点

  1. 但是在某些情况下, 不同的图结构,GNN可能无法区分(当然有些GNN是可以区分的). 注意,这里做了非常多的简化, 所有节点的特征认为都是一样的, 用黄色颜色表示.

这里就引发我们的思考了.(1)即使简化后的理论分析或者证明可以说明GNN的局限性.但是,我们在实际使用GNN的时候,节点的特征往往是不同的. 这时候,GNN能区别不同的图结构吗?? (2)任意图结构都不能区分吗? 这肯定是不可能的. 应该说GNN对某些图结构不可区分. 这里说的是在图非同构的的情况下,依然无法区分. 后面会详细介绍

2. 另一个就是不够鲁邦,容易收到噪音的影响. 至于Noise的话,引入邻居的权重聚合可以一定程度上解决,比如GAT.

-图同构测试 graph isomorphism test就是用来测试两个图的结构是否一样.

这是一个非常非常难的问题 NP-hard的

-那么,如果用GNN来做图同构测试可以吗?

-回顾下之前GNN的聚合过程,可以展开成一个子树结构,按层来聚合.

根据展开后的邻居子树的不同, GNN可以把不同的节点映射为不同的表示.

-两个子树结构的例子

  • 这里引入一个 单射 Injectivity 的概念. 简单来说就是:一个输入会映射到一个输出; 不同输出映射到不同的输出.
  • 对应到GNN中就是,一个节点的子树结构(输入)不同,那么其向量表示(输出)就不同.

-GNN的整个聚合过程如果要满足"单射"的话,那么每一步(或者每一层)子树的聚合都要是单射的.

这个很好理解, f(x)和g(x)都是单射的, 那么f(g(x))也是单射的.

这里先针对一层的聚合函数是否是"单射"进行研究. 这里先研究函数的输入:节点的邻居集合.

这里先介绍一个概念 multi-set.

计算专业的人对set的概念应该都很清楚,毕竟写代码的时候经常会用到

multi-set和set差不多, 但是multi-set里面允许有重复的元素

比如下图中的第2个multi-set包含了2个黄色,1个蓝色

为什么要搞multi-set呢?其实是为了更好的描述节点的邻居集合.

现在GNN的输入有了比较清晰的定义

-这里我们先看看GCN中的对邻居做平均 mean-pooling是不是单射的

-GCN中的Mean-pooling不是单射的为什么呢?

假定两个不同的节点, 节点1的邻居是1个黄色,1个蓝色, 节点2的邻居是2个黄色,2个蓝色,

如果对两个节点的邻居做mean pooing,结果都是0.5个黄色+0.5个蓝色,也就是说无法区分节点1和2.

-这里在稍微延伸下, 还有哪些聚合方式是非单射的

-那么,到底什么样的函数是单射呢?

-很自然的, 这里的\phi和f都可以用NN来做

-这里就引入一篇ICLR2019的 GIN了,一篇可以实现单射的GNN

-还是之前的例子. 下面两个图, GCN和GraphSAGE是无法区分的

那么我们看看GIN的Sum pooling是怎么区分的?

可以看出来对于不同的子树结构, GIN聚合出了不同的表示.

比如右边的4棵子树(对应4个节点的邻居展开), 结构不同,最后的节点表示也是有4种.进而整个图的表示也是不同的. 这样,GIN就可以把不同的图结构进行区分.

-上面的例子说明了GIN非常厉害,通过在multi-set上的injective聚合来实现对图结构的精准区分.

但是,GIN为什么会这么强呢?

-回忆我们之前说的图同构问题. 其实对于图同构的问题,可以通过WL测试来检验两个图是否是同构的.

-那么, GIN这么吊也能区分, 和WL test有什么关系呢?

这里作者分了3步来介绍WL test

WL test第一步, WL test也要对邻居进行展开, 生成一颗子树.

可以看出,GNN中的邻居聚合过程和WLtest的过程非常相似.

下图更加具体一点. 两者都是将图展开为子树结构,然后进行分析.

WL test第二步: 对子树进行分类整理,也就是所谓的counts different colors.

左边是4颗一模一样的子树

右边是2颗紫色子树, 1颗蓝色子树,1颗绿色子树.

-WL test第三步 比较整理后的结果.如果一样,两个图就是同构的

-这里再看一个WL test的例子(引自CSDN-专业IT技术社区-登录)

(a)网络中每个节点有一个label,如图中的彩色的1,2,3,4,5

(b)标签扩展:做一阶广度优先搜索,即只遍历自己的邻居。比如在图(a)网络G中原(5)号节点,变成(5,234),这是因为原(5)节点的一阶邻居有2,3和4

(c)标签压缩:仅仅只是把扩展标签映射成一个新标签,如 5,234 => 13

(d)压缩标签替换扩展标签

(e)数标签:比如在G网络中,含有1号标签2个,那么第一个数字就是2。这些标签的个数作为整个网络的新特征

WL test的复杂度是O(hm),其中h为iteration次数,m是一次iteration里multiset的个数。

-正是由于WL test和GIN的操作非常像,所以GIN的能力能够和WL test一样强.

-WL test非常厉害,但是偶尔有些情况也是不work的 这里给了一个WL test不work的例子.

-下图展示了GIN的分类能力

最上面那条横线代表WL test, 准确度是1.

这里3种GNN只有GIN能达到WL test的准确度.

也就是说,实验结果和前面的分析完全符合.

-还记得前面在分析GNN的能力的时候,我们做了一个非常强的假设.也是就所有的节点的特征都是一样的.

下图可以看到,在满足特征一致假设的情况下, GIN远远优于GCN和GraphSAGE.

在节点特征存在的时候,GIN的优势就没有那么大了.

这里补充一下为什么Mean和Max的聚合(对应下图(a))对于无特征或者说所有节点特征一样的情况下,为什么GNN就失效了.

-最后总结一下

大部分的GNN都不是单射的,因此,其对不同图结构的判别能力比较差.

GIN是单射的,因此其能力和WL test一样强.

截止到这里,GNN第一个缺陷就说完了.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图神经网络与推荐系统 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Pytorch小技巧-数据增强(上)
那么在现实生活中,想要得到大量的数据,不仅要收集各种情景下、各种角度、各个位置的照片,还有确保数据的多样性。
用户6719124
2019/12/05
2.1K0
Pytorch小技巧-数据增强(上)
Data augmentation
目前深度学习神经网络对数据的要求很高,不仅数据要相关,而且要求有尽可能更大的数据集。在现实生活中,要想得到大量的数据,不仅要收集各种情景下、各种角度、各个位置的照片,还要确保数据的多样性,只有这样才能确保神经网络学到的特征更加全面
mathor
2020/02/14
7990
Data augmentation
Pytorch 中的数据增强方式最全解释
本文主要介绍 Pytorch 中 torchvision.transforms 几个数据增强函数的使用
机器视觉CV
2019/10/28
7.8K0
Pytorch 中的数据增强方式最全解释
【小白学PyTorch】7 最新版本torchvision.transforms常用API翻译与讲解
这个Transforms是常见的图像的转换(包含图像增强等), 然后不同的transforms可以通过Compose函数连接起来(类似于Sequence把网络层连接起来一样的感觉)。后面的是关于图像分割任务了的介绍,因为入门PyTorch主要是图像分类,所以后面先不提了。
机器学习炼丹术
2020/09/14
1.4K0
【小白学PyTorch】7 最新版本torchvision.transforms常用API翻译与讲解
我用 PyTorch 复现了 LeNet-5 神经网络(MNIST 手写数据集篇)!
详细介绍了卷积神经网络 LeNet-5 的理论部分。今天我们将使用 Pytorch 来实现 LeNet-5 模型,并用它来解决 MNIST数据集的识别。
红色石头
2022/01/10
2.6K0
我用 PyTorch 复现了 LeNet-5 神经网络(MNIST 手写数据集篇)!
AI 应用冷启动困境破解:小样本学习在垂直领域的迁移适配实战
家人们,在 AI 应用的世界里,冷启动堪称 “头号难题”。就好比你开了一家超有格调的新店,却无人问津,AI 模型就算潜力无限,没有足够数据 “投喂”,也只能 “巧妇难为无米之炊”。不过别慌,小样本学习如同 “及时雨”,在垂直领域的迁移适配实战中,正发挥着大作用!今天,咱就全方位探秘小样本学习,帮你破解 AI 应用冷启动困境。
小白的大数据之旅
2025/04/04
2510
AI 应用冷启动困境破解:小样本学习在垂直领域的迁移适配实战
【论文复现】LeNet-5
LeNet是最早的卷积神经网络之一。1998年,Yann LeCun第一次将LeNet卷积神经网络应用到图像分类上,在手写数字识别任务中取得了巨大成功。LeNet通过连续使用卷积和池化层的组合提取图像特征。 出自论文 《Gradient-Based Learning Applied to Document Recognition》 。
Eternity._
2024/11/30
4250
【论文复现】LeNet-5
Pytorch的十二生肖分类挑战
在贝塔斯曼AI Udacity奖学金中,学者们不仅必须完成AI Udacity课程,而且还相互挑战,以应用在课程中收集和实践的技能和知识。这些挑战之一是中国十二生肖分类挑战。马上就是中国农历新年之际。
代码医生工作室
2020/02/19
1.4K0
Pytorch的十二生肖分类挑战
LeNet-5(论文复现)
LeNet是最早的卷积神经网络之一。1998年,Yann LeCun第一次将LeNet卷积神经网络应用到图像分类上,在手写数字识别任务中取得了巨大成功。LeNet通过连续使用卷积和池化层的组合提取图像特征。 出自论文《Gradient-Based Learning Applied to Document Recognition》。
Srlua
2024/11/30
3130
LeNet-5(论文复现)
小白学PyTorch | 8 实战之MNIST小试牛刀
在这个文章中,主要是来做一下MNIST手写数字集的分类任务。这是一个基础的、经典的分类任务。建议大家一定要跟着代码做一做,源码和数据已经上传到公众号。回复【pytorch】获取数据和源码哦~
机器学习炼丹术
2020/09/14
8210
小白学PyTorch | 8 实战之MNIST小试牛刀
我用 PyTorch 复现了 LeNet-5 神经网络(自定义数据集篇)!
我用 PyTorch 复现了 LeNet-5 神经网络(MNIST 手写数据集篇)!
红色石头
2022/01/10
1.7K0
我用 PyTorch 复现了 LeNet-5 神经网络(自定义数据集篇)!
使用PyTorch进行知识蒸馏的代码示例
随着机器学习模型的复杂性和能力不断增加。提高大型复杂模型在小数据集性能的一种有效技术是知识蒸馏,它包括训练一个更小、更有效的模型来模仿一个更大的“教师”模型的行为。
deephub
2023/02/01
1.2K0
源码级理解Pytorch中的Dataset和DataLoader
朋友,你还在为构建Pytorch中的数据管道而烦扰吗?你是否有遇到过一些复杂的数据集需要设计自定义collate_fn却不知如何下手的情况?你是否有遇到过数据管道加载速度过慢成为训练性能瓶颈却不知道如何优化的情况?
lyhue1991
2023/02/23
1.4K0
源码级理解Pytorch中的Dataset和DataLoader
Pytroch入坑 3. 自己的人脸数据+迁移学习(resnet18)
本文转载自:http://www.zhongruitech.com/856941441.html
全栈程序员站长
2022/09/01
4070
Pytroch入坑 3. 自己的人脸数据+迁移学习(resnet18)
你需要知道的11个Torchvision计算机视觉数据集
来源:新机器视觉 本文约3800字,建议阅读8分钟 本文介绍了11个Torchvision计算机视觉数据集。 计算机视觉是一个显著增长的领域,有许多实际应用,从自动驾驶汽车到面部识别系统。该领域的主要挑战之一是获得高质量的数据集来训练机器学习模型。 Torchvision作为Pytorch的图形库,一直服务于PyTorch深度学习框架,主要用于构建计算机视觉模型。 为了解决这一挑战,Torchvision提供了访问预先构建的数据集、模型和专门为计算机视觉任务设计的转换。此外,Torchvision还支持C
数据派THU
2023/04/25
1.3K0
你需要知道的11个Torchvision计算机视觉数据集
数据增强之裁剪、翻转与旋转
数据增强又称为数据增广,数据扩增,它是对训练集进行变换,使训练集更丰富,从而让模型更具泛化能力。
timerring
2023/07/20
8150
数据增强之裁剪、翻转与旋转
Pytorch的基本介绍及模型训练流程
PyTorch是一个很著名的支持GPU加速和自动求导的深度学习框架,在最近几年收到学术界的热捧,主要是因为其动态图机制符合思维逻辑,方便调试,适合于需要将想法迅速实现的研究者。PyTorch是Torch7团队开发的。Torch是一个开源科学计算框架,可以追溯到2002年纽约大学的项目。Torch的核心在于在构建深度神经网络及其优化和训练,为图像,语音,视频处理以及大规模机器学习问题提供快速高效的计算方案。为了追求更高的速度,灵活性和可扩展性,Torch采用Lua作为它的开发语言,但lua语言的受众比较局限。为了满足当今业界里Python先行(Python First)的原则,PyTorch应运而生,由Facebook人工智能研究员(FAIR)于2017年在GitHub上开源。顾名思义,PyTorch使用python作为开发语言,近年来和tensorflow, keras, caffe等热门框架一起,成为深度学习开发的主流平台之一。
Here_SDUT
2022/09/19
1.9K0
Pytorch的基本介绍及模型训练流程
从零开始学Pytorch(十八)之kaggle图像分类
我们将运用在前面几节中学到的知识来参加Kaggle竞赛,该竞赛解决了CIFAR-10图像分类问题。比赛网址是https://www.kaggle.com/c/cifar-10.
墨明棋妙27
2022/09/23
4820
Datawhale 零基础入门CV赛事-Task2 数据读取与数据扩增
由于赛题数据是图像数据,赛题的任务是识别图像中的字符。因此我们首先需要完成对数据的读取操作,在Python中有很多库可以完成数据读取的操作,比较常见的有Pillow和OpenCV。
致Great
2020/05/26
5990
利用pytorch实现图像识别demo
2.准备数据集,并将其转换为适合PyTorch使用的格式(例如,利用 torchvision 库中的 transform 处理图像数据,并将其转换为 tensor)。
疯狂的KK
2023/03/26
1.2K0
相关推荐
Pytorch小技巧-数据增强(上)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档