zoukankan      html  css  js  c++  java
  • 《SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS》论文阅读(一)

    背景简介

      GCN的提出是为了处理非结构化数据(相对于image像素点而言)。CNN处理规则矩形的网格像素点已经十分成熟,其最大的特点就是利用卷积进行①参数共享②局部连接,如下图:

    那么类比到非结构数据图(graph),CNN能直接对非结构数据进行同样类似的操作吗?如果不能,我们又该采用其他什么方式呢?

    首先思考能不能,答案是不能。至少我们无法将graph结构的数据规整到如上图所示的矩形方格中,否则结点之间的边无法很好表示。还可以考虑卷积核这一点,我们知道不管我的图(image)如何变化(图片变大或变小,图中狗数量多一只),我们设计好的提取特征的卷积核都不需要变化,但是试想,graph还能这样吗,照猫画虎(就是随意猜想),如果我们也设计和图一样的卷积核,如下图。可见怎么设计可复用发提取有效特征的卷积核就不能单纯从拓扑结构上考虑。

    GCN卷积思路

      卷积(数学上概念)在CNN中使用起来看起来很简单,通过卷积核和输入image的像素进行对应位置相乘并相加,这符合离散卷积的概念。

      那么人们(这方面的研究在很早之前就有,这篇文章也算是“集大成者+新的idea”)如何考虑在Graph上进行卷积呢?总的来说分为两种

    ①spatial domain

    大致了解了下,抽象来看,和CNN算是有点异曲同工的味道。具体论文还没看过,先不展开细说。

    ②spectral domain

    • 联想到我们graph层面的卷积,也要符合数学层面的意义,但是数学上还有一处和卷积 密切相关——卷积定理(指的是将卷积转化成傅里叶变换来完成,即实现卷积的问题==》变成实现傅里叶变换的问题)。
    • 那么傅里叶变换——(将一个函数展开成正交函数基的线性组合,类比一个$N$ 维空间,只要找到该空间的基,该空间的任意向量就都可以由正交基的线性组合完成,傅里叶变换也是此道理,只不过傅里叶变换将向量变成了函数,找的是正交函数基)如何在graph上实现呢?我们做进一步推广,在graph上找正交基(graph层面的),所以完成graph上的傅里叶变换问题==》需要完成graph上的基的寻找
    • 总的来说找到graph上的基===》就能完成图上的傅里叶变换===》利用卷积定理,就能通过傅里叶变换完成卷积

    这篇论文就是从谱方法展开的,这就同spatial角度差了挺远的了。其灵感应该是从信号处理的傅里叶变换时域与频域转换而来,后文详细说明。

    傅里叶变换

      回顾高数中的傅里叶变换,傅里叶的理论依据就是任何周期非周期(即周期无穷)的的函数都可以由一组正交基($cosx,sinx$)函数通过线性组合表示,如下图第一个公式,$a_{n}$,$b_{n}$可以通过公式计算。然后通过欧拉公式,进一步转换得到如下傅里叶变换和逆变换:

    其中逆变换中$F(w)$就是$f(t)$第一个等式基函数的系数。

      从信号处理角度来说,可以理解成将一个时域下的周期函数(坐标轴:时间+幅值),分解成频域下的周期函数(坐标轴:频率$w$+幅值,对应上图的$F{f}(w)$,也对应下面我截图备注的蓝色频率轴,频率$w$和幅值对应上图$f(t)$中展开式的一个波函数)

      具体动图

    傅里叶变换函数的基

      傅里叶变换的关键点就是,我们通过一组函数的基:三角函数系。类似于空间向量中,我们通过找到一组基,然后进行线性组合,可以表示该空间中的任何一个向量。

       以上,我们只需要知道的就是傅里叶变换是什么,使用了基本函数基的原理

    卷积定理

      卷积定理:卷积定理是傅立叶变换满足的一个重要性质。卷积定理指出,函数卷积的傅立叶变换是函数傅立叶变换的乘积。换句话说,$$F(fstar g)
    =F(f)cdot F(g)$$,其中符号 $star $ 代表卷积的意思(CNN中卷积就是离散卷积,两个函数分别是卷积核和图片像素值),$F()$代表傅里叶变换。那么更进一步,两边同时傅里叶逆变换:

    $$F^{-1}{egin{Bmatrix}
    F(fstar g)
    end{Bmatrix}}
    =F^{-1}egin{Bmatrix}
    F(f)cdot F(g)
    end{Bmatrix} \
    fstar g
    =F^{-1}egin{Bmatrix}
    F(f)cdot F(g)
    end{Bmatrix}$$

    所以,我们求两个函数的卷积的时候,可以分别求两个函数的傅里叶变换,然后再做一次逆傅里叶变换得到

     

     

    为什么要引入拉普拉斯矩阵?

      想必都有这么个疑惑,不用拉普拉斯矩阵行吗?或者拉普拉斯矩阵有什么优势?

      我只能浅显的说自己的直觉(不保证完全正确,供参考)。

      首先,我们前文说了,需要在图上进行傅里叶变换,而傅里叶变换重要的准备工作就是找正交基,那么问题来了?图上怎么找正交基?——答案就是拉普拉斯矩阵可以给我们提供完备的正交基(点击:向图拉普拉斯矩阵性质

      (可跳过这段话,这一点好像在后面推导没有体现出来,虽然的确有这个性质,但是感觉未在GCN中使用啊)其次,可以看看拉普阿拉斯算子的特性(点击),拉普拉斯算子能够算出一个节点出现扰动之后,对周围邻接结点的产生的总正或负效益(也就是对整个graph的效益,因为其他没有相连接点自然没有影响),而拉普拉斯算子$Delta = L = D-W$,其中 L 就是拉普拉斯矩阵所以我们希望能将拉普拉在算子衡量扰动效益的功能迁移到graph上,而在graph上的拉普拉斯算子就是 $L$,即拉普拉斯矩阵。总之:$Delta $作用于graph===》等于 $L cdot f$,其中$f$就是graph,$L$ 是拉普拉斯矩阵详见拉普拉斯算子

    Lf

      

    拉普拉斯算子

      拉普拉斯算子的定义是:

    $$igtriangleup f=sum frac{partial  f}{partial ^{2}x}$$

    是由散度推导而来的,$Delta $ 就是拉普拉斯算子,$f$ 是函数

      上式是$f$对$x$求二阶偏导。那么回忆数字图像处理中离散情况下,做一个近似的二阶求解

      $f(x-1,y)$  
    $f(x,y-1)$ $f(x,y)$ $f(x,y+1)$
      $f(x+1,y)$  

    $$egin{aligned} Delta f &= frac{partial f}{partial ^{2}x} + frac{partial f}{partial ^{2}y} \ &=f(x+1,y) + f(x-1,y) - 2f(x,y) + f(x, y+1)+f(x,y-1)-2f(x,y)  \ & = f(x+1,y) + f(x-1,y) + f(x, y+1)+f(x,y-1)-4f(x,y)   end{aligned}$$

    也就是说,拉普拉斯算子可以描述某个结点进行扰动之后(周围值-4*中心点值),所带来的给相邻结点变化的总收益

    那么进行推广:我们希望能将拉普拉斯算子用到graph中,希望能衡量一个结点变化之后,对其他相邻结点(也可以说是整个graph)的干扰总收益

    所以,当某点发生变化时,只需要将所有相邻的点相加再减去该中心点*相邻个数(与上面方格计算二阶偏导类似) 。

     而拉普拉斯矩阵$L=D-W$($D$是度矩阵,$W$是邻接矩阵,下文有介绍。和上图差个负号,好比向量方向,暂且忽略),所以$$Delta f=(D-W)f=Lcdot f$$,其中$f$是$N*M$代表$N$个结点和每个结点$M$维特征的graph。

     

    这就是为什么GCN中使用拉普拉斯矩阵的原因:需要对图$f$做拉普拉斯算子变换,需要实现$Delta f$===>等同于$Lcdot f$

     总之,$Delta = L = D-W$

    拉普拉斯矩阵

      拉普拉斯矩阵的由来是从谱聚类说起,下面是几种场见的拉普拉斯矩阵形式

    拉普拉斯矩阵定义

       对于图$G=(V, E)$,拉普拉斯的普通形式是$$L=D-A$$,其中$D$是对角顶点度矩阵(零阶矩阵的一行和),$A$是图的邻接矩阵,如下图

    $L$中的元素分别为:

    $$L_{i,j}=left{egin{matrix}
     &diag(v_{i})  &i=j \
     &-1  &i eq j\,\,and\,\,v_{i}\,\,is\,\,adjacent\,\,to\,\,v_{j} \  
     &0  &otherwise
    end{matrix} ight.$$

    对称归一化的拉普拉斯矩阵(Symmetric normalized Laplacian)

    $$L^{sys}=D^{-1/2}LD^{-1/2}=I-D^{-1/2}AD^{-1/2}$$

    其中$L$的各项内容为:

    $$L^{sys}_{i,j}=left{egin{matrix}
     &1  &i=j\,and\,\,diag(v_{i}) eq 0 \
     &-frac{1}{sqrt{diag(v_{i})diag(v_{j})}}  \,\,\,\,&i eq j\,\,and\,\,v_{i}\,\,is\,\,adjacent\,\,to\,\,v_{j} \  
     &0  &otherwise
    end{matrix} ight.$$

    随机游走归一化拉普拉斯矩阵(Random walk normalized Laplacian)

       $$L^{rw}=D^{-1}L=I-D^{-1}A$$

    其中$L$的各项内容为:

    $$L^{rw}_{i,j}=left{egin{matrix}
     &1  &i eq j\,and\,\,diag(v_{i}) eq 0 \
     &-frac{1}{diag(v_{i})}  \,\,\,\,&i eq j\,\,and\,\,v_{i}\,\,is\,\,adjacent\,\,to\,\,v_{j} \  
     &0  &otherwise
    end{matrix} ight.$$

    无向图拉普拉斯的性质

    ①拉普拉斯矩阵是实对称矩阵,可以对角化

    ②拉普拉斯矩阵是半正定的(谱聚类中可以根据定义证明$f(x)=x^{T}Ax$,对于任意$x eq 0$,均有$f(x)geq 0$)

    ③最小特征值是0(半正定),对于的特征向量是$1$,容易验证$L1=01$

    拉普拉斯矩阵谱分解

      根据上一条拉普拉斯矩阵的性质,是对称的,所以一定可以进行对角化,也就是找到一堆正交基

    $$L=Uegin{pmatrix}
     &lambda _{1}  & &\
     &  &ddots  &\
     &  & &lambda _{n}
    end{pmatrix}U^{-1}$$

    且其中$U$是单位矩阵,$$UU^{T}=I$$

    图上的傅里叶变换

      首先,我们的目标始终是要对图 $f$ 做卷积操作,假设卷积核为 $g$,而根据卷积定理有$$  fstar g =F^{-1}egin{Bmatrix} F(f)cdot F(g) end{Bmatrix}$$所以,我们重点需要计算$F(f)$,而$F(g)$就可以当作参数去训练,那么如何计算出前者呢?

      类比数学上傅里叶的思路,是需要找到一组正交的函数基,那么同理现在对于图(graph) $f$ , 我们也需要找到一组定义在图上的正交基,而上文已经解释了图上的拉普拉斯矩阵$L$ 天然可谱分解,也就是对角化找到一组正交基 

    $$LU=lambda U  \,\,\,\,\,\,\,UU^{T}=UU^{-1}=I$$  

      同时可以证明$$Delta e^{-iwt} = frac{partial e^{-iwt}}{partial ^{2}t} = - w^2 e^{-iwt} $$

     $e^{-iwt}$ 就是变换 $Delta $ 的特征函数,$w$和特征值密切相关。而又因为$LU=lambda U$,所以我们类比 $U$ 等同于 $e^{-iwt} $,也就是找到了图上的一组正交基($L$的特征向量)。

    $$ F(lambda _{l})=hat{f}(lambda _{l})=sum_{i=1}^{N}f(i)u^{*}_{l}(i)$$

    $f$ 是 graph 上的 $N$ 维向量(一个结点),$f(i)$ 与graph的顶点一一对应,$u_{l}(i)$ 表示第 $l$ 个特征向量的第 $i$ 个分量。那么特征值(频率)$lambda _{l}$ 下的,$f$ 的graph 傅里叶变换就是与 $lambda _{l}$ 对于的特征向量 $u_{l}$ 进行内积运算。所以图$f*u^{*}_{l}$ 得到一个离散的值,如我们常见到的频域下的一个幅度值。

    ===>推广到矩阵下形式

     其中左边的是傅里叶变换,右边的$u_{i}(j) $表示第 $i$ 个特征向量的第 $j$ 维,所以图 $f$ 的傅里叶变换可以写成$$hat{f} = U^{T} f$$,其中$U^T$是$L$的特征向量,也即是当前空间的一组基

    图上的逆傅里叶变换

      

    内容汇总:拉普拉斯矩阵/算子,傅里叶变换,GCN

       前面介绍了傅里叶变换,又提到了拉普拉斯矩阵/算子,这和GCN有什么关系呢?

    现在我们可以进一步考虑具体的卷积了,也就是 $$  fstar g =F^{-1}egin{Bmatrix} F(f)cdot F(g) end{Bmatrix}$$

    其中$$F(f) = hat{f} = U^Tf$$ 

    而 $F(g)$ 是卷积核$g$ 的傅里叶变换,我们可以写成对角线形式(为了矩阵相乘),$igl(egin{smallmatrix}
    hat{h}(lambda 1) &  & &\
     &  & ddots  & \
     &  & &hat{h}(lambda n)
    end{smallmatrix}igr)$

    其中

     所以两者的傅里叶变换乘机为:

     再照顾最外层的$F^{-1}{}$,那就是再左乘$U$:$$(fstar g)=Uegin{pmatrix}
     &hat{h}(lambda_{1})  & \
     &  &ddots  \
     &  & &hat{h}(lambda_{n})
    end{pmatrix}U^{T}f$$

    以上,我们算是完整得到了如何再图上做卷积的公式:先得到图的拉普拉斯矩阵$L$,得到$L$的对应特征向量$U$

    图卷积的改进

      上文我们已经知道了 $fstar g$的计算,但是其中一个问题就是$L$矩阵的特征向量$U$计算是费时的复杂度太高

    所以提出如下近似多项式形式$$hat{h}(lambda_{l})approx sum_{K}^{j=0}alpha _{j}lambda^{j}_{l}$$

    也就是:

     最后卷积变成了:

      $$y_{out}= sigma(sum_{j=0}^{K-1}  alpha _{j}L^{j}x)$$

    这样就不需要进行特征值分解,直接使用$L^{j}$,即拉普拉斯矩阵的阶数

    改进一

      其实是进一步简化,将上图的(4)式子 $L^{j}$使用切比雪夫展开式来近似【和用多项式近似想法一模一样】,首先将上式$$oldsymbol{g}_{oldsymbol{ heta^{prime}}}(oldsymbol{Lambda}) approx sum_{k=0}^K heta_k^{prime} T_k( ilde{oldsymbol{Lambda}})$$

    其中$ ilde{oldsymbol{Lambda}}=frac{2}{lambda_{max}}oldsymbol{Lambda}-oldsymbol{I}_n$,$lambda _{max}$ 是矩阵$L$的最大特征值(谱半径)。再利用切比雪夫多项式递推公式:

    $$T_k(x)=2xT_{k-1}(x)-T_{k-2}(x)$$

    $$T_0(x)=1,T_1(x)=x$$

    所以有因为$L^{j}x$,那么

    $$egin{aligned} oldsymbol{g(wedge )}_{oldsymbol{ heta^{prime}}} * oldsymbol{x} &approx oldsymbol{U} sum_{k=0}^K heta_k^{prime} T_k( ilde{oldsymbol{Lambda}}) oldsymbol{U}^T oldsymbol{x} \ &= sum_{k=0}^K heta_k^{prime} (oldsymbol{U}  T_k( ilde{oldsymbol{Lambda}}) oldsymbol{U}^T) oldsymbol{x} \ &=sum_{k=0}^K heta_k^{prime} T_k( ilde{oldsymbol{L}}) oldsymbol{x} end{aligned}$$

    其中$ ilde{oldsymbol{L}}=frac{2}{lambda_{max}} oldsymbol{L}- oldsymbol{I}_n$

    所以有$$oldsymbol{y}_{output} = sigma(sum_{k=0}^K heta_k^{prime} T_k( ilde{oldsymbol{L}}) oldsymbol{x})$$

    改进二

      主要对上式做了简化处理,取 $K=1$,设置$lambda_{max}approx 2$,带入简化模型:

    $$egin{aligned} oldsymbol{g}_{oldsymbol{ heta^{prime}}} * oldsymbol{x} &approx heta_0^{prime} oldsymbol{x} + heta_1^{prime}(oldsymbol{L}- oldsymbol{I}_n) oldsymbol{x} \ &= heta_0^{prime} oldsymbol{x} - heta_1^{prime}(oldsymbol{D}^{-1/2} oldsymbol{W} oldsymbol{D}^{-1/2}) oldsymbol{x} end{aligned}$$

      上述用到了归一化的拉普拉斯矩阵,$$oldsymbol{L}=oldsymbol{D}^{-1/2}(oldsymbol{D}-oldsymbol{W})oldsymbol{D}^{-1/2}=oldsymbol{I_n}-oldsymbol{D}^{-1/2} oldsymbol{W} oldsymbol{D}^{-1/2}$$

      进一步假设$ heta_0^{prime}=- heta_1^{prime}$

    $$oldsymbol{g}_{oldsymbol{ heta^{prime}}} * oldsymbol{x} = heta(oldsymbol{I_n} + oldsymbol{D}^{-1/2} oldsymbol{W} oldsymbol{D}^{-1/2}) oldsymbol{x}$$

    但是考虑到$oldsymbol{I_n} + oldsymbol{D}^{-1/2} oldsymbol{W} oldsymbol{D}^{-1/2}$的特征值范围是$[0, 2]$,会引起梯度消失问题(这点暂不清楚why),所以再修改为:

    $$oldsymbol{I_n} + oldsymbol{D}^{-1/2} oldsymbol{W} oldsymbol{D}^{-1/2} ightarrow ilde{oldsymbol{D}}^{-1/2} ilde{oldsymbol{W}} ilde{oldsymbol{D}}^{-1/2}$$

    $ ilde{oldsymbol{W}}=oldsymbol{W}+oldsymbol{I}_n$ 相当于邻接矩阵中对叫上加了$1$,$ ilde{D}$ 也是在邻接矩阵加上$I$之后的度矩阵

    最后就是论文中提到的形式:

    $$oldsymbol{Z}_{mathbb{R}^{N imes F}} = ( ilde{oldsymbol{D}}^{-1/2} ilde{oldsymbol{W}} ilde{oldsymbol{D}}^{-1/2})_{mathbb{R}^{N imes N}} oldsymbol{X}_{mathbb{R}^{N imes C}} oldsymbol{Theta}_{mathbb{R}^{C imes F}}$$

     GCN定义

    一种简单的形式  

    参考文献:

    https://www.zhihu.com/question/54504471

    http://tkipf.github.io/graph-convolutional-networks/

    https://www.davidbieber.com/post/2019-05-10-weisfeiler-lehman-isomorphism-test/#

    https://arxiv.org/abs/1609.02907

  • 相关阅读:
    1055 The World's Richest (25 分)
    1048 Find Coins (25 分)散列
    经典多线程问题(三)-子线程与主线程的循环打印
    经典多线程问题(二)-生产者消费者问题
    源码分析 CurrentHashMap 1.8
    源码分析 CurrentHashMap 1.7
    源码分析 HashTable与CurrentHashMap1.7与currentHashMap1.8对比
    源码分析 HashMap 1.8
    源码分析 HashMap 1.7
    Linux复习(常用命令)
  • 原文地址:https://www.cnblogs.com/KongHuZi/p/12669497.html
Copyright © 2011-2022 走看看