Message Passing and Node Classification
- 一、前言
- 二、How do we leverage node correlation in network?
- 三、Relational Classification
- 四、Iterative classification
- 五、Loopy Belief Propagation
一、前言
现在的主要问题是:
给定一个网络,其中一些节点上有标签,我们如何将标签分配给网络中的所有其他节点?
实际问题:
在网络中,一些节点是欺诈者,而另一些节点是完全可信的。如何发现其他欺诈者和可信赖节点?
这是一个半监督问题:
- 给定一些节点的标签
- 让我们预测未标记节点的标签
- 这被称为semi-supervised node classification
我们可以使用Node Embedding来解决这个半监督分类问题。但本文讨论另一种框架:消息传递(Message passing)。
该方法的思想是:
网络中存在相关性(依赖关系),即相似节点间存在链接。
- 节点的行为在网络的各个链路上是相互关联的
- 相关性:相邻节点颜色相同(属于同一类)
为什么网络中节点的行为是相关的有两种解释:
-
以社交圈为例子,具有相似特征的人倾向于相互联系,这是社会科学的同质性(Homophily)概念。
可以理解成:物以类聚,人以群分。如:专注于同一研究领域的研究人员更有可能建立联系(在会议上见面,在学术讲座上互动等)。 -
社会关系会影响我们自己的特征或我们自己的行为
如:我把我喜欢的音乐推荐给我的朋友们,直到他们中的一个越来越喜欢我最喜欢的音乐类型!
本文将讲三种实现技术:
- Relational classification
- Iterative classification
- Correct & Smooth
二、How do we leverage node correlation in network?
我们如何利用网络中观察到的这种相关性来帮助预测节点标签?
- Motivation(1):相似的节点通常紧密相连或在网络中直接连接:
- Guilt-by-association:
如果我链接到一个标签为X的节点,那么我可能也有标签X。 - 例如:恶意/良性网页:
恶意网页相互链接,以增加可见性,看起来可信,并在搜索引擎中排名更高
- Guilt-by-association:
- Motivation(2):网络中节点的分类标签可能依赖于:
- v节点的features
- v节点邻居节点的标签
- v节点邻居节点的features
半监督学习问题描述:
- 给定:
- Graph
- 一些带有标签的节点
- 任务:
对剩余节点进行分类 - 解决问题的主要假设:
网络中存在同质性(Homophily)
示例任务:
- 设A为 n × n n\times n n×n邻接矩阵
- 设
Y
=
{
0
,
1
}
n
Y=\{0,1\}^n
Y={0,1}n为标签集:
- Y v = 1 Y_v=1 Yv=1则属于 C l a s s 1 \color{green}{Class\ 1} Class 1
- Y v = 0 Y_v=0 Yv=0则属于 C l a s s 0 \color{red}{Class\ 0} Class 0
- 有未标记的节点需要分类
- 目标:预测哪些未标记的节点可能是 C l a s s 1 \color{green}{Class\ 1} Class 1,哪些可能是 C l a s s 0 \color{red}{Class\ 0} Class 0
如下图;每个节点v都有一个特征向量
f
v
f_v
fv,给出了一些节点的标签。
任务是:考虑到所有的特征和网络,找到
P
(
Y
v
)
P(Y_v)
P(Yv)。
实际应用:
- 文档分类
- 词性标注
- 链接预测
- 光学字符识别
- 图像/3D数据分割
- 传感器网络中的实体解析
- 垃圾邮件和欺诈检测
三、Relational Classification
I
d
e
a
Idea
Idea:
在网络中传播节点标签;如节点
v
v
v的类概率
Y
v
Y_v
Yv是其邻居类概率的加权平均。
在初始化时:
- 对于有标签的节点 v v v,初始化 Y v Y_v Yv为ground-truth label Y v ∗ Y^*_v Yv∗
- 对于无标签的节点,初始化 Y v = 0.5 Y_v=0.5 Yv=0.5
然后按随机顺序更新所有节点,直到收敛或达到最大迭代次数为止。
节点
v
v
v的类概率更新公式如下:
- 如果边有强度/重量信息, A v , u A_{v,u} Av,u是u和v之间的边的权重。
- 前面的 1 ∑ \frac{1}{\sum} ∑1项是归一化,确保 P ( Y v ) P(Y_v) P(Yv)在0-1之间
- P ( Y v = c ) P(Y_v=c) P(Yv=c)表示节点标签为 c c c的概率
这个方法存在两个问题:
- 不能保证收敛
- 模型不能使用节点特征信息
实例:
对下图灰色节点进行分类,红色和绿色节点表示已知标签的节点。 P Y P_Y PY表示其标签为1(绿色)的概率。
-
初始化:
- 有标签的节点初始化为ground truth
- 没标签的节点初始化为0.5
-
第一轮迭代:按1-9的次序更新节点
-
更新节点3:
-
节点3更新完后,更新节点4:
-
以同样的方式顺序更新节点5、2、9:
-
-
第二轮迭代:按1-9的次序更新节点
节点9的标签未变,即节点9收敛了,将节点9的值固定,后续不做更新。 -
第三轮迭代:
节点8收敛了,将节点8的值固定,后续不做更新。 -
第四轮迭代:
节点5、3收敛了,将节点5、3的值固定,后续不做更新。 -
第五轮迭代:【这轮迭代可省,因为其余顶点都收敛了】
所有节点都收敛了 -
我们可以预测:
- 节点4,5,8,9属于class 1( P Y v > 0.5 P_{Y_v}>0.5 PYv>0.5)
- 节点3属于class 0( P Y v < 0.5 P_{Y_v}<0.5 PYv<0.5)
这个方法没有用到节点的feature,下面介绍一个使用了feature的方法: I t e r a t i v e c l a s s i f i c a t i o n Iterative\ classification Iterative classification
四、Iterative classification
Relational classifier没有用节点属性。
Iterative classification的主要思想是:
根据节点
v
v
v的属性
f
v
f_v
fv以及邻居集
N
v
N_v
Nv的标签
z
v
z_v
zv对节点
v
v
v进行分类。
问题描述
- 输入:图
G
G
G
- 每个节点 v v v都有特征向量 f v f_v fv
- 部分节点 v v v有标签 Y v Y_v Yv
- 任务:
预测未标记节点的标记 - 方法:训练两个分类器
- ϕ 1 ( f v ) = \phi_1(f_v)= ϕ1(fv)=根据节点特征向量 f v f_v fv预测节点标签。称为base classifier。
- ϕ 2 ( f v , z v ) = \phi_2(f_v,z_v)= ϕ2(fv,zv)=根据节点特征向量 f v f_v fv和 v v v的邻居标签的汇总 z v z_v zv来预测标签。称为relational classifier。
如何计算
z
v
z_v
zv?
我们通过节点
v
v
v的邻居节点的标签来定义
z
v
z_v
zv,即
z
v
z_v
zv=捕获节点
v
v
v周围标签的向量;
z
v
z_v
zv可以定义为:
- N v N_v Nv中每个标签的数量的直方图(或分数)
- N v N_v Nv中最常见的标签
- N v N_v Nv中不同标签的数量
Iterative classification整体框架:
-
阶段一:仅根据节点属性进行分类
- 在标记的训练集中,训练两个分类器:
- Base classifier: ϕ 1 ( f v ) \phi_1(f_v) ϕ1(fv)根据 f v f_v fv来预测 Y v Y_v Yv
- Relational classifier: ϕ 2 ( f v , z v ) \phi_2(f_v,z_v) ϕ2(fv,zv)根据 f v f_v fv和 v v v的邻居标签的汇总 z v z_v zv来预测Y
- 在标记的训练集中,训练两个分类器:
-
阶段二:迭代直到收敛
- 在测试集上,根据分类器 ϕ 1 ( f v ) \phi_1(f_v) ϕ1(fv)设置标签 Y v Y_v Yv,计算 z v z_v zv,用 ϕ 2 ( f v , z v ) \phi_2(f_v,z_v) ϕ2(fv,zv)预测标签
- 对每个节点
v
v
v重复此步骤:
- 基于 Y u , u ∈ N v Y_{u,u∈N_v} Yu,u∈Nv更新 z v z_v zv
- 基于 新的 z v 新的z_v 新的zv使用 ϕ 2 ( f v , z v ) \phi_2(f_v,z_v) ϕ2(fv,zv)更新 Y v Y_v Yv
- 迭代直到类标签稳定或达到最大迭代次数
- 注意:不保证收敛
实例:网页分类
-
输入:Graph of web pages
-
顶点:网页
-
边:超链接
-
Node feature:网页描述
- 为了简单描述,我们只考虑两个二进制特征
-
任务:预测网页的主题
-
首先,训练分类器 ϕ 1 ( f v ) \phi_1(f_v) ϕ1(fv)(如线性分类器)根据节点属性对页面进行分类。
当然,仅基于 f v f_v fv预测是不够准确的,所有会出现错误的预测值,如上图的灰色节点。 -
第二步:每个节点维护邻域标签向量 z v z_v zv:
这里 z v z_v zv:采用四维向量,四个元素分别为指向该节点的节点中标签为0和1的数目、该节点指向的节点中标签为0和1的数目。
4维向量分为两个二维的向量 I I I和 O O O- I I I:指向该节点的节点中标签为0和1的数目
-
O
O
O:该节点指向的节点中标签为0和1的数目
-
第三步:在没有标记的数据集上,使用分类器 ϕ 1 ( f v ) \phi_1(f_v) ϕ1(fv)去设置 Y v Y_v Yv
-
第四步:迭代以下两个步骤,直到收敛或者达到最大迭代次数
- 更新所有节点的 z v z_v zv
- 使用
ϕ
2
(
f
v
,
z
v
)
\phi_2(f_v,z_v)
ϕ2(fv,zv)更新
Y
v
Y_v
Yv
五、Loopy Belief Propagation
Belief Propagation是一个用于回答图中的概率问题的动态方法。(如回答节点v属于class 1的概率)
迭代的过程就是邻居节点之间相互“talk”、相互传递信息(passing messages)的过程。
例子1:
以课堂为例子,学生们视为节点,位置相邻的学生可以互相传递消息,告诉对方我认为拟可能是class 1的概率。某个学生获得邻居的信息后,会汇总得出结论,再把消息传递给他的邻居。(就像传字条)
例子2:计算图中有几个节点
条件:每个节点只能和它的邻居pass message
- path graph(路径图):
- 算法流程:
- 定义节点的顺序:1-6
- 边的方向(消息传递的方向)取决于节点的顺序
- for node i from 1 to 6:
- 计算要从i传递到i+1的message
- 将消息从节点i传递到i+1节点
- 算法流程:
- Tree(树状图):
将path graph泛化到树结构的图上- 算法流程:
- 节点顺序:从叶子节点到根节点传递信息
- 子节点向父节点传递信息,父节点汇总子节点信息并更新信息,向其父节点传递信息。
- 如下图,4节点汇总子节点7、6的信息,并在本地计算更新信息,将更新的信息继续向上传递给父节点3
直到消息传到根节点,消息传递结束
- 算法流程:
Message Passing可总结未4个步骤:
- 收集
- 计算
- 更新
- 创建new message并传递
符号标识:
- Label-label potential matrix
ψ
\psi
ψ:节点与它邻居之间的依赖性。
如 ψ ( Y i , Y j ) \psi(Y_i,Y_j) ψ(Yi,Yj)表示,在给定 j j j的邻居 i i i是class Y i Y_i Yi的情况下,节点 j j j属于class Y j Y_j Yj的概率 - Prior belief ϕ \phi ϕ: ϕ ( Y i ) \phi(Y_i) ϕ(Yi)表示节点i属于 Y i Y_i Yi的概率
- m i → j ( Y j ) m_{i→j}(Y_j) mi→j(Yj):表示节点 i i i的关于评估节点 j j j属于 Y i Y_i Yi的消息
- L L L:标签集和
L o o p y B P A l g o r i t h m Loopy\ \ BP\ \ Algorithm Loopy BP Algorithm
以下图为例:
流程:
- 初始化所有节点的message为1
- 对所有节点进行重复计算:
- 计算需要传递的信息:
k∈Ni\j:除了j以外i的邻居节点
- 计算需要传递的信息:
- 个人对公式的理解:
- 粉色部分:
汇总所有的类别信息,即i在不太类别情况下传递的message是不一样的,需要进行汇总。
如,i节点是class 0的情况下,会告诉j你和我有点像,i节点是class 1的情况下,会告诉j你和我一点都不像,汇总起来就是j是class 0的概率很大。- 绿色部分 × \times ×红色部分:
i节点是calss Y i Y_i Yi的情况下,j节点是 Y j Y_j Yj的概率。这里 Y i Y_i Yi不同,则结果也会不同,就是粉色部分说的message不同的意思。- 蓝色部分:
i的邻居k告诉i:i节点是类别 Y i Y_i Yi这个问题,我向你提供这个信息- 公式可以从右向左看:
- 首先是:i的邻居节点向i提供其类别是 Y i Y_i Yi的证据(证据指邻居节点有多大概率认为是Yi)【蓝色部分】
- 拿到证据后,再结合自身的情况,判断自己可能是 Y i Y_i Yi的概率【红色部分】
- 现在i对自己是 Y i Y_i Yi有了一定的判断,通过依赖矩阵 ψ \psi ψ来提供j节点你可能和我一样是 Y i Y_i Yi的证据。【绿色部分】
- 枚举 Y i ∈ L Y_i∈L Yi∈L,将证据汇总,就是i要传递给j的message【粉色部分】
- 收敛后,计算
b
i
(
Y
i
)
b_i(Y_i)
bi(Yi),即节点i输出Yi的置信度
上面的例子都是无环图,Loopy BP Algorithm也能运用于有环图中,这也是loopy含义。
- 现在我们开始考虑有环图
- 在有环图中,我们不规定节点顺序。而是从随机节点开始,执行Loopy BP Algorithm,沿着边更新邻居节点。
在有环图中:
-
从不同子图中传递的信息不再相互独立
- 如下图:u获得的传递信息可能来自于i或者k,而i和k的信息都是从j处传递过来的。即信息再传递到u时,j已经和“talk”两次了,传递的信息并不似相互独立的。
- 如下图:u获得的传递信息可能来自于i或者k,而i和k的信息都是从j处传递过来的。即信息再传递到u时,j已经和“talk”两次了,传递的信息并不似相互独立的。
-
信息会在圈子里加强
-
就类似PageRank的spider trap,message不断地在圈子里循环,不断地被加强。
-
实例:
-
上述现象会导致算法不能够收敛,但是在实际应用中,由于现实世界的真实复杂图会更像树,就算有环也会有弱连接,所以还是能用Loopy BP Algorithm。
Belief Propagation的优点:
- 易于编程和并行运算
- 可泛化到任何形式的图模型上
挑战:
- 不一定能够收敛,特别是含有环的时候
- ψ ( Y i , Y j ) \psi(Y_i,Y_j) ψ(Yi,Yj)矩阵参数需要去训练和评估