【cs224w】Lecture 1 & 2 - 图的性质 及 随机图
最近在看 Stanford 的 Machine Learning with Graphs。然后在网上找相关的笔记或者其他人的理解,发现大部分内容是照搬并翻译 slides, 没有一些个人的理解,而且很多地方只有前几个 lecture。所以打算自己整理一个系列的笔记供以后反复温习,也欢迎大家指正,共同学习。
转自本人:https://blog.csdn.net/New2World/article/details/105277863
Lecture 1: Introduction
Jure 提出了两个概念 Network 和 Graph,这两者的界限很模糊,但大致上我们可以将 Network 视为现实中的图,而 Graph 是一种更数学的描述方式。在很多复杂的系统之下都有错综复杂的关系网,比如食物链、化学物质的相互反应等。
课程标题很明确的表示了这个学科研究的是图,那么怎么研究。主要通过4个方面:
- node classification
- link prediction
- community detection
- network similarity
每一个方面后面当然会涉及到,所以即使现在不知所云也请稍安勿躁。
之前学的关于图的知识都没有进行这样的划分,但 Jure 提到这里不同的术语之间有微妙的区别(虽然感觉不是那么重要):
Objects | Interactions | System |
---|---|---|
nodes | links | network |
vertices | edges | graph |
\(N\) | \(E\) | \(G(N,E)\) |
其他的关于图的基本知识不再赘述,不清楚的朋友可以先去温习一下图的基础部分。
对于无向图的连通性有个有趣的现象之前没有注意过:若按一定顺序排列节点用邻接矩阵表示图的话,非连通图是严格的对角分块矩阵。
Lecture 2: Properties and Random Graph
描述一个图的特征一般有这样几个:
- degree distribution: \(P(k)\)
- path length: \(h\)
- clustering coefficient: \(C\)
- connected components: \(s\)
Degree Distribution
简单来说就是度的直方图,归一化后就是:\(P(k)=N_k / N\)。\(N_k\) 是有 \(k\) 个度的节点个数。
一般来说,图的度分布是倾斜的,因此在可视化的时候可以选择用对数坐标,即 \(10^1, 10^2, 10^3 ...\)
Path Length
一般意义上,路径长度指两个节点间的最短路径。而一个图中最长的最短路径定义为这个图的直径(diameter)。然而某些奇奇怪怪的图可能会有一条很长很长很长的路径,那么会导致直径很大。这样会对图的描述产生倾斜或者说是偏差,因此一般用平均路径长度来描述路径长度。
\]
\(E_{max}\) 是最大可能的边数,即 \((n-1)n/2\)。然而一般地,只计算存在的边算,而忽略不相通的节点对。
Clustering Coefficient
这个特征是用来衡量一个节点周围的邻接节点的互连关系的,简单来说就是一个节点的一个邻接节点多大程度上了解其他邻接节点。表示为
\]
\(e_i\) 是节点 \(i\) 的邻接节点之间的边的数量
Connectivity
连通性这个概念很广泛,包括连通子图的个数、最大连通子图的大小等
在有了这些衡量一个图的特征后,这些指标对我们来说只是一串数字而已。我们想知道这些值是“情理之中”还是“意料之外”,那么就需要一个参照来进行对比。
Erdos-Renyi Random Graph Model
这是一种最简单的随机图模型,它有两种定义方式:
- 给定 \(n\) 个节点,然后按同一概率 \(p\) 去生成每组节点对的边
- 给定 \(n\) 个节点,按均匀分布选 \(m\) 条边
那么通过这样的模型产生的随机图有怎样的性质呢?
Degree Distribution
度的分布服从伯努利分布,即
\]
那么根据伯努利分布的性质,其均值和方差分别为
- \(\bar{k}=p(n-1)\)
- \(\sigma^2=p(1-p)(n-1)\)
这里 slide 上给出了一个表达式
\]
Jure 的原话是:you can then ask how does the variance change as a function of the average degree.
也就是说这里服从大数定理,当图的规模足够大时,度的分布会变得很“窄”,即可以视作所有节点都有 \(\bar{k}\) 的度
Clustering Coefficient
根据 clustering coefficient 的定义,我们需要知道节点的邻接节点间的边的数量。由于在 ER 随机图中边是 i.i.d. 的,所以期望为
\]
也就是说,随着图的规模增大,clustering coefficient 的值不断减小。
Path Length
在讨论路径长度之前要先引入一个概念:Expansion \(\alpha\)
\]
这个定义很数学,通俗地解释就是把一个图的节点分成两堆,使得连接两部分的边最少。那么通过这个我们怎么推导路径呢?
我们先回忆下 BFS 的工作原理,如下图,从一个点出发开始遍历整个图。如果图是连通的,那么第二层应该是初始点的邻接点,然后依次展开直到覆盖图中所有点。假设遍历的是这里的 ER 随机图,那么这棵树的深度就应该是 \(\log_{np}n=\log n / \log np\)
但这里没有涉及到 expansion 这个概念呀!应该说没有显示地说明这个概念,因为我们限制了 ER 图。更一般的图的度不一定是 \(np\),因此需要用 expansion 的 \(\alpha\) 来替换这里特殊的 average degree。如此一来,将平均路径长度推广为 \(O((\log n) / \alpha)\)
Connectivity
在边的概率 \(p\) 逐渐增大过程中可以发现,当 \(p=1/(n-1)\) 时,即平均度为 \(1\) 时,giant component 开始出现。
这样我们就有了一个可以与真实网络进行对比的模型了
- [x] average path length
- [x] giant connected component
- [ ] clustering coefficient
- [ ] degree distribution
通过对比我们可以发现这个随机图模型的特征只在路径长度和最大连通子图上和真实网络差不多,但其余性质上差得很远。这样也说明了真实世界的网络不是随机的,其背后有复杂的关系等待我们去发现。
Small-World Model
通过对 ER 图的分析我们发现这种简单的随机图丢失了聚类信息,即 local structure。然而,单纯的加上 local connections 会导致图的平均路径增加而破坏我们原本已经吻合了的性质。因此提出了这个 Small-World 模型。
这里 Jure 对为什么 triadic closure 会导致网络直径增加的解释有点不清楚。按理说朋友的朋友就是我的朋友这一点能缩短路径长度呀。我的理解是这里应该突出的是 local 这一条件。以交通网为例,如果现在只有相邻城市间有交通线路,那么我从四川到北京就得途经“四川-陕西-山西-河北-北京”。但如果我有四川到北京的直飞线路呢?那直观上不就直接“四川-北京”了吗。
这个 Small-World 模型首先为了确保有 local structure,将自己初始化为下图的样子(regular ring lattice)。然后依概率将一条边的一个端点连接到任意一个不同节点上。如此,初始化保证了 clustering coefficient,而 rewiring 引入了随机性从而缩减了网络直径。
但是这里需要注意的是如果 rewiring 的概率太高或太低都不行。
- 太低,约等于不做
- 太高,破坏了局部结构
虽然小世界模型能比较好的模拟真实网络的局部结构,但它没法吻合度的分布情况。
Kronecker Graph Model
这个模型有两个突出的优势
- 可并行,快,适合生成大规模的图
- 遵从一些真实网络的“规则”
Idea:递归地生成一张图
每个公司内都有很多部门,各个部门有管理层和不同的事业群,每个事业群内又有组长和员工。这样的结构在大部分公司里都差不多。那么推广这个规律,我们先定义一个小群体内的网络结构,然后递归地使用这样的结构来构建更大的图。
定义 Kronecker product
a_{1,1}B & a_{1,2}B & ... & a_{1,m}B \\
a_{2,1}B & a_{2,2}B & ... & a_{2,m}B \\
& ... & ... \\
a_{n,1}B & a_{n,2}B & ... & a_{n,m}B
\end{pmatrix}\]
如果用邻接矩阵来直接生成那太死板了,所以为引入随机性将邻接矩阵换成概率矩阵,即矩阵的每个元素表示对应节点对右边的概率。这样通过 Kronecer product 最终得到整个网络的边的概率分布图。然后我们再通过每个区域的概率递归地选择边来得到图的一个 realization。
这种方法选边时不可避免地会遇到重复边,但概率很小。就算遇到了,reinsert 就行了,无伤大雅。
需要确定边的条数,而这一般依赖经验
实验证明 Kronecker 图在各种性质上都能较好地拟合真实的网络。但这个模型生成的图的 degree distribution 并不是平滑的。直观上说,按初始定义的 block structure 进行递归所得到的图可能的确存在这个问题,即某些部分连接紧密有些地方稀疏,而这种差异并不连续。
【cs224w】Lecture 1 & 2 - 图的性质 及 随机图的更多相关文章
- 【图机器学习】cs224w Lecture 8 & 9 - 图神经网络 及 深度生成模型
目录 Graph Neural Network Graph Convolutional Network GraphSAGE Graph Attention Network Tips Deep Gene ...
- 【图机器学习】cs224w Lecture 15 - 网络演变
目录 Macroscopic Forest Fire Model Microscopic Temporal Network Temporal PageRank Mesoscopic 转自本人:http ...
- UML图学习之二 类图
类图(ClassDiagrams)是根据系统中的类以及各类之间的关系描述系统的静态视图.类图不仅显示系统内信息的结构,还描述系统内这些信息的行为.类图的一个重要目的是为其他图(如顺序图.交互图)定义一 ...
- 【GCN】图卷积网络初探——基于图(Graph)的傅里叶变换和卷积
[GCN]图卷积网络初探——基于图(Graph)的傅里叶变换和卷积 2018年11月29日 11:50:38 夏至夏至520 阅读数 5980更多 分类专栏: # MachineLearning ...
- Erdos-Renyi随机图的生成方式及其特性
1 随机图生成简介 1.1 \(G_{np}\)和\(G_{nm}\) 以下是我学习<CS224W:Machine Learning With Graphs>[1]中随机图生成部分的笔记, ...
- UML 用例图、顺序图、状态图、类图、包图、协作图、流程图
用例图.顺序图.状态图.类图.包图.协作图 面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling La ...
- 桌面显卡天梯图和桌面cpu天梯图
桌面cpu天梯图: 桌面显卡天梯图:
- 数据结构-图-Java实现:有向图 图存储(邻接矩阵),最小生成树,广度深度遍历,图的连通性,最短路径1
import java.util.ArrayList; import java.util.List; // 模块E public class AdjMatrixGraph<E> { pro ...
- 图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))
sdut 2140 图结构练习——判断给定图是否存在合法拓扑序列 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 给定一个有向图 ...
随机推荐
- vue 实现 裁切图片 同时有放大、缩小、旋转功能
实现效果: 裁切指定区域内的图片 旋转图片 放大图片 输出bolb 格式数据 提供给 formData 对象 效果图 大概原理: 利用h5 FileReader 对象, 获取 <input ty ...
- Object-Oriented Programming Summary Ⅰ
Part 0: 前言 令人闻风丧胆的OO还是来了.并没有像名字的外表一样可爱,简直就是恶魔. 疯狂压榨OS的时间,周末无法休息,互测狼人机制 虽然网上骂声很多,就算改进到9012年还是有很多不足的地方 ...
- python正则表达式之re模块方法介绍
python正则表达式之re模块其他方法 1:search(pattern,string,flags=0) 在一个字符串中查找匹配 2:findall(pattern,string,flags=0) ...
- jenkins-构建job成功后自动打tag到git仓库
需求:最近开发同事提出了个要求,每当Jenkins执行上线部署完成后,对当前代码进行自动打TAG到git仓库中,且只有当部署成功后才进行打TAG,防止构建失败也进行打过多的垃圾tag,然后便于下次进行 ...
- 「从零单排HBase 04」HBase高性能查询揭秘
先给结论吧:HBase利用compaction机制,通过大量的读延迟毛刺和一定的写阻塞,来换取整体上的读取延迟的平稳. 1.为什么要compaction 在上一篇 HBase读写 中我们提到了,HBa ...
- openwrt sdk 编译工具 及 hello world
需要先在 make menuconfig 中打开 sdk make -j4在 bin\targets\ramips\mt7620生成一个openwrt-sdk-ramips-mt7620_gcc-7. ...
- 手机抓包app在python中使用
使用python+airtesr+无线模式控制手机 官方文档中,在airtest.readthedocs.io/zh_CN/lates…有一段介绍如何连接安卓手机的例子: 但是这个线接模板,无线模式的 ...
- Python 装饰器(无参,有参、多重))
Python装饰器介绍 在Python中,装饰器(decorator)是在闭包的基础上发展起来的. 装饰器的实质是一个高阶函数,其参数是要装饰的函数名,其返回值是完成装饰的函数名,其作用是为已经存在的 ...
- C++ Dll中导出一个类
//定义一个头文件,创建MyObject.h的头文件 并打印如下代码 #ifndef _MY_OBJECT_H #define _MY_OBJECT_H #ifndef MYDLL_EXPORTS # ...
- python3:input() 函数
一.知识介绍: 1.input() 函数,接收任意输入,将所有输入默认为字符串处理,并返回字符串类型: 2.可以用作文本输入,如用户名,密码框的值输入: 3.语法:input("提示信息:& ...