文章目录
前面几课时讲的主要是图的性质、一些基本结构和针对结构的算法。而从现在开始就要涉及到具体的 learning 任务了。这一讲要解决的主要问题是:给定一个网络以及网络里一部分节点的标签,我们如何为其它节点分类。(semi-supervised)
我们使用的模型叫 collective classification model,其中有三种近似推断的方法,它们都是迭代型算法。
- relational classification
- iterative classification
- belief propagation
exact inference
vs.approximate inference
例如在一个图里每个节点都是离散的随机变量,而所有节点的类别的联合分布为 p p p。那么我们要得到某个节点的类别的分布就是求 p p p 在该节点上的边沿分布。而边沿分布需要累加其它所有节点,这个计算量爆炸,因此需要近似推断。
近似推断其实就是缩小传播范围的过程,与其考虑所有节点,我们只关心目标节点的邻接点。这里涉及到信息传递,就是类似 GNN 里的 aggregation,后面会说到。
Node Classification
给节点分类,我们的第一想法是节点间通过边的连接存在着相关性,那我们直接通过相关性对节点进行分类。关联性主要有三种
- homophily:“物以类聚,人以群分”,有相同性质的节点间可能存在更密切的联系
- influence:“近朱者赤,近墨者黑”,一个个体有可能会受其它个体的影响而具有某种性质
- confounding:大环境可能会对个体性质和个体间的联系产生影响
那么将这种关联性的特点应用在节点分类里,相似的节点间一般会有直接的联系,互相连接的点很有可能属于同一类别,这就是 guilt-by-association (关联推断)。而节点类别的判断可以基于节点的特征以及邻接节点的类别和特征。
由于做的是近似推断,所以这里需要做出马尔可夫假设,即节点 i i i 的类别 Y i Y_i Yi 只取决于它的邻接节点 N i N_i Ni。因此有 P ( Y i ∣ i ) = P ( Y i ∣ N i ) P(Y_i|i)=P(Y_i|N_i) P(Yi∣i)=P(Yi∣Ni)
Collective classification 大体分为三步:
- local classifier:就像一般的分类任务一样,只依赖节点自己的特征信息而不牵扯任何网络信息
- relational classifier:考虑邻接点的标签和特征
- collective inference:迭代地将 relational classifier 应用在每个节点上,相当于拓展了节点的“感知野”
Probabilistic Relational Classifier
基本思路很简单,每个节点类别的概率是其邻接节点的加权平均。
首先将有标签的点的类别初始化为标签,没有标签的点初始化为随机。然后按随机顺序进行邻接节点类别加权,直到整个网络收敛或达到最大迭代次数。但这样做有两个问题,第一不保证收敛;其次这样的模型并没有用到节点的特征。
P ( Y i = c ) = 1 ∑ ( i , j ) ∈ E W i j ∑ ( i , j ) ∈ E W i j P ( Y j = c ) P(Y_i=c)=\frac1{\sum_{(i,j)\in E}W_{ij}}\sum_{(i,j)\in E}W_{ij}P(Y_j=c) P(Yi=c)=∑(i,j)∈EWij1(i,j)∈E∑Wij