GCN深入浅出

如何理解 Graph Convolutional Network(GCN)?我主要参考知乎上这个回答。这个回答从热传播模型开始说起,介绍了图卷积网络和热传播模型的关系,说明了图卷积网络方法的一般思路。本博客重述了该回答的主要内容。

图卷积网络的本质“图中的每个结点无时无刻不因为邻居和更远的点的影响而在改变着自己的状态直到最终的平衡,关系越亲近的邻居影响越大。”结点状态的改变与GCN使用的Laplacian矩阵有关。“知道了Laplacian矩阵在干什么后,剩下的只是解法的不同——所谓的Fourier变换只是将问题从空域变换到频域去解,所以也有直接在空域解的(例如GraphSage)。”

热传播模型

连续欧氏空间的热传播模型

根据牛顿冷却定律,热量传递的速度正比与温度梯度。假设有一根均匀的铁棒,不同位置温度不一样,热量从铁棒的一端传播到另一端,现在我们刻画这个铁棒上面温度热传播随着时间变化的关系。首先,我们把问题简单化,假设铁棒是一个一维链条,链条上每个单元温度一致,热量在相邻的不同的单元之间传播,如下图
一维离散链条上的热传播

假设 T 1 T_1 T1温度低, T n T_n Tn温度高,热量从右边向左边传播。对于第i个单元,它接受第i+1个单元传来的热量,从把自身的热量传到温度较低的第i-1个单元,假设它当前的温度为 ϕ i \phi_i ϕi,那么有:
d ϕ i d t = k ( ϕ i + 1 − ϕ i ) − k ( ϕ i − ϕ i − 1 ) (1) \frac{d\phi_i}{dt} = k(\phi_{i+1} - \phi_i) - k(\phi_i - \phi_{i-1}) \tag{1} dtdϕi=k(ϕi+1ϕi)k(ϕiϕi1)(1)
d ϕ i d t \frac{d\phi_i}{dt} dtdϕi是指第i个单元的温度相对于时间的变化梯度,直观上的理解是单位时间内第i个单元温度的变化量。k和单元的比热容、质量有关,是个常数。右边第一项是下一个单元向本单元的热量流入导致温度升高,第二项是本单元向上一个单元的热量流出导致温度降低。变换一下上式得到:
d ϕ i d t − k [ ( ϕ i + 1 − ϕ i ) − ( ϕ i − ϕ i − 1 ) ] = 0 (2) \frac{d\phi_i}{dt} - k[(\phi_{i+1} - \phi_i) - (\phi_i - \phi_{i-1})] = 0 \tag{2} dtdϕik[(ϕi+1ϕi)(ϕiϕi1)]=0(2)
第二项是两个差分的差分,推广到连续空间,就是导数的导数,即二阶导数。

所以,可以推出铁棒这样的连续一维空间的热传导方程是:
∂ ϕ ∂ t − k ∂ 2 ϕ ∂ x 2 = 0 (3) \frac{\partial \phi}{\partial t} - k \frac{\partial^2 \phi}{\partial x^2} = 0 \tag{3} tϕkx22ϕ=0(3)
x表示距离。同理,在高维的欧氏空间中,一阶导数就推广到梯度,二阶导数就是拉普拉斯算子
∂ ϕ ∂ t − k ∇ 2 ϕ = 0 (4) \frac{\partial \boldsymbol{\phi}}{\partial t} - k \boldsymbol{\nabla}^2 \boldsymbol{\phi} = \boldsymbol{0} \tag{4} tϕk2ϕ=0(4)

图上热传播模型

现在考虑热传播在在图上发生。图上的每个每个结点是一个单元,且这个单元只和与这个结点相连的单元发生热交换。
图上的热传播

假设热量流动的速度依然满足牛顿冷却定律,研究任一结点i,它的温度随着时间的变化可以用下式来刻画:
d ϕ i d t = − k ∑ j A i j ( ϕ i − ϕ j ) (5) \frac{d \phi_i}{d t} = -k \sum_j \boldsymbol{A}_{ij} (\phi_i - \phi_j) \tag{5} dtdϕi=kjAij(ϕiϕj)(5)
其中 A \boldsymbol{A} A是这个图的邻接矩阵(Adjacency Matrix),对于 A i j \boldsymbol{A}_{ij} Aij,如果结点 i i i j j j连接,那么 A i j = 1 \boldsymbol{A}_{ij}=1 Aij=1,否则 A i j = 0 \boldsymbol{A}_{ij}=0 Aij=0。这里只考虑简单的情况:1、这张图是无向图, A i j = A j i \boldsymbol{A}_{ij}=\boldsymbol{A}_{ji} Aij=Aji A A A是对称矩阵。2、结点没有自己到自己的回环边,即 A \boldsymbol{A} A的对角线上元素都是0。

对上式进行变形
d ϕ i d t = − k ϕ i ∑ j A i j ϕ i − k ∑ j A i j ϕ j = − k [ ϕ i d e g ( i ) + ∑ j A i j ϕ j ] (6) \begin{aligned} \frac{d \phi_i}{d t} & = -k \phi_i \sum_j \boldsymbol{A}_{ij} \phi_i - k \sum_j \boldsymbol{A}_{ij} \phi_j \\ & = -k [\phi_i deg(i) + \sum_j \boldsymbol{A}_{ij} \phi_j] \end{aligned} \tag{6} dtdϕi=kϕijAijϕikjAijϕj=k[ϕideg(i)+jAijϕj](6)
其中 d e g ( i ) deg(i) deg(i)表示对结点i求度(degree),一个结点点的度被定义为这个结点有多少条边连接出去,很显然,根据邻接矩阵的定义,公式右边第一项的求和正是在计算结点 i i i的度。

再看右边括号里面的第二项,这可以认为是邻接矩阵的第 i i i行和所有结点的温度组成的向量做内积。

把所有结点的温度变化写出向量形式
[ d ϕ 1 d t d ϕ 2 d t ⋯ d ϕ n d t ] = − k [ d e g ( 1 ) ∗ ϕ 1 d e g ( 2 ) ∗ ϕ 2 ⋯ d e g ( n ) ∗ ϕ n ] + k A [ ϕ 1 ϕ 2 ⋯ ϕ n ] (7) \begin{bmatrix} \frac{d \phi_1}{d t} \\ \frac{d \phi_2}{d t} \\ \cdots \\ \frac{d \phi_n}{d t} \end{bmatrix} = -k \begin{bmatrix} deg(1) * \phi_1 \\ deg(2) * \phi_2 \\ \cdots \\ deg(n) * \phi_n \end{bmatrix} + k \boldsymbol{A} \begin{bmatrix} \phi_1 \\ \phi_2 \\ \cdots \\ \phi_n \end{bmatrix} \tag{7} dtdϕ1dtdϕ2dtdϕn=kdeg(1)ϕ1deg(2)ϕ2deg(n)ϕn+kAϕ1ϕ2ϕn(7)

定义 ϕ = [ ϕ 1 , ϕ 2 , ⋯   , ϕ n ] T \boldsymbol{\phi} = [\phi_1, \phi_2, \cdots, \phi_n]^T ϕ=[ϕ1,ϕ2,,ϕn]T,则
d ϕ d t = − k D ϕ + k A ϕ = − k ( D − A ) ϕ (9) \frac{d \boldsymbol{\phi}}{d t} = -k\boldsymbol{D}\boldsymbol{\phi} + k \boldsymbol{A} \boldsymbol{\phi} = -k(\boldsymbol{D} - \boldsymbol{A}) \boldsymbol{\phi} \tag{9} dtdϕ=kDϕ+kAϕ=k(DA)ϕ(9)
其中 D = d i a g ( d e g ( 1 ) , d e g ( 2 ) , ⋯   , deg ⁡ ( n ) ) \boldsymbol{D} = diag (deg(1), deg(2), \cdots, \deg(n)) D=diag(deg(1),deg(2),,deg(n))称为度矩阵,只有对角线上有值,且这个值表示对应的结点的度的大小。继续整理,得到:
d ϕ d t + k L ϕ = 0 (10) \frac{d \boldsymbol{\phi}}{d t} + k \boldsymbol{L} \boldsymbol{\phi} = \boldsymbol{0} \tag{10} dtdϕ+kLϕ=0(10)
回顾在连续欧式空间的那个微分方程(公式4):
∂ ϕ ∂ t − k ∇ 2 ϕ = 0 \frac{\partial \boldsymbol{\phi}}{\partial t} - k \boldsymbol{\nabla}^2 \boldsymbol{\phi} = \boldsymbol{0} tϕk2ϕ=0
二者具有一样的形式。对比一下二者之间的关系:

  • 相同点:刻画空间温度分布随时间的变化,且这个变化满足一个相同形式的微分方程。
  • 不同点:前者刻画拓扑空间有限结点,用向量 ϕ \boldsymbol{\phi} ϕ刻画当前状态,单位时间状态的变化正比于线性变化 − L -\boldsymbol{L} L算子。后者刻画欧氏空间的连续分布,单位时间状态变化正比于拉普拉斯算子 ∇ 2 \boldsymbol{\nabla}^2 2

这就是同一种变换、同一种关系在不同空间上面的体现。于是,可以把连续空间中的热传导推广到图上面。把两个公式等同起来,以矩阵形式体现的 L \boldsymbol{L} L就叫做拉普拉斯矩阵。这就是GCN中原始形式的拉普拉斯矩阵 L = D − A \boldsymbol{L}=\boldsymbol{D}-\boldsymbol{A} L=DA

GCN

现在问题已经很明朗了,只要你给定了一个空间,给定了空间中存在一种东西可以在这个空间上流动,两邻点之间流动的强度正比于它们之间的状态差异,那么何止是热量可以在这个空间流动,任何东西都可以!自然而然,假设在图中各个结点流动的东西不是热量,而是特征(Feature),而是消息(Message),那么问题自然而然就被推广到了GCN。所以GCN的实质是什么,是在一张Graph Network中特征(Feature)和消息(Message)中的流动和传播!这个传播最原始的形态就是状态的变化正比于相应空间(这里是Graph空间)拉普拉斯算子作用在当前的状态。抓住了这个实质,剩下的问题就是怎么去更加好的建模和解决这个问题。建模方面就衍生出了各种不同的算法,你可以在这个问题上面复杂化这个模型,不一定要遵从牛顿冷却定律,你可以引入核函数、引入神经网络等方法把模型建得更非线性更能刻画复杂关系。解决方面,因为很多问题在频域解决更加好算,你可以通过Fourier变换把空域问题转化为频域问题,解完了再变换回来,于是便有了所有Fourier变换中的那些故事。

本质上,这是一种Message Passing,是一种Induction,卷积、傅立叶都是表象和解法。

GCN迭代

结合公式10,结点的状态计算公式是
ϕ = ϕ + d ϕ d t = ϕ − k L ϕ (11) \boldsymbol{\phi} = \boldsymbol{\phi} + \frac{d \boldsymbol{\phi}}{d t} = \boldsymbol{\phi} -k \boldsymbol{L} \boldsymbol{\phi} \tag{11} ϕ=ϕ+dtdϕ=ϕkLϕ(11)
结点的状态会因为邻居的影响而不断改变。每个结点都给一个初始状态,随着时间的推移,图中的结点都会趋向于某个稳定的状态,整个系统最终稳定下来。当我们不知道结点的状态,并想获得结点的状态时,就可以用这种方法:首先为每个结点给定一个初始状态 ϕ t 0 \boldsymbol{\phi}_{t_0} ϕt0,带入公式11的右边,得到的 ϕ t 1 \boldsymbol{\phi}_{t_1} ϕt1继续带入公式11的右边,不断迭代,直到 ϕ \boldsymbol{\phi} ϕ不在发生变化,用公式表示:
ϕ t + 1 = ϕ t − k L ϕ t (12) \boldsymbol{\phi}_{t+1} = \boldsymbol{\phi}_{t} -k \boldsymbol{L} \boldsymbol{\phi}_{t} \tag{12} ϕt+1=ϕtkLϕt(12)

该方法是求公式11关于 ϕ \boldsymbol{\phi} ϕ的解的一种解决方法。如果学习过PageRank算法,可以发现PageRank的解法和该方法是一样的。

机器学习中,时间是离散的,我们可以逐步更新结点的状态。右边用拉普拉斯算子作用一次到全局的状态上,就能把状态更新一步!

实际解决的过程中,可以发挥机器学习搬砖工懂得举一反三的优良精神,首先,不一定要全局操作,我们可以batchify操作一部分结点,大家轮着来,其次,我们可以只考察这个点的一阶和二阶邻居对当前点作Message Passing,这个思想就是对拉普拉斯算子作特征分解,然后只取低阶的向量,因为矩阵的谱上面能量一般具有长尾效应,头几个特征值dominate几乎所有能量。

Laplacian加和性

Laplacian矩阵/算子不仅表现的是一种二阶导数的运算,另一方面,它表现了一种加和性,这个从图上热/消息传播方程最原始的形态就能一目了然:
d ϕ i d t = k ∑ j A i j ( ϕ j − ϕ i ) \frac{d \phi_i}{d t} = k \sum_j \boldsymbol{A}_{ij} (\phi_j - \phi_i) dtdϕi=kjAij(ϕjϕi)
可见,每个结点每个时刻的状态变化,就是所有邻居对本结点差异的总和,也就是所有的邻居把message pass过来,然后再Aggregate一下,这正是GraphSage等空域算法的关键步骤Aggregate思想的滥觞。

在实际建模中,我们的Aggregate不一定是加和,作为一个熟练的机器学习搬砖工,我们懂得可以把Aggregate推广成各种操作例如Sum Pooling,例如LSTM,例如Attention,以求刷效果,发paper 😃

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值