GNN和GCN的入门公式
- 一、GNN的计算
- 二、GCN的计算
跟随B站课程【GNN图神经网络最牛教程】学不会up直接下跪!图神经网络快速入门教程(GNN/GCN)的笔记
一、GNN的计算
对于一个图来说,要更新它自身的特征,也要更新它邻接节点的特征
mi=G({Wjhj}:j∈Ni)m_{i}=G(\{W_{j}h_{j}\}: j \in N_{i})mi=G({Wjhj}:j∈Ni)
其中 WjW_{j}Wj表示节点间的权重,hjh_{j}hj表示节点的特征值
总的更新公式就是
hi=σ(W1hi+∑j∈NiWjhj)h_{i}=\sigma(W_{1}h_{i}+\sum_{j\in N_{i}} W_{j}h_{j})hi=σ(W1hi+j∈Ni∑Wjhj)
其中后半部分的求和部分还可以根据需求进行替换
二、GCN的计算
一个图计算的时候需要节点特征,邻接矩阵以及度矩阵。
因为邻接矩阵还要考虑自身节点,所以带上对角线变为1(就是节点自己和自己相连,一起引入计算)
A~=A+λIN\tilde A=A+\lambda I_{N}A~=A+λIN
其中度矩阵是用来做归一化scale的(或者说求平均),这时候就需要用度来分化自身的权重。
D~−1A~\tilde D^{-1} \tilde AD~−1A~
D~−1A~X\tilde D^{-1} \tilde AXD~−1A~X
然后再乘特征矩阵X,但是这只是对行向量进行了平均,还要考虑对列向量平均
D~−1A~D~−1X\tilde D^{-1} \tilde A \tilde D^{-1} XD~−1A~D~−1X
但是这等于对行列进行了两次归一化,所以最终的形式是
A^=D~−12A~D~−12X\hat A= \tilde D^{-\frac{1}{2}} \tilde A \tilde D^{-\frac{1}{2}} XA^=D~−21A~D~−21X
整个两层神经网络的计算公式就是
Z=f(X,A)=softmax(A^ReLU(A^XW(0))W(1))Z=f(X, A)=softmax(\hat A ReLU(\hat AXW^{(0)})W^{(1)})Z=f(X,A)=softmax(A^ReLU(A^XW(0))W(1))
然后GNN的层数一般比较少,一般两三层比较合适。