首页 > 编程语言 >ComE:Learning Community Embedding with Community Detection and Node Embedding on Graphs阅读笔记

ComE:Learning Community Embedding with Community Detection and Node Embedding on Graphs阅读笔记

时间:2024-12-03 17:45:14浏览次数:6  
标签:Node phi 嵌入 社区 Community Embedding Sigma 节点 Phi

ComE(Community Embedding)

Learning Community Embedding with Community Detection and Node Embedding on Graphs

用社区检测和图上的节点嵌入学习社区嵌入

论文来源:CIKM 2017 https://www.sentic.net/community-embedding.pdf【2017】

项目地址:https://github.com/andompesta/ComE

论文原作者:Sandro Cavallari, Vincent W. Zheng, Hongyun Cai, et al.

单位:Advanced Digital Sciences Center, Nanyang Technological University

一、问题:

传统流水线方法:首先使用谱聚类来识别社区,然后对每个社区使用高斯混合模型。这种方法的问题在于它没有统一的目标函数,使得后期优化变得困难。

本文方法:每个社区可以被视为一个高斯分布,通过一个多元高斯分布来更好地表示社区的嵌入表达,在社区嵌入、社区检测和节点嵌入之间开发了一个闭环,最后共同优化这三个任务,以使它们相互加强。

因此,作者提出了一种新的社区嵌入框架,它联合地同时解决了社区嵌入、社区检测和节点嵌入等三个问题。

二、Model

1、社区检测和社区嵌入。

这篇论文比较创新的一点,就是将社区嵌入定义为低维空间中的多元高斯分布。即对于社区k来说( \(k∈{1,...,K}\) ),它在\(d\)维空间下的社区嵌入是一个多元高斯分布 $N(ψ_k,Σ_k) $,其中 \(ψ_k∈\mathbb R^d\) 表示的是社区内节点的平均向量(即中心点), \(Σ_k∈\mathbb R^{d∗d}\) 表示的是协方差矩阵。整篇文章最大的难点在于,如何用统一的目标函数来使得社区嵌入、社区检测和节点嵌入三者问题得到最优化的结果。由于社区嵌入是由多元高斯分布来表达的,因此就可以通过高斯混合模型来完成。考虑每个节点 \(v_i\)的嵌入 \(ϕ_i\)是由社区 \(z_i=k\)的多元高斯分布生成的。然后,对于所有节点在 \(V\) 中,有如下似然函数:

\[∏_{i=1}^{|V|}∑_{k=1}^Kp(z_i=k)p(v_i|z_i=k;ϕ_i,ψ_k,Σ_k) \tag{1} \]

公式(1)是社区检测和嵌入问题中的似然函数,它描述了在给定社区分配和社区参数的情况下,观测到的节点嵌入的概率。这里的各个部分解释如下:

  1. \(\prod_{i=1}^{|V|}\) :表示对所有节点 \(i\) 从 1 到 \(|V|\) (图中节点的总数)的乘积。这个乘积遍历图中的每个节点,计算每个节点嵌入的概率。
  2. \(\sum_{k=1}^{K}\) :表示对所有可能的社区 \(k\) 从 1 到 \(K\) (社区的总数)的求和。这个求和考虑了每个节点属于每个社区的概率。
  3. $p(z_i = k) $:表示节点 \(v_i\) 属于社区 \(k\) 的概率,将这个概率表达为 \(π_{ik}\):$ π_{ik}∈[0,1]\(,\)∑_{k=1}^Kπ_{ik}=1$。在社区检测中,这个概率是未知的,需要通过优化来确定。
  4. \(p(v_i \mid z_i = k; \phi_i, \psi_k, \Sigma_k)=\mathcal N(ϕ_i|ψ_k,Σ_k)\) :表示在给定节点 \(v_i\) 属于社区 \(k\) 的条件下,节点嵌入 \(\phi_i\) 的条件概率。这个概率由多元高斯分布定义,其中 \(\phi_i\) 是节点 \(v_i\) 的嵌入向量(模型试图学习的表示); \(\psi_k\) 是社区 \(k\) 的均值向量, \(\Sigma_k\) 是社区 $ k$ 的协方差矩阵(社区嵌入的参数,需要通过优化来学习)。

整个似然函数是所有节点嵌入概率的乘积,每个节点嵌入的概率是其属于每个社区概率的加权和。这个似然函数是社区检测和嵌入过程中优化的目标,通过最大化这个似然函数,可以同时学习节点的社区归属概率和社区的嵌入参数。这种方法将社区检测和社区嵌入整合到一个统一的框架中,使得这两个任务可以同时进行,从而可能提高性能和准确性。

2、节点嵌入

本文在节点嵌入时,考虑了三种距离。

(1). 为了保持节点的一阶邻近性(直接相邻的节点在嵌入空间中也应该是相似的),用的是类似LINE算法的方法;为了保持节点的二阶邻近性,则是用了DeepWalk的想法。

一阶邻近性,$ \log \sigma(\phi_{j}^{T} \phi_{i}) $是对sigmoid函数的对数,sigmoid函数 $ \sigma(x) $定义为 $ 1 / (1 + \exp(-x)) $,它将任意实数映射到 (0, 1) 区间,通常用于将内积转换为概率值:

\[O_{1}=-\sum_{\left(v_{i}, v_{j}\right) \in E} \log \sigma\left(\boldsymbol{\phi}_{j}^{T} \boldsymbol{\phi}_{i}\right)\tag{3} \]

为了保持二阶邻近性,LINE和DeepWalk都强制两个共享许多“上下文”(即,在 \(\zeta\) 跳数内的邻居)的节点具有相似的嵌入。每个节点有两个角色:一个代表自身的节点,另一个是其他节点的上下文。为了区分这些角色,DeepWalk为每个节点 $ v_{j} $ 引入了一个额外的上下文嵌入 $\phi_{j}^{\prime} \in \mathbb{R}^{d} $。将 \(C_{i}\) 表示为 $ v_{i}$ 的上下文集合。采用负采样来定义一个函数,用于衡量 \(v_{i}\) 如何生成其上下文 \(v_{j} \in C_{i}\) :

\[\Delta_{ij} = \log \sigma(\phi_{j}^{\prime T} \phi_{i}) + \sum_{t=1}^{m} \mathbb{E}_{v_{l} \sim P_{n}(v_{l})} [\log \sigma(-\phi_{l}^{\prime T} \phi_{i})]\tag{4} \]

其中,$ v_{l} \sim P_{n}(v_{l}) $ 表示根据概率 $P_{n}(v_{l}) $ 采样节点 \(v_{l}\) 作为 \(v_{i}\) 的“负上下文”。设置 $P_{n}(v_{l}) \propto r_{l}^{3/4} $,其中 \(r_{l}\) 是 \(v_{l}\) 的度数。总共有 m 个负上下文。通常,最大化方程4会强制节点 $v_{i} $ 的嵌入 $ \phi_{i} $最好地生成其正上下文 $\phi_{j}^{\prime} $,而不是其负上下文 $\phi_{l}^{\prime\prime} $。然后,通过最小化以下目标函数来保持二阶邻近性:

\[O_{2} = -\alpha \sum_{v_{i} \in V} \sum_{v_{j} \in C_{i}} \Delta_{ij} \tag{5} \]

其中, $\alpha > 0 $是一个权衡参数,以学习能够保持二阶邻近性的节点嵌入。通过调整 \(\alpha\) 参数,可以在一阶和二阶邻近性之间进行权衡。

3、闭合循环

这部分介绍了如何在社区检测和节点嵌入之间建立反馈循环,以及如何通过统一不同阶的邻近性来优化节点嵌入。为了闭合图2中的循环,需要使社区检测和社区嵌入的反馈作用于节点嵌入。假设已经在第3.1节中识别了混合社区成员资格 $ \pi_{ik} $ 和社区嵌入 $(\psi_{k}, \Sigma_{k}) $。然后,可以重新使用公式1来实现这种反馈,通过将节点嵌入 \(\phi_{i}\) 视为未知数。有效地,优化公式1关于 \(\phi_{i}\) 会迫使同一社区内的节点 \(\phi_{i}\) 更接近相应的社区中心 $ \psi_{k}$ 。也就是说,共享一个社区的两个节点可能具有相似的嵌入。与一阶和二阶邻近性相比,这种设计在节点嵌入上实施了社区感知的高阶邻近性,这对于后续的社区检测和嵌入非常有用。

例如,在图1(a)中,节点3和节点10直接相连,但根据文献[35],它们倾向于属于两个不同的社区。因此,仅通过保持一阶邻近性,可能无法很好地区分它们的社区成员资格差异。另一个例子是,节点9和节点10共享许多一跳和两跳邻居,但与节点10相比,节点9更倾向于接近由节点1领导的社区。因此,仅通过保持二阶邻近性,可能也无法很好地区分它们的社区成员资格差异。

基于闭合的循环,共同优化社区检测、社区嵌入和节点嵌入。有三种类型的邻近性需要考虑用于节点嵌入,包括一阶、二阶和高阶邻近性。通常,有两种方法可以结合不同类型的邻近性用于节点嵌入:(1)“concatenation”,例如,LINE首先分别优化 $O_{1} $ 和$ O_{2} $,然后将每个节点的两个结果嵌入连接成一个长向量作为最终输出;(2)“unification”,例如,SDNE[29]学习每个节点的单一节点嵌入,以同时保持一阶和二阶邻近性。在本文中,为了鼓励节点嵌入统一多种邻近性,采用了统一方法,并将其他方法留作未来工作。因此,基于公式1,定义了社区检测和社区嵌入的目标函数,以及强制执行节点嵌入的高阶邻近性:

\[O_3 = -\frac{\beta}{K} \sum_{i=1}^{|V|} \log \sum_{k=1}^{K} \pi_{ik} \mathcal{N}(\phi_i \mid \psi_k, \Sigma_k)\tag{6} \]

其中 $ \beta \geq 0 $ 是一个权衡参数。定义 $ \Phi = {\phi_{i}}, \Phi' = {\phi_{i}'}, \Pi = {\pi_{ik}}, \Psi = {\psi_{k}'} $和 $ \Sigma = {\Sigma_{k}}$ 对于 $i = 1, \ldots, |V| 和 k = 1, \ldots, K $。

然后,统一了节点嵌入的一阶和二阶邻近性。ComE的最终目标函数是:

\[\mathcal{L}(\Phi, \Phi', \Pi, \Psi, \Sigma) = O_1(\Phi) + O_2(\Phi, \Phi') + O_3(\Phi, \Pi, \Psi, \Sigma)\tag{7} \]

最终优化问题变为:

\[(\Phi^*, \Phi'^*, \Pi^*, \Psi^*, \Sigma^*) \leftarrow \underset{\forall k, \text{diag}(\Sigma_k) > 0}{\arg\min} \mathcal{L}(\Phi, \Phi', \Pi, \Psi, \Sigma)\tag{8} \]

三、推理

迭代优化过程。

固定 $(\Phi, \Phi') $,优化 $(\Pi, \Psi, \Sigma) $。由于在优化的时候,可能存在一些情况,使得高斯分量折叠到一个点,那么此时就会使得 \(O_3\) 变成负无穷。所以这里需要加一个限制条件,通过控制\(diag(\Sigma_k)>0\) ,使得\(O_3\) 不会变成负无穷。具体做法就是当遇到 $diag(\Sigma_k)=0 $的情况时,就随机重新设置一个合适的值即可。 之后通过EM算法进行优化求导。:

\[ \pi_{ik} = \frac{N_k}{|V|}, \quad (9) \]

\[ \psi_k = \frac{1}{N_k} \sum_{i=1}^{|V|} \gamma_{ik} \phi_i, \quad (10) \]

\[\Sigma_k = \frac{1}{N_k} \sum_{i=1}^{|V|} \gamma_{ik} (\phi_i - \psi_k)(\phi_i - \psi_k)^T, \quad (11) \]

其中 $ \gamma_{ik} = \frac{\pi_{ik} N(\phi_i \mid \psi_k, \Sigma_k)}{\sum_{k'=1}^{K} \pi_{ik'} N(\phi_i \mid \psi_{k'}, \Sigma_{k'})} $ 且 $ N_k = \sum_{i=1}^{|V|} \gamma_{ik} \(。值得注意的是,实际上如果\) (\Phi, \Phi') $ 被合理初始化(例如,在的实验中通过DeepWalk),$ \operatorname{diag}(\Sigma_{k}) > 0 $的约束很容易满足,因此 $(\Pi, \Psi, \Sigma) $的推断可以快速收敛。

固定 $ (\Pi, \Psi, \Sigma)$,优化 $(\Phi, \Phi') $。由于 $O_3 $中对数项内的求和,计算 $\phi_i $的梯度不方便。因此,尝试最小化 $ \mathcal{L}(\Phi, \Phi' \mid \Phi, \Psi, \Sigma) $的上界。具体来说,引入:

\[ O_3' = -\frac{\beta}{K} \sum_{i=1}^{|V|} \sum_{k=1}^{K} \pi_{ik} \log \mathcal{N}(\phi_i \mid \psi_k, \Sigma_k) \quad (12) \]

很容易证明 $O_3'(\Phi \mid \Pi, \Psi, \Sigma) \geq O_3(\Phi \mid \Pi, \Psi, \Sigma) $由于以下对数凹性:

\[ \sum_{i=1}^{|V|} \log \sum_{k=1}^{K} \pi_{ik} \mathcal{N}(\phi_i \mid \psi_k, \Sigma_k) \geq \sum_{i=1}^{|V|} \sum_{k=1}^{K} \log \pi_{ik} \mathcal{N}(\phi_i \mid \psi_k, \Sigma_k) \quad (13) \]

因此,定义:

\[\mathcal{L}'(\Phi, \Phi' \mid \Pi, \Psi, \Sigma) = O_1(\Phi) + O_2(\Phi, \Phi') + O_3'(\Phi \mid \Pi, \Psi, \Sigma) \]

并且,因此$ \mathcal{L}'(\Phi, \Phi' \mid \Pi, \Psi, \Sigma) \geq \mathcal{L}(\Phi, \Phi' \mid \Pi, \Psi, \Sigma) $。通过随机梯度下降(SGD)[17]来优化 $\mathcal{L}'(\Phi, \Phi') $。对于每个 $ v_i \in V $,有:

\[ \frac{\partial O_1}{\partial \phi_i} = -\sum_{(i, j) \in E} \sigma(-\phi_j^T \phi_i) \phi_j, \quad (14) \]

\[\frac{\partial O_2}{\partial \phi_i} = -\alpha \sum_{v_j \in C_i} \left[ \sigma(-\phi_j'^T \phi_i) \phi_j' \right. \left. + \sum_{t=1}^m \mathbb{E}_{v_l \sim P_n(v_l)} \left[ \sigma(\phi_l'^T \phi_i) (-\phi_l') \right] \right], \quad (15) \]

\[\frac{\partial O_3'}{\partial \phi_i} = \frac{\beta}{K} \sum_{k=1}^{K} \pi_{ik} \sum_{k}^{-1} \left( \phi_i - \psi_k \right) \quad (16) \]

计算上下文嵌入的梯度:

\[\frac{\partial O_2}{\partial \phi_j'} = -\alpha \sum_{v_i \in V} \left[ \delta(v_j \in C_i) \sigma(-\phi_j'^T \phi_i) \phi_i \right. \left. + \sum_{t=1}^m \mathbb{E}_{v_l \sim P_n(v_l)} \left[ \delta(v_l = v_j) \sigma(\phi_l'^T \phi_i) (-\phi_i) \right] \right] \quad (17) \]

算法和复杂度。在算法1中总结了ComE的推理算法。在第1行,对于每个 $v_i \in V $,在图 $G $ 上以长度 $\ell $从 $v_i $开始采样 $\gamma $条路径。在第2行,通过DeepWalk初始化 $ (\Phi, \Phi') \(。在第4-8行,固定\) (\Phi, \Phi') $并优化 $ (\Pi, \Psi, \Sigma) $ 以进行社区检测和嵌入。在第9-16行,固定 $ (\Pi, \Psi, \Sigma) $并优化 $ (\Phi, \Phi') $以进行节点嵌入。

特别是,通过一阶邻近性(第9-10行)、二阶邻近性(第11-14行)和社区感知的高阶邻近性(第15-16行)来更新节点嵌入。分析了算法1的复杂度。第1行的路径采样需要 $O(|V|\gamma \ell) $ 时间。第2行通过DeepWalk初始化参数需要 $O(|V|) $ 时间。第5行的社区检测和嵌入需要 $O(|V|K) $ 时间。第6-8行的约束检查需要 $ O(K) $ 时间。第9-10行的一阶邻近性节点嵌入需要 $O(|E|) $ 时间。第11-14行的二阶邻近性节点嵌入需要 $O(\ell |V|\gamma \ell) $ 时间。第15-16行的社区感知高阶邻近性节点嵌入需要 $O(|V|K) $ 时间。总的来说,复杂度是$ O(|V|\gamma \ell + |V| + T_1 \times (T_2|V|K + K + |E| + |V|\gamma \ell + |V|K)) $,这与图的大小(即, $|V| \(\) 和 \(\) |E|$ )线性相关。因此,算法1是高效的。

四、Conclusion

在本文中主要研究了在网络中对社区进行嵌入这个重要的问题。论文的亮点在于通过一个多元高斯分布来更好地表示社区的嵌入表达。之后,提出了算法ComE,使得在社区嵌入、社区检测和节点嵌入之间开发了一个闭环,最后共同优化这三个任务,以使它们相互加强。

参考:
https://zhuanlan.zhihu.com/p/36924789

标签:Node,phi,嵌入,社区,Community,Embedding,Sigma,节点,Phi
From: https://www.cnblogs.com/zhouyeqin/p/18584612

相关文章

  • node.js毕设图书个性化推荐系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于图书个性化推荐系统的研究,现有研究主要以通用的推荐算法和系统架构为主。在国内外,很多研究集中在如电子商务、流媒体等领域的个性化推荐,针对图书领......
  • node.js毕设图书共享管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于图书共享管理系统的研究,现有研究主要以传统图书馆管理系统为主,专门针对图书共享管理系统的研究较少。在当今社会,随着共享经济的发展,图书共享的理念......
  • node.js毕设图书馆出版物预订系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于图书馆出版物预订系统的研究,现有研究主要以图书馆的数字化管理等方面为主,专门针对出版物预订系统从多个角色(如院系教务处、财务员等)协同的研究较少......
  • innode占满怎么办
    //查找小文件数量最多的目录foriin/*;doecho`find$i|wc-l`$i;done|sort-n//以上命令意思是,遍历/*(根目录下的文件),然后使用find默认查找目录所有文件,用wc-l来统计该目录的文件数量以后升序排序#找到文件数量最多的目录,按照上面的命令,只需要修改......
  • 1.langgraph中的Tool Calling (How to call tools using ToolNode)
    1.导入模块fromlangchain_core.messagesimportAIMessagefromlangchain_core.toolsimporttoolfromlanggraph.prebuiltimportToolNode2.工具定义@tooldefget_weather(location:str):"""Calltogetthecurrentweather."""......
  • node.js论坛系统-计算机毕业设计源码41083
    摘 要本文设计并实现了一个基于微信小程序云开发的论坛系统。通过借助微信小程序的云开发能力,我们构建了一个功能完善的论坛平台,用户可以在该平台上进行帖子发布、评论、点赞等操作。首先,我们使用微信小程序提供的云开发能力搭建后端服务。云开发可以方便地实现数据存储、......
  • node.js毕设基于微信小程序的睡眠信息管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于睡眠信息管理系统的研究,现有研究主要以传统的APP形式或者简单的睡眠监测设备为主。专门针对微信小程序这种便捷、易传播且用户基础广泛的平台构建睡......
  • node.js毕设美食菜谱推广与互动系统的设计与实现 程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于美食菜谱推广与互动系统的设计与实现这一课题,现有研究主要以美食菜谱的简单展示或单一功能开发为主,如部分研究聚焦于单纯的菜谱分享平台或基础的美......
  • nvm详细安装使用教程(nvm-node多版本管理工具)(此版本需要管理员权限,如需避免请查看新
    1.卸载node(没有安装的可以直接跳过)nvm是一个nodejs的版本管理工具。通过它可以安装和切换不同版本的nodejs,解决node各种版本存在不兼容现象。但在安装之前需要先卸载之前的nodejs1)在控制面版或者应用列表中卸载nodejs2)不行就全局搜索然后删除相关文件2.下载nvm(三个地址......
  • axios为什么能在浏览器中环境运行又能在node中环境运行?
    Axios之所以能在浏览器和Node.js环境中运行,是因为它使用了不同的适配器(adapters)来发送HTTP请求。它能够根据运行环境自动切换适配器。在浏览器中:Axios使用XMLHttpRequest(XHR)对象发送请求。这是浏览器内置的API,用于与服务器进行通信。在Node.js中:Axios使用http或ht......