网络,Graph Neural Network(GNN)是一类近期非常流行的学习模型,与其他学习算法不同,他的基本思想是,建模事物之间的依赖或影响关系。很多系统都由相互作用的元素构成,例如,我就是我所在的社交网络中的一个元素,我想要购买的东西,想去的地方都很大程度上受我的家人朋友影响,用GNN去建模这种影响关系可以更精确的完成对我的建模,进而可以做更准确的做出对我的行为预测,其中的商业价值不言而喻。网络结构图-
另外,在很多情况下,我们不只是要通过个体所在的网络理解这个人本身,而是想要更好的建模整个系统,此时也是图网络的用武之地,因为只有学习到了节点之间相互影响的关系(即动力学),才能更好的理解整个系统,一个简单的例子是,只有建模了微观神经元之间的放电影响关系,才能准确的建模一个神经系统,在传统情况下,神经科学家往往去发明数学公式拟合神经元的放电现象。我在之前的文章中也讲过更好玩儿的例子:用图网络学习一个机械狗各个关节之间的影响关系,从而对机械系统完成更好的建模。
https://zhuanlan.zhihu.com/p/74784548然而,只有在网络结构已知的情况下,GNN才可能被应用。但在现实世界中,网络结构通常不全或完全未知,即使有网络结构,你也不确定你手头的网络结构是否缺失信息或存在冗余信息。网络结构图
例如,你是微信的技术负责人,现在你手上有全中国微信社交网络数据,当然你可以应用GCN做推荐算法,但这样的弊端是什么呢?是你明明知道,有些人微信中的链接是无效的:有一些人是你不小心加错的,有一些会议上一面之缘加了好友的人从未联系过,甚至你都不知道你有这个好友,那么这个人的任何行为实际上都不会对你产生影响,这就是微信社交网络数据中的冗余信息。我们可以确信,删掉这些连边会提升推荐算法的效果,因为你的那个所谓的好友和你真的没有任何影响关系。
另一种情况则更为极端,那就是原始的数据点中根本不存在“网络”这一概念,人家原来就是一个本本分分的机器学习问题:给你一堆西瓜颜色,纹路数据,让你学习到一个判断瓜是好是坏的算法,这些场景原本都是决策树和SVM的战场。对于这些数据,我们要依然要应用GNN,实验证明,他在表现上大幅超过原本的算法。网络结构图
科学问题
让我们来明确一下这两篇文章要解决的科学问题。
对于有网络结构的数据,我们假设现有的网络结构并不是最优的,而是要对他进行优化,再进一步应用GNN的方法做下游任务,如图:
优化原有网络结构并应用于下游任务,对于没有网络结构的数据,我们将先用kNN建立一个网络结构,再采用上面的方法,优化这个结构并应用于到下游任务上,如图:
创建网络结构,优化网络结构并且应用于下游任务,这里说的kNN建网过程是指,我们可以根据原来的数据feature,计算他们的距离,并且选择最近的k个邻居建立网络。网络结构图
迭代的优化过程
在我们对下游任务的处理方法(GCN,GAT等)都很熟悉的情况下,很明显,算法的核心在于对数据中的网络结构本身进行优化的方法,接下来我会简单的介绍文章《Deep Iterative and Adaptive Learning for Graph Neural Networks》是如何完成这一过程的,介绍这一篇的原因是首先,这一篇是后出来的,它的效果更好一些,另外,这一篇在网络结构优化方面的思路更为清晰,也更有借鉴意义。网络结构图
他的核心思路是这样的,首先,既然这个算法是图网络算法,那么我们应该设置合理的Loss来对结构进行优化。一方面,我们合理的假设好的结构会更有利于做下游任务,因此我们可以直接用下游任务的损失(如节点分类的损失)来优化结构参数。
另一方面,我们需要对结构本身引入一些惩罚项,这个意思是说我们对结构有一些先验知识,如果网络结构本身不符合我们的先验知识(例如网络应该是稀疏的),那么我们就会直接用结构本身计算出较大的损失。
下游任务(如预测)的损失 + 结构的损失,构成了网络优化过程的损失函数,在这两个损失函数的共同作用下,网络的结构得以优化为最适合下游任务的网络结构。网络结构图
这里稍微多谈一点我自己的看法,在图网络刚出来的时候,很多研究人员在下游任务上发力,这里指的是在拿到了数据中的网络结构的情况下,如何更好的挖掘数据之间的依赖和影响关系,为了解决这一问题,科学家们开发了图卷积网络(GCN),图注意力网络(GAT)等。
现在在下游任务的方法的果子已经很难摘的情况下,人们将目光转向了数据中原有网络结构的优化。与之相关的是,我自己的工作,一直关注的就是网络科学中的逆向问题,用节点的演化数据推测节点之间的连接结构,学习节点之间相互作用的动力学。最近我们在新的工作中,因此,我们也需要优化网络结构,巧的是我们的工作中使用了同样的方法,用预测任务损失和结构本身的损失作为共同的损失函数,去优化数据中的网络结构,反过来使得预测更为准确(当然我们也是受了其他工作的启发)。感兴趣的话,也可以看一下我们的近期工作:https://www.biorxiv.org/content/10.1101/842369v1
我想,这种用两种损失优化图网络数据中的网络结构的方法,可能会成为很多图网络研究人员的关注点。网络结构图
结构损失的设计
现在让我们来仔细讨论一下结构损失的设计,总体而言,结构损失衡量的并不是结构和某些数据或者label之间的差异,而是结构和设计者的先验知识之间的差异,在结构的优化上,文章主要是应用了这三个先验知识:
稀疏性:现实的网络大部分都是稀疏的
平滑性:平滑指的是特征信息不相似的节点不应该链接,如果每一条边两端的节点都是相似的,我们会说整个网络是平滑的
连通性:网络应该是连通的
文章对这三条先验知识都设计了对应的损失函数(接下来我们要看几个公示),其中平滑损失的设计方法为:
平滑损失函数,其中 和 代表了两个节点的特征,可以看到,如果特征相差很大的两个节点有链接,那么会让损失函数的值变大,通过这方面的优化,会使得网络更加平滑。
连通和稀疏损失的设计方法为:
连通性和稀疏性损失函数,其中的前一项为连通性损失函数(这一项我没看懂,希望看懂的朋友们指点一下),后一项则很明显为稀疏性损失, 指的是对A的每一项平方求和,网络越稠密,该项的结果就会越大。
值得一提的是,这些先验知识是比较通用的,现实中,大部分网络都是稀疏的,因此在我们自己做任务的时候,如无特殊情况也可以顺利地引入这些先验知识,进而提升整体的人物表现。网络结构图-