查看原文
其他

干货 | 论文解读: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:用于序列生成的推敲网络

●  干货 | NIPS 2017线上分享:利用价值网络改进神经机器翻译





1月21日到2月5日,小娜联合小米给大家拜年啦!


小娜和小米将会一起为大家送上两部小米MIX 2全面屏手机。


点击图片,查看详细活动信息吧!



感谢你关注“微软研究院AI头条”,我们期待你的留言和投稿,共建交流平台。来稿请寄:msraai@microsoft.com。



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存