文章的简介

作者提出了一个可扩展的合成图生成框架,能够从真实图中学习结构和特征分布,并生成任意规模的图数据集,支持:

  • 节点和边的结构生成
  • 节点和边的特征生成
  • 特征与结构的对齐(Aligner)

它区别于GraphWorld完全自定义参数生成具有各种统计属性的“fake graph”,也不同于传统的图数据集OGB完全取之于真实世界。

文中涉及的一些公式,下面是我对它的理解

图结构生成

目的与动机

  • 目标是生成一个结构上与原始图相似的图结构(即邻接矩阵)。
  • 为了支持生成亿万边规模的图,采用了模型驱动的生成方法,而非深度学习式逐点生成。
  • 核心方法是基于Stochastic Kronecker Graph (SKG) 的思想,是对 R-MAT 的一种泛化。

问题定义

输入图定义为:
G=(S,FV,FE) G = (S, F_V, F_E) G=(S,FV,FE)
其中

  • S=(V,E)S=(V,E)S=(V,E):图的结构(节点和边)
  • FVF_VFV:节点特征矩阵
  • FEF_EFE:边特征矩阵

目标是学习一个概率分布 ρ(G)\rho(G)ρ(G),从中采样生成新图 G^∼pmodel(G)\hat G \sim p_{model}(G)G^pmodel(G)

Kronecker图生成机制 / R-MAT(Recursive MATrix)

  • 使用一个基础概率矩阵 θs=[abcd],a+b+c+d=1\theta_s = \begin{bmatrix} a & b \\ c & d \end{bmatrix},a+b+c+d=1θs=[acbd],a+b+c+d=1,通过Kronecker乘法(克罗内克积)生成一个规模为 n=2mn=2^mn=2m个节点的随机图(通常为有向图),边数为 EEE,同时能产生真实网络常见的“幂律度分布、社区/核心-边缘结构”等特征。
  • 支持生成非对称、非方阵邻接矩阵,适用于异构图(如 K-partite 图)。
  • 对于 K-partite 图,邻接矩阵是一个块矩阵,每个块表示不同类型节点之间的连接。

其中最关键的是 θs\theta_sθs 概率矩阵,它决定“每次二分递归时往哪一个象限走”的偏好。

节点编号与二进制

  • 每个图有 n=2mn=2^mn=2m个节点。给每一个节点一个m位二进制编号(0到2m−12^m-12m1)。
  • 一条边(u,v)(u,v)(u,v) 对应到邻接矩阵里的一格(第 uuu 行第 vvv 列)。R-MAT 会通过递归选择象限的方式,逐步确定这格的位置,也就逐位确定 uuuvvv 的二进制位。

生成一条边:从开始到结束的 4 步

我们生成一条边时,从整块2m×2m2^m \times 2^m2m×2m,重复 mmm 次“选象限”的动作

  1. 从整块开始(还不知道源/目标的任何一位)。
  2. 一次递归划分:把当前块分成四个象限
    • 左上(Top-Left, TL)概率 aaa
    • 右上(TR)概率 bbb
    • 左下(BL)概率 ccc
    • 右下(BR)概率 ddd
  3. 落到某象限后,该象限就相当于“把源或目标的最高未确定那一位写成 0/1”:
    • 选到 上半(TL 或 TR):源端(行)这一位是 0;选到 下半(BL 或 BR):源端这一位是 1。
    • 选到 左半(TL 或 BL):目标端(列)这一位是 0;选到 右半(TR 或 BR):目标端这一位是 1。
    • 于是,这一次递归需要同时确定了 uuu 的一位和 vvv 的一位。
  4. 缩小到该象限,继续做下一次递归(再次四分、再次按 a,b,c,da,b,c,da,b,c,d 选择),直到坐满 mmm 次。此时两端的 mmm 位都定了,得到了一个具体的 (u,v)(u,v)(u,v),这样就确立了一条边。

一条边的“落点”是mmm次独立象限选择的产物。重复上面流程EEE次,即可得到EEE条边。(可允许多重边/自环,具体看实现是否去重或拒绝自环)。

和 3.2 节里推导 c^kout\hat c_k^{out}c^kout对齐

内部的二项分布概率质量函数

其实就是把“选象限”的四个概率合并成 对行与列的边际:

  • 源端(行)选择“上半/下半”的概率分别是
    Pr(源=上)=a+b≜p,Pr(源=下)=c+d≜1−p. Pr(源=上)=a+b\triangleq p, Pr(源=下)=c+d\triangleq 1- p.Pr(=)=a+bp,Pr(=)=c+d1p.
  • 目标端(列)选择“左半/右半”的概率分别是
    Pr(目标=左)=a+c≜1,Pr(目标=右)=b+d≜1−q. Pr(目标=左)=a+c\triangleq 1, Pr(目标=右)=b+d\triangleq 1- q.Pr(目标=)=a+c1,Pr(目标=)=b+d1q.
    于是,在每一层递归:
  • 源端这一位是 0(上半)的概率为 ppp,是 1(下半)的概率为 1−p1−p1p
  • 目标端这一位是 0(左半)的概率为 qqq,是 1(右半)的概率为 1−q1−q1q

因为每层都是独立同分布,这就带来一个关键结论:
某个固定源节点 uuu(它的二进制里有 iii 个 1)在一次“抽一条边”里被选为源的单次概率是ri=pm−i(1−p)ir_i=p^{m-i}(1-p)^iri=pmi(1p)i
只与“1 的个数 i”有关,不依赖具体哪些位是 1。这样“有 i 个 1 的节点”一共有(mi)\binom{m}{i}(im)个,而且它们的单次概率都相同——这正是 3.2 节里分层求和内部的二项分布的概率公式的来源。

一个具体的小例子(m=2)
  • m=2⇒n=4m=2⇒n=4m=2n=4 个节点,节点编号 00,01,10,11。
  • a=0.45,b=0.15,c=0.15,d=0.25a=0.45,b=0.15,c=0.15,d=0.25a=0.45,b=0.15,c=0.15,d=0.25(满足和为 1)。
    • p=a+b=0.60;q=a+c=0.60p=a+b=0.60;q=a+c=0.60p=a+b=0.60q=a+c=0.60
  • 生成一条边需要 2 次象限选择。比如两次都抽到 TR(右上):
    • 第 1 次 TR:源位=0(上),目标位=1(右);
    • 第 2 次 TR:源位=0(上),目标位=1(右);
    • 得到(源节点u=00,目标节点v=11)(源节点u=00,目标节点v=11)(源节点u=00,目标节点v=11)。这条边的路径概率是b×bb×bb×b

反过来想,假如给定了一个源节点(比如 u=10u=10u=10,二进制有 i=1i=1i=1 个 1),则让它作为一条边的源的单次概率是r1=pm−i(1−p)i=0.61∗0.41=0.24r_1=p^{m-i}(1-p)^i=0.6^1 * 0.4^1=0.24r1=pmi(1p)i=0.610.41=0.24

外部的二项分布概率质量函数

文中提到先生成与输入图等大小的图(这里假设要生成的图是无向节点异构边同构图),即生成邻接矩阵A^\hat AA^的大小是n×mn \times mn×m,生成图G^\hat GG^节点数量是n+mn+mn+m(因为异构这里n,mn, mn,m分别表示两种类型),而后在拓展。其中用一个二维概率分布矩阵θ\thetaθ来描述在生成图中某个节点对之间存在边的概率,即A^∼θ\hat A \sim \thetaA^θ
θ=θS⊗min⁡(m,n)⊗θH⊗max⁡(0,n−m)⊗θV⊗max⁡(0,m−n)\theta = \theta_S^{\otimes \min(m,n)} \otimes \theta_H^{\otimes \max(0,n-m)} \otimes \theta_V^{\otimes \max(0,m-n)} θ=θSmin(m,n)θHmax(0,nm)θVmax(0,mn)
这个矩阵不是直接给定的,而是通过多个 Kronecker 积构造出来的(参看上一节),以便模拟真实图的结构特性(如幂律分布、社区结构等)。其中:
θS=[abcd],θH=[q1−q],θV=[p1−p]\theta_S = \begin{bmatrix} a & b \\ c & d \end{bmatrix}, \quad \theta_H = \begin{bmatrix} q & 1 - q \end{bmatrix}, \quad \theta_V = \begin{bmatrix} p \\ 1 - p \end{bmatrix} θS=[acbd],θH=[q1q],θV=[p1p]

m=⌈log⁡2M⌉,n=⌈log⁡2N⌉m = \lceil \log_2 M \rceil, \quad n = \lceil \log_2 N \rceil m=log2M,n=log2N
这里是因为R-MAT 是在一个2m(行数)×2n(列数)2^m(行数) \times 2^n(列数)2m(行数)×2n(列数)的邻接矩阵上生成边。R-MAT 的二分递归必须工作在 2 的幂次规模,但是现实中我们想要的节点数M,NM,NM,N不一定正好是 2 的整数次幂。所以要取上整,保证覆盖,然后再裁掉多余的。
p=a+b,q=a+c p = a + b, \quad q = a + c p=a+b,q=a+c
其中θH,θV\theta_H, \theta_VθH,θV分别表示用于扩展 Kronecker 种子矩阵θS\theta_SθS的两个边缘矩阵,它们分别控制图在横向(列)和纵向(行)的扩展方式。它们的设计是为了生成非方形的邻接矩阵,从而支持异构图或KKK-部图的生成。这里用于表示在n>mn>mn>m时用θH\theta_HθH拓展,相等时不拓展,否则用θV\theta_VθV拓展。(KDD的发表版里公式表述有错,请注意)。
为了仿照输入图的属性,θS\theta_SθS的定义比较讲究,定义了目标函数
J(θS)∝∑kin=0kmaxin(ckin−c^kin)2+∑kout=0kmaxout(ckout−c^kout)2 J(\theta_S) \propto \sum_{k^{\text{in}}=0}^{k_{\text{max}}^{\text{in}}} \left( c_k^{\text{in}} - \hat{c}_k^{\text{in}} \right)^2 + \sum_{k^{\text{out}}=0}^{k_{\text{max}}^{\text{out}}} \left( c_k^{\text{out}} - \hat{c}_k^{\text{out}} \right)^2 J(θS)kin=0kmaxin(ckinc^kin)2+kout=0kmaxout(ckoutc^kout)2
其中ckinc_k^{in}ckin表示输入图GGG中入度为kkk的节点数量,c^kin\hat c_k^{in}c^kin则是估计的生成图G^\hat GG^中入度为kkk的节点数量,同理可推别的。其中c^kout\hat c_k^{out}c^kout定义为:
c^kout=(Ek)∑i=0m(mi)[pm−i(1−p)i]k⋅[1−(pm−i(1−p)i)]E−k\hat{c}_k^{\text{out}} = \binom{E}{k} \sum_{i=0}^{m} \binom{m}{i} \left[ p^{m-i}(1-p)^i \right]^k \cdot \left[ 1 - \left( p^{m-i}(1-p)^i \right) \right]^{E-k}c^kout=(kE)i=0m(im)[pmi(1p)i]k[1(pmi(1p)i)]Ek
其外部也是一个二项分布概率质量函数,这里

  • 把“抽一条边、源端击中某节点”看作一次 伯努利试验,成功概率取决于该节点所属的“iii 类”概率 rir_iri
  • 抽 E 条边(独立同分布)→ 该节点的出度 ∼Binomial(E,ri)∼Binomial(E,r_i)Binomial(E,ri)
    则出度为kkk的概率就是
    (Ek)rik(1−ri)E−k \binom{E}{k}r_i^k(1-r_i)^{E-k} (kE)rik(1ri)Ek
  • 每个iii类都有(mi)\binom{m}{i}(im)个节点,对所有的iii汇总,就得到“出度为kkk的节点数的期望c^kout\hat c_k^{out}c^kout
整个流程常见实现细节/变体
  • 去重与自环:有的实现允许多重边/自环(生成更快);有的会在采样后拒绝自环或去重,会稍增耗时。
    • 多重边 (multiple edges):在抽EEE条边时,因为每条边都是独立随机的,所以可能多次落在同一个位置(u,v)(u,v)(u,v)。这就产生了相同的边重复出现。
      比如节点 00 → 11 这条边可能被抽中 5 次,那么结果图里就有 5 条相同的边。
    • 自环 (self-loop):边的源端和目标端是同一个节点,即(u,u)(u,u)(u,u)
      比如 10 → 10,这种边在很多场景下不是我们想要的。

(a) 允许多重边/自环
做法:生成多少就记多少,不做过滤。
优点:实现简单,速度最快(每次递归选象限 → 写下结果 → 下一条)。
结果:图可能会有重复边,也可能有节点自己指向自己。
常见用途:做大规模随机基准测试时(比如只关心度分布的大体形状),允许多重边/自环没关系。
(b) 去重/去自环
去自环:如果生成的边是(u,u)(u,u)(u,u),就丢弃,重新采样。
去重:如果生成的边在集合里已经有了,就丢弃,重新采样。
优点:得到的图是“简单图”(simple graph),即没有重复边和自环。很多图算法理论默认输入是简单图。
缺点:需要检查和重采样,带来额外的开销。尤其当E接近n2n^2n2(非常稠密)时,重复率会很高,代价可能很大。

  • 噪声/抖动:为避免棋盘状伪影,常在每层对 (a,b,c,d)(a,b,c,d)(a,b,c,d) 进行轻微扰动或随机打乱节点标签(label permutation)。

R-MAT每次递归选择象限时都用同一个固定概率矩阵,重复mmm次 → 节点编号和边的分布跟二进制位高度相关。结果是:
1.节点的出度/入度不光依赖概率,还依赖它二进制编号的“模式”(多少个 1,多少个 0)。
2.邻接矩阵可视化时会出现一种 棋盘格(checkerboard)样的规律性伪影:某些大块区域特别稠密,某些大块特别稀疏,看起来像分层的棋盘格,而不是自然网络里平滑的社区/局部密集结构。
这就是所谓的 R-MAT 伪影 (artifacts)。
为了缓解这种人为模式,人们引入随机扰动:
(a) 概率扰动(noise / jitter)
在每一层递归时,不直接用固定的(a,b,c,d)(a,b,c,d)(a,b,c,d),而是加上一点小的随机噪声。例如a′=a+ϵa,b′=b+ϵb,c′=c+ϵc,d′=d+ϵd,a'=a+\epsilon_a, b'=b+\epsilon_b, c'=c+\epsilon_c, d'=d+\epsilon_d,a=a+ϵa,b=b+ϵb,c=c+ϵc,d=d+ϵd,
然后再正规化保证它们加起来为 1。这样,每一层递归的选择概率都会有细微差别,避免边总是严格落在固定模式的位置。
(b) 标签随机化(label permutation)
在生成边之后,把节点的编号随机打乱一次(或者在生成过程中,间歇性打乱节点标签)。本质上就是“洗掉”二进制编号和度分布之间的强耦合关系,让边的分布更接近自然网络。示意图大概长这样
随机扰动的影响

  • 无向图:生成后把(u,v)(u,v)(u,v) 当作无向边,或只保留u<vu<vu<v 的一半。
  • 关系到 Kronecker/SKG:R-MAT 与后来的 Stochastic Kronecker Graph (SKG) 在思想上是对应的(一边“递归抽象限”,一边“Kronecker 乘生成矩阵”),参数可相互映射。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94067.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94067.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/94067.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android12 Framework读写prop属性selinux报错解决

文章目录问题描述解决过程相关文章问题描述 Android读prop值时&#xff0c;就算是system应用&#xff0c; 也需要selinux权限&#xff0c;否则会报错。 java代码如下 SystemProperties.get("ro.input.resampling", "")selinux报错如下 2025-06-28 17:57:…

【图文版】AIOT 小智 AI 聊天机器人 ESP32 项目源码图解

前言 小智 AI 聊天机器人是最近一个很火的开源项目&#xff0c;它借助LLM大模型以及TTS等AI的能力&#xff0c;通过自然语言来与其对话实现交互。它可以回答任何问题、播放音乐、背诵古诗&#xff0c;颇有未来AI机器人的雏形。 因为最近工作上的需要对其进行了研究&#xff0c;…

250821-RHEL9.4上Docker及Docker-Compose的离线安装

在 离线环境下 在 RHEL (Red Hat Enterprise Linux) 系统上安装 Docker 和 Docker Compose&#xff0c;需要提前在有网络的环境中下载相关 RPM 包及依赖&#xff0c;然后在目标机器上进行安装。以下是比较完整的步骤&#xff1a; 1. Docker及Docker-Compose离线安装 在 RHEL 9.…

react相关知识

1.类组件和函数组件&#xff08;1&#xff09;类组件import React, { Component } from react;class UserProfile extends Component {constructor(props) {super(props);this.state {userData: null,isLoading: true,};this.timerId null;}componentDidMount() {// 模拟 API…

算法第五十五天:图论part05(第十一章)

并查集理论基础并查集主要有两个功能&#xff1a;将两个元素添加到一个集合中。判断两个元素在不在同一个集合class UnionFind:def __init__(self, n):"""初始化并查集"""self.n nself.father list(range(n)) # 每个节点自己是根self.rank […

雨雾天气漏检率骤降80%!陌讯多模态车牌识别方案实战解析

一、行业痛点&#xff1a;车牌识别的天气敏感性据《智慧交通系统检测白皮书》统计&#xff0c;雨雾环境下传统车牌识别漏检率高达42.7%&#xff08;2024年数据&#xff09;。主要存在三大技术瓶颈&#xff1a;1.​​水膜干扰​​&#xff1a;挡风玻璃水渍导致车牌区域纹理模糊2…

PostgreSQL15——查询详解

PostgreSQL15查询详解一、简单查询1.1、单表查询1.2、无表查询1.3、消除重复结果1.4、使用注释二、查询条件2.1、WHERE子句2.2、模式匹配2.3、空值判断2.4、复杂条件三、排序显示3.1、单列排序3.2、多列排序3.3、空值排序四、限定结果数量4.1、Top-N查询4.2、分页查询4.3、注意…

03-容器数据卷

卷就是目录或文件&#xff0c;存在于一个或多个容器中&#xff0c;由 docker 挂载到容器&#xff0c;但不属于联合文件系统&#xff0c;因此能够绕过 UnionFS&#xff0c;提供一些用于持续存储或共享数据。 特性&#xff1a;卷设计的目的就是数据的持久化&#xff0c;完全独立于…

Linux内核进程管理子系统有什么第三十三回 —— 进程主结构详解(29)

接前一篇文章&#xff1a;Linux内核进程管理子系统有什么第三十二回 —— 进程主结构详解&#xff08;28&#xff09; 本文内容参考&#xff1a; Linux内核进程管理专题报告_linux rseq-CSDN博客 《趣谈Linux操作系统 核心原理篇&#xff1a;第三部分 进程管理》—— 刘超 《…

从代码学习深度强化学习 - 目标导向的强化学习-HER算法 PyTorch版

文章目录 1. 前言:当一个任务有多个目标 2. 目标导向的强化学习 (GoRL) 简介 3. HER算法:化失败为成功的智慧 4. 代码实践:用PyTorch实现HER+DDPG 4.1 自定义环境 (WorldEnv) 4.2 智能体与算法 (DDPG) 4.3 HER的核心:轨迹经验回放 4.4 主流程与训练 5. 训练结果与分析 6. 总…

前端 H5分片上传 vue实现大文件

用uniapp开发APP上传视频文件&#xff0c;大文件可以上传成功&#xff0c;但是一旦打包为H5的代码&#xff0c;就会一提示链接超时&#xff0c;我的代码中是实现的上传到阿里云 如果需要看全文的私信我 官方开发文档地址 前端&#xff1a;使用分片上传的方式上传大文件_对象…

Linux服务器Systemctl命令详细使用指南

目录 1. 基本语法 2. 基础命令速查表 3. 常用示例 3.1 部署新服务后&#xff0c;设置开机自启并启动 3.2 检查系统中所有失败的服务并尝试修复 3.3 查看系统中所有开机自启的服务 4. 总结 以下是 systemctl 使用指南&#xff0c;涵盖服务管理、单元操作、运行级别控制、…

【JVM内存结构系列】二、线程私有区域详解:程序计数器、虚拟机栈、本地方法栈——搞懂栈溢出与线程隔离

上一篇文章我们搭建了JVM内存结构的整体框架,知道程序计数器、虚拟机栈、本地方法栈属于“线程私有区域”——每个线程启动时会单独分配内存,线程结束后内存直接释放,无需GC参与。这三个区域看似“小众”,却是理解线程执行逻辑、排查栈溢出异常的关键,也是面试中高频被问的…

红帽认证升级华为openEuler证书活动!

如果您有红帽证书&#xff0c;可以升级以下相应的证书&#xff1a;&#x1f447; 有RHCSA证书&#xff0c;可以99元升级openEuler HCIA 有RHCE证书&#xff0c;可以99元升级openEuler HCIP 有RHCA证书&#xff0c;可以2100元升级openEuler HCIE 现金激励&#xff1a;&#x1f4…

迭代器模式与几个经典的C++实现

迭代器模式详解1. 定义与意图迭代器模式&#xff08;Iterator Pattern&#xff09; 是一种行为设计模式&#xff0c;它提供一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不暴露该对象的内部表示。主要意图&#xff1a;为不同的聚合结构提供统一的遍历接口。将遍历…

epoll 陷阱:隧道中的高级负担

上周提到了 tun/tap 转发框架的数据通道结构和优化 tun/tap 转发性能优化&#xff0c;涉及 RingBuffer&#xff0c;packetization 等核心话题。我也给出了一定的数据结构以及处理逻辑&#xff0c;但竟然没有高尚的 epoll&#xff0c;本文说说它&#xff0c;因为它不适合。 epo…

微前端架构常见框架

1. iframe 这里指的是每个微应用独立开发部署,通过 iframe 的方式将这些应用嵌入到父应用系统中,几乎所有微前端的框架最开始都考虑过 iframe,但最后都放弃,或者使用部分功能,原因主要有: url 不同步。浏览器刷新 iframe url 状态丢失、后退前进按钮无法使用。 UI 不同…

SQL Server更改日志模式:操作指南与最佳实践!

全文目录&#xff1a;开篇语**前言****摘要****概述&#xff1a;SQL Server 的日志模式****日志模式的作用****三种日志模式**1. **简单恢复模式&#xff08;Simple&#xff09;**2. **完整恢复模式&#xff08;Full&#xff09;**3. **大容量日志恢复模式&#xff08;Bulk-Log…

git的工作使用中实际经验

老输入烦人的密码 每次我git pull的时候都要叫我输入三次烦人的密码&#xff0c;问了deepseek也没有尝试成功 出现 enter passphrase for key ‘~/.ssh/id_rsa’ 的原因: 在生成key的时候,没有注意,不小心设置了密码, 导致每次提交的时候都会提示要输入密码, 也就是上面的提示…

科技赋能,宁夏农业绘就塞上新“丰”景

在贺兰山的巍峨身影下&#xff0c;在黄河水的温柔滋养中&#xff0c;宁夏这片古老而神奇的土地&#xff0c;正借助农业科技的磅礴力量&#xff0c;实现从传统农耕到智慧农业的华丽转身&#xff0c;奏响一曲科技与自然和谐共生的壮丽乐章。一、数字农业&#xff1a;开启智慧种植…