Representation Learning on Network 网络表示学习

Note: 以下是根据综述 [1][2] 梳理的笔记,由于是初探,语言和理论必然有不严谨之处,欢迎指正。

网络表示学习(Representation Learning on Network),一般说的就是向量化(Embedding)技术,简单来说,就是将网络中的结构(节点、边或者子图),通过一系列过程,变成一个多维向量,通过这样一层转化,能够将复杂的网络信息变成结构化的多维特征,从而利用机器学习方法实现更方便的算法应用。

Embedding Nodes

在这些方法中,受研究和应用关注最多的就是节点向量化(Node Embedding),即对于一个图 G=(V,E)G=(V,E),学习一种映射:
f:vi→zi∈Rdf:vi→zi∈Rd
其中 zizi 是一个输出的多维向量,并且满足d≪|V|d≪|V|。用于评估这个学习效果的标准,就是看向量化后重新复原网络结构的能力。

在[1]中,作者提到节点向量化有3大挑战:

  1. 学习属性的选择:不同的向量化表示方法,都是对网络信息的一种摘要。有时我们会倾向于保存网络中节点的近邻关系,有时倾向学习节点在网络中的角色(比如中心节点)。不同的应用对“学习属性”的选择有不同的要求,故而引发了各类算法的爆发。
  2. 规模化:现实应用中有很多网络包含了大量的节点和边,高效的向量化方法,能够在短时间内处理超大规模的网络,才比较有实际应用的可能性。
  3. 向量维度:如何确定合适的向量表示维度,是一个很难的问题,并且也是和具体场景相关的。事实上,越高的维度可能带来越好的效果,但是会极大降低应用性能。平衡性能和效果,在不同的应用中需要因地制宜。

1. Encoder-decoder View

论文[2] 通过调研今年业界比较流行的向量化方法,提出了一套通用的流程和模型框架。

大部分向量化算法,是属于非监督学习,没有针对特定的图计算任务(比如链路预测或者聚类)进行优化,而是针对图信息的保存情况进行优化学习,其评价标准,就是看其向量化后的数据对原始网络的恢复能力。整个学习过程被抽象为下图所示的框架图,它包括两个过程:

  • Encoder:负责把每个节点映射到一个低维向量中
  • Decoder:负责从向量化的信息中重新构建网络结构和节点属性

对于上述框架,它包含4个概念:

  1. 节点关系函数 sG:V×V→R+sG:V×V→R+ 衡量两个节点之间的距离
  2. Encode 函数 ENC:V→RdENC:V→Rd 将节点映射到 d 维向量
  3. Decode 函数 DEC:Rd×Rd→R+DEC:Rd×Rd→R+ 将向量化信息重新恢复成节点关系
  4. 损失函数 ll 用于度量模型刻画能力,比如 DEC(zi,zj)DEC(zi,zj) 与 sG(vi,vj)sG(vi,vj)的偏差情况。

对于 Encoder-decoder 框架下现有的 state-of-the-art 模型,[2]的作者提出了几个弱点:

  1. 向量化后的节点之间没有参数共享,完全是一种记忆化的模型存储和查询方式(Look-up),这对存储和计算都构成了不小的挑战。由于节点之间没有参数共享,也就大大损失了泛化能力。
  2. 目前大部分向量化方法,仅利用网络结构信息,并没有利用网络节点本身的属性(比如文本、图像和统计特征),使得结果向量对网络信息的存储很有限。
  3. 大部分模型是对静态网络结构的直推学习,并没有考虑网络时间演化过程中新节点的生成和旧节点的湮灭,而网络的动态特性对理解其性质也至关重要。这个弱点甚至会影响向量化在动态网络上的效果。比如在互联网场景中,每天都有新的结构产生和消除,今天生成的向量化表示,两天后的可用性是否会大打折扣?这是一个值得深思的问题。

2. Encoding Methods

本模块主要介绍3种常见的网络表示学习类别。

2.1 Factorization based

矩阵分解是传统的节点向量化方法,其思想就是对网络的邻接矩阵进行降维,给每个节点生成一个低维表示。

Laplacian Eigenmaps

Laplacian Eigenmaps 的目标是将相似性高的两个节点,映射到低维空间后依然保持距离相近,其损失函数定义为:
L(Z)=12(zi−zj)2Wij=ZTLZL(Z)=12(zi−zj)2Wij=ZTLZ
其中 LL 是图 G 的 Laplacian 矩阵,L=D−AL=D−A,其中 DD 是度矩阵,AA 是邻接矩阵。

GF

根据[1]的调研,GF(Graph Factorization) 是第一个在 O(|E|) 的时间复杂度上完成向量化的算法。其损失函数定义为:
L(Z,λ)=12∑(i,j)∈E(Wij−<Zi,Zj>)2+λ2∑iZi2L(Z,λ)=12∑(i,j)∈E(Wij−<Zi,Zj>)2+λ2∑iZi2
其中 λλ 是正则化参数。跟上面的 Laplacian Eigenmaps 相比,GF 算法是将两个向量重构后的边权作为衡量方法,两个向量可能有多种重构方式,比如直接点乘,或者求余弦相似度等等。

HOPE

HOPE(High-Order Proximity preserved Embedding) 模型相比 GF,通过引入 ||S−ZsZTt||2F||S−ZsZtT||F2 考虑了高阶相似性,论文作者尝试了 Kate Index, Root Page Rank, Common Neighbors, Adamic-Adar Score 等相似性指标,然后把相似性矩阵分解为 S=M−1gMlS=Mg−1Ml,因为M−1gMg−1 和 MlMl 都是稀疏的,所以利用 SVD 能有较高的运行效率。

2.2 Random Walk based

随机游走利用了网络结构采样,在处理大规模网络问题上,常常有很好的性能表现,同时可以很好地刻画网络局部信息。大部分情况下,我们对节点的观察并不需要考虑离它太远的节点,利用局部信息已经能够区别节点间的差异。

DeepWalk&node2vec

DeepWalk 是最早提出的基于 Word2vec 的节点向量化模型。其主要思路,就是利用构造节点在网络上的随机游走路径,来模仿文本生成的过程,提供一个节点序列,再套用 Word2Vec 对每个节点进行向量化表示。因为知道了节点 V 的前 k 个节点和后 k 个节点,就能很好地将网络邻居结构存入向量中。其目标就是最大化 logPr(vi−k,…,vi−1,vi+1,…,vi+k|Zi)logPr(vi−k,…,vi−1,vi+1,…,vi+k|Zi)。

Node2vec 是对 DeepWalk 的一种更广义的抽象,它引入了 biased-random walks,用来刻画每次随机游走是偏深度探索(DFS)还是广度探索(BFS),分别侧重社区结构和节点重要性的信息。由于 node2vec 有 p 和 q 两个超参数,所以它是一个比较灵活的模型框架。后面也会讲到,它在节点分类问题中有着不俗的表现。

LINE

LINE(Large-scale Information Network Embeddings) 直观上看其实并没有用随机游走。但是[2]将其归类到随机游走的范畴,原因是它和 DeepWalk 的框架类似地应用了概率损失函数。即通过最小化节点 i,ji,j 相连的经验概率 ^p(i,j)p^(i,j) 与向量化后两个节点相似性 p(vi,vj)p(vi,vj) 的距离,并且同时考虑了一阶和二阶相似度(优化两个损失函数),这和随机游走的底层动机是相似的。在实际计算过程中,作者引入了一系列预处理和优化方法(比如负采样),来加快学习性能。

2.3 Deep Learning based

SDNE

SDNE(Structural Deep Network Embeddings) 将节点的相似性向量 sisi 直接作为模型的输入,通过 Auto-encoder 对这个向量进行降维压缩,得到其向量化后的结果 zizi。其损失函数定义为:
L=∑vi∈V||DEC(zi)−si||22L=∑vi∈V||DEC(zi)−si||22
其中 sisi 是一个|V||V| 维的输入向量,而 zizi 的维数必然远小于前者。其实它的建模思路和前面提到的矩阵分解是一致的,只是在降维时用的不是矩阵分解,而是 Auto-encoder。

另一个模型 DNGR(Deep Neural Graph Representations) 与 SDNE 区别主要在于相似性向量的定义不同,DNGR 将两个节点由随机游走得到的「共同路径」作为衡量其相似性的指标,而 SDNE 直接用一阶关系作为相似性的输入。

这种方法遇到一个较大的问题是,其输入向量维度被限制为|V||V| ,一方面对网络规模有一定限制,另一方面对新节点的接受程度不好(新节点加入后可能需要重新训练整个网络)。

GCN

前面说的几种模型,大都是利用网络结构对节点进行向量编码。另外有一类方法,强调的更多是将节点本身及其邻居节点的属性(比如文本信息)或特征(比如统计信息)编码进向量中,这类方法可以统称为 Neighborhood Aggregation Algorithms,它们引入了更多特征信息,并且在邻居节点间共享了一些特征或参数。

GCN(Graph Convolutional Networks) 就是其中的一类。上图是 GraphSAGE 算法 [3]的流程步骤。相比 SDNE 类的算法,GCN 的输入向量不必限制在 |V||V| 维,所以输入数据可以大大减小维数。因为 GCN 在网络结构的基础上,又引入了节点信息,所以在节点分类、链路预测等任务上,比只考虑网络结构的模型有更好的表现,当然这也取决于数据的丰富程度。

3. Evaluation

文章[2]在人工生成网络、社交网络、论文合作网络和蛋白质网络上对几种常见的向量化方法进行了网络重构、节点可视化、链路预测、节点分类的评测,大部分模型实验的输出结果是128维的向量。网络信息如下:

A. Graph Reconstruction

网络重构,是从向量化的节点出发,重新连边构建网络。我们发现 保存了高阶节点关系的模型往往能够更好地重构网络 ,这也符合直观认识。SDNE 几乎在所有数据集上击败了其他模型。

B. Visualization

网络节点可视化,一般是将节点编码成二维或三维的向量,在坐标轴上标注出来。常常会以事实分类区别颜色标记在图像上,用来区分不同向量化方法的好坏。

下图是模型对 SBM 生成网络处理,输出编码至 128 维向量后,再利用 t-SNE 进行压缩得到的二维图像。

当 node2vec 模型设置 BFS 倾向大一些时,可以得到界限很清晰的聚类结果。但是 LE(Laplacian Eigenmaps) 和 GF(Graph Factorization) 模型的效果就比较差强人意了,尤其是 GF 基本不能看。

下图是模型对 Karate 跆拳道俱乐部网络进行二维向量化编码的结果。

从网络结构和节点性质来看,SDNE 和 node2vec 保留了原始网络较多信息。尤其是 SDNE 把节点0单独放到了很远的位置,因为它是社区间的 bridge 节点。而 HOPE 对 0、32、33 的社区中心节点属性刻画的比较好,并且明显地划分出两个社区。GF 的表现依然比较差,除了把度大的节点放在了中心,叶子节点放在了周围,并没有很好的区别社区距离。

C. Link Prediction

在链路预测评估中,各个算法的表现并不是很稳定。这也和模型的设计并不是为特定任务而定制有关。

从 Top k 预测准确性来看,node2vec 模型在 BlogCatelog 数据中表现最好,其他数据集就比较一般(在 PPI 的 Top 表现也不错)。HOPE 模型在 k 比较大时,效果一般在中上位置,比较稳定。

D. Node Classification

作者在 SBM、PPI 和 BlogCatelog 网络上做了节点分类的实验。如下图:

从数据效果来看,node2vec 模型几乎在所有数据集中,都远胜其他模型。原因可能是 node2vec 模型同时刻画了节点的社区结构和网络角色,说明在节点分类中 Random Walk 方法有比较不错的表现。

综上 node2vec 和 SDNE 在除了链路预测问题中,几乎表现都很亮眼。值得重点挖掘!

Reference

[1] Goyal, Palash, and Emilio Ferrara. "Graph Embedding Techniques, Applications, and Performance: A Survey." arXiv preprint arXiv:1705.02801 (2017).

[2] William L. Hamilton, Rex Ying and Jure Leskovec. "Representation Learning on Graphs: Methods and Applications" arXiv preprint arXiv:1709.05584 (2017).

[3] Hamilton, William L., Rex Ying, and Jure Leskovec. "Inductive Representation Learning on Large Graphs." arXiv preprint arXiv:1706.02216 (2017).

时间: 2024-11-01 11:24:55

Representation Learning on Network 网络表示学习的相关文章

(转)Predictive learning vs. representation learning 预测学习 与 表示学习

  Predictive learning vs. representation learning  预测学习 与 表示学习   When you take a machine learning class, there's a good chance it's divided into a unit on supervised learning and a unit on unsupervised learning. We certainly care about this distincti

论文笔记之:UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS

  UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS  ICLR 2016    摘要:近年来 CNN 在监督学习领域的巨大成功 和 无监督学习领域的无人问津形成了鲜明的对比,本文旨在链接上这两者之间的缺口.提出了一种 deep convolutional generative adversarial networks (DCGANs),that have ce

谈一谈网络编程学习经验

建议大家去看原文:http://cloud.github.com/downloads/chenshuo/documents/LearningNetworkProgramming.pdf 1 谈一谈网络编程学习经验 陈硕 giantchen@gmail.com blog.csdn.net/Solstice weibo.com/giantchen 2012-02-13 本文谈一谈我在学习网络编程方面的一些个人经验."网络编程"这个术语的范围很广,本文指用 Sockets API 开发基于

《中国人工智能学会通讯》——3.4 网络表示学习的应用

3.4 网络表示学习的应用 由于基于神经网络的网络表示方法的高效性,它被越来越多地应用到除传统应用场景(如网络节点分类.推荐和链接预测等)之外的其他方面(如文本建模[17,28]和可视化处理[29] ). 文本语料可以表示为一个带权重的网络结构(节点表示词,边权重表示词与词之间共现的程度),因此网络的表示方法同时也可以应用到文本建模中.LINE [17] 模型一个重要的应用就是学习词的向量表示,相比现在流行的 Skip-gram 词向量模型,它具有效率更高和效果更好的特点.在文献 [17] 中,

【深度神经网络 One-shot Learning】孪生网络少样本精准分类

传统观点一般认为,深度神经网络通常比较擅长从高维数据中学习,例如图像或者语言,但这是建立在它们有大量标记的样本来训练的情况下.然而,人类却拥有单样本学习的能力--如果你找一个从来没有见过小铲刀的人,给他一张小铲刀的图片,他应该就能很高效的将它从其他厨房用具里面鉴别出来. 这是一种对人类来说很容易的任务,但是直到我们想写一个算法让它去做这件事--那就GG了 .很明显,机器学习系统很希望拥有这种快速从少量样本中去学习的能力,因为收集和标记数据是一个耗时费力的工作.而且,我认为这是通往通用人工智能的漫

CANE:用于关系建模的上下文相关网络表示学习模型

CANE: Context-Aware Network Embedding for Relation Modeling 本文工作来自第 9 期 PhD Talk 嘉宾 - 清华大学计算机系人智所自然语言处理组的涂存超博士.该工作利用社会网络中用户产生的文本信息(如论文),采用 cross attention 技术,建立了上下文敏感的网络节点表示学习模型,在这里某个网络节点的表示会根据链接邻居的不同而不同,该算法在社会网络链接预测任务上表现非常好.本文已入选 ACL2017. 论文链接: http

(zhuan) Notes on Representation Learning

this blog from: https://opendatascience.com/blog/notes-on-representation-learning-1/   Notes on Representation Learning By Zac Kriegman, Senior Data Scientist in the Thomson Reuters Data Innovation Lab | 02/07/2017   Tags: Deep Learning , Neural Netw

Socket网络编程学习笔记(3):利用套接字助手类

在上一篇中已经介绍了利用Socket建立服务端和客户端进行通信,如果需要 的朋友可访问<Socket网络编程学习笔记(2):面向连接的Socket>.在本篇 中,将利用C#套接字的助手类来简化Socket编程,使得刚刚接触到网络编程的 朋友们更容易上手. 跟上篇一样,通过C#套接字的助手类来编程同样分 服务端和客户端. 一.服务端侦听模式 1.创建套接字与 IPEndPoint绑定,并设置为侦听模式. 1//创建IPEndPoint实例 2 IPEndPoint ipep = new IPEn

python网络编程学习笔记(二):socket建立网络客户端_python

1.建立socket 建立socket对象需要搞清通信类型和协议家族.通信类型指明了用什么协议来传输数据.协议的例子包括IPv4.IPv6.IPX\SPX.AFP.对于internet通信,通信类型基本上都是AF_INET(和IPv4对应).协议家族一般表示TCP通信的SOCK_STREAM或者表示UDP通信的SOCK_DGRAM.因此对于TCP通信,建立一个socket连接的语句为:s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)对于UDP通