目录
图网络基础知识
图网络的应用场景有很多,目前在工业界的主要应用是在推荐和风控领域,其他包括社交网络、交通网络、化学分子、3D点云等也都有一些应用。
关于图这种数据结构的基础知识:
一张图又节点和边组成,边可以是有方向的,也可是无方向的,因此图可以分为有向图和无向图。
图的基本属性:度(degree),连通分量,图直径,度中心性,特征向量中心性,节点连接性(betweenness),节点中心性(closeness),pagerank,HITS
邻接矩阵 A
图网络的计算是直接基于图进行的,整个计算是沿着图结构进行的,能够有效保留和利用图上的结构信息。图网络的主要优点有:利于端到端的学习、擅长推理、可解释性强。
定义一张图的方法:
import numpy as np
import pandas as pd
import networkx as nx # 复杂网络建模的一个工具包
edges = pd.DataFrame()
edges['sources'] = [1,1,1,2,2,3,3,4,4,5,5,5] # 起始节点,(每条边)
edges['targets'] = [2,4,5,3,1,2,5,1,5,1,3,4] # 终止节点,(每条边的终点)
edges['weights'] = [1,1,1,1,1,1,1,1,1,1,1,1] # 每条边的权重
# 定义一张图
G = nx.from_pandas_edgelist(edges, source='sources', target='targets', edge_attr='weights')
Graph Embedding
前面的代码用于定义一张图结构,在实际场景中,直接这样使用会比较低效,因此会像NLP中将每个单词由 one-hot 编码转换成词向量一样,我们希望获取图中每个节点的表征向量,这种方法成为graph embedding,即基于图结构的数据挖掘。
graph embedding 的目的是获取图的每个节点的表征,理解为自然语言处理中每个词向量的表征。经典的 graph embedding 方法有以下几种。
DeepWalk
论文:DeepWalk: Online Learning of Social Representations KDD 2014 (星标)
LINE
论文:Line: Large-scale information network embedding WWW 2015 (星标)
SDNE
论文:Structural Deep Network Embedding KDD 2016
Node2vec
论文: node2vec: Scalable Feature Learning for Networks KDD 2016 (星标)
Struc2vec
论文:struc2vec: Learning Node Representations from Structural Identity KDD 2017
github 链接:https://github.com/shenweichen/GraphEmbedding 这个链接里面有以上5种方法的代码整理。
基础图网络模型
基础图网络模型主要有三个,分别是GCN、GAT、GraphSAGE。
目前,基础图网络模型主要分为基于频谱域模型和基于时空域的图网络模型。其中图卷积网络属于频谱域图网络,图注意力网络GAT和GraphSAGE属于时空域图网络模型。
GCN
论文:SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS ICLR 2017
图卷积网络GCN 是频谱域的方法,过程是不断聚合邻居节点和自己本身。图网络用在分类任务中,给每个节点进行分类,GCN 的整个过程是为了学习每个节点的 embedding 表示。
GCN(频谱域图网络模型)涉及到的数学基础知识较多一些,理解起来相对麻烦一些。主要的思想是需要通过图谱的邻接矩阵A和度矩阵D获得图谱的拉普拉斯矩阵L,然后对图谱的拉普拉斯矩阵进行特征值分解,并得到特征值对应的特征向量。此外还涉及到傅里叶变换、图信号的频谱分解、频率、基波等与特征值、特征向量之间的关系等等。图卷积网络涉及的数学知识更为繁多,也更具数学上的美感,由于笔者目前的水平有限,本文中暂时不对GCN进行更详细的介绍。(先挖一个坑,以后有机会来填)
GraphSAGE
论文:Inductive Representation Learning on Large Graphs NIPS 2017
主要思想:采样(sample)+聚合(aggregate),时空域方法。
GAT
图注意力网络
论文:GRAPH ATTENTION NETWORKS. ICLR 2018
代码: https://github.com/Diego999/pyGAT
主要思想:聚合节点周围的邻居节点的信息,考虑不同邻居节点的权重。
在图机构上使用注意力机制,如下图所示:
GAT 中使用的是多头注意力机制,如下图所示:
关于GAT更详细的介绍,请关注笔者的另一篇博客:GAT论文阅读笔记-源码解读_xueliang-CSDN博客
其他图网络模型
除了上面三种最基础的图网络模型之外,还有一些其他的图网络模型,包括异构图、二部图、符号图、动态图、超图等。