干货 | 论文解读:GAN在网络特征学习中的应用
The following article is from PaperWeekly
编者按:近年来,对网络特征学习的研究逐渐兴起,很多人也对其可能的应用产生了兴趣。近期,上海交通大学-微软亚洲研究院联合培养博士生——王鸿伟应邀参加了PaperWeekly优质论文线上直播分享活动,带大家回顾了网络特征学习的研究进展,并以第一作者的身份解读了上海交通大学、微软亚洲研究院和香港理工大学在AAAI 2018上发表的论文GraphGAN: Graph Representation Learning with Generative Adversarial Nets,该工作引入生成对抗网络(GAN)的框架,利用生成器和判别器的对抗训练进行网络特征学习。最后,他还简单介绍了网络特征学习在情感预测和推荐系统领域的应用。一起来看看吧!文章转载自公众号“PaperWeekly”。
https://v.qq.com/txp/iframe/player.html?vid=e053602k9x0&width=500&height=375&auto=0
分享实录回放
以下是视频文字版整理内容:
Outline
上图底部是三份比较有价值的资料,第一份是Graph Embedding的Survey,第二份是一个论文清单,其中包含近五年来较为经典的Network Representation Learning相关论文。第三份是我写的关于推荐系统和网络表示学习的文献综述,欢迎大家参考。
关于GRL
首先简单介绍一下Graph Representation Learning的定义,中文可以称之为图特征学习或者网络特征学习。其主要目的在于,将图中每一个节点都映射到一个低维向量空间,并且在此空间内保持原有图的结构信息或距离信息。
以上并非官方权威定义,Graph Representation Learning目前没有任何官方定义或名字,它也可以被称作Network Embedding、Graph Embedding或GRL。
我们来看上图中的简单例子,左图有三个节点和三条边,其中的数字表示各边的权值weight,我们通过GRL将其映射到一个二维空间中。可以发现,如果两个点之间的weight越大,那么它们之间的距离就越近。这就是GRL的精髓所在,即在低维空间中保持原有图的结构信息。
Graph Representation Learning的应用相当广泛,它可以被用于链路预测、 节点分类、推荐系统、视觉、知识图谱表示、聚类、Text Embedding以及社会网络分析。
GRL分类方法
我们将GRL的方法按照三种不同分类来进行简单介绍。
首先按输入进行分类,既然是GRL,那么其输入肯定是一张图,但图的种类有很多:
第一种叫同构图,即图中的节点和边都只有一种,比如引用网络,其中的节点表示每篇paper,边表示引用关系。同构图又可以根据是否有加权进行细分,即其边是否权值、边是否有向,以及边是否有正负号。
第二种是异构图,即网络中的节点和边不止一种,一般分为两种情况:
1. 多媒体网络。比如有的paper就考虑过一张图具备图像和文本两种节点,以及图像文本、图像图像和文本文本这三种边。
2. 知识图谱。图中节点表示的是实体,边表示的关系。每一个三元,HRT都表示头节点H和尾节点T有关系R。由于关系R可以有很多种,因此KG也属于一种异构图。
第三种是Graph with side information,side information即为辅助信息。这种图是指除了边和点之外,节点和边都会带有辅助信息,比如边和点都有label,边和点都有attribute,或者note有feature。
它们的区别在于label是类别型的,attribute可以是离散的,也可以是连续的,而feature就可能是文本或图像等更复杂的一些特征。
第四种是Graph Transformed from non-relational data,即从非关系型数据中转换成的图,一般是指在高维空间中的一些数据。这通常是早期GRL方法会用到的数据,其中最为典型的例子是稍后还将提到的流形学习,我们可以将这种方法理解为一种降维方法。
按输出内容我们也可以对GRL方法进行分类。
第一种方法会输出node embedding,即为每个节点输出embedding,这也是最常见的一种输出。我们前面说到的那些方法基本上都是输出node embedding。
第二种方法是输出edge embedding,即为每个边输出embedding。这种输出有两种情况,一种是在KG里面,我们会为每一个relation,也就是每条边都有输出。在link prediction的应用中,我们也会为每一条边来输出一个特征,并在后续工作中将其作为边的特征来进行一些分类任务。
第三种方法会输出sub-graph embedding,也就是子图的embedding,包括子结构或团体的embedding。
第四种是全图的embedding,即为一个整图来输出embedding。如果我们对蛋白质、分子这类数量较多的小图进行embedding,就可以对比两个分子的相似性。
第三种分类方法是按照方法来进行分类。
第一种方法是基于矩阵分解。一般来说矩阵分解包含奇异值分解和谱分解,谱分解就是我们常说的特征分解,这种方法是比较传统的方法。
第二种方法是基于随机游走。这种方法盛名在外,我们后面会提到的Deep Walk就是基于随机游走的方法。
第三种方法是基于深度学习。其中包括基于自编码器以及基于卷积神经网络。
第四种方法是基于一些自定义的损失函数。这其中又包括三种情况,第一种是最大化边重建概率,第二种是最小化基于距离的损失函数,第三种是最小化 margin-based ranking loss,这种方法常见于KG embedding。
上图是我整理的GRL方法代表作。按照时间顺序可将它们分为三类,第一类是传统方法,包含PCA、LDA、MDS 等降维方法。
2000 年左右出现了一批较为经典的方法,包括ISOMAP同态映射,LLE局部线性镶嵌,LE拉普拉斯特征分解。
最近五年被提出的方法也有很多,我将它们分作四类,每类都和上文提到的按方法分类逐一对应。
LDA线性判别分析是一种传统的有监督降维方法。我们可以看到,右图里面有两类点,有正号表示的一类和有负号表示的一类。
我们需要将二维的点映射到一维上去,LDA的目标在于让这些投影相同类的点在投影过后,同类的点之间距离尽可能变近,即让它们的协方差尽可能小,而不同类的点之间的距离尽可能远。只有这样,它才能在低维空间中对这些点进行分类或聚类操作。
Locally Linear Embedding是一种典型的流形学习方法,它是指将高维空间中的输入映射到低维空间,并且在低维空间中保持邻居之间的线性依赖关系。
左下图就是一个很典型的流形学习,流形指的是在高维空间中存在某些低维结构,比如说图A很像一个瑞士卷,它其实就是一个典型的在三维空间中的二维结构。通过LLE我们将其展成一个二维结构。
这种方法的目的在于保持高维空间中的邻居信息。其具体做法如下:对于每一个点Xi,首先需要确定其邻居集合,然后再来计算Wik Wij这些参数。这些参数的意思是,我想用这些邻居来重新构建Xi,这个会有唯一的解析解。在拿到W参数之后,我们再在低维空间中用W进行约束,学习得到低维的一个embedding。
Word2vec的本质其实是word embedding,不是network embedding。但由于它对后续的network embedding 方法影响深远,所以我们来简单介绍一下。
Word2vec中有一个skip-gram模型,这个模型的本质在于为每个词得到一个特征,并用这个特征来预测周围的词。因此,其具体方法就是将概率最大化。这个概率是指,给定一个中心词WT,在以它为中心、窗口为T的范围中的每个词的概率。
这个概率实际上是使用softmax进行计算的。由于softmax开销很大,我们通常会用negative sampling来进行代替。negative sampling是指为每个词从整个词表中选择一些negative samples,把他们作为负样本。
Word2vec在Nerwork Embedding中有两篇很典型的工作,分别是DeepWalk和Node2vec。这两篇工作分别发表于KDD 14和KDD 16。
DeepWalk相当于random walk + word2vec。从图中的每个节点出发,随机进行random walk,从当前节点均匀、随机地选择下一个节点,然后再从下个节点均匀、随机地选择下一个节点。
这样重复N次之后会得到一个path,这个path 就可以被当做一个sentence。这样一来,就将问题完全转换到了Word2vec 的领域。
大家可能会问,这个方法岂不是很简单?不就是把Word2vec用到了network embeddding 吗?
对的,就是这么简单。有时候research并不会过分强调你的方法有多新颖、数学有多花哨,而在于你能不能提出一种motivation够强、动作够快的方法。
Node2vec在DeepWalk的基础上又做了改进。它把原来的random walk改成了biased random walk。
在DeepWalk里,我们是均匀地选择下一个节点。但在Node2vec里,则是不均匀地选择下一个节点。我们可以选择模仿DFS不断往图的深处走, 也可以模仿BFS绕着一个点打转。因此,Node2vec相比DeepWalk也就是新增了一个简单改进。
LINE的全称是Large-scale Network Information Embedding。这篇文章发表于WWW 15。这个工作属于我们之前提到的自定义损失函数,因为它定义了两种损失函数,一种是一阶的临近关系,另一种是二级临近关系。
所谓的一阶临近关系就是指两个点之间是否只有相连。在右图中我们可以看到,点六和点七之间有边相连,那就可以认为它们拥有一阶临近关系。
二阶关系是指两个点的邻居的相似度。右图中点五和点六虽然没有直接相连,但它们的邻居是完全重合的,因此可以认为点五和点六的二阶临近关系很强。基于这样一种临近关系,LINE定义了两个损失函数O1和O2,然后基于这两个损失函数来进行network embedding 的学习。
TransX表示一系列方法,X可以指代任何字母,这些方法都是基于KG embedding。KG embedding是指将KG中的每个entity和relation都映射到一个低维连续空间中,并且保持原来的图结构信息。比较经典的方法有TransE、TransH和TransR,统称为基于翻译的方法。
TransE思路很简单,就是强制让Head Embedding + relatioon embedding = tail embedding。换而言之,也就是把head加relation给翻译成tail。由于这篇文章发表于NIPS 13,因此它后续又引出了一大波TransX的方法。大家可以去看上图底部的这篇survey,至少有10篇左右。
最后一篇是SDNE,全名为Structured Deep Network Embedding。这篇文章发表于KDD 15,其本质就是基于auto encoder的一种network embedding。
尽管右图看着比较复杂,其实它的思路非常简单。作者设计了一个auto encoder,其输入是每个点的邻接向量。
损失一共有三项,第一项是重建损失,第二项是proximity loss term,意思是如果两个节点有边连接,那它们的embedding必须尽量接近,具体接近程度取决于它们的权重。weight越大,那么对这项损失的惩罚力度就越大。第三项是正则化项。
GraphGAN
前文将Network Embedding的方法归为三类,而我们在GraphGAN里将其分为两类,第一类叫生成式模型,第二类叫判别式模型。
生成式模型是指,假定在图中存在一个潜在的、真实的连续性分布 Ptrue(V|Vc)。对于给定的Vc而言,我们可以看到Vc跟四个节点相连接,图中除了Vc之外还有五个节点。Ptrue(V|Vc)就是指在除了Vc之外其他节点上的分布。
假设图中对于每个Vc都有这么一个分布,那么图中的每条边都可以看作是从Ptrue里采样的一些样本。这些方法都试图将边的似然概率最大化,来学习vertex embedding。我们之前提到的DeepWalk和Node2vec都属于生成式模型。
判别式模型是指,模型试图直接去学习两个节点之间有边的概率。这种方法会将Vi和Vj联合作为feature,然后输出的是edge的概率P(edge|Vi, Vj)。这种方法的代表作是SDNE,以及DASFAA 上的一篇PPNE。
这样分类之后,一个很自然的想法是,判别式模型和生成式模型能否进行联合。这两者其实可以看作是一个硬币的两面,他们是相互对立又相互联系的。
之前提到的LINE其实已经对此进行了尝试。文中提到的一阶关系和二阶关系,其实就是两个模型的不同目标函数。
生成对抗网络自2014年以来得到了很多关注,它定义了一个game-theoretical minimax game,将生成式和判别式结合起来,并且在图像生成、序列生成、对话生成、信息检索以及domain adaption等应用中都取得了很大的成功。
受以上工作启发,我们提出了GraphGAN,它是一个在网络生成学习中将生成模型和判别模型加以结合的框架。
接下来为大家介绍Mnimax Game。其中V是节点集合,E是边集合,我们将N (Vc) 这个记号定义为Vc在图中的所有邻居,将Ptrue (Vc)定义成Vc的真实的连续性分布。
GraphGAN试图学习以下两个模型:第一个是G(V|Vc),它试图去接近Ptrue (Vc)。第二个是D(V|Vc),它的目标是判断V和Vc是否有边。
因此,我们会得到一个two-player minimax game。这个公式是本文的关键所在,只有充分理解这个公式,才能继续之后的理解。
在这个公式中,我们做了一个minimax 操作。在给定θD的情况下,我们试图对其进行最小化,这个公式其实是对图中每一个节点的两项期望求和。
下面来看生成器的实现和优化。在GraphGAN中,我们选了一个非常简单的生成器,生成器D(V, VC) 就是一个sigmoid函数,它先将两者的embedding做内积,再用sigmoid函数进行处理。对于这样的实现,它的梯度自然也较为简单。
通过上图可以看出,我们在每一步的迭代中,从Ptrue中sample出来了一些跟Vc真实相邻的绿点,然后从G中又生成了一些跟Vc相连的蓝点。我们将绿点作为正样本,将蓝点作为负样本来训练D,在得到D之后,再用D中的信号去反过来训练G。
这就是之前所说的policy gradient过程。我们不断重复这个过程,直到生成器G和Ptrue极为接近。
在刚开始的时候,G相对比较差,因此对于给定的Vc而言,G sample的点都是一些离Vc很远的点。随着训练的不断进行,G sample的点会逐渐向Vc接近,到最后G sample的点几乎都变成了真正跟Vc相邻的点,也就是G和Ptrue已经很难被区分了。
接下来,我们来讨论一下G的实现过程。一种最直观的想法是用softmax来实现G,也就是将G(v|VC)定义成一个softmax函数。
这种定义有如下两个问题:首先是计算复杂度过高,计算会涉及到图中所有的节点,而且求导也需要更新图中所有节点。这样一来,大规模图将难以适用。 另一个问题是没有考虑图的结构特征,即这些点和Vc的距离未被纳入考虑范围内。
第二种方法是使用层次softmax,具体来说就是组织了一棵二叉树,然后将所有节点都放在叶节点的位置,再将当前的Vc从根开始计算。
由于从根到每个叶结点都存在唯一路径,因此这个计算可以转换成在树的路径上的计算,即它的计算复杂度为logN ,N代表树的深度。这种做法虽然可以简化计算,但它仍然没有考虑到图结构特征。
第三种方法是Negative Sampling。这种方法其实是一个优化方法,它并没有产生有效的概率分布,并且同样没有考虑图的结构特征信息。
在GraphGAN 中,我们的目标是设计出一种softmax方法,让其满足如下三个要求。第一个要求是正则化,即概率和为 1,它必须是一个合法的概率分布。第二个要求是能感知图结构,并且能充分利用图的结构特征信息。最后一个要求是计算效率高,也就是G概率只能涉及到图中的少部分节点。
对于每个给定的结点 Vc,我们都需要以 Vc 为根来进行一次 BFS 宽度优先搜索,然后得到一颗以 Vc 为根的 BFS tree。对于这棵树上的每一个节点,我们都定义了一个 relevance probability。实际上是一个在 Vc 的邻居上的 softmax。
我们可以证明如下三个性质:
1. graph softmax的概率和是1;
2. 在graph softmax中,两个节点在原图中的距离越远,那么它们的概率也随之越低。这其实就是充分利用了图的结构特征,因为两个节点在原图中的最短距离越远,它们之间有边的概率也会相应越低;
3. 在graph softmax的计算中,计算只会依赖于O(d log V)。d是图中每个节点的平均度数,V是图G中的节点大小。这个数字会明显小于softmax的复杂度。
我们还相应设计了一种生成策略。这种这种生成策略并不需要将所有概率都算出来后再进行sample,而是可以边计算边sample。
GraphGAN的算法如上,输入是一些超参数,我们想输出生成式模型G和判别式模型D。第3-12行是算法的每一次迭代过程。在每一次迭代过程中,我们都重复用生成器来生成s个点,并用这些点来更新θG的参数。
随后,再重复构造正负样本来训练D,这样做是出于稳定性的考虑。因为我们知道GAN的训练稳定性是一个重要问题。
实验
我们的实验数据集一共是如上五个。Baseline选用的是DeepWalk,LINE,Node2vec和Struc2vec。
我们将GraphGAN用到了如下三个测场景中,第一个是link prediction,预测两个点之间是否有边的概率。图 4展示的是GraphGAN的学习曲线,对于生成器而言,在训练大概十轮之后就很快趋于稳定,并且后续一直保持性能。
对于D来说,它的性能是先上升,之后出现缓慢的下降。这和我们之前所描述的 GAN 框架也是相吻合的。表 1展示了GraphGAN在两个数据集上都得到了最好的结果。
第二个测试场景是Node Classification,在这个场景中我们想对节点进行分类,我们用的数据集是BlogCatalog和Wikipedia。在这样的数据中,我们的方法取得了最好的效果。
第三个测试场景是推荐。所用的数据集是MovieLens,我们的方法也取得了最好的效果。
总结
本文提出的GraphGAN是一种结合了生成模型和判别模型的框架。其中生成器拟合Ptrue,判别器尝试去判别两个点之间是否有边。
G和D实际上是在进行一个minmax game,其中G试图去产生一些假的点。这些假的点不能被D所判别,而D试图去将真实值跟假的点分别开来,以避免被G所欺骗。
此外,我们还提出了一种Graph Softmax作为G的实现,克服了softmax和层次softmax的缺陷,具备三个良好性质。
GRL的其他应用
DKN是我们发表在WWW 2018上的论文,它提出了一个可用于新闻推荐的deep knowledge-aware network。在DKN中,我们将KG中的entity embedding和word embedding在一个CNN框架中加以结合,并且提出了一种attention based点击率预测模型。
第二个应用是SHINE,这篇论文发表于WSDM 2018。它的目的在于预测微博用户对名人明星的情感。我们提出了一种基于自编码器的框架,这个框架其实类似于SDNE,将它应用于三者并加以结合进行情感预测。
你也许还想看:
● 干货 | NIPS 2017线上分享:利用价值网络改进神经机器翻译
1月21日到2月5日,小娜联合小米给大家拜年啦!
小娜和小米将会一起为大家送上两部小米MIX 2全面屏手机。
点击图片,查看详细活动信息吧!
感谢你关注“微软研究院AI头条”,我们期待你的留言和投稿,共建交流平台。来稿请寄:msraai@microsoft.com。