图神经网络之Node2Vec详解

背景

传统算法存在的问题

  1. 一些方法中所提出的特征需要依赖人手工定义,这需要特定领域内专业人士来完成,而且依靠人手工定义特征的有效性无法保证。
  2. 利用一些非监督学习中的降维方法计算效率低,准确度也不够,而且还不能反应出网络的结构特征。

算法背景

  1. Node2Vec继承于随机游走模型DeepWalk算法模型,也是属于图神经网络种随机游走模型一类。
  2. 作者提出网络结构中存在以下两种现象:
    1)同质性:社区关系结构,即同一社区节点表示相似。其中,社区指节点内部结构信息远大于节点外部结构信息的多个节点组成的网络结构,如图中S1、S2、S3、S4、S5、u组成一个社区。
    2)结构相似性:拥有类似结构特征的节点表示相似。如下图中u和S6两个节点存在结构相似性。
     网络结构

动机

设计一个既能保持节点邻居信息而且又容易训练的模型。

算法

随机序列的生成

  1. 为了使得损失函数更加方便计算,引入skip-gram模型的两个假设:
    ①条件独立:即采样的每个邻居都是相互独立的;
    ②特征空间的对称性:两个节点之间的连边表示两者互相之间的影响是等价的。
  2. 节点转移概率计算:如图所示,作者定义了一个概率分布,对于一个随机游走,如果已经采样了,也就是说现在停留在节点v上,且u的上一序列节点为t;
     节点转移概率示意图
  3. 那么下一个要采样的节点的转移概率计算方式为:
    在这里插入图片描述
  4. 其中,参数p、q分别代表了不同含义:
    ① 返回概率p:如果 p>max(q,1) ,那么采样会尽量不往回走,对应上图的情况,就是下一个节点不太可能是上一个访问的节点t。如果 p>max(q,1),那么采样会更倾向于返回上一个节点,这样就会一直在起始点周围某些节点来回转来转去。
    ② 出入参数q:如果 q >1 ,那么游走会倾向于在起始点周围的节点之间跑,可以反映出一个节点的BFS特性。如果 q<1 ,那么游走会倾向于往远处跑,反映出DFS特性。
    ③ 特殊的,当 p=1,q=1时,游走方式就等同于DeepWalk中的随机游走。

Node2Vec算法

Node2Vec算法

算法的具体流程:

1. 根据p、q和之前的公式计算一个节点到它的邻居的转移概率;
2. 将这个转移概率加到图G中形成G';
3. walks用来存储随机游走,先初始化为空;
4. 外循环r次表示每个节点作为初始节点要生成r个随机游走;
5. 其中,对图中每个节点生成一条随机游走walk的流程:
	a. 将初始节点u添加进去;
	b. walk的长度为l,因此还要再循环添加l-1个节点;
	c. 当前节点设为walk最后添加的节点;
	d. 找出当前节点的所有邻居节点;
	e. 根据转移概率采样选择某个邻居s;
	f. 将该邻居添加到walk中;
6. 将walk添加到walks中保存;
7. 然后用SGD的方法对walks进行训练。

总结

Node2Vec的思想跟DeepWalk类似,不过改进了DeepWalk中随机游走的生成方式,使得生成的随机游走可以反映深度优先和广度优先两种采样的特性,从而增加单词嵌入的准确性,提高网络嵌入的效果。

相关资料

论文:node2vec: Scalable Feature Learning for Networks

神经网络是一种专门用于处理数据的深度学习算法数据具有节点和边组成的结构,与传统神经网络的输入数据不同。Python是一门开源的编程语言,具有强大的支持和庞大的开发者社区,适合开发神经网络。 在实现神经网络Python程序中,一般需要使用特定的库或框架,如TensorFlow或PyTorch。这些库或框架提供了许多预设的神经网络模型和函数,可以在不需要手动编写算法的情况下实现神经网络。例如,可以使用TensorFlow中的GraphSAGE模型来进行节点分类任务。 在编写程序时,需要首先读取并处理数据。常见的方法是将节点转换为向量表示,以便用于神经网络中的计算。通常需要对节点特征进行嵌入学习,例如使用GloVe或Word2Vec算法进行句子嵌入,或者使用GCN(Graph Convolutional Network)算法进行节点嵌入。 接着,需要定义模型架构和训练方式。一般来说,神经网络可以分为基于节点和基于的两种类型。在基于节点的神经网络中,主要是对每个节点进行分类或回归,而在基于神经网络中,主要是对整个进行分类或回归。可以根据具体任务需求选择合适的模型架构。例如,对于社交网络中的节点分类任务,可以使用基于GCN的模型。 最后,需要进行训练和评估。训练是基于给定的训练数据对神经网络进行优化,以提高模型的性能。常用的优化算法包括随机梯度下降(SGD)、Adam等。评估通常通过在测试数据上进行测试,比较模型实际输出和预期输出的差异,并计算模型在各种指标上的表现,如准确率、召回率和F1分数等。 总之,实现神经网络Python程序,需要熟悉数据处理、神经网络模型设计、训练和评估等知识。同时也需要了解相应的库和框架,以及各种算法的优缺点和使用方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值