• 图卷积网络


    图卷积网络

    图神经网络一开始是按照RNN的方式进行研究,用RNN的方式处理网络上的数据。在CNN流行之后,思考如何在图上进行卷积。即图卷积网络(GCN)。关于GCN有两个方向,一个是基于谱的方法,一个基于图的方法,类似于图像处理中的频域和空间域。本文主要讲频域上的处理,基于论文2016 - Semi-Supervised Classification with Graph Convolutional Networks - Kipf, Welling,以及一个知乎上的讲解:如何理解 Graph Convolutional Network(GCN)?

    卷积操作在图像上很有用,可以提取图像的特征,但是在图上就有很多限制,原因在于图和图像的数据结构不一样,图像是一个Euclidean Structure,图像的数据是排列整齐的矩阵,但是图上的数据是Non Euclidean Structure,每一个节点的邻居的数量不是固定的,所以很难直接像图像卷积一样在图上做卷积。但是可以类似图像上的傅里叶变换以及卷积定理,将空间域的卷积转换为频域(图上叫做谱)的乘积。但是面临的的问题就是,图上的傅里叶变换是什么,从而需要了解图信号处理(graph signal processing)以及谱图理论(spectral graph theory),这里需要一个核心的概念就是拉普拉斯矩阵L。

    拉普拉斯矩阵

    拉普拉斯矩阵有三种形式:

    [L = D - A\ L = D^{-1/2}(D-A)D^{-1/2}\ L = D^{-1}(D-A) ]

    其有很好的性质:

    • L是实对称矩阵,意味着L有n个线性无关的特征向量,可以进行特征分解,这些特征向量可以化成两两正交的特征向量,形成正交矩阵。
    • L是半正定矩阵,所以L的特征值一定非负。

    对L进行特征分解得到:

    [L = ULambda U^{-1} = ULambda U^{T}\ 其中, U = (u_1, u_2, ..., u_n), Lambda = diag([lambda_1, lambda_2, ..., lambda_n]) ]

    设L的多个特征值

    [0 = lambda_1 < lambda_2 leq ... leq lambda_n = lambda_{max} ]

    L的特征值可以看作频率,其对应的特征向量可以看作该频率下网络上的图信号graph signal。网络的图信号意思是网络每一个节点上对应一个值,这些值合起来表示的一个向量就是graph signal。特征值越大(即频率越大)的特征值对应的特征向量(一个图信号)看起来就会更震荡,反之这个信号就会更平稳,如图(来自2013 - The emerging field of signal processing on graphs Extending high-dimensional data analysis to networks and other irregular domain):

    换一个方法,我们需要知道特征方程

    [Lu=lambda u ]

    特征值为0时,根据L的定义可以得出此时特征向量u为全1的向量,这样的向量自然如上图第一个图一样,非常平滑,变化的频率为0也理所应当。

    由于U构成了n维空间的一个正交基,那么这个图上的任意一个信号f都可以根据U进行分解:

    [f=hat{f}(lambda_1)u_1 + hat{f}(lambda_2)u_2 + ... + hat{f}(lambda_n)u_n\ hat{f} 为f的傅里叶变换。 ]

    这样就形成了谱和空间域的对应,图信号的傅里叶变换为拉普拉斯矩阵特征值表示的频率上的向量

    [fxrightarrow[]{F}hat{f} ]

    那么图上的傅里叶变换应该怎么做。

    图上的傅里叶变换

    普通的傅里叶变换如下:

    [F(w)=int f(t)e^{-iwt}dt\ e^{-iwt}是拉普拉斯算子的特征函数,满足特征方程。 ]

    广义的特征方程为:

    [AV = lambda V ]

    [A 表示一种变换,包括算子,矩阵。\ V 表示特征向量,函数可以看作无穷维的向量(特征函数)\ lambda 表示特征值 ]

    [e^{-iwt}满足\ Delta e^{-iwt} = frac{partial^2 e^{-iwt} }{partial t^2} = -w^2e^{-iwt}\ 所以e^{-iwt}是变换Delta 即拉普拉斯算子的特征函数。 ]

    那么我们需要一个图上的拉普拉斯算子,然后求其特征函数,上面的拉普拉斯矩阵其实就是一个离散拉普拉斯算子,

    拉普拉斯矩阵与拉普拉斯算子的关系 - 知乎 (zhihu.com)

    拉普拉斯算子是一个二阶微分算子,在离散情况下有:

    [一维情况下 Delta f = f(x+1) + f(x-1) - 2f(x)\ 二维网格情况下 Delta f = f(x+1, y) + f(x-1, y) + f(x, y+1) + f(x, y-1) - 4f(x, y) ]

    可以看出都是周围点与中心点的梯度差的和,那类比到图上就是中心点与邻居节点的梯度差的和。而拉普拉斯矩阵可以做到这点

    [(Lf)(i) = sum_{jin N_i}^{}W_{ij}[f(i) - f(j)] \ Proof: \ ecause Lf = (D-W)f = Df - Wf\ egin{aligned} herefore (Lf)(i) &= d(i)f(i) - sum_{jin N_i}^{}W_{ij}f(j) \ &= sum_{jin N_i}^{}W_{ij}f(i) - sum_{jin N_i}^{}W_{ij}f(j) \ &= sum_{jin N_i}^{}W_{ij}[f(i)-f(j)] end{aligned} ]

    所以可以将拉普拉斯矩阵看作图上的拉普拉斯算子,

    根据拉普拉斯矩阵的特征分解,给出特征方程:

    [L = ULambda U^{-1} = ULambda U^{T}\ LU = ULambda = lambda U ]

    所以U为特征向量,类比傅里叶变换里的积分操作(求和),傅里叶变换及其逆变换为:

    [傅里叶变换hat{f} = U^Tf\ 傅里叶逆变换f = U hat{f} ]

    卷积定理及图卷积网络

    卷积定理:函数(向量)卷积的傅里叶变换是函数(向量)傅里叶变换的乘积。

    那么在图上我们对一个信号f做卷积时,由于空间域的卷积不好做,我们可以利用卷积定理做谱(频域)上的乘积。

    设空间域上的卷积核为h, 则由卷积定理

    [(fstar h)_G = U((U^Th)igodot (U^Tf))\ 设空间域上的卷积核h在图上的傅里叶变换为hat{h}\ (fstar h)_G = Uhat{h}(U^Tf)\ hat{h}为diag(U^Th),主要为了简化公式,防止出现hadamard productigodot ]

    第一代GCN

    [y = sigma(Ug_{ heta}(Lambda)U^Tx)\ 其中g_{ heta}(Lambda)为待训练的参数,是一个对角矩阵, diag([ heta_1, heta_2, ..., heta_n])。 ]

    论文 2013 - Spectral Networks and Locally Connected Networks on Graphs - Bruna et al.

    第一代GCN基本上就是上面卷积定理的翻版,直接将卷积核的傅里叶变换作为训练参数。但是,这样缺点明显,每一次前向传播的计算量大,且参数数量为n个, 与网络规模有关。

    第二代GCN

    [设参数g_{ heta}(Lambda) = sum_{k=0}^{K-1} heta_k Lambda^k\ 则Ug_{ heta}(Lambda)U^T = sum_{k=0}^{K-1} heta_k L^k, 注意ULambda^kU^T = L^k \ 最后y = sigma(sum_{k=0}^{K-1} heta_k L^kx) ]

    论文 2016 - Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering - Defferrard, Bresson, Vandergheynst

    参数减少为k个,与网络规模无关,但是计算复杂度依然很大,因为要计算矩阵的幂。

    第三代GCN

    论文 2016 - Semi-Supervised Classification with Graph Convolutional Networks - Kipf, Welling

    [g_{ heta}(Lambda) =sum_{k=0}^{K-1} heta_k T_k(widetilde{Lambda}), 其中widetilde{Lambda} = frac{2}{lambda_{max}}Lambda - I_N \ T_k(x)为切比雪夫多项式,是一个迭代构造的多项式\ T_0(x)=1, T_1(x)=x, T_k(x)=2xT_{k-1}(x)-T_{k-2}(x) \ 矩阵形式下T_0(widetilde{Lambda})=I, T_1(widetilde{Lambda})=widetilde{Lambda}, T_k(widetilde{Lambda})=2widetilde{Lambda}T_{k-1}(widetilde{Lambda})-T_{k-2}(widetilde{Lambda})\ 最后y = sigma(sum_{k=0}^{K-1} heta_k T_k(widetilde{L})x) ]

    在这篇论文中,作者限制K=2(只有两项,原文中K=1是因为这里和原文公式中求和的上限不一样)。并近似最大特征值为2,通过重整化的技巧,简化了算法在编程时的困难,并适用于普遍的图信号,及一个节点的信号是一个向量,而不是一个值,这样就可以进行网络嵌入。

    [Z = softmax(hat{A}ReLU(hat{A}XW^0)W^1)\ hat{A}=widetilde{D}^{-1/2}widetilde{A}widetilde{D}^{-1/2}\ widetilde{A} = A + I_N \ widetilde{D}_{ii} = sum_{j}widetilde{A}_{ij} ]

    W是可训练的参数,可以通过W调节层与层之间节点向量维度的变化。

  • 相关阅读:
    CentOS下crond定时任务详细介绍
    js随机从数组中取出几个元素
    js复制内容加版权声明代码
    crond不执行原因分析
    2015年最全的移动WEB前端UI框架
    聊聊前端排序的那些事
    Linux下修改Mysql的用户(root)的密码
    SIPp常用脚本之三:UAC
    SIPp常用脚本之二:UAS
    SIPp常用脚本之一:register注册
  • 原文地址:https://www.cnblogs.com/eggplant-is-me/p/14061232.html
Copyright © 2020-2023  润新知