卷积是神经中常见的一种操作,人们通常习惯从直觉上理解卷积层的卷积操作。但是在代码实现的时候通常需要更为数学化的卷积表达形式,而且理解卷积的数学形式反过来可以帮助更好地理解卷积操作的本质。
卷积的数学形式通常通过矩阵乘法来表示。本文从卷积最一般的数学形式开始讲起,并从一般形式变换为不同网络中的各种特殊形式。
1. 卷积的一般数学形式
我们假设Conv(·)表示卷积操作,左参数矩阵(下简称左阵)A∈RO×N,输入矩阵(下简称输入)X∈RN×C,右参数矩阵(下简称右阵)W∈RC×H,其中:O代表经过一次卷积操作后输出的样本数量,N代表输入的样本数量,C代表每个样本的特征维度(不同网络中有不同的称呼,例如CNN中称为channel),H代表经过一次卷积操作后输出的每个样本的特征维度。由此我们定义一次卷积操作的数学形式为:
Conv(X) = AXW (Eq. 1)
在一次卷积操作中,左阵A表示不同样本间的聚合方式,即不同样本间的信息传递。A的每一行都表示输出的样本是如何由输入的样本聚合而成,非零的部分组成了卷积核的感受野。当O≤N时,就是卷积操作;当O>N时,就是反卷积操作。
右阵W表示同一样本中特征的聚合方式,即同一样本内的信息传递。右阵W每一列都表示一种聚合方式,也就是通常所说的卷积核,每一种卷积核都表示对样本进行了一次潜在信息的挖掘。右阵的列维度H表示卷积核的数量,即经过一次卷积操作后,每个样本的隐向量的维度。
但需要注意的是,在上述一般形式中,所有的卷积核都共享同一种样本间的聚合方式,即感受野的形状和分布 。但是在实际网络架构中,通常不同的卷积核对应的感受野不一定相同,这就需要对Eq. 1进行变化:
Conv(X) = diag(A1 A2 … AH) · diag(X X … X) · diag(w1 w2 … wH) = diag(AiXwi) (Eq. 2)
其中,Ai∈RO×N, i∈[1,H]表示第i个左阵,即第i个感受野,H个左阵组成对角矩阵diag(Ai)∈RHO×HN;对角矩阵diag(X)表示H个X组成的对角矩阵;wi∈RC, i∈[1,H]表示第i个右阵列向量,即第i个卷积核,H个wi组成对角矩阵diag(wi)RHC×H。
通过分块矩阵的乘法,就可以实现不同感受野的不同卷积核分别对样本就行卷积操作。但是当卷积核的数量非常多时,Eq.2的对角矩阵维度会变成高纬度的稀疏矩阵,此时也可以对每个卷积核分别采用Eq.1的卷积操作,得到oi∈RO, i∈[1,H],再将所有oi重新组成输出矩阵output = [o1 … oH] ∈RO×H。
2. 不同神经网络中的卷积数学形式
- CNN中的卷积
CNN通常用于处理图片数据,我们以图片数据为例介绍,其他类型数据基本类似。
假设我们每次输入batch size等于B的图片,图片分标率等于L×W,有RGB三个channel,则输入样本X∈RN×3,N=BLW。通常,CNN中每一个卷积核对不同channel的聚合方式都是直接相加,所以右阵实质上是单位阵W=E∈R3×H,每一列都是单位向量e∈R3,则CNN中的卷积操作可以由Eq.2简化为:
Conv(X) = [A1 A2 … AH]T Xe = [A1Xe A2Xe … AHXe]T (Eq. 3)
Conv(X)∈ROH,每O个元素都是一个卷积核的操作结果,经过resize可以得到最终的输出output∈RO×H。
可以看出,相对于卷积的一般数学形式,CNN中的卷积简化了右阵,即不同channel的聚合方法。遍历各种CNN-based网络,对卷积核的调整主要集中在左阵,即感受野的形状和分布。通常在神经网络中主要调整感受野的形状,例如inception,感受野的分布则是learnable,通过学习获得。而在swift中则将感受野的分布设为高斯分布。
进一步地,我们再讨论一些卷积的变种。
如果右阵出现变化的分布,且每一列都有0存在,则意味着卷积在channel上也进行聚合,这就是常说的3D卷积,卷积操作在长、宽、通道三个维度上进行。
如果左阵行数超过列数,即输出O>N,就是常说的反卷积,反卷积是卷积的逆运算。通常在形式上,反卷积的左阵是其对应的卷积的左阵的转置矩阵,反卷积左阵的每一列都是卷积左阵每一行的感受野,反之同理。
如果左阵每一行代表感受野的非0值,彼此中间都有固定数量的0插值,意味这卷积核的感受野进行了膨胀,但输出维度不增加,这种卷积就是常说的扩张卷积(Atrous 卷积),可以参考论文https://arxiv.org/abs/1412.7062。
另外,空间可分卷积、深度可分卷积和分组卷积等标准卷积的变体,都可以通过调整左阵和右阵的形式实现,可以参考博文Kunlun Bai。
- GCN中的卷积
GCN,图卷积网络,成熟的网络架构提出可以参考论文 https://arxiv.org/abs/1609.02907,本文也以该论文提出的GCN网络架构为例进行介绍。
GCN用来处理图结构,假设图G = G(V, E, A)是无向、无权重图,V为顶尖集合,大小为N;E为边集合;A为邻接矩阵,A∈RN×N。注意,此邻接矩阵经过两次调整:(1)对角线元素全部设为1,即加入了自连接,保证了聚合不同样本的信息时,可以保留一部分本样本的信息(2)规范化,方式为 A= D-0.5AD-0.5, D=diag(Dii), Dii=∑jAij。则卷积操作为:
Conv(X) = AXW (Eq. 4)
从形式上看,Eq.4与Eq.1基本相同,只是A在Eq.4中代表邻接矩阵。GCN中,只有右阵W是learnable的(当然这里是指相对于左阵而言,事实上特征矩阵X也是可以在训练中fine-tuning的),即同一样本不同特征间的聚合方式是可以学习的。左阵采用邻接矩阵,保证了图在卷积操作后仍然保持了原来的结构,每进行一次卷积操作都是聚合中心节点的相邻节点信息,K次卷积操作聚合距离中心节点K步的节点信息。
在GAT上,论文可以参考https://arxiv.org/abs/1710.10903,通过加入了Attention机制,调整左阵中卷积核的分布,每行之和规范至1,通过学习到的概率值对相邻节点进行加权聚合。