项目链接:aistudio.baidu.com/aistudio/pr… 欢迎fork欢迎三连!文章篇幅有限,部分程序出图不一一展现,概况进入项目链接即可

图机器学习(GML)&图神经网络(GNN)原理和代码完成(PGL)[前置学习系列二]

上一个项目对图相关基础常识进行了具体叙述,下面进图GML

networkx :NetworkX 是一个 Python 包,用于创建、操作和研讨复杂网络的结构、动力学和功能 networkx.org/documentati…

import numpy as np
import random
import networkx as nx
from IPython.display import Image
import matplotlib.pyplot as plt
from sklearn.metrics import accuracy_score
from sklearn.metrics import roc_curve
from sklearn.metrics import roc_auc_score

1. 图机器学习GML

图学习的首要使命

图学习中包括三种首要的使命:

  • 链接猜测(Link prediction)
  • 节点符号猜测(Node labeling)
  • 图嵌入(Graph Embedding)

1.1链接猜测(Link prediction)

在链接猜测中,给定图G,咱们的方针是猜测新边。例如,当图未被完全观察时,或许当新客户参加渠道(例如,新的LinkedIn用户)时,猜测未来联系或缺失边是很有用的。

具体论述一下便是:

GNN链接猜测使命,即猜测图中两个节点之间的边是否存在。在Social Recommendation,Knowledge Graph Completion等运用中都需求进行链接猜测。模型完成上是将链接猜测使命当作一个二分类使命:

  1. 将图中存在的边作为正样本;
  2. 负采样一些图中不存在的边作为负样本;
  3. 将正样例和负样例兼并区分为练习集和测验集;
  4. 可以选用二分类模型的评价方针来评价模型的作用,

例如:AUC值在一些场景下例如大规模引荐体系或信息检索,模型需求评价top-k猜测成果的精确性,因而关于链接猜测使命还需求一些其他的评价方针来衡量模型最终作用:

  1. MR(MeanRank)
  2. MRR(Mean Reciprocal Rank)
  3. Hit@n

MR, MRR, Hit@n方针意义:假定整个图谱中共n个实体,评价前先进行如下操作:

(1)将一个正确的三元组(h,r,t)中的头实体h或许尾实体t,依次替换成整个图谱中的其他一切实体,这样会产生n个三元组;

(2)对(1)中产生的n个三元组分别核算其能量值,例如在TransE中核算h+r-t的值,这样n个三元组分别对应自己的能量值;

(3)对上述n个三元组依照能量值进行升序排序,记载每个三元组排序后的序号;

(4)对一切正确的三元组都进行上述三步操作MR方针:将整个图谱中每个正确三元组的能量值排序后的序号取均匀得到的值;

  • MRR方针:将整个图谱每个正确三元组的能量排序后的序号倒数取均匀得到的值;
  • Hit@n方针:整个图谱正确三元组的能量排序后序号小于n的三元组所占的比例。因而关于链接猜测使命来说,MR方针越小,模型作用越好;
  • MRR和Hit@n方针越大,模型作用越好。接下来本文将在Cora引文数据集上,猜测两篇论文之间是否存在引证联系或被引证联系

新LinkedIn用户的链接猜测只是给出它或许认识的人的主张。

在链路猜测中,咱们只是尝试在节点对之间树立相似性衡量,并链接最相似的节点。现在的问题是辨认和核算正确的相似性分数!

为了说明图中不同链路的相似性差异,让咱们经过下面这个图来解释:

图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

N(i)N(i)是节点ii的一组街坊。在上图中,节点iijj的街坊可以标明为:

图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

ii的街坊:

图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

1.1.1 相似度分数

咱们可以依据它们的街坊为这两个节点树立几个相似度分数。

  • 公共街坊:S(i,j)=∣N(i)∩N(j)∣S(i,j) = \mid N(i) \cap N(j) \mid,即公共街坊的数量。在此示例中,分数将为2,由于它们仅同享2个公共街坊。

图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

  • Jaccard系数:S(i,j)=∣N(i)∩N(j)∣∣N(i)∪N(j)∣S(i,j) = \frac { \mid N(i) \cap N(j) \mid } { \mid N(i) \cup N(j) \mid },标准化的一起街坊版别。

交集是一起的街坊,并集是:

图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

因而,Jaccard系数由粉赤色与黄色的比率核算出:

图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

值是16\frac {1} {6}

  • Adamic-Adar指数:S(i,j)=∑k∈N(i)∩N(j)1log⁡∣N(k)∣S(i,j) = \sum_{k \in N(i)\cap N(j) } \frac {1} {\log \mid N(k) \mid}。 关于节点i和j的每个公共街坊(common neighbor),咱们将1除以该节点的街坊总数。这个概念是,当猜测两个节点之间的衔接时,与少量节点之间同享的元素相比,具有非常大的邻域的公共元素不太重要。
  • 优先依附(Preferential attachment): S(i,j)=∣N(i)∣∗∣N(j)∣S(i,j) = \mid N(i) \mid * \mid N(j) \mid
  • 当社区信息可用时,咱们也可以在社区信息中运用它们。

1.1.2 功能方针(Performance metrics)

咱们怎么进行链接猜测的评价?咱们有必要躲藏节点对的子集,并依据上面界说的规矩猜测它们的链接。这相当于监督学习中的train/test的区分。 然后,咱们评价密集图的正确猜测的比例,或许运用稀少图的标准曲线下的面积(AUC)。

参阅链接:模型评价方针AUC和ROC:cloud.tencent.com/developer/a…

1.1.3 代码实践

这里继续用空手道沙龙图来举例:

运用在前两篇文中提及到的Karate图,并运用python来进行完成

n=34
m = 78
G_karate = nx.karate_club_graph()
pos = nx.spring_layout(G_karate)
nx.draw(G_karate, cmap = plt.get_cmap('rainbow'), with_labels=True, pos=pos)
# 咱们首要把有关图的信息打印出来:
n = G_karate.number_of_nodes()
m = G_karate.number_of_edges()
print("Number of nodes : %d" % n)
print("Number of edges : %d" % m)
print("Number of connected components : %d" % nx.number_connected_components(G_karate))
plt.figure(figsize=(12,8))
nx.draw(G_karate, pos=pos)
plt.gca().collections[0].set_edgecolor("#000000")
# 现在,让删除一些衔接,例如25%的边:
# Take a random sample of edges
edge_subset = random.sample(G_karate.edges(), int(0.25 * G_karate.number_of_edges()))
# remove some edges
G_karate_train = G_karate.copy()
G_karate_train.remove_edges_from(edge_subset)
# 绘制部分观察到的图,可以比照上图发现,去掉了一些边
plt.figure(figsize=(12,8))
nx.draw(G_karate_train, pos=pos)
# 可以打印咱们删除的边数和剩下边数:
edge_subset_size = len(list(edge_subset))
print("Deleted : ", str(edge_subset_size))
print("Remaining : ", str((m - edge_subset_size)))
# Jaccard Coefficient
# 可以先运用Jaccard系数进行猜测:
pred_jaccard = list(nx.jaccard_coefficient(G_karate_train))
score_jaccard, label_jaccard = zip(*[(s, (u,v) in edge_subset) for (u,v,s) in pred_jaccard])
# 打印前10组成果
print(pred_jaccard[0:10])
# 猜测成果如下,其间榜首个是节点,第二个是节点,最终一个是Jaccard分数(用来标明两个节点之间边猜测的概率)
# Compute the ROC AUC Score
# 其间,FPR是False Positive Rate, TPR是True Positive Rate
fpr_jaccard, tpr_jaccard, _ = roc_curve(label_jaccard, score_jaccard)
auc_jaccard = roc_auc_score(label_jaccard, score_jaccard)
print(auc_jaccard)
# Adamic-Adar
# 现在核算Adamic-Adar指数和对应的ROC-AUC分数
# Prediction using Adamic Adar 
pred_adamic = list(nx.adamic_adar_index(G_karate_train))
score_adamic, label_adamic = zip(*[(s, (u,v) in edge_subset) for (u,v,s) in pred_adamic])
print(pred_adamic[0:10])
# Compute the ROC AUC Score
fpr_adamic, tpr_adamic, _ = roc_curve(label_adamic, score_adamic)
auc_adamic = roc_auc_score(label_adamic, score_adamic)
print(auc_adamic)
# Compute the Preferential Attachment
# 相同,可以核算Preferential Attachment得分和对应的ROC-AUC分数
pred_pref = list(nx.preferential_attachment(G_karate_train))
score_pref, label_pref = zip(*[(s, (u,v) in edge_subset) for (u,v,s) in pred_pref])
print(pred_pref[0:10])
fpr_pref, tpr_pref, _ = roc_curve(label_pref, score_pref)
auc_pref = roc_auc_score(label_pref, score_pref)
print(auc_pref)
plt.figure(figsize=(12, 8))
plt.plot(fpr_jaccard, tpr_jaccard, label='Jaccard Coefficient - AUC %.2f' % auc_jaccard, linewidth=4)
plt.plot(fpr_adamic, tpr_adamic, label='Adamic-Adar - AUC %.2f' % auc_adamic, linewidth=4)
plt.plot(fpr_pref, tpr_pref, label='Preferential Attachment - AUC %.2f' % auc_pref, linewidth=4)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.xlabel('False positive rate')
plt.ylabel('True positive rate')
plt.title("ROC AUC Curve")
plt.legend(loc='lower right')
plt.show() 

图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

1.2 节点符号猜测(Node labeling)

给定一个未符号某些节点的图,咱们期望对这些节点的标签进行猜测。这在某种意义上是一种半监督的学习问题。

处理这些问题的一种常见办法是假定图上有必定的滑润度。滑润度假定指出经过数据上的高密度区域的途径衔接的点或许具有相似的标签。这是标签传达算法背面的首要假定。

标签传达算法(Label Propagation Algorithm,LPA)是一种快速算法,仅运用网络结构作为指导来发现图中的社区,而无需任何预界说的方针函数或关于社区的先验信息。

图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

单个标签在密集衔接的节点组中迅速占据主导地位,可是在穿过稀少衔接区域时会遇到问题。

半监督标签传达算法是怎么工作?

首要,咱们有一些数据:x1,…,xl,xl+1,…,xn∈Rpx_1, …, x_l, x_{l+1}, …, x_n \in R^p,,以及前ll个点的标签:y1,…,yl∈1…Cy_1, …, y_l \in 1…C.

咱们界说初始标签矩阵Y∈RnCY \in R^{n \times C},假如xix_i具有标签yi=jy_i=jYij=1Y_{ij} = 1,否则为0。

该算法将生成猜测矩阵F∈RnCF \in R^{n \times C},咱们将在下面胪陈。然后,咱们经过查找最或许的标签来猜测节点的标签:

Yi=argmaxjFi,j\hat{Y_i} = argmax_j F_{i,j}

猜测矩阵FF是什么?

猜测矩阵是矩阵F⋆F^{\star},其最小化滑润度和精确度。因而,咱们的成果在滑润性和精确性之间进行权衡。

问题的描绘非常复杂,所以我将不会具体介绍。可是,处理方案是:

F⋆=((1−)I+Lsym)−1YF^{\star} = ( (1-\alpha)I + L_{sym})^{-1} Y

其间:

  • 参数=11+\alpha = \frac {1} {1+\mu}
  • YY是给定的标签
  • LsymL_{sym}是图的归一化拉普拉斯矩阵(Laplacian matrix)

假如您想进一步了解这个主题,请重视图函数的滑润度和流形正则化的概念。斯坦福有一套很好的标签图可以下载:snap.stanford.edu/data/

Networkx直接完成标签传达:networkx.github.io/documentati…

接下来咱们用python来完成节点标签的猜测。 为了给咱们运用到的标签添加更多的特征,咱们需求运用来自Facebook的真实数据。你可以再这里下载,然后放到facebook途径下。

图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

Facebook 数据现已过将每个用户的 Facebook 内部 id 替换为新值来匿名化。此外,虽然现已供给了来自该数据集的特征向量,但对这些特征的解释却很模糊。例如,假如原始数据集或许包括特征“political=Democratic Party”,则新数据将仅包括“political=anonymized feature 1”。因而,运用匿名数据可以确认两个用户是否具有相同的政治派别,但不能确认他们各自的政治派别代表什么。

我现已把数据集放在目录里了,就不需求下载了

1.2.1 代码完成标签扩散

n = G_fb.number_of_nodes()
m = G_fb.number_of_edges()
print("Number of nodes: %d" % n)
print("Number of edges: %d" % m)
print("Number of connected components: %d" % nx.number_connected_components(G_fb))
# 咱们把图数据显示出来:
mapping=dict(zip(G_fb.nodes(), range(n)))
nx.relabel_nodes(G_fb, mapping, copy=False)
pos = nx.spring_layout(G_fb)
plt.figure(figsize=(12,8))
nx.draw(G_fb, node_size=200, pos=pos)
plt.gca().collections[0].set_edgecolor("#000000")
with open('facebook/3980.featnames') as f:
    for i, l in enumerate(f):
        pass
n_feat = i+1
features = np.zeros((n, n_feat))
f = open('facebook/3980.feat', 'r')
for line in f:
    if line.split()[0] in mapping:
        node_id = mapping[line.split()[0]]
        features[node_id, :] = list(map(int, line.split()[1:]))
features = 2*features-1
feat_id = 6  #特征挑选id,自行设置
labels = features[:, feat_id]
plt.figure(figsize=(12,8))
nx.draw(G_fb, cmap = plt.get_cmap('bwr'), nodelist=range(n), node_color = labels, node_size=200, pos=pos)
plt.gca().collections[0].set_edgecolor("#000000")
plt.show()
# 这个所挑选的特征,在图中相对滑润,因而具有较好的学习传达功能。
# 为了论述节点标签猜测是怎么进行的,咱们首要要删掉一些节点的标签,作为要猜测的方针。这里咱们只保留了30%的节点标签:
random.seed(5)
proportion_nodes = 0.3
labeled_nodes = random.sample(G_fb.nodes(), int(proportion_nodes * G_fb.number_of_nodes()))
known_labels = np.zeros(n)
known_labels[labeled_nodes] = labels[labeled_nodes]
plt.figure(figsize=(12,8))
nx.draw(G_fb, cmap = plt.get_cmap('bwr'), nodelist=range(n), node_color = known_labels, node_size=200, pos=pos)
plt.gca().collections[0].set_edgecolor("#000000") # set node border color to black
plt.show()

图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

1.3 图嵌入(Graph Embedding)

嵌入的学习办法与 word2vec 的 skip-gram 嵌入的学习办法相同,运用的是 skip-gram 模型。问题是,咱们怎么为 Node2Vec 生成输入语料库?数据要复杂得多,即(非)定向、(非)加权、(a)循环……

为了生成语料库,咱们运用随机游走采样战略:

图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

在处理NLP或核算机视觉问题时,咱们习惯在深度神经网络中对图画或文本进行嵌入(embedding)。到现在为止,咱们所看到的图的一个局限性是没有向量特征。可是,咱们可以学习图的嵌入!图有不同几个级别的嵌入:

  • 对图的组件进行嵌入(节点,边,特征…)(Node2Vec) node2vec是一个用于图标明学习的算法结构。给定任何图,它可以学习节点的接连特征标明,然后可以用于各种下游机器学习使命。

图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

  • 对图的子图或整个图进行嵌入(Graph2Vec) Learning Distributed Representations of Graphs

学习图的分布式标明

最近关于图结构化数据的标明学习的工作首要会集在学习图子结构(例如节点和子图)的分布式标明。可是,许多图剖析使命(例如图分类和聚类)需求将整个图标明为固定长度的特征向量。虽然上述办法天然不具备学习这种标明的能力,但图内核依然是获得它们的最有用办法。可是,这些图内核运用手艺制造的特征(例如,最短途径、graphlet 等),因而受到泛化性差等问题的阻碍。为了处理这个限制,在这项工作中,咱们提出了一个名为 graph2vec 的神经嵌入结构来学习任意巨细图的数据驱动的分布式标明。图2vec’ s 嵌入是以无监督的办法学习的,而且与使命无关。因而,它们可以用于任何下游使命,例如图分类、聚类甚至播种监督标明学习办法。咱们在几个基准和大型现实国际数据集上的实验标明,graph2vec 在分类和聚类精度方面比子结构标明学习办法有显着进步,而且可以与最先进的图内核竞争。

1.3.1. 节点嵌入(Node Embedding)

咱们首要重视的是图组件的嵌入。有几种办法可以对节点或边进行嵌入。例如,DeepWalk【www.perozzi.net/projects/de… 】 运用短随机游走来学习图中边的标明。咱们将评论Node2Vec,这篇论文由2016年斯坦福大学的Aditya Grover和Jure Leskovec发表。

作者说:“node2vec是一个用于图标明学习的算法结构。给定任何图,它可以学习节点的接连特征标明,然后可以用于各种下游机器学习使命。“

该模型经过运用随机游走,优化邻域保持方针来学习节点的低维标明。

Node2Vec的代码可以在GitHub上找到: github.com/eliorc/node…

部分程序出图不一一展现,概况进入项目链接即可

2.图神经网络GNN

2.1GNN引言

图神经网络(Graph Neural Networks,GNN)总述链接:zhuanlan.zhihu.com/p/75307407?… 译文

arxiv.org/pdf/1901.00… 原始文章 最新版别V4版别

近年来,深度学习彻底改变了许多机器学习使命,从图画分类和视频处理到语音辨认和天然语言了解。这些使命中的数据通常在欧几里得空间中标明。可是,越来越多的运用程序将数据从非欧几里德域生成并标明为具有复杂联系和方针之间相互依靠联系的图。图数据的复杂性对现有的机器学习算法提出了重大应战。最近,呈现了许多关于扩展图数据深度学习办法的研讨。在本次查询中,咱们全面概述了数据发掘和机器学习范畴中的图神经网络 (GNN)。咱们提出了一种新的分类法,将最先进的图神经网络分为四类,即循环图神经网络、卷积图神经网络、图主动编码器和时空图神经网络。咱们进一步评论了图神经网络在各个范畴的运用,并总结了图神经网络的开源代码、基准数据集和模型评价。最终,咱们在这个快速开展的范畴提出了潜在的研讨方向

神经网络最近的成功推动了方式辨认和数据发掘的研讨。许多机器学习使命,如方针检测 [1]、[2]、机器翻译 [3]、[4] 和语音辨认 [5],从前严峻依靠手艺特征工程来提取信息特搜集,最近现已由各种端到端深度学习范例彻底改变,例如卷积神经网络 (CNN) [6]、递归神经网络 (RNN) [7] 和主动编码器 [8]。深度学习在许多范畴的成功部分归功于快速开展的核算资源(例如 GPU)、大练习数据的可用性以及深度学习从欧几里得数据(例如图画、文本、和视频)。以图画数据为例,咱们可以将图画标明为欧几里得空间中的规矩网格。卷积神经网络 (CNN) 可以运用图画数据的移位不变性、部分连通性和组合性 [9]。因而,CNN 可以提取与整个数据集同享的部分有意义的特征,用于各种图画剖析。

虽然深度学习有用地捕获了欧几里得数据的躲藏方式,但越来越多的运用程序将数据以图形的方式标明。例如,在电子商务中,根据图的学习体系可以运用用户和产品之间的交互来做出高度精确的引荐。在化学中,分子被建模为图形,而且需求确认它们的生物活性以进行药物发现。在引文网络中,论文经过引文相互链接,而且需求将它们分类到不同的组中。图数据的复杂性对现有的机器学习算法提出了重大应战。由于图或许是不规矩的,图或许具有可变巨细的无序节点,而且来自图中的节点或许具有不同数量的街坊,导致一些重要的操作(例如卷积)在图画域中很简略核算,可是难以运用于图域。此外,现有机器学习算法的一个中心假定是实例相互独立。这个假定不再适用于图数据,由于每个实例(节点)经过各种类型的链接(例如引证、友谊和交互)与其他实例相关联。

最近,人们对扩展图形数据的深度学习办法越来越感兴趣。受来自深度学习的 CNN、RNN 和主动编码器的推动,在过去几年中,重要操作的新泛化和界说迅速开展,以处理图数据的复杂性。例如,可以从 2D 卷积推行图卷积。如图 1 所示,可以将图画视为图形的特殊情况,其间像素由相邻像素衔接。与 2D 卷积相似,可以经过取节点邻域信息的加权均匀值来履行图卷积。

图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

二维卷积相似于图,图画中的每个像素都被视为一个节点,其间街坊由过滤器巨细确认。 2D 卷积取赤色节点及其街坊像素值的加权均匀值。 节点的街坊是有序的而且具有固定的巨细。

图卷积。 为了得到赤色节点的躲藏标明,图卷积运算的一个简略处理方案是取赤色节点及其街坊节点特征的均匀值。 与图画数据不同,节点的街坊是无序且巨细可变的。

开展:

图神经网络 (GNN) Sperduti 等人的简史。 (1997) [13] 首次将神经网络运用于有向无环图,这激发了对 GNN 的早期研讨。图神经网络的概念最初是在 Gori 等人中概述的。 (2005) [14] 并在 Scarselli 等人中进一步论述。 (2009) [15] 和 Gallicchio 等人。 (2010) [16]。这些早期研讨归于循环图神经网络(RecGNNs)的范畴。他们经过以迭代办法传达街坊信息来学习方针节点的标明,直到到达一个稳定的固定点。这个进程在核算上是昂贵的,而且最近现已越来越多地尽力战胜这些应战[17],[18]。 受 CNN 在核算机视觉范畴的成功的鼓舞,很多从头界说图数据卷积概念的办法被并行开发。这些办法归于卷积图神经网络 (ConvGNN) 的范畴。 ConvGNN 分为两个主流,根据光谱的办法和根据空间的办法。 Bruna 等人提出了榜首个关于根据光谱的 ConvGNN 的杰出研讨。 (2013)[19],它开发了一种根据谱图理论的图卷积。从那时起,根据谱的 ConvGNN [20]、[21]、[22]、[23] 的改进、扩展和近似值不断添加。根据空间的 ConvGNN 的研讨比根据光谱的 ConvGNN 早得多。 2009 年,Micheli 等人。 [24] 首要经过架构复合非递归层处理了图相互依靠问题,一起承继了 RecGNN 的音讯传递思想。可是,这项工作的重要性被忽视了。直到最近,呈现了许多根据空间的 ConvGNN(例如,[25]、[26]、[27])。代表性 RecGNNs 和 ConvGNNs 的时刻线如表 II 的榜首列所示。除了 RecGNNs 和 ConvGNNs,在过去几年中还开发了许多替代 GNN,包括图主动编码器 (GAE) 和时空图神经网络 (STGNN)。这些学习结构可以树立在 RecGNN、ConvGNN 或其他用于图建模的神经架构上。

总述总结如下:

  1. 新分类 咱们提出了一种新的图神经网络分类。图神经网络分为四组:循环图神经网络、卷积图神经网络、图主动编码器和时空图神经网络。

  2. 归纳回忆 咱们供给了最全面的图数据现代深度学习技能概览。关于每种类型的图神经网络,咱们都供给了代表性模型的具体描绘,进行了必要的比较,并总结了相应的算法。

  3. 丰厚的资源咱们收集了丰厚的图神经网络资源,包括最先进的模型、基准数据集、开源代码和实际运用。本查询可用作了解、运用和开发适用于各种现实生活运用的不同深度学习办法的实践攻略。

  4. 未来方向 咱们评论了图神经网络的理论方面,剖析了现有办法的局限性,并在模型深度、可扩展性权衡、异质性和动态性方面提出了四个或许的未来研讨方向。

2.2 神经网络类型

在本节中,咱们介绍了图神经网络 (GNN) 的分类,如表 II 所示。 咱们将图神经网络 (GNN) 分为循环图神经网络 (RecGNN)、卷积图神经网络 (ConvGNN)、图主动编码器 (GAE) 和时空图神经网络 (STGNN)。 图 2 给出了各种模型架构的示例。 下面,咱们对每个类别进行简要介绍。

图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

2.2.1循环图神经网络(RecGNNs,Recurrent graph neural networks )

循环图神经网络(RecGNNs)大多是图神经网络的前驱作品。 RecGNN 旨在学习具有循环神经架构的节点标明。 他们假定图中的一个节点不断地与其街坊交换信息/音讯,直到到达稳定的平衡。 RecGNN 在概念上很重要,并启发了后来对卷积图神经网络的研讨。 特别是,根据空间的卷积图神经网络承继了音讯传递的思想。

2.2.2 卷积图神经网络 (ConvGNNs,Convolutional graph neural networks)

卷积图神经网络 (ConvGNNs) 将卷积操作从网格数据推行到图数据。 首要思想是经过聚合它自己的特征 xv 和街坊的特征 xu 来生成节点 v 的标明,其间 u ∈ N(v)。 与 RecGNN 不同,ConvGNN 堆叠多个图卷积层以提取高档节点标明。 ConvGNN 在构建许多其他复杂的 GNN 模型中发挥着中心作用。 图 2a 显示了用于节点分类的 ConvGNN。 图 2b 展现了用于图分类的 ConvGNN。

2.2.3图主动编码器 (GAE,Graph autoencoders (GAEs))

是无监督学习结构,它将节点/图编码到潜在向量空间并从编码信息中重建图数据。 GAE 用于学习网络嵌入和图形生成分布。 关于网络嵌入,GAE 经过重构图结构信息(例如图邻接矩阵)来学习潜在节点标明。 关于图的生成,一些办法逐渐生成图的节点和边,而另一些办法一次全部输出图。 图 2c 展现了一个用于网络嵌入的 GAE。

2.2.4 时空图神经网络 (STGNN,Spatial-temporal graph neural networks)

旨在从时空图中学习躲藏方式,这在各种运用中变得越来越重要,例如交通速度猜测 [72]、驾驶员机动预期 [73] 和人类动作辨认 [ 75]。 STGNN 的关键思想是一起考虑空间依靠和时刻依靠。 许多当时的办法集成了图卷积来捕获空间依靠性,并运用 RNN 或 CNN 对时刻依靠性进行建模。 图 2d 说明了用于时空图猜测的 STGNN。

具体公式推到见论文!

2.3图神经网络的运用

GNN 在不同的使命和范畴中有许多运用。 虽然每个类别的 GNN 都可以直接处理一般使命,包括节点分类、图分类、网络嵌入、图生成和时空图猜测,但其他与图相关的一般使命,如节点聚类 [134]、链接猜测 [135 ],图切割[136]也可以经过GNN来处理。 咱们具体介绍了根据以下研讨范畴的一些运用。

核算机视觉(Computer vision)

核算机视觉 GNN 在核算机视觉中的运用包括场景图生成、点云分类和动作辨认。辨认方针之间的语义联系有助于了解视觉场景背面的意义。
场景图生成模型旨在将图画解析为由方针及其语义联系组成的语义图 [137][138][139]。另一个运用程序经过在给定场景图的情况下生成传神的图画来反转该进程 [140]。由于天然语言可以被解析为每个单词代表一个方针的语义图,因而它是一种很有出路的处理方案,可以在给定文本描绘的情况下合成图画。
分类和切割点云使 LiDAR 设备可以“看到”周围环境。点云是由 LiDAR 扫描记载的一组 3D 点。 [141][142][143] 将点云转换为 k-最近邻图或超点图,并运用 ConvGNN 探究拓扑结构。
辨认视频中包括的人类行为有助于从机器方面更好地了解视频内容。一些处理方案检测视频剪辑中人体关节的方位。由骨骼衔接起来的人体关节天然构成了一个图形。给定人类关节方位的时刻序列,[73][75] 运用 STGNN 来学习人类动作方式。
此外,GNN 在核算机视觉中的适用方向数量仍在添加。它包括人-物交互[144]、小样本图画分类[145][146][147]、语义切割[148][149]、视觉推理[150]和问答[151]

天然语言处理(Natural language processing )

天然语言处理 GNN 在天然语言处理中的一个常见运用是文本分类。 GNN 运用文档或单词的相互联系来揣度文档标签 [22][42][43]。
虽然天然语言数据表现出次序,但它们也或许包括内部图结构,例如句法依靠树。句法依靠树界说了语句中单词之间的句法联系。 Marcheggiani 等人。 [152] 提出了在 CNN/RNN 语句编码器之上运行的句法 GCN。 Syntactic GCN 根据语句的句法依靠树聚合躲藏的单词标明。巴斯廷斯等人。 [153] 将句法 GCN 运用于神经机器翻译使命。 Marcheggiani 等人。[154] 进一步选用与 Bastings 等人相同的模型。
[153]处理语句的语义依靠图。
图到序列学习学习在给定抽象词的语义图(称为抽象意义标明)的情况下生成具有相同意义的语句。宋等人。 [155] 提出了一种图 LSTM 来编码图级语义信息。贝克等人。 [156] 将 GGNN [17] 运用于图到序列学习和神经机器翻译。逆向使命是序列到图的学习。给定语句生成语义或常识图在常识发现中非常有用

交通 Traffic

 精确猜测交通网络中的交通速度、交通量或道路密度关于智能交通体系至关重要。 [48][72][74] 运用 STGNN 处理交通猜测问题。 他们将交通网络视为一个时空图,其间节点是安装在道路上的传感器,边缘由节点对之间的间隔丈量,每个节点将窗口内的均匀交通速度作为动态输入特征。 另一个工业级运用是出租车需求猜测。 鉴于前史出租车需求、方位信息、天气数据和事情特征,Yao 等人。 [159] 结合 LSTM、CNN 和由 LINE [160] 练习的网络嵌入,构成每个方位的联合标明,以猜测时刻间隔内某个方位所需的出租车数量。

引荐体系 Recommender systems

根据图的引荐体系将项目和用户作为节点。 经过运用项目与项目、用户与用户、用户与项目之间的联系以及内容信息,根据图的引荐体系可以产生高质量的引荐。 引荐体系的关键是对项目对用户的重要性进行评分。 成果,它可以被转换为链接猜测问题。 为了猜测用户和项目之间缺失的链接,Van 等人。 [161] 和英等人。 [162] 提出了一种运用 ConvGNN 作为编码器的 GAE。 蒙蒂等人。 [163] 将 RNN 与图卷积相结合,以学习生成已知评级的底层进程

化学 Chemistry

在化学范畴,研讨人员运用 GNN 来研讨分子/化合物的图形结构。 在分子/化合物图中,原子被视为节点,化学键被视为边缘。 节点分类、图分类和图生成是针对分子/化合物图的三个首要使命,以学习分子指纹 [85][86]、猜测分子特性 [27]、揣度蛋白质界面 [164] 和 合成化合物

其他

GNN 的运用不仅限于上述范畴和使命。 现已探究将 GNN 运用于各种问题,例如程序验证 [17]、程序推理 [166]、社会影响猜测 [167]、对抗性进犯预防 [168]、电子健康记载建模 [169][170] ]、大脑网络[171]、事情检测[172]和组合优化[173]

2.4未来方向

虽然 GNN 现已证明了它们在学习图数据方面的能力,但由于图的复杂性,应战依然存在。

模型深度 Model depth

深度学习的成功在于深度神经架构 [174]。 可是,李等人。 标明随着图卷积层数的添加,ConvGNN 的功能急剧下降 [53]。 随着图卷积将相邻节点的标明推得更近,理论上,在无限数量的图卷积层中,一切节点的标明将收敛到一个点 [53]。 这就提出了一个问题,即深入研讨是否依然是学习图数据的好战略。

可扩展性权衡 Scalability trade-off

GNN 的可扩展性是以破坏图完整性为价值的。 无论是运用采样还是聚类,模型都会丢掉部分图信息。 经过采样,节点或许会错失其有影响力的街坊。 经过聚类,图或许被剥夺了共同的结构方式。 怎么权衡算法的可扩展性和图的完整性或许是未来的研讨方向。

异质性Heterogenity

当时的大多数 GNN 都假定图是同质的。 现在的 GNN 很难直接运用于异构图,异构图或许包括不同类型的节点和边,或许不同方式的节点和边输入,例如图画和文本。 因而,应该开发新的办法来处理异构图。

动态Dynamicity

图本质上是动态的,节点或边或许呈现或消失,节点/边输入或许会随时刻改变。 需求新的图卷积来习惯图的动态性。 虽然图的动态性可以经过 STGNN 部分处理,但很少有人考虑在动态空间联系的情况下怎么履行图卷积。

总结

由于之前一直在研讨常识提取相关算法,后续为了构建小型范畴常识图谱,会用到常识交融、常识推理等技能,现在开始学习研讨图核算相关。

现在现已覆盖了图的介绍,图的首要类型,不同的图算法,在Python中运用Networkx来完成它们,以及用于节点符号,链接猜测和图嵌入的图学习技能,最终讲了GNN运用。

本项目参阅了:maelfabien大神、以及自尊心3 在博客 or github上的奉献

欢迎我们fork, 后续将开始图核算相关项目以及部分常识提取技能深化!

项目参阅链接:

榜首章节:

maelfabien.github.io/machinelear…

blog.csdn.net/xjxgyc/arti…

maelfabien.github.io/machinelear…

github.com/eliorc/node…

第二节:

zhuanlan.zhihu.com/p/75307407?… 译文

arxiv.org/pdf/1901.00…

更多参阅:

github.com/maelfabien/…

项目链接:aistudio.baidu.com/aistudio/pr… 欢迎fork欢迎三连!文章篇幅有限,部分程序出图不一一展现,概况进入项目链接即可