- 12.1w
-
- 3.6w
-
- 13.4w
-
![]() |
个性的电池 · 【RK部署】RK3566部署PaddleOC ...· 4 月前 · |
![]() |
帅气的蚂蚁 · C#动态生成枚举类型 - CSDN文库· 4 月前 · |
![]() |
正直的洋葱 · c# and mongoDB - ...· 1 年前 · |
![]() |
善良的红酒 · response.write()方法将指定的 ...· 1 年前 · |
![]() |
发财的充值卡 · "libgflags." a: ...· 1 年前 · |
辅助资料:
Node2Vec【图神经网络论文精读】 哔哩哔哩 bilibili
图表示学习的思想是将图的信息镶嵌到d维空间上,获取特征,同时保持相似性
example:
1、目标:找个一个相似性函数
2、Node Embedding过程
第一步:encoder,找到 z v T z u
第二步:定义节点相似性函数(测量原来图上节点位置的相似性)
第三步:decoder,度量 z v T z u
3、两个关键点
1、找到一个矩阵,将节点进行one-hot编码,利用矩阵相乘进行映射
2、思路如下
若有1w个节点, Z 矩阵则有1w列
每一个节点都看出一个单独的任务,毫无关联,对应word2vec中的one-word model
在Shallow Encoding中,节点的相似信息没有被用上,Deepwalk加入了节点的相似信息,那么节点的相似信息如何定义?
在本节,我们将介绍利用random walk进行节点相似性定义
DeepWalk是无监督或者自监督的学习方式, 即我们将不使用节点的标签,不使用节点的特征,只使用节点的相似性,这个方式是适用于任何任务上的。
随机游走的主要思想: 利用随机游走产生的序列,节点当成单词,形成句子,投入到word2vec,利用word2vec中的skip-gram模型进行embedding
step1:定义步长R,进行随机游走
step2:基于one-hot进行编码
step3:投入到wrod2vec进行embedding
在图上从某个点开始,随机游走K步
在Random Walk中,节点相似度定义为: 从某点出发随机游走得到的集合,该集合中的节点具有相似性。
利用概率估计,预测从 u 出发,R步所能走过的节点的概率
u 和 v 之间的相似性类似于夹角,定义为上述所说的概率。对应模型为word2vec中的Skip-Gram利用中心词预测上下文。
两个原因:
因而随机游走是 一种自监督学习方法
给定一个图G,定义映射函数 f (一个矩阵),目标为在定义域为 f 中搜索 ∑ u ∈ V lo g P ( N R ( u ) ∣ z u ) 的最大值,即概率最大化。此处不明白可以看word2vec模型
优化目标等同于优化:
概率定义为softmax即相当于 ∣ V ∣ 类分类任务, ∣ V ∣ 为节点数:
主要原因是下面的正则项:
也是word2vec中的加速方法。
定义了优化函数,我们将利用随机梯度下降法进行优化。
根据word2vec的原理,DeepWalk只用到了节点在图上位置的信息,利用one-hot编码进行降维得到节点嵌入。
这样做的缺点是,没有利用其他信息,如节点间的链接权重,节点本身的特征等 。
此外DeepWalk用的是随机游走,无法看到整张图的信息,随机游走的随机性可能无法很好的表示局部信息。
只能反映相邻节点的社群相似信息,无法反映节点的功能角色相似信息。
为了解决随机游走无法看到整张图的信息,作出改进,把随机游走改为有偏游走。
BFS(宽度优先):局部游走
DFS(深度优先):深度游走
当从t走到V后,再选取下一个节点的时候,有两种倾向。
基于任务各有好处:
在Deepwalk中,是一阶随机游走,即选取节点的策略仅取决于当前的节点。
在Node2vec中,采用的是二阶随机游走, 即选取的节点策略取决于当前节点同时也取决于上一个节点
Step1(关键一步)、计算随机游走的概率,形成概率表, 降低游走采样的时间复杂度 ,降为线性时间。
Step2、模拟随机游走。
Step3、基于随机梯度下降法进行优化。
可以使用节点的属性,节点的权重等。
对图或者子图进行Embeddings,用于一些图分类任务上。
将图上的节点嵌入向量平均化,得到图的向量。
引入一个虚拟节点表示子图,然后对虚拟节点进行node2vec
匿名随机游走,顾名思义将节点匿名,从index=1开始走,遇到新的节点则加1并标记上index,遇到之前遇到过的节点则设置为第一次出现时的index。如下图的例子。
匿名随机游走产生的pattern,即不同的链和路径长成指数增长关系,如路径长为3的匿名游走,根据组合数可以得到pattern有5个。
简单使用匿名随机游走,进行Graph Embeddings
想法和Traditional Embeddings中的Graphlet Degree Vector差不多,统计所有长度为 l 的匿名随机游走的pattern,然后将图表示为这些pattern的频数或概率。
example:
这样的做法会使得时间复杂度上升,因为长度l和pattern个数成指数关系。
解决的方法:用采样
不简单地用每次游走出现的次数的分数来表示匿名游走,而是学习匿名游走 w i 的embeddings, z i 。
具体来说:
如何进行embed walks?利用CBOW。输入了整张图的embeddings 说明和doc2vec类似(后续再具体学习)
具体过程如下:
输入整张图的 Z G (一开始不知道 Z G ,因此是随机输入),该 Z G 也是一个学习的目标。
从节点1开始,采样获取匿名随机游走, w 1 , w 2 等。
学习预测walks共现在 t − Δ 与 t + Δ 窗口内的概率。
![]() |
帅气的蚂蚁 · C#动态生成枚举类型 - CSDN文库 4 月前 |