GNN
从卷积讲到图卷积,最好有一点信号与系统基础
1 卷积
1.1 信号与系统的卷积1
从数学上来讲,卷积就是定义出来的一种运算。
这种运算被定义出来,说明它是在生活、科研中是具有广泛的作用的2。比如加法在生活中的运用,所以加法被定义了出来。
卷积是我们从大学开始接触到的一种运算。
这里我们只考虑离散卷积。
首先接触到的其实在「信号与系统」里面,定义了卷积这个操作,说明它是有作用的。
要探究卷积在信号与系统里面是怎么定义出来的,我们首先讲一下单位脉冲函数:
δ ( n ) = { 1 , n = 0 0 , n ≠ 0 \delta(n)=\left\{\begin{array}{ll}1, & n=0 \\ 0, & n \neq 0\end{array}\right. δ(n)={
1,0,n=0n=0
而输入信号 x ( n ) x(n) x(n)也可以写成:
x ( n ) = ∑ k = − ∞ + ∞ x ( k ) δ ( n − k ) x(n)=\sum_{k=-\infty}^{+\infty} x(k) \delta(n-k) x(n)=k=−∞∑+∞x(k)δ(n−k)
信号与系统里面,重点就是考查一个输入信号经过一个系统之后得到的输出是什么样的
假设 δ ( n ) \delta(n) δ(n)经过系统,则会产生一个单位脉冲响应 h ( n ) h(n) h(n),那么对于一个线性时不变系统而言, x ( n ) x(n) x(n)输入到这个系统产生的响应就是多个不同时刻的单位脉冲响应再乘以相应的系数,也就是说, x ( n ) x(n) x(n)的输出也就是:
y ( n ) = ∑ k = − ∞ + ∞ x ( k ) h ( n − k ) y(n)=\sum_{k=-\infty}^{+\infty} x(k) h(n-k) y(n)=k=−∞∑+∞x(k)h(n−k)
卷积(公式)就出现了,从物理意义上来说,就是 不同时刻的输入 对 不同时刻的输出 造成的影响进行了加权求和最终得到输出,好处是把信号拆分成了不同时刻的脉冲响应,方便分析,连续信号的情况也是如此。
而卷积长得和互相关函数有点像,互相关函数的定义是:
( f ∗ g ) ( n ) = ∑ k = − ∞ + ∞ f ∗ ( k ) g ( n + k ) (f*g)(n)=\sum_{k=-\infty}^{+\infty} f^{*}(k) g(n+k) (f∗g)(n)=k=−∞∑+∞f∗(k)g(n+k)
互相关函数反映的是两个函数在不同的相对位置上互相匹配的程度,如果互相关函数的值在某个相对位置大,则说明两个函数在这个位置相似程度高
1.2 图像上的卷积3
图像上的卷积和互相关函数基本一致,互相关函数没有对核进行翻转
在神经网络的图像领域上,互相关函数和卷积运算基本上是一致的
(截图来自来自《深度学习》)
图像上的卷积也被称之为滤波(如平滑滤波,提取边缘等,如下图3),其实在信号处理上的滤波也是通过卷积运算的(高通滤波之类)
CNN的目的就是通过梯度下降的方式,逐渐更新卷积核的参数,找到合适的卷积核来提取图像的特征,右边的这个卷积核,其实就是拉普拉斯算子了,边的位置就是图像的高频分量。
1.3 图(Graph)的卷积
欧几里得结构的数据比如图片,音频等,它们的特点就是整齐排列,邻居节点 个数固定且和中心节点有着一定的关系,因此可以定义出卷积这个操作,一个卷积核对整个图都能够使用,以此来提取特征。我们甚至可以把图片样本的不同像素点看成是高维欧几里德空间中的某个维度,把一张 m × n m\times n m×n的图片可以看成是 m × n m\times n m×n维的欧几里德样本空间中的一个点,而不同样本之间的距离就体现在了样本点之间的距离了。图像具有的特点:Stationarity is owed to shift-invariance, locality is due to the local connectivity, and compositionality stems from the multi-resolution structure of the grid.
而图是一种非欧几里得的结构(非欧几里得域的还有流形manifold),由点和边构成, G = { V , E } \mathcal G=\{\mathcal V,\mathcal E\} G={
V,E},这样子的结构排列不整齐,比较随意。具体体现在:对于数据中的某个点,难以定义出其邻居节点出来,或者是不同节点的邻居节点的数量是不同的,这个其实是一个特别麻烦的问题,因为这样就意味着难以在这类型的数据上定义出和图像等数据上相同的卷积操作出来,而且因为每个样本的节点排列可能都不同。就像下面的图一样,不同节点的邻居节点个数不尽相同,也不能像前面提到的把整个图看成 m × n m\times n m×n维的欧几里德样本空间中的一个点,因为总的节点个数不同,而且点之间的排列是随意的。
类似于欧几里得结构的数据,我们也希望能在图上定义一种卷积操作来提取,图的特征4,要想知道怎么定义图的卷积,我们还得从傅里叶变换说起
1.3.1信号的傅里叶变换
我们知道,传统的傅里叶变换的形式如下:
F ( ω ) = F [ f ( t ) ] = ∫ f ( t ) e − i ω t d t F(\omega)=\mathcal{F}[f(t)]=\int f(t) e^{-i \omega t} d t F(ω)=F[f(t)]=∫f(t)e−iωtdt
这里我们使用的基函数是 e − i ω t e^{-i \omega t} e−iωt,那么为什么要选取这个基函数呢?
从奥本海默的《信号与系统》我们可以找到一种答案:
上面提及到了 特征值和特征函数 的概念,广义的特征方程式定义为 A V = λ V , AV=\lambda V, AV=λV,其中 A A A是一种变换, V V V是特征向量或特征函数(特征函数也可以看成是无穷维的向量), λ \lambda λ是特征值。
我们注意到基函数 e − i ω t e^{-i \omega t} e−iωt其实是拉普拉斯算子的特征函数
Δ e − i ω t = ∂ 2 ∂ t 2 e − i ω t = − ω 2 e − i ω t \Delta e^{-i \omega t}=\frac{\partial^{2}}{\partial t^{2}} e^{-i \omega t}=-\omega^{2} e^{-i \omega t} Δe−iωt=∂t2∂2e−iωt=−ω2e−iωt
在参考文献[1]中也有提及到:
而我们常见的线性时不变系统多涉及到差分(离散)、微分(连续),如下图这个系统就是一个差分的系统。在我的理解看来,拉普拉斯算子也可以算是一种系统,甚至可以算是算有线性时不变系统的一个概括,毕竟就算扩展到三阶差分 、四阶差分, e − i ω t e^{-i \omega t} e−iωt也是相应的特征函数,所以拉普拉斯算子算是(这里缺少相应的参考文献,仅凭个人感觉)。
也就是说,如果我们可以在图上面定义出一个拉普拉斯算子,那我们就可以相应地找出它的特征函数,并相应地作出图的傅里叶变换。
1.3.2图(Graph)的傅里叶变换
卷积定理:信号卷积的傅里叶变换等价于信号傅里叶变换的乘积:
F ( f ∗ g ) = F ( f ) ⋅ F ( g ) \mathcal F (f*g)=\mathcal F(f)\cdot \mathcal F(g) F(f∗g)=F(f)⋅F(g)
因此,如果我们可以定义图的傅里叶变换,那么卷积就变成乘法,最后再经过傅里叶逆变换就可以了。
我们知道,拉普拉斯算子其实就是二阶微分,在离散情况下,离散函数的导数5就是:
∂ f ∂ x = f ′ ( x ) = f ( x + 1 ) − f ( x ) \frac{\partial f}{\partial x}=f' (x)=f(x+1)-f(x) ∂x∂f=f′(x)=f(x+1)−f(x)
那么二阶导数就是
∂ 2 f ∂ t 2 = f ′ ′ ( x ) ≈ f ′ ( x ) − f ′ ( x − 1 ) = f ( x + 1 ) + f ( x − 1 ) − 2 f ( x ) \frac{\partial^{2}f}{\partial t^{2}}=f''(x) \approx f'(x)-f'(x-1)=f(x+1)+f(x-1)-2f(x) ∂t2∂2f=f′′(x)≈f′(x)−f′(x−1)=f(x+1)+f(x−1)−2f(x)
如果我们从二维的角度来看拉普拉斯算子5(图源知乎):
Δ f = ∂ 2 f ∂ x 2 + ∂ 2 f ∂ y 2 = f ( x + 1 , y ) + f ( x − 1 , y ) − 2 f ( x , y ) + f ( x , y + 1 ) + f ( x , y − 1 ) − 2 f ( x , y ) = f ( x + 1 , y ) + f ( x − 1 , y ) + f ( x , y + 1 ) + f ( x , y − 1 ) − 4 f ( x , y ) \begin{array}{l} \Delta f=\frac{\partial^{2} f}{\partial x^{2}}+\frac{\partial^{2} f}{\partial y^{2}} \\ =f(x+1, y)+f(x-1, y)-2 f(x, y)+f(x, y+1)+f(x, y-1)-2 f(x, y) \\ =f(x+1, y)+f(x-1, y)+f(x, y+1)+f(x, y-1)-4 f(x, y) \end{array} Δf=∂x2∂2f+∂y2∂2f=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)
其实粗俗点来讲就是周围的点和中心的之间的梯度差,像前文提到的图像上的拉普拉斯算子。
我们将这个结论推广到图(图源知乎):
那就变成了一个中心节点与邻居节点之间的梯度差,在这个图上定义一个函数 f f f,上面有 N N N个点,定义节点 i i i的所有邻居节点构成的集合是 N i N_i Ni,节点 i i i上面的函数值为 f i f_i fi(node attribute),整个图的函数值可以写成列向量的形式 f = ( f 1 , ⋯ , f N ) T \bm f=(f_1,\cdots,f_N)^T f=(f1,⋯,fN)T,那图上面的拉普拉斯算子就可以定义为:
Δ f i = ∑ j ∈ N i ( f i − f j ) , \Delta f_i=\sum_{j \in N_i}(f_i - f_j), Δfi=j∈Ni∑(fi−fj),
这里我们定义一个邻接矩阵,对于无向图 G = ( V , E ) G=(\mathcal V,\mathcal E) G=(V,E)而言,邻接矩阵就是一个 N × N N\times N N×N的对称矩阵 A \bm A A,它的定义就是
A = ( a 11 ⋯ a 1 N ⋮ ⋱ ⋮ a N 1 ⋯ a N N ) \bm A = \left( \begin{array}{c} a_{11}&\cdots &a_{1N}\\ \vdots & \ddots & \vdots \\ a_{N1}& \cdots& a_{NN} \end{array} \right) A=⎝⎜