一文详解图表示学习

Graph Embedding与Word Embedding一样,目的是用低维、稠密、实值的向量表示网络中的节点。目前Graph Embedding在推荐系统、搜索排序、广告等领域非常流行,并且也取得了非常不错的实践效果。图Graph表示一种==二维==的关系,而序列Sequence表示一种==一维==的关系。因此,要将图转换为Graph Embedding,一般需要先通过一些算法把图变为序列;然后通过一些模型或算法把这些序列转换为Embedding。

一. 图表示学习意义

需要使用图形嵌入有以下几个原因:

  • 机器学习图形是有限的,图由边和节点组成。这些网络关系只能使用数学、统计和机器学习的特定子集,而向量空间有更丰富的方法工具集
  • 嵌入是压缩的表示。邻接矩阵描述图中节点之间的连接,它是一个|V|×|V|维度的矩阵,其中|V|是图中节点的个数,使用邻接矩阵作为大型图的特征空间几乎是不可能的
  • 向量运算比图形上的可比运算更简单、更快

二. 图表示学习常用方法

2.1 DeepWalk

DeepWalk方法是首先以随机游走(Random Walk)的方式在网络中进行节点采样,生成序列然后使用Skip-Gram模型将序列转换为Embedding的过程(仿照Word2vec)

算法步骤如下:

  1. 首先使用Random Walk的方式进行节点采样,其是一种可重复访问已访问节点的深度优先遍历算法。然后给定当前访问起始节点,从其邻居中随机选择一个节点作为下一个访问节点
  2. 重复此过程,直到访问序列长度满足预设条件
  3. 获取足够数量的节点访问序列后,使用Skip-Gram模型进行向量学习,最终获得每个节点的Embedding
2.1.1 随机游走(random walk)

对于无向图G=(V,E)e_{i,j}表示顶点v_i和顶点v_j之间边的权值(如果不存在边则为0)。使用随机游走构建长度为T的序列\mathcal{S}=\{s^{(1)},s^{(2)},\cdots, s^{(T)}\},从顶点v_i游走到顶点v_j的概率为
\begin{equation}p(s^{(t+1)}=v_j|s^{(t)}=v_i) = \begin{cases} \frac{e_{i,j}}{Z_i}, if \quad e_{i,j} \neq 0 \\ 0, if \quad e_{i,j} = 0 \end{cases}\end{equation} \tag{1}
其中,Z为所有以v_i为顶点的边的权值之和,即:
Z_i=\sum_{j=1}^{|V|}e_{i,j}\tag{2}

显然,顶点v_i和顶点v_j之间边的权值越大,越有可能从顶点v_i游走到顶点v_jrandom walk可以看作是一个可回头的深度优先搜索。有向图理论上可以进行随机游走,但是容易游走到出度为0的顶点,一般情况下,deep walk用于无向图比较多

2.1.2 word2vec(skip-gram)

使用随机游走得到句子序列后,根据word2vec算法(skip-gram模型)得到目标函数:
argmax \frac{1}{T}\sum_{t=1}^{T}\sum_{-c \leq j \leq c, j \neq 0}\log p(w_{s^{(t+j)}}|w_{s^{(t)}})\tag{3}
其中,w为顶点的向量表示,最开始为随机初始化,随着目标函数的不断优化,逐渐收敛,可以使用hierarchical softmaxnegative sampling实现p(w_{O}|w_I)

2.2 Line

LINE算法适用于任意类型的图,包括有向图、无向图、有权图和无权图。使用LINE算法学习到的embeddings可以保留顶点的局部结构和全局结构(local and global network structures)。其核心思想是使用一阶相似度first-order proximity表征==local structure==,使用二阶相似度second-order proximity表征==global structure==

2.2.1 相关定义
  • first-order proximity:表征顶点与顶点之间的局部相似度,如果顶点v_iv_j之间存在边,则一阶相似度为边的权值,否则一阶相似度为0;
  • second-order proximity:表征顶点v_i的邻域和v_j的邻域的相似程度(即两个顶点有多少共同的邻居节点)。定义S_i=(w_{i,1},\cdots,w_{i,|V|})表示顶点v_i与其它顶点的一阶相似度,则顶点v_iv_j的二阶相似度可以用S_iS_j的相似度衡量
2.2.2 LINE with First-order Proximity

LINE with first-order proximity只适用于无向图公式(4)用来衡量顶点v_iv_j的向量表示之间的一阶相似度。
p_1(v_i,v_j)=\frac{1}{1+exp(-u_i^{T}u_j)}\tag{4}
其中,u_iu_j分别对应顶点v_iv_j的向量表示,顶点v_iv_j在原始图中的一阶相似度使用empirical probability定义,如公式(5)所示:
\hat{p}_1(i,j)=\frac{w_{i,j}}{W},W=\sum_{(i,j)\in E} w_{i,j}\tag{5}
为了使得学习到的embeddings能够保留顶点在原始图中的一阶相似度,最直接的做法是,最小化\hat{p}_1(\cdot,\cdot)p_1(\cdot,\cdot)两个分布之间的差异
O_1=d(\hat{p}_1(\cdot,\cdot),p_1(\cdot,\cdot))\tag{6}
使用KL-divergence来衡量分布间的差异(D_{KL}(P,Q)=\sum_i P(i)\log \frac{P(i)}{Q(i)}),LINE with first-order proximity的目标函数如式:
O_1=-\sum_{(i,j)\in E}w_{i,j}\log p_1(v_i, v_j)\tag{7}

2.2.3 LINE with Second-order Proximity

LINE with second-order proximity既可以使用于无向图,也可以适用于有向图。以有向图为例,每个顶点都有2个向量表示:

  • 顶点v_i自身的embedding u_i
  • 顶点v_i作为其它顶点的context时的embedding {u^{'}}_i

对于有向边(i,j),给定顶点v_i,顶点v_j作为v_i的上下文(context),顶点v_j相对于顶点v_i的一阶相似度为p_2(v_j|v_i)
p_2(v_j|v_i) = \frac{exp({u^{'}}_j^\top u_i)}{\sum_{k=1}^{|V|}{u^{'}}_k^\top u_i}\tag{8}
在原始图中,empirical probability为:
\hat{p}_2(v_j|v_i)=\frac{w_{i,j}}{d_i},d_i=\sum_{k\in N(i)}w_{i,k}\tag{9}
其中,N(i)表示顶点v_i的out neighbor(与v_i出边相连的顶点)。为了使得学习到的embeddings能够保留顶点在原始图中的二阶相似度,最小化\hat{p}_2(\cdot|v_i)p_2(\cdot|v_i)两个分布之间的差异:
O_2=\sum_{i\in V}d(\hat{p}_2(\cdot|v_i),p_2(\cdot|v_i))\tag{10}

O_2=-\sum_{(i,j)\in E}w_{i,j}\log p_2(v_j|v_i)\tag{11}

如果想要学习到的embedding既保留一阶相似度,也保留二阶相似度,最简单的做法是,分别使用LINE with first-order proximity和LINE with second-order proximity训练模型,将得到的embedding拼接

2.2.4 Optimization via Edge Sampling

在使用梯度下降算法优化目标函数(9)时,存在一个问题,如果边(i, j)被采样,Embedding_{i→j}如下:
\frac{\partial O_2}{\partial u_i}=w_{i,j}\frac{\partial\log p_2(v_j|v_i)}{\partial u_i}\tag{12}
显然边的权值影响梯度的计算,这会导致模型的learning rate难以确定,如果根据权重大的边确定学习率,那么权重小的边对应的梯度就很小,反之,如果根据权重小的边确定学习率,那么权重大的边对应的梯度就很大。为了解决这一问题,可以对原始图中的边进行采样,每条边被采样的概率正比于该边的权值。令W =(w_1,\cdots,w_{|E|}),w_{sum}=\sum_{i=1}^{|E|}w_i,在范围[0,w_{sum}]内生成一个随机数,选择随机数所在区间对应的边,作为采样边,可以使用alias table method将采样的复杂度从O(|E|)降至O(1)

2.3 Node2vec

Node2ve算法通过表征2种顶点间的关系,得到顶点的低维向量表示

  1. Homophily equivalence
  2. Structural equivalence

homophily equivalence表明直接相连的顶点或是在同一community中的顶点,其embeddings应该比较靠近,如图所示,顶点us_1s_2s_3s_4之间直接相连且属于同一community,因此,这些顶点的embedding在特征空间中比较靠近;structural equivalence表面在图中具有相似结构特征的顶点(顶点间不必直接相连,可以离得很远),其embeddings应该比较靠近,例如,顶点us_6都是各自所在community的中心,具有形似的结构特征,因此,顶点us_6的embedding在特征空间中比较靠近。Node2vec算法设计了一种灵活的邻域采样策略,允许在BFS和DFS之间平滑插值

2.3.1 特征学习框架

Node2vec算法希望,在给定顶点的条件下,其领域内的顶点出现的概率最大。即优化目标函数公式(13):
\max_f\sum_{u \in V}\log Pr(N_S(u)|f(u)) \tag{13}
对于每一个源顶点u\in VN_S(u)为根据采样策略S得到的邻域,为了简化目标函数,论文提出了2个假设:

  1. 条件独立性
  2. 特征空间对称性

假设1表示当源顶点u的特征表示f(u)给定时,Pr(n_i|f(u))Pr(n_j|f(u))无关(n_i\in N_S(u),n_j \in N_S(u),i\neq j)。因此,Pr(N_S(u)|f(u))可写为公式(14):
Pr(N_S(u)|f(u))=\Pi_{n_i \in N_S(u)}Pr(n_i|f(u))\tag{14}
假设2说明源顶点和其邻域内任一顶点,相互之间的影响是相同的。最自然的想法就是将Pr(n_i|f(u))写为公式(15):
Pr(n_i|f(u))=\frac{exp(f(n_i)^\top f(u))}{\sum_{v \in V}exp(f(v)^\top f(u))}\tag{15}
因此,Node2vec算法就需要解决两个问题

  1. 给定一个源顶点u,使用什么样的采样策略S得到其邻域N_S(u)
  2. 如何优化目标函数。

对于第二个问题,可以参考基于negative sampling的skip-gram模型进行求解,关键是确定采样策略S

2.3.2 邻域采样策略

Node2vec算法提出了有偏的随机游走,通过引入2个超参数pq来平衡BFS和DFS,从顶点v有做到顶点x的转移概率为公式(16)
p(c_i=x|c_{i-1}=v) = \begin{cases} \frac{\pi_{vx}}{Z}, if \quad (v,x)\in E \\ 0, otherwise \end{cases}\tag{16}

其中,x表示游走过程中的当前顶点,tv分别为x前一时刻的顶点和下一时刻将要游走到的顶点,\pi_{vx}=\alpha_{pq}(t,x)\cdot w_{vx}w_{vx}为边(v,x)的权值,\alpha_{pq}(t,x)定义如下:
\alpha_{pq}(t,x)=\begin{cases}\frac{1}{p}, if \quad d_{tx}=0\\1,if \quad d_{tx}=1\\ \frac{1}{q},if \quad d_{tx}=2\end{cases}\tag{17}
其中,d_{tx}=0表示顶点tx相同,d_{tx}=1表示顶点tx之间存在之间相连的边,d_{tx}=0表示顶点tx不存在直接相连的边,如图所示,在一个无权图中(可以看作是所有边的权值为1),在一次游走过程中,刚从顶点t游走到v,在下一时刻,可以游走到4个不同的顶点,tx_1x_2x_3,转移概率分别为\frac{1}{p}1\frac{1}{q}\frac{1}{q}

参数p和控制游走探索和离开起始节点附近的速度up越小,随机游走采样的顶点越可能靠近起始顶点;而q越小,随机游走采样的顶点越可能远离起始顶点

2.4 SDNE

2.4.1 SDNE模型架构

SDNE模型(Structural Deep Network Embedding)的结构图如下:

模型主要包括两个部分:无监督和有监督部分

  • 无监督部分是一个深度自编码器用来学习二阶相似度
  • 监督部分是一个拉普拉斯特征映射捕获一阶相似度
2.4.2 二阶相似度(无监督)

如上图所示,这是一个自编码器,没有标签数据,是一种无监督学习

模型的输入x_i,是节点i的邻接矩阵,因此结构相似的顶点可以学习到相似的embedding向量,不断优化代价函数来捕捉全局结构特征,即二阶相似度

输出是\hat x_i,是重构后的邻接矩阵。其目标是:
f(x) \approx x\tag{18}
所以,二阶相似度损失函数定义为:
\mathcal{L}=\sum_{i=1}^n{||\hat{x_i}-x_i||^2_2}\tag{19}
由于网络的稀疏性,邻接矩阵中的0元素远多于非0元素,使用邻接矩阵作为输入的话要处理很多0,这样就做了太多无用功了。为了解决这个问题,对损失函数做了改进如下:
\mathcal{L_{2nd}}=\sum_{i=1}^n||(\hat{x_i}-x_i)\odot{b_i}||^2_2=||\hat{X}-X\odot{B}||^2_F\tag{20}
其中\odot是哈马达积,表示对应元素相乘。邻接矩阵中的0对应b=1, 非0元素的b>1,这样的目的是对于有边连接的节点增加惩罚,可以理解为对有边连接的节点赋予更高权重

在模型中,从x_iy_i^{(K)}是编码器,从y_i^{(K)}\hat x_i是解码器,y_i^{(K)}是节点i的Embedding向量,编码器的公式为:
y_i^{(1)}=\sigma{(W^{(1)}x_i+b^{(1)})}\\ y_i^{(k)}=\sigma{(W^{(k)}y_i^{(k-1)}+b^{(k)})}, k=2,...,K\tag{21}
其中,\mathbf W^{(k)}为第k层的参数矩阵,b^k为第k层的偏置项

2.4.3 一阶相似度(有监督)

前导知识——拉普拉斯映射(Laplacian Eigenmap),其目的是降维,目标函数如下:
\sum_{i,j}\mathbf W_{ij}||y_i - y_j||^2\tag{22}
y_i^{(K)}是节点i的Embedding向量,若顶点v_iv_j之间存在边,那他们的Embedding的结果y^{(K)}应该也很接近,所以,借助拉普拉斯的思想,其一阶相似度为:
\mathcal{L_{1st}}=\sum_{i,j=1}^n{s_{i,j}||y_i^{(K)}-y_j^{(K)}||^2_2}=\sum_{i.j=1}^n{s_{i,j}||y_i-y_j||^2_2}\tag{23}
最小化\mathcal{L_{1st}},可以使得一条边的两个节点在嵌入空间中的表示相对接近,为了防止过拟合,加入正则化,SDNE的loss为:
\mathcal{L_{mix}}=\mathcal{L_{2nd}+\alpha{\mathcal{L_{1st}}}}+\nu{\mathcal{L_{reg}}} =||(\hat{X}-X)\odot{B}||^2_F+\alpha{\sum_{i.j=1}^n{s_{i,j}||y_i-y_j||^2_2}}+\nu{\mathcal{L_{reg}}}\tag{24}
其中,正则化\mathcal{L_{reg}}的计算公式如下:
mathcal{L_{reg}}=\frac{1}{2}\sum_{k=1}^k({||W^{(k)}||^2_F+||\hat{W}^{k}||_F^2})\tag{25}
\alpha为控制1阶损失的参数,\nu为控制正则化项的参数

2.5 Graph2vec

Graph2Vec原理上和DeepWalk差不多,也是尝试借用word2vec来训练,只是这次为了嵌入整张图,所以尝试利用子图来训练。类似文档嵌入doc2vec,通过最大化作为输入的文档,来预测随机单词的可能性,Graph2vec预测图中子图的概率

  • 采样子图。为了提高效率,采样只选当前节点周围的邻接节点,构成子图sg
  • skip-gram,最大化输入图子图的概率J(\Phi)=-log P(sg_n^{(d)}|\Phi(G))d为度,sg为子图
2.5.1 算法详解

算法由两个主要组件组成:

  1. 对给定图中每个节点周围生成根子图
  2. 学习给定图嵌入
  • e轮次学习数据集G中所有图的δ维嵌入
  • 首先随机初始化数据集中所有图的嵌入
  • 随后继续提取每个图中的每个节点周围的根子图
  • 并迭代地学习(即细化)相应图在一些轮次的嵌入

提取根子图:

  • 输入根节点n,原图G,以及预期子图的度d,输出预期子图sg_n^{(d)},递归出口d=0,不要子图,只输出节点n的标签λ
  • 对于d>0,根据宽度优先得到n的邻居,对每个邻居再得到其对应的d-1子图,记录进M_n^{(d)}得到nd-1子图后与排序后的M_n^{(d)}拼接得到最终结果

负采样Skip-gram:

  • 考虑词库SGvocab巨大,通过负采样计算P r(sg^{(d)}_n |Φ(G))这个后验概率
  • 在每个训练周期,给定一个图Gi∈G与其上下文的一组根子图,c(Gi)=c={sg_1,sg_2,…},选择一组固定数量的随机选择的子图作为负样本c’={sgn_1,sgn_2,…sgn_k}这样保证c’是词库的子集,保证k<<|SGvocab|c∩c’=\{\}
  • 负样本是一组k个子图,每个子图都不存在于需要学习嵌入的图Gi中,而是存在于子图的词库中,负样本的数量k是一个可以通过经验进行调整的超参数
  • 为了有效的训练,对于每个图Gi∈G,首先训练目标—上下文对(Gi,c),并更新相应的子图的嵌入。随后,我们只更新负样本c’的嵌入,而不是整个词库
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容