图卷积神经网络前世今生
一、 数学上的卷积->cnn上的卷积
数学意义上的卷积:
一维:
(f∗g)(t)=∫−∞∞f(τ)g(t−τ)dτ(连续形式 )(f∗g)(t)=∑ı=−∞∞f(τ)g(t−τ)(离散形式 )\begin{aligned}&(f * g)(t)=\int_{-\infty}^{\infty} f(\tau) g(t-\tau) d \tau(\text { 连续形式 })\\&(f * g)(t)=\sum_{\imath=-\infty}^{\infty} f(\tau) g(t-\tau)(\text { 离散形式 })\end{aligned} (f∗g)(t)=∫−∞∞f(τ)g(t−τ)dτ( 连续形式 )(f∗g)(t)=ı=−∞∑∞f(τ)g(t−τ)( 离散形式 )
二维离散卷积(卷积核为3x3矩阵时):
(f∗g)(1,1)=∑k=02∑h=02f(h,k)g(h,k)(f * g)(1,1)=\sum_{k=0}^{2} \sum_{h=0}^{2} f(h, k) g(h, k) (f∗g)(1,1)=k=0∑2h=0∑2f(h,k)g(h,k)
cnn中的卷积:
借鉴数学上的卷积“加权求和“思想,实际上是把数学上的卷积核以中心元素为中心,中心对称之后得到的新卷积核做数学上的二维离散卷积运算。但是因为本身cnn中的卷积核就是不固定的、需要训练的内容,所以不进行中心对称也没有问题。
二、 在graph上做卷积的问题
问题: 非欧式空间上,邻居节点不固定,欧式空间上的卷积核无法使用。
解决方案:
1.将非欧式空间映射到欧式空间来解决
2.找出一种可以处理非欧式空间的卷积核
三、 频域的处理方法:将非欧式空间的graph转换到欧式空间的频域上来处理
在欧式空间中,与傅里叶变换相关的卷积定理如下:
(f∗g)(t)=F−1{F{f}⋅F{g}}(f * g)(t)=F^{-1}\{F\{f\} \cdot F\{g\}\} (f∗g)(t)=F−1{F{f}⋅F{g}}
即: 两个函数的卷积等于两个函数进行傅里叶变换之后做乘积的傅里叶逆变换。
通过这个公式就可以将卷积写成乘积的形式,如果可以应用在graph上就可以解决图上的卷积问题。
其中傅里叶变换
F[f]=f^(t)=∫f(x)exp−2πixtdxF[f]=\hat{f}(t)=\int f(x) \exp ^{-2 \pi i x t} d x F[f]=f^(t)=∫f(x)exp−2πixtdx
傅里叶逆变换
F−1[f^]=f(x)=∫f^(t)exp2πx˙tdtF^{-1}[\hat{f}]=f(x)=\int \hat{f}(t) \exp ^{2 \pi \dot{x} t} d t F−1[f^]=f(x)=∫f^(t)exp2πx˙tdt
傅里叶变换实际上是把f(x)映射到了以{exp−2πixt}\left\{\exp ^{-2 \pi i x t}\right\}{exp−2πixt}为基向量的空间中。
注:由欧拉公式eix=cosx+isinxe^{i x}=\cos x+i \sin xeix=cosx+isinx 可将傅里叶级数的基{1,cosx,sinx,cos2x,sinx,…,cosnx,sinnx,…},n∈Q\{1, \cos x, \sin x, \cos 2 x, \sin x, \ldots, \cos n x, \sin n x, \ldots\}, n \in \mathbb{Q}{1,cosx,sinx,cos2x,sinx,…,cosnx,sinnx,…},n∈Q
写成
{exp−2πnx},n∈Z\left\{\exp ^{-2 \pi n x}\right\}, n \in \mathbb{Z}{exp−2πnx},n∈Z
四、 定义graph上的卷积定理
傅里叶变换中的基函数 可以看作是拉普拉斯算子exp−2πixte x p^{-2 \pi i x t}exp−2πixt的一个特征函数Δe−2πit=∂2∂x2e−2ππt=−4π2t2e−2πx˙t\Delta \mathrm{e}^{-2 \pi i t}=\frac{\partial^{2}}{\partial x^{2}} \mathrm{e}^{-2 \pi \pi t}=-4 \pi^{2} t^{2} \mathrm{e}^{-2 \pi \dot{x} t}Δe−2πit=∂x2∂2e−2ππt=−4π2t2e−2πx˙t因此要类比到graph上的傅里叶变换,可以寻找graph上的拉普拉斯算子,而拉普拉斯算子在一个自变量的条件下,即为二阶导数,因此我们首先需要定义graph上的二阶导数。
1.graph上的二阶导数
实数域R上的一阶导数定义为: f′(x)=limΔx→0f(x+Δx)−f(x)Δxf^{\prime}(x)=\lim _{\Delta x \rightarrow 0} \frac{f(x+\Delta x)-f(x)}{\Delta x}f′(x)=Δx→0limΔxf(x+Δx)−f(x)
二阶导数为一阶导数的导数: f′′(x)=limΔx→0f′(x+Δx)−f′(x)Δx=limΔx→0f(x+Δx)−2f(x)+f(x−Δx)Δxf^{\prime \prime}(x)=\lim _{\Delta x \rightarrow 0} \frac{f^{\prime}(x+\Delta x)-f^{\prime}(x)}{\Delta x}=\lim _{\Delta x \rightarrow 0} \frac{f(x+\Delta x)-2 f(x)+f(x-\Delta x)}{\Delta x}f′′(x)=Δx→0limΔxf′(x+Δx)−f′(x)=Δx→0limΔxf(x+Δx)−2f(x)+f(x−Δx)
理解起来就是在数轴上离x最近的两个邻接点的函数值,分别与x的函数值做差,再标准化(除以△x)之后结果。
通过这一定义就可仿定义graph上的二阶导数:Δf(x)=∑y∼x[f(x)−f(y)]\Delta f(x)=\sum_{y \sim x}[f(x)-f(y)]Δf(x)=y∼x∑[f(x)−f(y)]
其中y是x所有的邻接节点。可以看到,graph上的二阶导数(拉普拉斯算子)即为x的函数值,与离他最近的点(邻接节点)的函数值的差值,再标准化(除以单位1)。
2.拉普拉斯矩阵L
由拉普拉斯算子的定义,在某特定graph上,可以定义该graph的拉普拉斯矩阵L=D−AL=D-AL=D−A
其中D是graph的度数矩阵,A是graph的邻接矩阵。
则在graph上的拉普拉斯算子(可以证明此算子是一个线性变换,其在graph上定义的基下的矩阵即为拉普拉斯矩阵)即可写成一个拉普拉斯矩阵L,满足对该graph的各个节点的状态f=(f(v1),f(v2),…,f(vn))Tf=\left(f\left(v_{1}\right), f\left(v_{2}\right), \ldots, f\left(v_{n}\right)\right)^{T}f=(f(v1),f(v2),…,f(vn))T 有Lf=ΔfL f=\Delta fLf=Δf
因此在graph上的拉普拉斯变换即可视为一个L的线性变换。
3.傅里叶变换的基函数
在一般连续空间上傅里叶变换的基函数也是一般连续空间上拉普拉斯算子的特征函数,因此我们可以仿定义graph上的傅里叶变换的基函数,即:拉普拉斯矩阵的特征向量。
因为拉普拉斯矩阵是对称的且是半正定的,所以可以做特征分解:
存在一个可逆矩阵U,使得 L=U−1ΛUL=U^{-1} \Lambda UL=U−1ΛU又因为U是正定的,所以:L=UTΛUL=U^{T} \Lambda UL=UTΛU
则傅里叶变换的基函数(基矩阵)就找到了。
4.graph上的傅利叶变换
在一般连续空间上的傅里叶变换为F[f]=f^(t)=∫f(x)exp−2πxtdxF[f]=\hat{f}(t)=\int f(x) \exp ^{-2 \pi x t} d xF[f]=f^(t)=∫f(x)exp−2πxtdx
离散空间上可以写成:F[f]=f^(t)=∑x−−∞∞f(x)exp−2πitF[f]=\hat{f}(t)=\sum_{x--\infty}^{\infty} f(x) \exp ^{-2 \pi i t}F[f]=f^(t)=x−−∞∑∞f(x)exp−2πit
类比离散空间的傅里叶变换即可仿定义graph上的傅利叶变换:
FG[f](λi)=f^(λl)=∑i=1Nu(λi)if(xi)=u(λi)1f(x1)+u(λi)2f(x2)+…+u(λi)nf(xn)F_{G}[f]\left(\lambda_{i}\right)=\hat{f}\left(\lambda_{l}\right)=\sum_{i=1}^{N} u\left(\lambda_{i}\right)_{i} f\left(x_{i}\right)=u\left(\lambda_{i}\right)_{1} f\left(x_{1}\right)+u\left(\lambda_{i}\right)_{2} f\left(x_{2}\right)+\ldots+u\left(\lambda_{i}\right)_{n} f\left(x_{n}\right)FG[f](λi)=f^(λl)=i=1∑Nu(λi)if(xi)=u(λi)1f(x1)+u(λi)2f(x2)+…+u(λi)nf(xn)
其中N表示节点个数, 表示第 个特征向量的第i个分量。
写成矩阵形式即为:
FG{f}=(f^(λ1),f^(λ2),…,f^(λN))T=[u(λ1)1f(x1)+…+u(λ1)nf(xn)u(λ2)1f(x1)+…+u(λ2)nf(xn)⋮u(λn)1f(x1)+…+u(λn)nf(xn)]=UTf\begin{aligned}F_{G}\{f\}=&\left(\hat{f}\left(\lambda_{1}\right), \hat{f}\left(\lambda_{2}\right), \ldots, \hat{f}\left(\lambda_{N}\right)\right)^{T} \\&=\left[\begin{array}{c}u\left(\lambda_{1}\right)_{1} f\left(x_{1}\right)+\ldots+u\left(\lambda_{1}\right)_{n} f\left(x_{n}\right) \\u\left(\lambda_{2}\right)_{1} f\left(x_{1}\right)+\ldots+u\left(\lambda_{2}\right)_{n} f\left(x_{n}\right) \\\vdots \\u\left(\lambda_{n}\right)_{1} f\left(x_{1}\right)+\ldots+u\left(\lambda_{n}\right)_{n} f\left(x_{n}\right)\end{array}\right] \\&=U^{T} f\end{aligned}FG{f}=(f^(λ1),f^(λ2),…,f^(λN))T=⎣⎢⎢⎢⎡u(λ1)1f(x1)+…+u(λ1)nf(xn)u(λ2)1f(x1)+…+u(λ2)nf(xn)⋮u(λn)1f(x1)+…+u(λn)nf(xn)⎦⎥⎥⎥⎤=UTf
由此我们就得到了graph上的傅里叶变换
FG{f}=UTfF_{G}\{f\}=U^{T} fFG{f}=UTf
傅里叶逆变换同理:
FG−1{f^}=Uf^F_{G}^{-1}\{\hat{f}\}=U \hat{f}FG−1{f^}=Uf^
5.graph上的卷积定理
定义完了graph上的傅里叶变换和傅里叶逆变换,就可以仿推导graph上的卷积定理了。
一般连续空间的卷积定理:
(f∗g)(t)=F−1{F{f}⋅F{g}}\left(f^{*} g\right)(t)=F^{-1}\{F\{f\} \cdot F\{g\}\}(f∗g)(t)=F−1{F{f}⋅F{g}}
graph上的卷积定理:
(f∗Gg)=U(UTf⊙UTg)=U(UTg⊙UTf)\left(f *_{G} g\right)=U\left(U^{T} f \odot U^{T} g\right)=U\left(U^{T} g \odot U^{T} f\right)(f∗Gg)=U(UTf⊙UTg)=U(UTg⊙UTf)
其中⊙\odot⊙表示哈达玛积,表示矩阵逐元素相乘,且具有交换性。
将UTgU^{T} gUTg整体看成需要训练的卷积核gθg_{\theta}gθ,则上式=U(gθ⊙UTf)=U\left(g_{\theta} \odot U^{T} f\right)=U(gθ⊙UTf) ,又因为 UTf=f^=[f^(λ1)f^(λ2)⋱f^(λn)]f^(λi)=∑i=1Nu(λi)if(xi)\begin{array}{l}U^{T} f=\hat{f}=\left[\begin{array}{llll}\hat{f}\left(\lambda_{1}\right) & & & \\& \hat{f}\left(\lambda_{2}\right) & & \\& & \ddots & \\& & & \hat{f}\left(\lambda_{n}\right)\end{array}\right] \\\hat{f}\left(\lambda_{i}\right)=\sum_{i=1}^{N} u\left(\lambda_{i}\right)_{i} f\left(x_{i}\right) & &\end{array}UTf=f^=⎣⎢⎢⎡f^(λ1)f^(λ2)⋱f^(λn)⎦⎥⎥⎤f^(λi)=∑i=1Nu(λi)if(xi)
是个对角矩阵,此时哈达玛积等于矩阵乘积,因此得到最后的卷积定理:
(f∗Gg)=UgθUTf\left(f^{*}{ }_{G} g\right)=U g_{\theta} U^{T} f(f∗Gg)=UgθUTf
五、gcn卷积核的选取及优化
后续的卷积核选取及优化,这一篇文章已经讲得非常清晰了,建议大家直接看他的就可以。
图卷积神经网络前世今生相关推荐
- 图卷积神经网络(GCN)入门
GCN是从CNN来的 CNN成功在欧式数据上:图像,文本,音频,视频 图像分类,对象检测,机器翻译 CNN基本能力:能学到一些局部的.稳定的结构,通过局部化的卷积核,再通过层级堆叠,将这些局部的结构变 ...
- 举个例子,如何用GCN图卷积神经网络实现摔倒监测?
作者 | 李秋键 责编 | 寇雪芹 头图 | 下载于视觉中国 引言 近几年来深度学习的发展越来越火热,其中最为典型的就是半监督学习的新研究进展GCN.由Kipf和Welling提出的GCN被证明是一种 ...
- 通俗易懂:图卷积神经网络入门详解
作者 | 蝈蝈 来源 | 转载自知乎用户蝈蝈 [导读]GCN问世已经有几年了(2016年就诞生了),但是这两年尤为火爆.本人愚钝,一直没能搞懂这个GCN为何物,最开始是看清华写的一篇三四十页的综述,读 ...
- Chemistry.AI | 基于图卷积神经网络(GCN)预测分子性质
GCN: Graph Convolutional Network(图卷积网络) 环境准备 Python版本:Python 3.6.8 PyTorch版本:PyTorch1.1.0 RDKit版本:RD ...
- 第二课.图卷积神经网络
目录 卷积神经网络 图卷积神经网络 GNN数据集 图的表示 GCN GNN的基准化:Benchmarking Graph Neural Networks 卷积神经网络 在计算机视觉中,卷积网络是一种高 ...
- 基因疾病关联的图卷积神经网络
基因疾病关联的图卷积神经网络 本文要介绍的是沙特阿卜杜拉国家科技大学高兴副教授课题组发表的一篇关于图卷积神经网络的基因疾病关联预测的论文.对候选基因排序对于遗传疾病基于基因的诊断是至关重要的.然而,由 ...
- 使用Keras构建具有自定义结构和层次图卷积神经网络(GCNN)
来源:DeepHub IMBA 本文约3600字,建议阅读5分钟 本文为你介绍了如何构建具有自定义结构和层次的神经网络:Keras中的图卷积神经网络(GCNN). 如何构建具有自定义结构和层次的神经网 ...
- 【CMU】图卷积神经网络中的池化综述,Pooling in Graph Convolutional Neural Network
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 图卷积神经网络(GCNNs)是深度学习技术在图结构数据问题上的一种强大的扩展.我们 ...
- 从文本分类来看图卷积神经网络
" 图神经网络火了这么久,是时候掌握它了." 本文包括以下内容,阅读时间10min 图神经网络是什么意思 文本如何构建图 图卷积神经网络 源代码实现 图卷积神经网络最新进展 ...
最新文章
- 给AI系统做“安全体检”,阿里安全提出自动化AI对抗平台CAA | AAAI 2021
- AUC是什么?AUC的的意义是什么?AUC的判断分类器优劣标准是什么?AUC如何计算?
- 关于Notepad++环境的搭建以及代码的编译工具mingw
- AI基础:第一部分提供打包下载了!
- 启明云端分享|ESP32 AT 相关资源从哪里获得?以及经常会遇到的AT相关问题
- 使用AspectJ审计Spring MVC Webapp。 第1部分
- 工作103:组装查询
- 如何在 Mac 上的“快速查看”中查看和编辑文件
- 处理json字符串的问题
- [svn] 解决SVN冲突攻略(手册)
- 词嵌入word2vec、字词嵌入fastText、全局词嵌入Glove直接的联系与关系
- 高性能stun服务器搭建,STUN/TURN服务器搭建
- talib函数功能一览表
- 高通QFIL工具如何备份各分区镜像
- KM算法--学习笔记
- java获取outlook 日历,Outlook 日历 API 概述
- 专业编写c语言的软件,适合编写C语言代码的几款软件
- 【贪心算法】-背包问题
- 小米红米手机root刷机教程
- windows下安装mingw-w64
热门文章
- 转:宇文泰苏卓对答录
- DeepLncLoc:一种基于子序列嵌入的长非编码RNA亚细胞定位预测的深度学习框架
- 设计师:设计师知识储备之设计流派(高技派、光亮派、白色派、风格派、极简主义、装饰艺术、后现代、解构主义、新现代主义 )之详细攻略
- HTML5期末大作业:网站——美丽家乡(含HTML+CSS+JS源码及课程设计文档)
- 搭建私有云:OwnCloud
- 以模拟移动为思路的战棋范围及路径生成
- SpringBoot+Vue项目打包部署
- html左文右图布局方法,常见的图文布局
- 【Java代码】古典密码算法——凯撒密码(CaesarCipher)
- 拍立淘Open SDK-在你的App里用相机连接淘宝和世界