GNN(图神经网络)
Why do we need GNN?
因为很多时候,我们的input和output都是graph,即使有些东西不是很明显的graph,也可以用GNN来解决
有些时候,图中仅有某些node是有label的,一些是unlabeled,因为相邻的结点一定存在某种关系,那就能根据这种关系从labeled node,推出 unlabeled node
GNN:How
回想CNN,使用convolution可以得到image每一个像素的特征映射,那么能不能对图像做convolution解决上面提到的问题呢?
GNN:RoadMap
怎么在图这种structure上做convolution,有两种方法,Spatial-based和Spectral-based,重点的两个模型是GAT和GCN
Spatial-based Convolution
其中每一个node用来表示,表示第n层编号为m的结点,对任意一个node做convolution,就是将改node和所有相邻的node一起做convolution,得到下一层对应得到node为,但是GNN并不是为了得到每一个node的feature,而是得到整个图的feature,比如说一个化学分子,有C原子,H原子等等,我们想得到的是整个分子的表示,而不是每个C或者H原子的表示,所以会用一个化学式表示一个化学分子,而在这里,我们将所有的结点的特征值集合起来表示整个图,这件事交readout
NN4G(Neural Networks for Graph)
- aggregation
假设初始的图是这样的,有五个输入
用一个matrix凶input layer得到一个0层的graph
然后对第0层的graph做aggregation得到第一层,也就是看每个结点与它相邻的结点,将相邻的结点aggregate到这个结点上,假设用的model是将所有相邻结点相加再经过一个transform,最后加上这个结点自己的input feature
- readout
假设经过aggregation得到三层,将每一次的所有节点的feature相加,得到三组值,再将这三组值经过一个transform得到最后graph的表示
DCNN(Diffusion—Convolution Neural Network)
传播-卷积神经网络
假设初始的图是这样的
得到第0层的方式跟之前不同的地方就是,计算和的时候,取所有相邻的,长度是1的结点
得到第1层的方式跟之前不同的地方就是,计算和的时候,不是相邻的结点,是所有距离为2 的结点
那对一个结点做k次aggregation就会得到k+1层,通过对k+1层的特征值计算做transform就得到每一个结点的特征值yi
MoNET (Mixture Model Network)
之前的方法都是直接将各个结点的feature相加,没有考虑每个结点间的权重,这个model就是来解决这个问题的
每一个结点乘上一个u的transform,我们这里的这个u其实就可以看成是距离,两个结点间的距离,当然,u(x,y)的计算公式是可以自己决定的,或者让model自己学习得到
GraphSAGE
- aggregation
LSTM (长短期记忆网络)
GAT(Graph Attention Networks)
这个model的特点是:每一个邻居之间weight,我们需要让它自己去学,这个学的方式就是对邻居做attention(之前的model,要不然就是所有的边的weight都一样,要不然就是用距离来表示,这次,这个weight让它自己学)
关于attention,大家可以参考这个博客:深度学习中的attention机制
Spectral-based Convolution
思考可不可以像CNN一样直接用卷积
我们发现在顶点域上卷积不方便,所以学习一下信号处理在频率域上卷积
接下来的这一节课程,由于缺乏信号量知识,我没听懂。。课程地址给大家:课程
我去找找别的GNN方面的课程,如果学到了有用知识点,会接着更新的