芯片设计、场景分析问题推理、推荐系统、欺诈检测风控相关、道路交通动态流量预测、自动驾驶、无人机等、化学医疗等场景
点(vertex)、边(edge)、全局图(global),图神经网络(GNN,Graph Neural Network)主要作用还是跟传统神经网络的作用一样——特征提取,只是提取特征的方式和提取特征的目标不一样。图神经网络主要是为了提取整个图的全局特征而诞生的。
无论图神经网络多么复杂,利用图神经网络的目的就是整合特征
图神经网络最重要的两个点:1.自身权重矩阵 2. 邻接矩阵
核心思想:万物皆可转化为图
结论:GNN适合输入数据格式不固定的任务,哪怕100个输入数据格式都不一样,也可以放入GNN进行训练提取特征,输入输出任务可以自己设计。但前提是必须有图结构。
首先要获取到整张图的邻接矩阵,即得到整张图的结构
每个点的特征该如何更新呢?肯定得考虑他们邻居的
具体步骤如下:
聚合操作可以当作全连接层.
但是更新的方法有很多,可以自己设置
结合邻居信息和自身信息:
m
ˉ
i
=
G
(
{
W
j
⋅
x
j
:
j
∈
N
i
}
)
\bar{m}_i=G\left(\left\{\mathbf{W}_j \cdot x_j: j \in \mathcal{N}_i\right\}\right)
mˉi=G({Wj⋅xj:j∈Ni})
汇总:
h
i
=
σ
(
W
1
⋅
h
i
+
∑
j
∈
N
i
W
2
⋅
h
j
)
h_i=\sigma\left(W_1 \cdot h_i+\sum_{j \in \mathcal{N}_i} \mathbf{W}_2 \cdot h_j\right)
hi=σ⎝⎛W1⋅hi+j∈Ni∑W2⋅hj⎠⎞
GNN的本质就是更新各部分特征
其中输入是特征,输出也是特征,邻接矩阵也不会变的
每次每个点通过周围点迭代更新自身权重,随着迭代,图神经网络的感受野会越来越大,慢慢的每个点会拥有全局图的特征
图卷积神经网络与卷积神经网络就像老婆与老婆饼、java和javascrit的区别,原理几乎完全不一样,卷积神经网络提取局部特征,图卷积神经网络提取全局图的特征,图卷积神经网络并不应用到图像中
如何获取特征呢?
图卷积神经网络并不是一个完全有意义的有监督学习
这个也是GCN优势;不需要全部标签;用少量标签也能训练;计算损失时只用有标签的
许多点是未知的甚至不确定的,实际情况是并不是所有点都有标签,也可以看做是一个半监督的模型,在计算损失的时候只计算有标签的节点
其实就是邻接矩阵与特征矩阵进行乘法操作,表示聚合邻居信息
有些小问题:光想着别人,没考虑自己。只需要在邻接矩阵加上自己就可以啦:
A ~ = A + λ I N \tilde{A}=A+\lambda I_N A~=A+λIN
矩阵scale
目前公式变成了:
D
~
−
1
(
A
~
X
)
=
(
D
~
−
1
A
~
)
X
\tilde{D}^{-1}(\tilde{A} X)=\left(\tilde{D}^{-1} \tilde{A}\right) X
D~−1(A~X)=(D~−1A~)X
D的逆矩阵相当于scale方法了,但这一步就可以了吗?答案是还不够
左乘相当于对行做归一化,那么列咋办呢?同理,所以咱们现在的公式:
D
~
−
1
A
~
D
~
−
1
X
\tilde{D}^{-1} \tilde{A} \tilde{D}^{-1} X
D~−1A~D~−1X
但这样列和行都做了一次归一化,幅度过大,那在公式基础上进行微调:
D
~
−
1
/
2
A
~
D
~
−
1
/
2
X
\tilde{D}^{-1 / 2} \tilde{A} \tilde{D}^{-1 / 2} X
D~−1/2A~D~−1/2X
例如完成一个十分类任务的,F就为10表示输出层
其中:
A
^
=
D
~
−
1
/
2
A
~
D
~
−
1
/
2
\hat{A}=\tilde{D}^{-1 / 2} \tilde{A} \tilde{D}^{-1 / 2}
A^=D~−1/2A~D~−1/2
就是刚才我说的对左右都进行了归一化操作
理论上来说肯定越大越好;但是实际的图中可能不需要那么多;在社交网络中,只需6个人你可以认识全世界;所以一-般的GCN层数不会特别多
在多个图数据集中,都可以发现两三层的比较合适,多了反而差了