PaperNotes(17)-图卷积神经网络GCN-笔记

图卷积神经网络GCN-笔记

  • 1.卷积是什么
  • 2.图卷积的源起
  • 3.空域卷积
    • 3.1消息传递网络MPNN
    • 3.2 图采样与聚合GraphSage
  • 4.频域卷积
  • 5.图结构的序列化-Patch-SAN

从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (二)(https://www.cnblogs.com/SivilTaram/p/graph_neural_network_2.html)
该文详细写明了设涉及的参考材料,是一个很棒的综述性材料。本文仅作为阅读该系列文章的笔记,详情请参考原文。
参考博文2:稍微简略一些,建议看完《漫谈图神经网络模型 (二)》再去看此文,最终讲到不需要做特征值分解的GCN,有点神奇。
https://blog.csdn.net/qq_41727666/article/details/84622965

此前的图神经网络是基于循环结构,此篇主要介绍基于图卷积神经网络中的卷积操作。

1.卷积是什么

卷积本身是一种数学算子,对两个函数f和g操作,生成第三个函数h。
h(t)=∫−∞∞f(τ)g(t−τ)dτh(t)=\int_{-\infty}^{\infty}f(\tau)g(t-\tau)d\tauh(t)=f(τ)g(tτ)dτ

即:新函数在t处的值=f 和g 关于t对称处函数值成绩的和。简单(抽象)地说就是一个加权求和的过程。了解加权求和的核心之后,可以建模出图像上的卷积操作。每一层的卷积核就是一个权重可学习的权值函数g(⋅)g(\cdot)g()

卷积核的权重可以依据任务确定:实现边缘提取laplacian算子、可依据损失函数学习特定特征提取的权重。

卷积操作的作用:通过结点和周围结点的信息,提取/聚合结点的特征。

小结:在机器学习领域,卷积的具体操作是加权求和,卷积的效果是特征聚合/提取。

2.图卷积的源起

图像卷积操作要求规整的数据结构,图上结点的邻居结点数量不固定。

衍生了两种特征聚合图结点的特征的操作:

  1. 把图转换成规整的结构–少数
  2. 处理变长邻居结点的卷积核–主流,主要焦点

图卷积又分为空域卷积和频域卷积:

  1. 空域卷积–卷积核直接在原图上卷积操作
  2. 频域卷积–图做了傅立叶变换之后再进行卷积操作

启发:一种最简单的无参卷积–将所有的邻居结点的隐藏状态加和,以更新当前结点的隐藏状态。

3.空域卷积

3.1消息传递网络MPNN

Massage Passing Neural Network–MPNN,空域卷积的形式化框架。他将空域卷积分解为两个过程:消息传递Ml(⋅)M_l(\cdot)Ml()和状态更新Ul(⋅)U_l(\cdot)Ul()
hvl+1=Ul+1(hv,∑u∈ne[v]Ml+1(hvl,hul,xuv))h_v^{l+1}=U_{l+1}(h_v, \sum_{u\in ne[v]}M_{l+1}(h^l_v,h_u^l,x_{uv}))hvl+1=Ul+1(hv,une[v]Ml+1(hvl,hul,xuv))
即本结点与邻居结点的信息通过Ml(⋅)M_l(\cdot)Ml()形成消息,将所有的消息类和后,然后通过状态更新函数Ul(⋅)U_l(\cdot)Ul()更新自己的隐状态。

GCN:每一层包含所有结点,每层的MU参数并不共享,层数由设计确定
GNN:按更新时间序列展开成,各层的MU参数共享,每一次更新所有的结点,按不动点理论,时间序列的长度不定。

MPNN主要缺陷:卷积操作针对整张图,所有结点都要进内存。大规模图上的全图卷积操作并不现实。

3.2 图采样与聚合GraphSage

采样部分结点进行学习,

  1. 每一层的消息传递和状态更新不涉及所有结点,随机采样若干个结点。
  2. 针对每个结点,随机选取固定数目的邻居结点,(1阶/2阶均可)
  3. 定义aggregate函数聚合邻居结点的信息
  4. 计算采样点处的损失

GraphSage状态更新公式:
hvl+1=σ(Wl+1∗aggregate(hvl,{hul}),∀u∈ne[v])h_v^{l+1}=\sigma(W^{l+1}*aggregate(h_v^l,\{h_u^l\}),\forall u \in ne[v])hvl+1=σ(Wl+1aggregate(hvl,{hul}),une[v])

GraphSage的设计重点在于aggregate函数的设计上。

4.频域卷积

(理解起来稍微有一点抽象)–利用傅立叶变换在图上的抽象来实现图上卷积操作。
傅立叶变换:将一个在空域上定义的函数分解成频域上的若干频率成分。
f^(t)=∫f(x)exp⁡−2πixtdx\hat{f}(t)=\int f(x)\exp^{-2\pi ixt}dxf^(t)=f(x)exp2πixtdx

傅立叶变换恒等式:两个函数在空域上的卷积的效果,等于两函数在频域上的乘积。
(f∗g)(t)=F−1[F[f(t)]⊙F[g(t)]](f*g)(t)=F^{-1}[F[f(t)]\odot F[g(t)]](fg)(t)=F1[F[f(t)]F[g(t)]]

所以:可以利用傅立叶变换,得到频域表示后,进行哈达玛乘积,再傅立叶逆变换回去,即可得到空域卷积的结果。

傅立叶变换的作用:

  1. 去规律的噪点
  2. 加速卷积操作(卷积核比较小时没啥加速效果)

利用傅立叶变换实现图上卷积的核心点:如何找到变换算子exp⁡−2πixt\exp^{-2\pi ixt}exp2πixt

依据变换算子是拉普拉斯算子的特征函数这一重要特性,找到图数据拉普拉斯变换算子–拉普拉斯矩阵对应的特征向量。

(频域卷积的前提条件-图是无向图。)
图拉普拉斯矩阵的特征值分解:
L=UΛUTL=U\Lambda U^TL=UΛUT
U=(u1,u2,...,un)U = (u_1, u_2, ... , u_n)U=(u1,u2,...,un)
Λ=diag(λ1,λ2,...,λn)\Lambda = diag(\lambda_1, \lambda_2, ... , \lambda_n)Λ=diag(λ1,λ2,...,λn)

图结点数据傅立叶变换:(^f)(t)=∑n=1Nf(n)ut(n)\hat(f)(t) = \sum_{n=1}^Nf(n)u_t(n)(^f)(t)=n=1Nf(n)ut(n) 这个叠加的n是个什么东西?N个结点的信息

整张图的傅立叶变换:f^=[f^(1)...f^(N)]=UTf\hat{f}= \left[ \begin{array}{ccc} \hat{f}(1)\\ ... \\ \hat{f}(N)\\ \end{array} \right]= U^Tf f^=f^(1)...f^(N)=UTf
用神经网络建模卷积核傅立叶变化后的函数,用gθg_\thetagθ表示,那么频域卷积可以表示为:
gθ⊙UTfg_\theta\odot U^TfgθUTf

再通过傅立叶逆变换可以求得,最终图上的卷积。(逆变换算子为exp⁡2πixt\exp^{2\pi ixt}exp2πixt,类比图中的逆变换算子为U):
o=(f∗g)θ=UgθUTfo=(f*g)_\theta=Ug_\theta U^Tfo=(fg)θ=UgθUTf

图上频域卷积的工作,都聚焦于gθg_\thetagθ的设计。频域卷积,隐状态更新涉及:

  1. lll层隐状态hl∈RN∗dlh^l\in R^{N*d_l}hlRNdl,每一行为该层一个结点的隐藏状态:
    hl=[h11lh12l...h1dll...hN1lhN2l...hNdll]h^l= \left[ \begin{array}{ccc} h^l_{11}&h^l_{12}&...&h^l_{1d_l}\\ ... \\ h^l_{N1}&h^l_{N2}&...&h^l_{Nd_l}\\ \end{array} \right] hl=h11l...hN1lh12lhN2l......h1dllhNdll
  2. 傅立叶变换算子UTU^TUT,每一行是拉普拉斯矩阵的一个特征向量:
    UT=[u11u12...u1N...uN1uN2...uNN]U^T= \left[ \begin{array}{ccc} u_{11}&u_{12}&...&u_{1N}\\ ... \\ u_{N1}&u_{N2}&...&u_{NN}\\ \end{array} \right] UT=u11...uN1u12uN2......u1NuNN
  3. 卷积核频域形式gθ:dl+1∗Ng_\theta:d_{l+1}*Ngθ:dl+1N,参数化呗,还就是一个权重呀(没说明白怎么作用的呀,后面再看看吧):
    gθ=[θ1...0.........0...θN]g_\theta= \left[ \begin{array}{ccc} \theta_1&...&0\\ ...&...&... \\ 0&...&\theta_N\\ \end{array} \right] gθ=θ1...0.........0...θN

频域卷积,隐状态更新公式,{:i}表示第i列,(i=1,...,dl),(j=1,...,dl+1)(i=1,...,d_l),(j=1,...,d_{l+1})(i=1,...,dl),(j=1,...,dl+1)
h:,jl+1=σ(U∑i=1dL)gθUTh:,ilh^{l+1}_{:,j}=\sigma(U\sum_{i=1}^{d_L})g_\theta U^Th^l_{:,i}h:,jl+1=σ(Ui=1dL)gθUTh:,il

切比雪夫网络用来加速特征矩阵的求解。

5.图结构的序列化-Patch-SAN

Patch-SAN:将图转化成序列结构,然后利用卷积神经网络在序列化结构上作卷积。
Patch-SAN原文中主要涉及图分类任务。

图结构的特点:

  1. 同构
  2. 邻居结点的连接关系

图结构-》序列化结构要求
3. 同构图产生的序列应当是相似的
4. 保持邻居结点和目标结点的距离关系

Patch-SAN 通过三个规则来将图转化成一个长度为w∗(k+1)w*(k+1)w(k+1)的序列,然后直接使用1D卷积对该序列进行操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Servlet 工程 web.xml 中的 servlet 和 servlet-mapping 标签

摘录某个工程的 web.xml 文件片段:访问顺序为1—>2—>3—>4,其中2和3的值必须相同。 url-pattern 标签中的值是要在浏览器地址栏中输入的 url,可以自己命名,这个 url 访问名为 servlet-name 中值的 servlet,两…

leetcode236 二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的…

Unity的 UNet组件介绍

UNet常见概念简介 Spawn:简单来说,把服务器上的GameObject,根据上面的NetworkIdentity组件找到对应监视连接,在监视连接里生成相应的GameObject.Command:客户端调用,服务器执行,这样客户端调用的参数必需要UNet可以序列化,这样服务器在执行时才能把参数反序列化。需要注意…

MachineLearning(10)-聚类

聚类1.K-mean2.系统聚类3.DBSCAN聚类算法聚类:无监督学习,将相似的样本聚为一类。核心如何定义相似。分类:有监督学习,依据分类准则,将样本划分为不同的类。核心分类器的设计(KNN)聚类&#xff…

帧同步和状态同步(一)

帧同步 什么是帧同步:帧同步常被RTS(即时战略)游戏常采用。在游戏中同步的是玩家的操作指令,操作指令包含当前的帧索引。一般的流程是客户端上传操作到服务器, 服务器收到后并不计算游戏行为, 而是转发到所有客户端。这里最重要的…

帧同步和状态同步(二)案例分析

转自:http://www.gameres.com/489361.html 腾讯一下出了两款MOBA游戏,全民超神,王者荣耀,玩了一下,效果不错,就分析了一下它底层的一些技术,发现一个是采用的状态同步,TCP协议&#…

leetcode279 完全平方数

给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n 12 输出: 3 解释: 12 4 4 4. 示例 2: 输入: n 13 输出: 2 解释: 13 4 9. 思路&#xf…

推荐系统(1)-概述

推荐系统概述1.数据部分2.模型部分2.1模型的组成2.2模型的训练2.3模型评估《深度学习/推荐系统》读书笔记推荐系统要处理的问题:对于用户U(user),在特定的场景C(context),针对海量的“物品信息”,构建一个模型f(U,I,C)f(U,I,C)f(U…

(十七)深入浅出TCPIP之UDP打洞原理

专栏其他文章: 理论篇: (一)深入浅出TCPIP之理解TCP报文格式和交互流程 (二)深入浅出TCPIP之再识TCP,理解TCP三次握手(上) (三)深入浅出TCPIP之再识TCP,理解TCP四次挥手(上) (四)深入浅出TCPIP之TCP三次握手和四次挥手(下)的抓包分析 (五)深入浅出TCPIP之TCP流…

leetcode240. 搜索二维矩阵 II

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6…

NAT原理

网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术。下面介绍两类不同方式实现的NAT:NAT(Network Address Translators):称为基本的NAT在客户机…

推荐系统(2)-协同过滤1-UserCF、ItemCF

协同过滤1.CF概述2.数据表示3.衡量相似度4.共现矩阵5.UserCF6.ItemCF7.UserCF 与ItemCF 应用场景、主要缺陷8.基于UserCF 电影推荐demo《深度学习/推荐系统》读书笔记推荐系统的发展一日千里 传统的推荐模型(2010年前后):协同过滤、罗辑回归、因子分解、梯度提升树 …

sql查询实例1(学生表_课程表_成绩表_教师表)

表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 建表语句 CREATE TABLE student ( s# INT, sname nvarchar(32), sage INT, ssex nvarchar(8) ) CREATE TABLE course ( c# INT, cname…

android 存储方式以及路径简介

存储分成了内部存储和外部存储。注意内部存储又叫做机身内存,而且内存又包含了两个部分RAM(运行时内存,这个和运行速度有关系,是手机运行时存储数据和指令的地方)、ROM(这个才算是真正存储东西的内部存储范围,是应用配置和其他数据的地方);而外部存储就很明确了,用户的外部挂…

MachineLearning(11)-关联规则分析

关联规则分析1.简单来说-关联规则2.经典关联规则挖掘-Apriori1.简单来说-关联规则 关联规则–通过量化的数字描述物品甲的出现 对 物品乙的出现 有多大影响。 最早是为了发现超市销售数据库中不同的商品之间的关联关系:哪组商品可能会在一次购物中同时购买。 广泛…

APK 安卓反编译

在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的A…

sql查询实例2(借书卡、图书、借书记录)

问题描述: 本题用到下面三个关系表: CARD 借书卡。 CNO 卡号,NAME 姓名,CLASS 班级 BOOKS 图书。 BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数 BORROW 借书记录。 CNO 借…

开始学习Unity3D(一)

本人最近转行开始做海外独立游戏的发行,主要是负责服务器,开会注意到海外的服务越来越丰富越来越细分,对国内将会造成很大的冲击,比如AWS,Google,GameSparks等,这导致国内的所谓服务器开发将越来越简单,国内对服务器开发的需求越来越少,反而客户端的需求越来越多,所以…

List 流的使用

摘要 本文将介绍在 Java 1.8 中对 List 进行流操作的使用方法。引入的 java.util.stream 包为开发者提供了一种更为便捷和强大的方式来处理集合数据。通过使用流,我们能够以声明性的方式进行集合操作,减少了样板代码,提高了代码的可读性和可…

推荐系统(3)-协同过滤2-矩阵分解算法

协同过滤-矩阵分解算法1.奇异值分解2.梯度下降3.矩阵分解方法的优缺点《深度学习/推荐系统》读书笔记(其实矩阵分解和协同过滤已经没有特别大的联系了) 2006年,在Netfilx举办的推荐算法竞赛中Netflix Prize Challenge中,以矩阵分解…