LogoLogo
  • README
  • 前端编程
    • 01 Node JS
    • 02-ES6详解
    • 03-NPM详解
    • 04-Babel详解
    • 05-前端模块化开发
    • 06-WebPack详解
    • 07-Vue详解
    • 08-Git详解
    • 09-微信小程序
  • 人工智能
    • 机器学习
      • 二次分配问题
      • 非负矩阵
      • 概率潜在语义分析
      • 概率图模型
      • 集成学习
      • 降维
      • 距离度量
      • 决策树
      • 逻辑回归
      • 马尔可夫决策过程
      • 马尔可夫链蒙特卡洛法
      • 朴素贝叶斯法
      • 谱聚类
      • 奇异值分解
      • 潜在狄利克雷分配
      • 潜在语义分析
      • 强化学习
      • 社区算法
      • 时间序列模型
      • 特征工程
      • 条件随机场
      • 图论基础
      • 线性分类
      • 线性回归
      • 信息论中的熵
      • 隐马尔科夫模型
      • 支持向量机
      • 主成分分析
      • EM算法
      • Hermite 矩阵的特征值不等式
      • k-means聚类
      • k近邻法
      • PageRank算法
    • 深度学习
      • Pytorch篇
        • 01-线性模型
        • 02-梯度下降法
        • 03-反向传播
        • 04-pytorch入门
        • 05-用pytorch实现线性回归
        • 06-logistic回归
        • 07-处理多维特征的输入
        • 08-加载数据集
        • 09-多分类问题
        • 10-卷积神经网络
        • 11-循环神经网络
    • 图神经网络
      • 图神经网络笔记01
        • 01-图(Graphs)的结构
        • 02-网络的性质和随机图模型
        • 03-网络工具
        • 04-网络中的主题和结构角色
        • 05-网络中的社区结构
      • 图神经网络笔记02
        • 01-深度学习引言
        • 02-神经网络基础
        • 03-卷积神经网络
        • 04-图信号处理与图卷积神经网络
        • 05-GNN的变体与框架-
        • [06-Google PPRGo 两分钟分类千万节点的最快GNN](人工智能/图神经网络/图神经网络笔记02/06-Google%20PPRGo 两分钟分类千万节点的最快GNN.md)
        • 07-序列模型
        • 08-变分自编码器
        • 09-对抗生成网络
  • 日常记录
    • 健身日记
    • 面经记录
    • 自动生成Summary文件
  • 实战项目
    • 谷粒商城
      • 00-项目概述
      • 01-分布式基础-全栈开发篇
      • 02-分布式高级-微服务架构篇
      • 03-高可用集群-架构师提升篇
  • 数据库
    • MySQL笔记
      • 01-MySQL基础篇
      • 02-MySQL架构篇
      • 03-MySQL索引及调优篇
      • 04-MySQL事务篇
      • 05-MySQL日志与备份篇
    • Redis笔记
      • 01-Redis基础篇
      • 02-Redis高级篇
    • 02-Redis篇
  • 算法笔记
    • 01-算法基础篇
    • 02-算法刷题篇
  • 职能扩展
    • 产品运营篇
  • Go编程
    • 01-Go基础
      • 01-Go基础篇
  • Java编程
    • 01-Java基础
      • 01-Java基础篇
      • 02-多线程篇
      • 03-注射与反解篇
      • 04-JUC并发编程篇
      • 05-JUC并发编程与源码分析
      • 06-JVM原理篇
      • 07-Netty原理篇
      • 08-设计模式篇
    • 02 Java Web
      • 01-Mybatis篇
      • 01-Mybatis篇(新版)
      • 02-Spring篇
      • 02-Spring篇(新版)
      • 03-SpringMVC篇
      • 04-MybatisPlus篇
    • 03-Java微服务
      • 01-SpringBoot篇
      • 01-SpringBoot篇(新版)
      • 02-SpringSecurity篇
      • 03-Shiro篇
      • 04-Swagger篇
      • 05-Zookeeper篇
      • 06-Dubbo篇
      • 07-SpringCloud篇
      • 08-SpringAlibaba篇
      • 09-SpringCloud篇(新版)
    • 04-Java中间件
      • 数据库篇
        • 01-分库分表概述
        • 02-MyCat篇
        • 03-MyCat2篇
        • 04-Sharding-jdbc篇
        • 05-ElasticSearch篇
      • 消息中间件篇
        • 01-MQ概述
        • 02-RabbitMQ篇
        • 03-Kafka篇
        • 04-RocketMQ篇
        • 05-Pulsar篇
    • 05-扩展篇
      • Dubbo篇
      • SpringBoot篇
      • SpringCloud篇
    • 06-第三方技术
      • 01-CDN技术篇
      • 02-POI技术篇
      • 03-第三方支付技术篇
      • 04-第三方登录技术篇
      • 05-第三方短信接入篇
      • 06-视频点播技术篇
      • 07-视频直播技术篇
    • 07-云原生
      • 01-Docker篇
      • 02-Kubernetes篇
      • 03-Kubesphere篇
  • Linux运维
    • 01-Linux篇
    • 02-Nginx篇
  • Python编程
    • 01-Python基础
      • 01.配置环境
      • 02.流程控制
      • 03.数值
      • 04.操作符
      • 05.列表
      • 06.元祖
      • 07.集合
      • 08.字典
      • 09.复制
      • 10.字符串
      • 11.函数
      • 12.常见内置函数
      • 13.变量
      • 14.异常和语法错误
      • 15.时间和日期
      • 16.正则表达式
    • 02 Python Web
      • flask篇
        • 01.前言
        • 02.路由
        • 03.模板
        • 04.视图进阶
        • 05.flask-sqlalchemy
        • 06.表单WTForms
        • 07.session与cookie
        • 08.上下文
        • 09.钩子函数
        • 10.flask 信号
        • 11.RESTFUL
        • 13.flask-mail
        • 14.flask+celery
        • 15.部署
        • 16.flask-login
        • 17.flask-cache
        • 18.flask-babel
        • 19.flask-dashed
        • 20.flask-pjax
        • 21.flask上传文件到第三方
        • 22.flask-restless
        • 23.flask-redis
        • 24.flask-flash
        • 25.消息通知
        • 26.分页
    • 03-Python数据分析
      • Matplotlib
      • Numpy
      • Pandas
      • Seaborn
    • 04-Python爬虫
      • 1.准备工作
      • 2.请求模块的使用
      • 3.解析模块的使用
      • 4.数据存储
      • 5.识别验证码
      • 6.爬取APP
      • 7.爬虫框架
      • 8.分布式爬虫
由 GitBook 提供支持
在本页
  • 网络的性质
  • 度的分布
  • 图中的路径
  • 聚类系数
  • 连通性
  • 图模型
  • 简单图
  • 随机图模型
  • 小世界模型
  • Kronecker图模型

这有帮助吗?

在GitHub上编辑
  1. 人工智能
  2. 图神经网络
  3. 图神经网络笔记01

02-网络的性质和随机图模型

上一页01-图(Graphs)的结构下一页03-网络工具

最后更新于3年前

这有帮助吗?

  • 如何表示网络属性

  • 用什么样的模型生成网络

网络的性质

度的分布

度分布$p(k)$:随机选择的节点具有$k$度的概率;$N_k$:度为$k$的节点; 归一化直方图:

p(k)=Nk/Np(k)=N_k/Np(k)=Nk​/N

对于有向图,有单独的入度和出度分布

图中的路径

  • 路径

路径是一个结点序列,其中每个节点都链接到下一个节点:

Pn={i0,i1,⋯ ,in};Pn={(i0,i1),(i1,i2),⋯ ,(in−1,in)}P_n=\{i_0,i_1,\cdots,i_n\};P_n = \{(i_0,i_1),(i_1,i_2),\cdots,(i_{n-1},i_n)\}Pn​={i0​,i1​,⋯,in​};Pn​={(i0​,i1​),(i1​,i2​),⋯,(in−1​,in​)}

一个结点可以在一条路径多次交叉的穿过同一条边,例如:$ACBDCDEG$

  • 距离

路径:连通两个结点之间的边,所构成的边集合就是路径。

最短路径:连通两个结点之间的边,所构成的边数最小的集合就是最短路径。

如果两个节点不连通,距离通常定义为$inf(or\ 0)$。

GBD=2GAX=∞\begin{align} &G_{BD} = 2\\ &G_{AX} = \infty \end{align}​GBD​=2GAX​=∞​​

在有向图中,路径距离需要跟随箭头的方向:

GAB≠GBAG_{AB} \not= G_{BA}GAB​=GBA​
  • 网络直径

直径:图中任意一对节点之间的最大(最短路径)距离。

连通图或强连通有向图的平均路径长度:

hˉ=12Emax∑i,j≠ihij\bar h=\frac{1}{2E_{max}}\sum\limits_{i,j\not=i}h_{ij}hˉ=2Emax​1​i,j=i∑​hij​

其中,$h_{ij}$为结点$i$到结点$j$的距离,$E_{max}$为结点$i$到$j$的最大边数,节点对总数= $\frac{n(n-1)}{2}$

  1. 很多时候,只计算连接节点对的平均值

  2. 注意,该度量也适用于图的(强)连接分量

聚类系数

聚类系数$(用于无向图)$:聚合系数是衡量一个节点的邻居相互之间的连接程度。

Ci=2eiki(ki−1)C_i = \frac{2e_i}{k_i(k_i-1)}Ci​=ki​(ki​−1)2ei​​

其中,$i$结点具有$k_i$度,$C_i \in {0,1}$。

平均聚类系数:

C=1N∑i=1NCiC =\frac{1}{N} \sum\limits_{i=1}^N C_iC=N1​i=1∑N​Ci​

连通性

最大连通分量:任意两个顶点被一条路径的最大集合所连接起来。

如何找到连通分量:

  • 从随机节点开始,执行广度优先搜索$(BFS)$

  • 标记$BFS$访问的节点

  • 如果所有节点都被访问,则网络已经连通

  • 否则,找到一个未访问的节点并重复$BFS$

图模型

简单图

  • $G_{np}$:$n$个节点上的无向图,每一对结点$(u,v)$都以概率$p$独立连接。

$G_{nm}$:具有$n$个节点,$m$条边的无向图。

随机图模型

随机图

随机图就是将一堆顶点随机的连接上边。

相同的点以及边数,有着很多种构造图的方式。

事实上$G_{np}$的度分布是二项式的;设$P(k)$表示结点的度为$k$的概率。设$P(k)$表示结点的度为$k$的概率,则

P(k)=[n−1k]pk(1−p)n−1−kP(k) = \left[ \begin{matrix} n-1 \\ k \end{matrix} \right]p^k(1-p)^{n-1-k}P(k)=[n−1k​]pk(1−p)n−1−k

二项分布的均值,方差为:

kˉ=p(n−1)σ2=p(1−p)(n−1)\begin{align} &\bar k = p(n-1) \\ &\sigma^2 = p(1-p)(n-1) \end{align}​kˉ=p(n−1)σ2=p(1−p)(n−1)​​

假设$P(k)$服从于高斯分布,有

根据大数定律,随着网络规模的增加,分布变得越来越窄——使得我们越来越相信一个节点的度在k附近。

σk=[1−pn1n−1]12=1(n−1)12\frac{\sigma}{k} = \left[ \begin{matrix} \frac{1-p}{n}&\frac{1}{n-1} \end{matrix} \right]^{\frac{1}{2}} = \frac{1}{(n-1)^{\frac{1}{2}}}kσ​=[n1−p​​n−11​​]21​=(n−1)21​1​

$G_{np}$的聚类系数

Ci=2eiki(ki−1)C_i = \frac{2e_i}{k_i(k_i-1)}Ci​=ki​(ki​−1)2ei​​

其中,$e_i$是$i$的邻居之间的边数。且边在$G_{np}$中出现的概率均为$p$,有,

E(ei)=pki(ki−1)2E(e_i) = p\frac{k_i(k_i-1)}{2}E(ei​)=p2ki​(ki​−1)​

然后,有

E[Ci]=p2⋅ki(ki−1)2ki(ki−1)=p=kˉn−1≈kˉnE[C_i] = p\frac{2\cdot \frac{k_i(k_i-1)}{2}}{k_i(k_i-1)} = p = \frac{\bar k}{n-1} \approx \frac{\bar k}{n}E[Ci​]=pki​(ki​−1)2⋅2ki​(ki​−1)​​=p=n−1kˉ​≈nkˉ​

于是,

C=p=kˉnC = p = \frac{\bar k}{n}C=p=nkˉ​

$G_{np}$的路径

为了更好的描述路径,定义一个概念Expansion:

  • 在图$G(V,E)$中,对于结点的任何子集$(if \ \forall S\subseteq \ V)$,边的数量将具有扩展$\alpha$,且有$\alpha\cdot min(|S|,|V\setminus S|)\leq S$

α=minS⊆V保留该集合S的边缘数min(∣S∣,∣V∖S∣)\alpha = \mathop{min}_{S\subseteq V}\frac{保留该集合S的边缘数}{min(|S|,|V\setminus S|)}α=minS⊆V​min(∣S∣,∣V∖S∣)保留该集合S的边缘数​

假设,一个具有$n$个结点的随机图以及扩展$\alpha$,那么对于所有的成对的结点之间的路径长度为$O(\frac{\log n}{\alpha})$

随机图的直径$(diam)$为:

for log c≤np≤n,diam(G)=log⁡nlog⁡npfor\ log\ c\leq np\leq n,diam(G) = \frac{\log{n}}{\log{np}}for log c≤np≤n,diam(G)=lognplogn​

随机图具有良好的扩展性,因此$BFS$访问所有节点需要对数级的步骤。

随机图与真实的网络

随机网络模型的问题:

  • 度分布不同于真实网络

  • 在大多数真实网络中,巨大的组件不会通过相变出现

  • 任何局部结构聚类系数都不会太低

注意真实的网络不是随机的。

小世界模型

如何能同时具有高聚类和小直径?

  • 聚类意味着边缘“局部性”

  • 随机性创造了“捷径”

采用小世界模型,就可以同时具有两种性质。

小世界模型$(The\ Small-World\ Model)$$[Watts-Strogatz\ '98]$

模型的两个组成部分:

$(1).$ 一个环状的规则网络开始:网络含有$N$个结点,每个节点向与它最临近的$K$个节点连出$K$条边,并满足$N>>K>>ln(N)>>1$。

$(2).$ **随机化重连:以概率$p$随机地重新连接网络中的每个边,即将边的一个端点保持不变,而另一个端点取为网络中随机选择的一个节点。**其中规定,任意两个不同的节点之间至多只能有一条边,并且每一个节点都不能有边与自身相连。这样就会产生$pNK/2$条长程的边把一个节点和远处的结点联系起来。改变$p$值可以实现从规则网络$(p=0)$向随机网络$(p=1)$转变。

该模型至少能够部分解释许多网络中的“小世界”现象 ",比如电网、电影演员的社交网络。

kronecker 图模型

  1. 用途

在基于网络属性模拟的生成模型中,有一些模型使用矩阵的乘积模拟网络的邻接矩阵的扩展和演化。其中,$Jure\ Leskovec$等研究人员发现可以用矩阵的$Kronecker$乘积操作来生成网络,并且通过实验验证了$Kronecker$图模型生成的网络可以很好地模拟静态网络的度分布、特征值分布以及动态网络的直径、密度变化的幂律分布等特性。$Kronecker$积的数学特性使得$Kronecker$图模型所生成的网络具有良好的可分析性。

  1. 如何递归地思考网络结构?直觉:自相似性

物体与自身的一部分相似:整体的形状与一个或多个部分相同

  1. 模拟递归图/社区增长:

  1. $Kronecker$内积是一种生成自相似矩阵的方法

  2. $Kronecker$图模型

网络结构的递归模型

  1. $Kronecker$内积的定义:

C=AN×N⊗BK×L=[a11Ba12B⋯a1mBa21Ba22B⋯a2mB⋮⋮⋱⋮an1Ban2B⋯anmB]N∗K×M∗LC = A_{N\times N} \otimes B_{K\times L} = \left[ \begin{matrix} a_{11}B&a_{12}B&\cdots&a_{1m}B \\ a_{21}B&a_{22}B&\cdots&a_{2m}B \\ \vdots&\vdots&\ddots&\vdots \\ a_{n1}B&a_{n2}B&\cdots&a_{nm}B \\ \end{matrix} \right]_{N*K\times M*L}C=AN×N​⊗BK×L​=​a11​Ba21​B⋮an1​B​a12​Ba22​B⋮an2​B​⋯⋯⋱⋯​a1m​Ba2m​B⋮anm​B​​N∗K×M∗L​
  1. 定义两个图的克罗内克积为其邻接矩阵的克罗内克积,$Kronecker$图是通过在初始矩阵上迭代$Kronecker$积得到的图的增长序列

K1[m]=Km=K1⊗K1⊗⋯⊗K1⏟m times=Km−1⊗K1K_1^{[m]}=K_m = \underbrace{K_1\otimes K_1\otimes\cdots\otimes K_1}_{m\ times}=K_{m-1}\otimes K_1K1[m]​=Km​=m timesK1​⊗K1​⊗⋯⊗K1​​​=Km−1​⊗K1​

随机Keronecker图

为了使模型能够更好地模拟真实世界网络,提出了$Kronecker$图模型的改进模型,即随机$Kronecker$图模型。

  • 创建$N_1\times N_1$的概率矩阵$\Theta_1$

  • 递归计算第$k$个$Kronecker$乘积$\Theta_k$

  • $\Theta_k$中的值$p_{uv}$表示节点和$u$节点$v$之间生成边的概率

当实际的运行的时候,会发现$Kronecker$图运算太费时间了,这个该怎么解决?

可以利用Kronecker图的递归结构

  • 快速生成克罗内克图的方法

  • 如何在$n = 2^m$个节点的图$G$生成$kronecker$图

利用递归的性质,进行生成。

真实网络和克罗内克图模型的比较

估计:点值$(n=76k,m=510k)$

实验证明 $Kronecker $图在各种性质上都能较好地拟合真实的网络。但这个模型生成的图的$ degree\ distribution $并不是平滑的。直观上说,按初始定义的$ block\ structure $进行递归所得到的图可能的确存在这个问题,即某些部分连接紧密有些地方稀疏,而这种差异并不连续。

用于模拟真实世界的

Kronecker图模型
image-20210115180538404
image-20210115180557850
image-20210115180608091
image-20210115180620606
image-20210115180637500
image-20210115180713043
image-20210108220236693
image-20210113112849612
image-20210113115243416
image-20210113121422409
image-20210113133830651
image-20210113135842552
image-20210113140459276
image-20210113142616436
image-20210113142850781
image-20210113144200068
image-20210113145719866
image-20210113150639423
image-20210113150756701
image-20210113153547433