既然是因为卷积核的原因,那么可不可以不使用卷积核?答案肯定是不可以,因为卷积神经网络的一大核心就是利用卷积核实现「参数共享(Parameter Sharing)」。下图为有卷积核的卷积操作:此时的参数大小只与卷积核大小有关,而如果不进行参数共享的话,参数的大小则与图像的像素矩阵保持一致:除此之外,卷积神经网络还有另一大核心:「局部连接性(Locally Connection)」。局部连接是指卷积计算每次只在与卷积核大小对应的区域进行,也就是说输入和输出是局部连接的。如果不进行局部连接的话,相当于将图片的矩阵展开成向量进行输入,类似于全连接神经网络,此时的参数量会变得非常巨大:也就是说,通过参数共享和局部连接性我们可以将参数从 降低到 。其中,W H 和 K 分别为图像的宽、高和通道,N 为隐藏层节点个数,m 为卷积核宽,k 为卷积核个数。PS:CNN 有三大特点,除了上面说的局部连接和参数共享之外,还有「层次化表达(Hierarchical Expression)」。CNN 的层次化表达可以通过卷积层叠加得到,每一个卷积层都是在前一层的基础上进行的,这样的意义在于,网络越往后,其提取到的特征越高级。比如说:第一层可能是一些线条,第二层可能会是一些纹理,第三层可能是一些抽象图案:可能会有同学问:那我们还有其他办法在图上进行卷积吗?答案是一定有的 = =。目前的一大思路就是借助谱图理论(Spectral Graph Theory)来实现在拓扑图上的卷积操作,大致步骤为将空域中的拓扑图结构通过傅立叶变换映射到频域中并进行卷积,然后利用逆变换返回空域,从而完成了图卷积操作。看到这里,估计大家会有一堆疑问,包括:什么是谱图理论?什么是傅立叶变换?什么是频域空域?逆变换是什么?想要清楚的回答这个问题,要从图信号处理说起。
Graph Signal Processing
图信号处理(Graph Signal Processing,以下简称 GSP)用来处理那些定义在图上的非规则域的信号,这句话有点拗口,拆开说就是处理图上定义的信号,但信号所在域是规则的。
2.1 Simple Example
这里我们举一个图信号处理的简单例子:假设我们在一个地方测量温度,并根据人口密度安排了温度感应点(如上图 a 所示),地区 n 的测量温度可以表示为 (如上图 b 所示),并且 , 为真实温度, 为随机噪声带来的误差。现在我们想通过对测量地及周围的温度求平均来减少这些随机噪声,当然为了防止失去局部温度(这个也叫 Over Smooth),我们会对每个点取其周围区域进行平均:
上图 c 展示了 y(1) 的计算方式。我们也可以用矩阵来表示:其中,矩阵 A 为邻接矩阵(测量点的连接情况如上图 d 所示),测量位置及每个位置的测量温度如上图 e 所示。我们还可以对其进行优化,根据距离来为不同测量点添加不同的权重:当然,我们也需要对权重进行归一化,以便产生无偏估计:其中,对角矩阵 D 用于归一化,其值为 ,这个矩阵还有另外一个名字,叫「度矩阵(Degree Matrix)」。以上便是一个简单的是图信号处理过程,其框架大致为:
我们刚刚说的都是周期性函数,但现实中大部分函数都是非周期的,那如果涉及到非周期性函数该怎么办呢?在介绍非周期性函数之前,我们先简单介绍下欧拉公式。考虑横轴为 1,纵轴为虚单位 i 的坐标系,图上任意一点都可以表示为 。根据欧拉公式,我们可以写成:其中,e 为自然对数的底数。所以坐标轴上的点现在有了两种表示方式:考虑 , 会随着 t 的增大而逆时针旋转。所以 可以表示为坐标点 A 随着时间 t 逆时针旋转。我们以时间 t 为横坐标,则可以记录到坐标点 A 映射在虚轴的运动轨迹:左边图是我们看到的旋转频率,称为频域,而右边图看到是时间流逝,称为时域,是不是和我们刚刚介绍的(从时域变换到频域)正好相反?也就是说,时域和频域其实是可以相互转换的。回到正题,考虑非周期函数的傅立叶变换。事实上,我们可以将非周期函数考虑为周期无穷大的函数,考虑频域中的横坐标:,当周期 T 无穷大大时,频域图就从离散点变为连续的曲线,如下图:那么,我们该如何从这个非周期函数中分解出各种信号呢?答案就是利用正交!比如说,假设这函数中有一个 的信号,那么我们用 就可以把它乘出来,而其他分量如都会因为正交而消失。所以我们需要对函数做一个内积:
其中, 刚刚介绍过,就是一组正交基的组合。我们用正交基去与函数求内积,如果原函数中包含频率为 的三角函数,则 便为 0,反之为 0,这样自然分离能分离出相应的信号,其图示如上图 c 中右部分所示。细心的同学可能还会注意到上式的计算的结果中还有复数 i。其实是样子的:「实数部分表示振幅」,「虚数部分表示相位」。相关资料同学们可以自己查阅,不再进行过多介绍。以上就是我们所说的傅立叶变换(Fourier Transform,FT)。同样的我们也存在逆变换:
看到上面可能大家会很可能很陌生,但是这个就是图像中的拉普拉斯卷积核:此时共有 4 个自由度 (1,0),(-1,0),(0,1),(0,-1),当然如果对角线后其自由度可以为 8。对此我们可以进行归纳:「拉普拉斯算子是所有自由度上进行微小变化后所获得的增益」。我们将其推广到网络图中,考虑有 N 个节点的网络图,其自由度最大为 N,那么函数 可以是 N 维的向量,即:其中, 表示函数 在网络图中节点 i 处的函数值,类比 为函数 在 (x,y) 的函数值。在网络图中,两个节点的之间的增益为 ,考虑加权图则有 ,那么对于节点 i 来说,总增益即为拉普拉斯算子在节点 i 的值:
其中, 为节点 i 的度;上式第二行去掉了 是因为 可以控制节点 i 的邻接矩阵。对于任意 都成立,所以我们有:
其中, 表示第 k 第 i 个节点; 表示第 k 层节点 i 和节点 j 的权值,考虑局部邻居; 表示卷积运算; 表示第 k 层的池化操作。也就是说每个节点都是由其邻居和自身卷积池化得到。虽然看起来很简单,但是优点在于它不需要很强的前提假设,其只需要网络具有局部邻域结构,甚至不需要很好的 Embedding 向量。但这种结构下有一个很大的缺点:「没有办法实现共享参数」。作者针对这种问题提出了我们所看到第一代图卷积神经网络。
为了克服这个缺点,我们引入 K 阶多项式:其中,参数 是多项式系数,这样滤波器就具有了 K 阶局部性了,复杂度也降低到 。我们将这个公式带入卷积运算中:
此时,我们计算图卷积运算就不需要再乘上特征向量矩阵 ,而是直接使用拉普拉斯矩阵 L 的 k 次方,这样就避免了进行特征分解。而我们可以事先计算好 ,这样就只需要计算矩阵相乘。同时由于 L 为稀疏矩阵,所以时间复杂度为 , 为节点边数。此外,作者还引入了切比雪夫展开式来近似 。设 为切比雪夫多项式的第 k 阶式子,切比雪夫多项式的递归式为:。所以我们有:
其中, ; 是指拉普拉斯矩阵 L 的最大值。这是因为切比雪夫多项式的输入要在 之间,由于拉普拉斯矩阵的半正定性,所以所有的特征值都是大于等于 0 的,将其除以最大特征值可以将特征压缩到 区间内,现在需要将其压缩到 ,所以我们有:我们将切比雪夫多项式引入到我们的卷积变换中:
其中, 。这个表达式为拉普拉斯多项式中的一个 k 阶近似函数,依赖于节点的 「k 阶邻域」(走 k 步能到的邻居),时间复杂度与边呈线形相关。