图数据一直就是机器学习领域里最重要的数据结构。与图像数据和文本数据相比,神经网络在图数据上的大规模应用最近几年才大量出现,然而已经呈现出井喷的趋势,在学术界和工业界都产生了巨大的影响。想要系统掌握的话,不仅要知道原理,更要懂得代码细节,以及亲手实战具体项目,了解近年来来一系列模型的发展脉络。想要全面地学习这些知识点的话,可以学习 bienlearn 上的图神经网络专栏。
这个图神经网络专栏由大厂高级算法工程师丁雨山&彬斌主笔,帮助新手以及有一定基础的同学快速入门图神经网络,既包括原理、代码的解读,还有对图网络底层设计思想的理解与项目实操。不管是准备面试、项目实战还是比赛刷分,都可以找到对应的内容。
目前在限时优惠,更详细的内容大家可以点击下方卡片查看
这篇论文的数学基础应该是算是我看到的里面要求最高的了,当然要感谢superbrother
精通GCN全攻略zhuanlan.zhihu.com写的专栏,的确非常棒,增加了我对文章的理解,就先贴在这里了。
这个学期才学数字信号处理,现在才对文中的卷积操作有了正确的认识,能理解为什么会有这样的操作。
首先我们先介绍几个基础的内容。
傅里叶变化与卷积
卷积操作是一种通用的特征抽取技术,实质上卷积是抽取相似的信号
通过实信号,我们可以看到,信号越相似,我们越能抽取到相似的特征(类似于点积)但是我们可以抽取到空间上的特征(点积只是点对点的操作,但是不能对不同位置上的特征抽取(比较)),但想一下,如果我们直接做卷积,每两个点进行一次,需要多少次运算
这里我们就简单讨论一下实信号当中的卷积公式。y是相应输出,x是输入,h是冲击信号
这里我们再用一张图来看卷积的操作,首先对冲击信号取反,然后对位相乘得到需要的结果进行累加。关于数学的什么图解法我们这里就不赘述了。但是显而易见,每次操作都要进行n次乘法。
所以如何进行简化,既然时域计算复杂,那转化到频域呢?(这里我们会转化到复数域而不是二维空间,基本信号会从单位冲激信号,转化为复频域的
在时域中的卷积操作在频域当中就是简单的乘法操作,这能有效的简化我们的问题。所以关于卷积我们的步骤变成
傅里叶变换(转化到频域)-> 和冲击信号做乘法->傅里叶逆变换(转化回时域)
拉普拉斯矩阵
拉普拉斯矩阵具有很多良好的性质如下
通过这个矩阵乘法性质,我们可以计算通过连接后不同节点的相似度
还是上一波老图8
拉普拉斯矩阵是对称矩阵,半正定矩阵
这条性质可以帮助矩阵进行特征分解(谱聚类的做法就是寻找相对最小的特征值对DP问题进行近似求解)
支撑理由如下
- 对称矩阵一定有n个线性无关的特征现两
- 半正定矩阵特征值一定非负
- 对称矩阵特征向量相互正交,特征向量构成矩阵为正交矩阵
拉普拉斯矩阵只在中心顶点和一阶相连的顶点上(1-hop neighbor)有非0元素,其余之处均为0
这让模型具有很好的局部特性,只吸收附近的节点信息(当然这和后面用二阶切比雪夫方程做近似相关)
特征值和特征向量
在jidi4变化后,会有部分的先保持在同一条线上,这些线被称为特征向量。 特征向量在原方向上收放的比例称为特征值。
也就是说,一个向量在变化后可能变成任意的方向,但是基向量的方向不会改变,所以把特征向量作为基底能更轻松的表示矩阵的线性变化
这里强烈建议去看一下3blue1brown的视频,看动画的确直观
那最后对拉普拉斯做特征分解(谱分解)
notice:
Graph convolution 图卷积网络
有了上面的卷积操作作为基础,我们应该如何把他迁移到图谱领域当中呢。
1.也就是把拉普拉斯算子得到的特征作为新的信号基本算子来代替
我们怎么代替标准信号?
f代表的是每个节点的特征向量表示 u代表拉普拉斯的特征向量,取共轭是为了转化到复数域当中。
所以把原特征转化到频域当中(借用概念)的方法为
2.和卷积核做乘法来完成卷积操作
卷积核转化到频域的对角元形式如上(对角元形式方便用矩阵乘法轻送的对每一行乘相同的值。
3.做傅里叶逆变换转化回原域当中
前面正变换乘的
所以图卷积的整体公式如下
所以我们通过拉普拉斯矩阵的特征向量来作为我们在频域间转化的方式,中间的λ是我们唯一课学习的参量(当然这也是我们要解决的问题)
如何拟合真正的特征值?
切比雪夫方程(类似泰勒展开)能有效的找到有效的λ,并且能增加模型的非线性性。
这中间的放缩变化和细节我们就此略过
上面分别是切比雪夫的二阶表达近似和转化的矩阵表示
这里我们通过直观展示切比雪夫方程的作用(图片侵删)
当K=1时
当K=2时,我们可以看到,在切比雪夫方程,和拉普拉斯矩阵一样,我们保证了局部相邻的特征
等等,我们这里并没有介绍为什么转变成
拉普拉斯矩阵的能很好的完成归一化,同样,我们也可以在邻接矩阵上做这种操作,目的在于如果有10个节点流入,和5个节点信息流入,导致新生成节点模大小差距过大,这同样可以用CNN解释,CNN的感受野是相同的,所以用归一化的矩阵来保证对称性和对节点流入信息的控制。
终极表达形式
H对应上式当中的X W是每层都不同的可学习参量
一层对应的就是一阶邻居节点,i阶对应的就是i阶邻居节点。
最后生成我们需要的隐状态,即为节点表示(最后一层使用softmax进行激活)
损失函数
完全和一般的softmax相同,这里我们就不多说了。需要的话去补一下softmax损失计算的基础8。唯一需要注意的是,我们只对有标签的内容计算损失,semi supervise的特点。
GCN的种类及优化
GCN和CNN一样,共享参数,局部感受野
- 一代卷积核,没有切比雪夫方程产生的变化,就n个参量,显然是不够学习的,而且特征值的表达也缺少非线性性。
- 二代卷积核,我们可以利用多阶变化来增加模型的表达能力,之前我们说过,
所以连乘不会导致计算复杂度的显著上升,只需要特征值次数不断上升这个巧妙地办法,可以把GCN转成为对偶问题来降低复杂度,并且避免了求特征值的过程
- 三代卷积核,就像我们上面说的,不仅可以简化,增加非线性性还能突出局部感受野
trick
为了解决节点的距离问题,文章当中正则项(当然距离的衡量方式我突发奇想是否可以用kernel
直观一点来说,相邻的节点要在数量和相似性上取一个折衷
损失函数迫使模型拥有一群相似度很高(距离很短)的节点,或者少量的相似度较低的节点,这也可以让未标记节点在损失当中得以直接的体现。
总结
写这篇文章绝对是最难的一篇,还好写完了,图算法的建模直觉我在GraphSAGE当中已经说了很多了,关键是对于数学工具的理解8,卷积核的改善是这类网络的核心,当然现在的方法利用了他的建模直觉(热力学传递)做了很多改进,类似GAT GraphSAGE。
写这篇文章连午觉都没有睡,爽的一匹