| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> Graph Embedding常见类型的理论详解 -> 正文阅读 |
|
[数据结构与算法]Graph Embedding常见类型的理论详解 |
Graph Embedding目前提到图算法一般指:
Graph Embedding 的中心思想就是找到一种映射函数,该函数将网络中的每个节点转换为低维度的潜在表示。得到的表达向量可以用来进行下游任务,如节点分类,链接预测,可视化或重构原始图等。 DeepWalk、LINE、Node2vec、Struc2vec和SDNE是Graph Embeding的几种常见类型。不同的graph embedding方法的一个主要区别是对图中顶点之间的相似度的定义不同。 1、DeepWalk1)介绍DeepWalk的思想类似word2vec,使用图中节点与节点的共现关系来学习节点的向量表示。 DeepWalk通过从每个结点出发n_walks次,每一步都采取均匀采样的方式选择当前结点的邻接结点作为下一步的结点随机游走。当游走的路径长度达到walk_length后,停止一次游走。这样就生成了一个个游走的序列,每个序列都称为一个walk。每个walk都被当成Word2Vec中的一个句子,而每个结点都是Word2Vec中的一个词。之后的算法几乎和Word2Vec的skip gram版本完全一样。 RandomWalk是一种可重复访问已访问节点的深度优先遍历算法。给定当前访问起始节点,从其邻居中随机采样节点作为下一个访问节点,重复此过程,直到访问序列长度满足预设条件。获取足够数量的节点访问序列后,使用skip gram model 进行向量学习。 2)算法过程Network/graph ——random walk——得到节点序列—— 放到skip-gram模型中——output:representation 2、LINE1)介绍LINE也是一种基于邻域相似假设的方法,只不过与DeepWalk使用DFS构造邻域不同的是,LINE可以看作是一种使用BFS构造邻域的算法。此外,LINE还可以应用在带权图中(DeepWalk仅能用于无权图)。 LINE在图上定义了两种相似度:一阶相似度与二阶相似度。 一阶相似度:用于描述图中成对顶点之间的局部相似度。形式化描述为若 u , v \bf u,v u,v之间存在直连边,则边权 w u v w_{\bf uv} wuv?即为两个顶点的相似度;若不存在直连边,则一阶相似度为0。如上图中的6、7两个结点就拥有很高的一阶相似度。 二阶相似度:所比较的是两个结点邻居的相似程度。若 u , v \bf u,v u,v之间拥有相同的邻居,他们也更加的相似;若不存在相同的邻居顶点,则2阶相似度为0。例如下图中的5、6两点拥有很高的二阶相似度。用一句俗话来概括就是“我朋友的朋友也可能是我的朋友” 2)优化目标一阶相似度一阶相似度只能用于无向图当中。 对于每一条无向边
(
i
,
j
)
(i,j)
(i,j),定义经验分布(两个结点实际的一阶相似度): 二阶相似度这里对于每个顶点 i i i维护两个embedding向量,一个是该顶点本身的表示向量 u → i \overrightarrow{u}_i ui?,一个是该点作为其他顶点的上下文顶点时的表示向量 u → i ′ \overrightarrow{u}^\prime_i ui′?。 对于有向边
(
i
,
j
)
(i,j)
(i,j),定义给定顶点
v
i
v_i
vi?条件下,经验分布定义(两个结点实际的二阶相似度): 产生上下文(邻居)顶点
v
j
v_j
vj?的概率(两个结点embedding的相似度): 优化目标为最小化: 使用KL散度并设
λ
i
=
d
i
\lambda_i=d_i
λi?=di?,忽略常数项,有: 3、Node2vec1)介绍前面介绍过基于DFS邻域的DeepWalk和基于BFS邻域的LINE。 node2vec是一种综合考虑DFS邻域和BFS邻域的graph embedding方法。简单来说,可以看作是deepwalk的一种扩展,是结合了DFS和BFS随机游走的deepwalk。 2)优化目标设 f ( u ) f(u) f(u)是将顶点 u u u映射为embedding向量的映射函数,对于图中每个顶点 u u u,定义 N S ( U ) N_S(U) NS?(U)为通过采样策略 S S S采样出的顶点 u u u近邻顶点集合。 node2vec优化的目标是给定每个顶点条件下,令其近邻顶点(如何定义近邻顶点很重要)出现的概率最大。即:
P r ( N S ( u ) ∣ f ( u ) ) = ∏ n i ∈ N S ( u ) P r ( n i ∣ f ( u ) ) Pr(N_S(u)|f(u))=\prod_{n_i\in N_S(u)}Pr(n_i|f(u)) Pr(NS?(u)∣f(u))=ni?∈NS?(u)∏?Pr(ni?∣f(u))
P r ( n i ∣ f ( u ) ) = e x p ( f ( n i ) ? f ( u ) ) ∑ v ∈ V e x p ( ( f ( v ) ? f ( u ) ) ) Pr(n_i|f(u))=\frac{exp(f(n_i)\cdot f(u))}{\sum_{v\in V}exp((f(v)\cdot f(u)))} Pr(ni?∣f(u))=∑v∈V?exp((f(v)?f(u)))exp(f(ni?)?f(u))? 根据以上两个假设条件,最终的目标函数表示为: 3)顶点序列采样策略node2vec引入两个超参数
p
p
p 和
q
q
q来控制随机游走的策略,假设现在游走序列从
t
t
t走到
v
v
v,这时候需要算出三个系数,分别作为控制下一步走向方向的偏置
α
\alpha
α
下面讨论超参数 p p p和 q q q 对游走策略的影响。
下面的图描述的是当从 t t t访问到 v v v时,决定下一个访问顶点时每个顶点对应的 α \alpha α。 给定当前顶点
v
v
v,给定当前顶点
x
x
x 的概率为: 4、Struc2vec1)介绍Struc2Vec是从空间结构相似性的角度定义顶点相似度的。 根据下图,如果在基于近邻相似的模型中,顶点 u u u和顶点 v v v是不相似的,第一他们不直接相连,第二他们不共享任何邻居顶点。 而在struc2vec的假设中,顶点 u u u和顶点 v v v是具有空间结构相似的。他们的度数分别为5和4,分别连接3个和2个三角形结构,通过2个顶点 ( d , e ; x , w ) (d,e;x,w) (d,e;x,w)和网络的其他部分相连。 直观来看,具有相同度数的顶点是结构相似的,若各自邻接顶点仍然具有相同度数,那么他们的相似度就更高。 2)距离定义令 R k ( u ) R_k(u) Rk?(u)表示到顶点 u u u距离为 k k k的顶点集合,则 R 1 ( u ) R_1(u) R1?(u)表示是 u u u的直接相连近邻集合。 令 s ( S ) s(S) s(S)表示顶点集合 S S S的有序度序列。 通过比较两个顶点之间距离为k的环路上的有序度序列可以推出一种层次化衡量结构相似度的方法。 令
f
k
(
u
,
v
)
f_k(u,v)
fk?(u,v)表示顶点
u
u
u和
v
v
v之间距离为
k
k
k(这里的距离
k
k
k实际上是指距离小于等于
k
k
k的节点集合)的环路上的结构距离(注意是距离,不是相似度)。 由于 s ( R k ( u ) ) s(R_k(u)) s(Rk?(u))和 s ( R k ( v ) ) s(R_k(v)) s(Rk?(v))的长度不同,并且可能含有重复元素。所以文章采用了**Dynamic Time Warping(DTW)**来衡量两个有序度序列。 基于DTW,定义元素之间的距离函数: d ( a , b ) = m a x ( a , b ) m i n ( a , b ) ? 1 d(a,b)=\frac{max(a,b)}{min(a,b)}-1 d(a,b)=min(a,b)max(a,b)??1 这个距离函数实际上惩罚了当两个顶点的度数都比较小的时候两者的差异。举例来说 a = 1 , b = 2 a=1,b=2 a=1,b=2情况下的距离为1, a = 101 , b = 102 a=101,b=102 a=101,b=102 情况下的距离差异为0.0099。 3)构建多层带权重图根据上一节的距离定义,对于每一个 k k k 我们都可以计算出两个顶点之间的一个距离,现在要做的是通过上一节得到的顶点之间的有序度序列距离来构建一个层次化的带权图(用于后续的随机游走)。 我们定义在某一层k中两个顶点的边权为: w k ( u , v ) = e ? f k ( u , v ) , k = 0 , ? ? , k ? w_k(u,v)=e^{-f_k(u,v)},k=0,\cdots ,k^* wk?(u,v)=e?fk?(u,v),k=0,?,k? 这样定义的边权都是小于1的,当且仅当距离为0的是时候,边权为1。 通过有向边将属于不同层次的同一顶点连接起来,具体来说,对每个顶点,都会和其对应的上层顶点还有下层顶点相连。边权定义为: w ( u k , u k + 1 ) = log ? ( Γ k ( u ) + e ) , k = 0 , ? ? , k ? ? 1 w(u_k,u_{k+1})=\log(\Gamma_k(u)+e),k=0,\cdots, k^*-1 w(uk?,uk+1?)=log(Γk?(u)+e),k=0,?,k??1 w ( u k , u k ? 1 ) = 1 w(u_k,u_{k-1})=1 w(uk?,uk?1?)=1 其中 Γ k ( u ) \Gamma_k(u) Γk?(u)是第 k k k层与 u u u相连的边的边权大于平均边权的边的数量。 Γ k ( u ) = ∑ v ∈ V 1 ( w k ( u , v ) > w  ̄ k ) \Gamma_k(u)=\sum_{v\in V}1\quad(w_k(u,v)>\overline{w}_k) Γk?(u)=∑v∈V?1(wk?(u,v)>wk?), w  ̄ k \overline{w}_k wk? 就是第 k k k层所有边权的平均值。 4)采样获取顶点序列使用有偏随机游走在构造出的图 中进行顶点序列采样。 每次采样时,首先决定是在当前层游走,还是切换到上下层的层游走。 1.本层游走 若决定在当前层游走,设当前处于第
k
k
k层,则从顶点
u
u
u到顶点
v
v
v的概率为: 通过在图 M M M中进行随机游走,每次采样的顶点更倾向于选择与当前顶点结构相似的顶点。因此,采样生成的上下文顶点很可能是结构相似的顶点,这与顶点在图中的位置无关。 2.上下游切换 若决定切换不同的层,则以如下的概率选择 k + 1 k+1 k+1层或 k ? 1 k-1 k?1层, p k ( u k , u k + 1 ) = w ( u k , u k + 1 ) w ( u k , u k + 1 ) + w ( u k , u k ? 1 ) p_k(u_k,u_{k+1})=\frac{w(u_k,u_{k+1})}{w(u_k,u_{k+1})+w(u_k,u_{k-1})} pk?(uk?,uk+1?)=w(uk?,uk+1?)+w(uk?,uk?1?)w(uk?,uk+1?)? p k ( u k , u k ? 1 ) = 1 ? p k ( u k , u k + 1 ) p_k(u_k,u_{k-1})=1-p_k(u_k,u_{k+1}) pk?(uk?,uk?1?)=1?pk?(uk?,uk+1?) 5)使用skip-gram生成embeddingStruc2vec适用于节点分类中,其结构标识比邻居标识更重要时,采用Struc2vec效果好。 5、SDNE1)理论SDNE(Structural Deep Network Embedding )是和node2vec并列的工作,均发表在2016年的KDD会议中。可以看作是基于LINE的扩展,同时也是第一个将深度学习应用于网络表示学习中的方法。 之前的Deepwalk,LINE,node2vec,struc2vec都使用了浅层的结构, 浅层模型往往不能捕获高度非线性的网络结构。即产生了SDNE方法, 使用多个非线性层来捕获node的embedding。 SDNE使用一个自动编码器结构来同时优化1阶和2阶相似度(LINE是分别优化的)。简单来说,一阶相似度衡量的是相邻的两个顶点对之间相似性。二阶相似度衡量的是,两个顶点他们的邻居集合的相似程度。 2)优化目标二阶相似度优化L 2 n d = ∑ i = 1 n ∣ ∣ x ^ i ? x i ∣ ∣ 2 2 L_{2nd}=\sum^n_{i=1}||\hat{x}_i-x_i||^2_2 L2nd?=i=1∑n?∣∣x^i??xi?∣∣22? 这里我们使用图的邻接矩阵 S S S进行输入,SDNE直接使用一个深度自编码器,学习网络邻接矩阵的编码与重构。对于第 i i i个顶点,有 x i = s i x_i=s_i xi?=si?,每一个 s i s_i si?所以这样的重构过程能够使得结构相似的顶点具有相似的embedding表示向量。 文章给出的一个方法是使用带权损失函数,对于非零元素具有更高的惩罚系数。 修正后的损失函数为: 一阶相似度优化针对一阶相似度的损失函数,其实很直接,因为我们最终是将自编码器的隐层当作最终的节点Embedding。 对于一阶相似度,损失函数定义如下: 整体优化目标联合优化的损失函数为 : 总结Graph Embedding:
Graph Embedding——(1)DeepWalk理论 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/10 16:35:26- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |