数据集
斯坦福图神经网络数据集snap是Jure等人不间断收集的网络数据集,极大地推动了社交网络领域的发展。
数据集可能存在一些指标或性质说明需要在使用之前先理解:
- Average clustering coefficient:图密度。一张图最多的边的个数(也就是全连接情况下边的个数)作为分母,一张图实际存在的边的个数作为分子,得到的比率就叫做图密度。
- Number of triangles:一张图里面有多少三角形。三角形是图里面常见的指标,也是社交网络中比较稳定的结构,例如A和B存在关系,B和C也存在关系,那么A和C很有可能也存在关系。
- Sighed:符号网络,例如A和B是“朋友”关系,或者是“同行”关系。
- Temporal:时序网络,当前时刻有边,下一时刻两个结点之间就没有边。
- Attributed:图上还有附加信息,不仅是拓扑结构边的信息,还可能有例如年龄,身高,体重等等。
- Bipartite:例如IMDB数据集,人之间不建边,电影之间不建边,只在人和电影之间建边。
- Geo-Location:以地理坐标为标准的结点
所有的研究涵盖:节点分类(node classification)、边预测(link prediction)、社群检测(community detection)、网络营销(在一张图上如何选择种子用户集,用他们宣传能达到最大覆盖,viral marketing)、网络相似度(测两个网络之间的相似度,network similarity)
而node2vec的研究成果之一就是用实例证明了,深度优先搜索(DFS)更擅长发现图中的同质性(也就是社群属性),观察结果会发现离得近的点都分成了一类。
而广度优先搜索(BFS)更擅长发现图中的结构性,观察结果会发现以蓝色的点为例,都是起到了串联作用,在网络结构中有着相似的贡献。
除此之外,图的构建也是相当重要的研究,也有许多的trick,在此就不再展开说明了。
论文算法模型总览
该篇文章之前在网络中有关节点和边的相关任务都是依靠特征工程。这篇文章提出node2vec,绝大部分工作都是希望能用低维向量来表示一个点,而不再采用邻接矩阵。这篇文章设计了一个损失函数,目的是保存网络的结构,就是在节点都映射到低维空间之后,节点与节点之间还是邻居的可能性要最大化。为此文章定义了一个灵活的节点网络邻居的概念,并设计了有偏随机游走过程来高效地探索节点的邻居。之前的工作对于邻居节点的定义都很硬性,但是这篇文章的算法就很灵活,这样才能给学到的vec赋予更加丰富的信息。
图有两种表示方式,一种是邻接矩阵,一种是邻接表,邻接表比邻接矩阵省了一些存储空间。所有的图表征学习都是希望用一个d维的向量来表示图中的某个节点,一般d取128即可。给定节点u学到一个表征,之后用这个表征去预测邻域是什么。
node2vec结构
独立性假设:邻居节点之间互不影响(和word2vec一样,假设各个节点之间是独立的或者只考虑一阶的邻居,很类似马尔可夫链的假设)
负采样:多层softmax,word2vec里面词频越高越采样来作为负样本,图里面就是用点的degree代替词频
SGD优化方法:随机梯度下降
值得注意的是Zu的计算,如果全按公式来,那就要考虑所有的点,所以这个计算量