- Graph Neural Networks
Graph Neural Networks
Graph是什么样?
Graph有结点和边。
GNN用途
(1)Classification
假设现在有一大堆不同的分子,训练出一个Classifier可以判断分子会不会突变,dataset就是很多label好的data然后输入一个分类器没有看过的分子,让它判断这个分子会不会导致突变:
(2)Generation
(3)通过GNN推理剧中凶手
现有一部剧,如果只通过人物特性推定每个人物是不是凶手,忽略了一个重要的东西–角色之间的关系,考虑所有人物的关系必须用到GNN。
问题:如何利用卷积将节点嵌入特征空间?
方法1:将卷积(相关)的概念推广到图–>Spatial-based convolution(基于空间的卷积)(空域或顶点域上直接对邻点操作);
方法2:回到卷积在信号处理中的定义–>Spectral-based convolution(基于谱的卷积)(在频率域上操作);
GNN路线图:
(一)Spatial-based GNN
通过CNN的方法算出下一层layer的feature map: h 3 0 h^0_3 h30代表第0层layer的第3个结点,现在要让 h 3 0 h^0_3 h30update成 h 3 1 h^1_3 h31, h 3 0 h^0_3 h30的相邻结点有 h 0 0 h^0_0 h00、 h 2 0 h^0_2 h20、 h 4 0 h^0_4 h40,通过这几个结点来update下一层的hidden state,这件事情叫做Aggregate(合计);把所有结点的feature集合起来代表整个graph叫做Readout(读出)。
一些模型:
(1)NN4G(Neural Networks for Graph)
其中, h 3 0 h^0_3 h30= x 3 ⋅ w 0 ˉ x_3\cdot \bar{w_0} x3⋅w0ˉ,其它的结点同理可得,由此得到Hidden layer 0, h 3 0 h^0_3 h30相邻结点为 h 0 0 h^0_0 h00、 h 2 0 h^0_2 h20、 h 4 0 h^0_4 h40,把这几个点Aggregate到Hidden layer 1的 h 3 1 h^1_3 h31,方法为把这三个结点相加后再经过一个transform之后,得到的结果再加上原本的input feature:
h 3 1 = w 1 , 0 ^ ( h 0 0 + h 2 0 + h 4 0 ) + w 1 ˉ ⋅ x 3 h^1_3 = \hat{w_{1,0}}(h_0^0 + h_2^0 + h_4^0) + \bar{w_1}\cdot x_3 h31=w1,0^(h00+h20+h40)+w1ˉ⋅x3
Readout:叠了很多层之后,把每一层的node feature全部加起来后,各自经过一个transform再加起来得到一个feature,代表整个graph的一个feature:
(2)DCNN(Diffusion-Convolution Neural Network)(扩散卷积神经网络)
把input layer中跟 v 3 v_3 v3这个结点距离为1的结点加起来,取平均值,再乘于一个权值得到 h 3 0 h^0_3 h30:
h 3 0 = w 3 0 M E A N ( d ( 3 , ⋅ ) = 1 ) h^0_3 = w_3^0MEAN(d(3,\cdot ) = 1) h30=w30MEAN(d(3,⋅)=1)
在Hidden layer 1时,仍旧使用input layer的feature去update,方式是把input layer中跟 v 3 v_3 v3这个结点距离为2的结点加起来(这里它距离自己本身也是2),取平均值,再乘于一个权值得到 h 3 1 h^1_3 h31:
h 3 1 = w 3 1 M E A N ( d ( 3