CNN到GCN
CNN的优势
- CNN是用一个kernel在image(图)的feature map上进行convolution 从layer i获得layeri+1,实现特征提取 kernel多数情况下随机初始化,并通过反向传播优化
CNN的不足
- 然而对于Graph图中每个点的邻居数量是不同的所以无法定义kernel,使用CNN 。因此提出了GCN
- spectral domain GCN的目标也是通过convolution 从layeri获得layeri+1。
图表示学习
起因
直接在图这种非结构的,数量不定(可能数目非常多),属性复杂的 图 上进行机器学习/深度学习是很困难的,而如果能处理为向量将非常的方便
矩阵分解
因为从某种程度上图中的各节点关系可以视为稀疏的矩阵,那么基于矩阵分解的方法就可以得到低维的向量。
随机游走
- 原理
是一个随机过程,可以看作一个马尔可夫模型,指给定一个图和一个出发点,随机地选择一个邻居结点,移动到邻居结点上,然后把当前结点作为出发点,重复以上过程, - 过程
1、根据随机选出的结点可以构成一个序列,作为在图上的Random Walk过程,这个序列可以作为word2vec(用周围词预测中间词CBOW)的输入(用neighbor update node)
2、游走后得出一个概率分布,刻画了图中每一个顶点被访问到的概率。用这个概率分布作为下一次游走的输入并反复迭代这一过程。当满足一定前提条件时,这个概率分布会趋于收敛。收敛后,即可以得到一个平稳的每一个顶点被访问到的概率分布。
GNN
用一个点的neighbor feature update这个点 (实现aggregation 聚合)通过神经网络来聚合每个节点及其周围节点的信息基对节点进行embedding。
DeepWalk和Node2vec方法的原理呢就是,先在图上通过设定初始节点,和路径长度进行随机游走生成序列,获得节点序列(两种方法随机游走的策略不同)。再将节点序列看作一个句子使用Word2vec 由于目标是给定节点预测关联节点,所以使用Skip-gram的方法学习节点的表示。
LINE方法呢我们使用的是二阶相似度算法,原理 具有相同邻居的节点之间更有可能相似。主要基于概率的原理。将根据节点表示计算的出两个节点相连的概率,与实际两个节点相连的概率作比较。并设计损失函数,使用梯度下降法进行更新
- 1、Deepwalk
通过随机游走对图进行采样生成序列(32-64个序列),这样对于每个节点就有一个window为x(20)的context 。接下来可以使用w2v生成向量,预测节点的邻居节点。使用skipgram因为其不会过分关注顺序信息更关注局部
representation-size 100/200/300
Random walk:
number-walks 80
walk-length 10
Skipgram:
window-size 5 - 2、LINE
a)适合任意类型的网络,有向图/无向图/带权图
b)目标函数同时考虑了局部特征和全局特征。一阶/二阶相似度
c)提出一种边采样的算法,解决 SGD 效率问题。
P2需要在所有节点里面做归一化(分母求和),所以使用了负采样
让采样到某条边的概率正比于边权重
Negative sampling K=5,
representation-size 100/200/300
window-size = 10, - 3、Node2vec
提出了一种有偏的随机游走:
结合深度优先游走和广度优先游走:设置 p和 q规定权重,控制 DFS 和 BFS 的程度
BFS 倾向于在初始节点的周围游走,可以反映出一个节点的邻居的微观特性,捕获结构等效性
DFS一般会跑的离初始节点越来越远,可以反映一个节点邻居的宏观特性,基于同质性推断社区等连接模式
P:控制重复访问之前顶点的概率
如果 p > max ( q , 1 ) ,那么采样会尽量不往回走,对应上图的情况,就是下一个节点 不太可能是上一个访问的节点t。
如果 p < max ( q , 1 ) ,那么采样会更倾向于返回上一个节点,这样就会一直在起始点周围某些节点来回转来转去。
Q:控制未访问的节点是向外还是向内 的该率
如果 q > 1 ,那么游走会倾向于在起始点周围的节点之间跑,更容易反映出一个节点的 BFS 特性。
如果 q < 1 ,那么游走会倾向于往远处跑,更容易反映出 DFS 特性。
参数:图G、表示向量维度d=100/200/300、每个节点生成的游走个数r,游走长度l,上下文的窗口长度k,以及p、q.
walk_length = 10
num_walks = 80
p = 0.25
q = 4
GCN
是一个多层的图卷积神经网络,每一个卷积层处理一阶邻域信息,通过叠加若干卷积层实现多阶邻域的信息传递。
输入:n个节点的特征组成一个N×D维的矩阵X,然后n节点之间的关系形成、N×N维的矩阵A,也称为邻接矩阵(adjacency
matrix)。X和A便是我们模型的输入
通过卷积层提取图的特征更新X(2-3层)
- 反向传播:最后针对节点的标签或节点之间的关系设计损失函数 (即使不进行反向传播就可以媲美DEEPWALK和LINE)
CNN到GCN
- CNN的优势
CNN是用一个kernel在image(图)的feature map上进行convolution 从layer i获得layeri+1,实现特征提取 kernel多数情况下随机初始化,并通过反向传播优化 - 不足
然而对于Graph图中每个点的邻居数量是不同的所以无法定义kernel,使用CNN 。因此提出了GCN
spectral domain GCN的目标也是通过convolution 从layeri获得layeri+1。
GAT
引入自注意力(self-attention)机制,每个节点的隐藏状态通过注意其邻居节点来计算。可以为每个邻居分配不同的注意力得分,识别出更重要的邻居。
k层最后一层