首页 > 其他分享 >GNN学习 GNN理论

GNN学习 GNN理论

时间:2023-08-18 10:57:24浏览次数:40  
标签:聚合 函数 理论 学习 邻居 单射 GNN 节点

GNN学习 GNN理论

增强GNN的表现力

GCN=mean-pool+Linear+ReLU1

GraphSAGE=MLP+max-pool

问题:

GNN节点embedding能否区分不同节点的局部邻居结构,在什么情况下会区分失败

接下来讲GNN如何捕获局部邻居结构

计算图

GNN每层都聚合邻居信息,通过邻居得到的计算图产生embedding

GNN只能识别特征,不能识别ID

pCOoMWQ.png

所以对GNN来说,上面的计算图等效于下面的这个计算图

pCOo1Qs.png

一般来说,不同的局部邻居会得到不同的计算图

如果GNN给两个节点产生相同的embedding,那么是因为:

  • 计算图相同
  • 节点的特征也相同

计算图实际上就是节点的根子树结构

表示能力最强的GNN模型将不同的根子树结构映射到不同的节点embedding

单射函数(injective)就是将不同的自变量映射为不同的因变量

表示能力最强的GNN应该将子树映射到节点embedding以单射的形式

同深度的子树可以从叶节点到根节点迭代来表示信息并加以区分

如果GNN每一步集合都可以保留全部邻居信息,也就是每一步都使用单射的邻居聚合函数

设计表现力强的GNN

GNN的表示能力取决于其采用的邻居聚合函数,聚合函数表达能力越强,GNN的表达能力就越强

邻居聚合的过程就可以被抽象为multi-set上的函数

GCN使用的是mean-pool

GraphSAGE使用max-pool

mean-pool无法区分元素占比相同的multi-set

max-pool无法区分集合中有相同的不同的元素

GNN表示能力的总结

  • GNN的表示能力由其邻居聚合函数决定
  • 邻居节点的聚合是一个在multiset上的函数,multi-set是一个元素可重复的集合
  • GCN和GraphSAGE的聚合函数都不能区分某些基本的multi-set,因为聚合函数都不单射,不够具有表达能力

所以,为了增强聚合函数的表达能力,我们需要用神经网络来建模单射的multi-set函数

任意一个单射的multi-set函数都可以表示为:

$ \Phi (\sum_{x \in S}f(x) ) $

其中\(\Phi\)和f都是非线性函数

那么怎样建模\(\Phi\)和f呢,我们可以采用多层感知机

于是,聚合函数就可以变成:

\(MLP_{\Phi}(\sum_{x\in S}MLP_f(x))\)

在实践中,MLP的隐藏层维度在100-500就够用了

于是就出现了一种新的GNN

Graph Isomorphism Network(GIN)

这个神经网络采用了上述的聚合函数,是信息传递类GNN中表示能力最强的GNN

接下来介绍一下WL graph kernel,这是一个经典的获取图级别特征的方法

算法:color refinement

已有一个有V个node的图G

  • 给每个节点分配一个初始的颜色\(c^{(0)}(v)\)

  • 不停的细化图的颜色通过\(c^{k+1}(v)=HASH(c^{(k)}(v),\{c^{(k)}(u)\}_{u\in N(v)})\)其中HASH函数将不同的输入映射到不同的颜色

  • 在K步后的color refinement之后,\(c^{(K)}(v)\)总结了K-hop邻居的结构

迭代至稳定后,如果两个图的颜色集相同,则说明它们同构(isomorphic)

3.GIN

GIN就是用神经网络来模拟单射的哈希函数

\(c^{(k)}(v)\)是根节点的特征

\(\{c^{(k)}(u)\}_{u\in N(v)}\)是邻居节点的特征

所以聚合函数可以建模为

\(MLP_{\Phi}((1+\epsilon)\cdot MLP_f(c^{(k)}(v))+\sum_{u\in N(v)}MLP_f(c^{(k)}(u)))\)

其中\(\epsilon\)是一个可以训练的标量

如果节点是独热编码,那么直接加总是单射的,我们只需要\(\Phi\)来保证单射,于是

\(GINConv(c^{(k)}(v),\{c^{(k)}(u)\}_{u\in N(v)})=MLP_{\Phi}((1+\epsilon)\cdot c^{(k)}(v)+\sum_{u\in N(v)}c^{(k)}(u))\)

GIN的节点嵌入的更新过程

  • 给每个节点分配初始向量\(c^{(0)}(v)\)

  • 迭代更新\(c^{(k+1)}(v)=GINConv(c^{(k)}(v),\{c^{(k)}(u)\}_{u\in N(v)})\) GINConv相当于可微的color HASH函数,将不同输入映射到不同的嵌入中

  • 在K步后的color refinement之后,\(c^{(K)}(v)\)总结了K-hop邻居的结构

标签:聚合,函数,理论,学习,邻居,单射,GNN,节点
From: https://www.cnblogs.com/anewpro-techshare/p/17639813.html

相关文章

  • 学习提示嵌入(Prompting Embeds)-AI基础系列文章第4篇
    您的关注是对我最大的支持......
  • [Tarjan] 学习笔记
    原理强连通分量讲得超级屌,这次比董晓好得多voidtarjan(intx){ dfn[x]=low[x]=t++; s.push(x); in[x]=true; for(inti=h[x];i;i=e[i].next) { inty=e[i].to; if(!dfn[y]) { tarjan(y); low[x]=min(low[x],low[y]); } elseif(i......
  • 基于Spring Boot手把手博客系统企业级前后端实战-学习笔记
     一、springboot初始化工程1、网址:https://start.spring.io二、Gradle安装(绿色版)1、windows下-下载:http://downloads.gradle.org/distributions/gradle-3.5-bin.zip-解压:-配置环境变量:新建环境变......
  • Java学习笔记(十三)
    7.6 枚举类1、什么是枚举类?枚举类是指一种特殊的类,这种类的对象只有有限的固定的几个常量对象。2、什么情况会用枚举类呢?例如:Month类,Week类等等,他们的对象应该是固定的有限的几个。Month类:12个对象Week类:7个对象Season(季节)类:4个对象3、如何声明枚举类呢?在JDK1.5之前:(1......
  • Vue学习笔记:Vuex Part04 Getter
    Getter可以将store的state派生出一些状态,比如根据条件进行过滤Getter接受state作为其第一个参数,示例:conststore=createStore({state:{todos:[{id:1,text:'...',done:true},{id:2,text:'...',done:false}]},getters:{......
  • Python学习之十七_django的入门
    前言Python学习了一周,慢慢总结摸索.自己还是有多不会的地方.感慨这些年浪费的时间.所有的时间都是选择大于努力.努力最多感动自己.生活是需要的是正确的选择.平凡的实在人太难在一个固化的社会生存.共勉.安装因为安装的是社区版.所以与专业版不太一样.这次学习主......
  • 在生活的苦面前,学习的苦连个渣都不算,甚至都不能算痛苦
    创作声明:内容包含医疗建议299人赞同了该回答两种苦不存在高低优劣,在生活的苦面前,学习的苦连个渣都不算,甚至都不能算痛苦。我经常会遇到一些在职考生,不论是考公还是考研,这类人在社会的油锅里滚过一回后,终于悟出了学习的苦在毕业后的社会毒打面前,连渣都不算。......
  • 看到一个问题:真的有人觉得学习痛苦吗
    看到一个问题:真的有人觉得学习痛苦吗?我想问:真的有人觉得学习不痛苦吗?就算是我有点兴趣的科目,长时间专注于琐碎重复的知识点,解题,也会觉得无聊无趣,想刷视频,大脑休息学习就是很累想要有所成就,有所改变的学习更因如此在更短的时间内,用更累的方法去学,就是逆袭也是至始至终......
  • 感觉学习苦,是没挨过生活的耳光
    作者:富叔链接:https://zhuanlan.zhihu.com/p/36565463来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。为什么大多数人宁愿吃生活的苦,也不愿吃学习的苦?作者:Ray先森(富书签约作者)一、为什么大多数人宁愿吃生活的苦,也不愿吃学习的苦?记得小时候在县城......
  • dp 凸优化学习笔记
    好久没系统地写一个算法相关内容的学习笔记了,主要是我学习dp凸优化部分有意义,有象征性的例题。目前网上很多题解都有点讲的不明不白的感觉,很多甚至都连基本知识都没说清楚就开始SlopeTrick了,这困扰了我许久。我认为通过这篇文章可以比较清晰地了解dp凸优化的入门知识和......