1. 引言
1.1.卷积神经网络CNN
卷积神经网络(CNN)的数学模型是深度学习中用于处理图像和其他高维数据的关键组成部分。那么,CNN究竟是什么呢?
总结起来,CNN网络主要完成以下操作:
-
卷积操作(Convolution Operation):
卷积是CNN中的基本操作,用于提取图像特征。给定输入图像 ( I ) 和卷积核 ( K ),卷积操作可以表示为:
(I∗K)(x,y)=∑m∑nI(x−m,y−n)⋅K(m,n)(I * K)(x, y) = \sum_m \sum_n I(x - m, y - n) \cdot K(m, n)(I∗K)(x,y)=∑m∑nI(x−m,y−n)⋅K(m,n)
其中 (x,y)(x, y)(x,y)表示输出特征图的位置,(m,n)(m, n)(m,n)是卷积核的滑动窗口位置。 -
卷积核(Convolutional Kernel):
卷积核是一个小的矩阵,用于在输入数据上滑动以产生特征图。每个卷积核可以学习到输入数据中的特定特征,如边缘、角点或更复杂的纹理模式。 -
填充(Padding):
填充是在输入图像的边缘添加零或特定值的操作,以控制卷积后输出特征图的大小。填充可以表示为:
Padded(I)(x,y)={ I(x−p,y−p)if x−p≥0 and y−p≥00otherwisePadded(I)(x, y) = \begin{cases} I(x - p, y - p) & \text{if } x - p \geq 0 \text{ and } y - p \geq 0 \\ 0 & \text{otherwise} \end{cases}Padded(I)(x,y)={ I(x−p,y−p)0if x−p≥0 and y−p≥0otherwise
其中 ppp是填充的大小。 -
步长(Stride):
步长定义了卷积核在输入数据上滑动的间隔。步长为 sss的卷积操作可以表示为:
(I∗K)(x,y)=∑m∑nI((x−m)s,(y−n)s)⋅K(m,n)(I * K)(x, y) = \sum_m \sum_n I((x - m)s, (y - n)s) \cdot K(m, n)(I∗K)(x,y)=∑m∑nI((x−m)s,(y−n)s)⋅K(m,n) -
激活函数(Activation Function):
激活函数用于在卷积层之后引入非线性,使得网络能够学习复杂的模式。ReLU(Rectified Linear Unit)是最常用的激活函数之一,定义为:
ReLU(z)=max(0,z)\text{ReLU}(z) = \max(0, z)ReLU(z)=max(0,z) -
池化(Pooling):
池化操作用于降低特征图的空间维度,通常使用最大池化或平均池化。最大池化可以表示为:
Max Pooling(I)(x,y)=maxm,n∈windowI((x−m)s,(y−n)s)\text{Max Pooling}(I)(x, y) = \max_{m, n \in \text{window}} I((x - m)s, (y - n)s)Max Pooling(I)(x,y)=maxm,n∈windowI((x−m)s,(y−n)s) -
全连接层(Fully Connected Layer):
全连接层是CNN中的密集层,其中每个节点都与前一层的所有激活值相连。数学上,全连接层的输出可以表示为:
O=f(W⋅A+b)O = f(W \cdot A + b)O=f(W⋅A+b)
其中 OOO是输出,WWW是权重矩阵,AAA是前一层的激活值,bbb是偏置项,$f $ 是激活函数。 -
损失函数(Loss Function):
损失函数用于衡量模型预测与实际标签之间的差异。对于分类问题,交叉熵损失是常用的损失函数:
L=−∑c=1Cyo,clog(po,c)L = -\sum_{c=1}^C y_{o,c} \log(p_{o,c})L=−∑c=1Cyo,clog(po,c)
其中 CCC是类别数,yo,cy_{o,c}yo,c是真实标签的one-hot编码,po,cp_{o,c}po,c是模型预测的概率。 -
反向传播(Backpropagation):
反向传播是一种算法,用于计算损失函数关于网络参数的梯度,并更新这些参数以最小化损失。这个过程涉及到链式法则的应用。 -
优化器(Optimizer):
优化器定义了参数更新的规则。例如,SGD(随机梯度下降)的更新规则可以表示为:
W:=W−η⋅∇WLW := W - \eta \cdot \nabla_W LW:=W−η⋅∇WL
其中 η\etaη是学习率,$\nabla_W L $是损失相对于权重 WWW的梯度。
这些数学模型和操作构成了CNN的基础,使得它们能够从原始数据中自动学习特征并进行有效的模式识别。随着研究的发展,还有许多变体和改进,如深度可分离卷积、空洞卷积等,进一步增强了CNN的能力。
通过上面的讨论,我们将CNN定义:
R2\mathbb{R}^2R2对信号f:R2⟶R and K:R2⟶R at x∈R2\mathbb{f}:\mathbb{R}^2\longrightarrow\mathbb{R}\text{ and }\text{K}:\mathbb{R}^2\longrightarrow\mathbb{R}\text{ at }\mathbb{x}\in\mathbb{R}^2f:R2⟶R and K:R2⟶R at x∈R2
(f∗k)(x)=∫R2f(x~)k(x~−x)dx~,(f * k) (\mathbf{x}) = \int_{\mathbb{R}^2} f(\tilde{\mathbf{x}})k(\tilde{\mathbf{x}} - \mathbf{x}) \text{d}\tilde{\mathbf{x}},(f∗k)(x)=∫R2f(x~)k(x~−x)dx~,
我们可以观察到,卷积操作实质上就是函数fff与其移动(或滑动)后的核函数kkk之间的内积。
需要注意的是,在实际应用中,卷积神经网络(CNNs)实现的是这一操作的离散化版本。
(f∗k)(x)=∑x~∈Z2f(x~)k(x−x~)Δx~=∑x~∈Z2f(x~)k(x−x~)\begin{align} (f*k) (\mathbf{x}) &= \sum_{\mathbf{\tilde{x}} \in \mathbb{Z}^2} f(\mathbf{\tilde{x}})k(\mathbf{x}-\mathbf{\tilde{x}})\Delta\mathbf{\tilde{x}}\\ &= \sum_{\mathbf{\tilde{x}} \in \mathbb{Z}^2} f(\mathbf{\tilde{x}})k(\mathbf{x}-\mathbf{\tilde{x}}) \end{align}(f∗k)(x)=x~∈Z2∑f(x~)k(x−x~)Δx~=x~∈Z2∑f(x~)k(x−x~)
考虑到图像中像素的排列通常是等距的,我们将间隔 Δx 设置为1,这样公式(1)(1)(1)就可以简化为公式(2)。为了简化理解,我们在本次回顾中采用连续域的概念进行说明。
在卷积神经网络的卷积层,例如PyTorch框架中的Conv2D层,卷积操作会在图像定义的范围内对每个位置执行。由于整个输入图像共享同一套卷积核权重,因此卷积层的输出对于图像的平移变换具有不变性。此外,输入图像通常由多个通道组成,这些通道在卷积过程中会被统一考虑。
本文将利用PyTorch提供的torch.nn.functional.conv2d()函数来自动完成在每个特征点上的卷积积分操作。这样做的好处是,我们无需手动编写卷积操作的代码,从而简化了开发过程。通过使用这个函数,我们可以轻松地在输入特征图的每个位置上应用卷积核,并自动处理多通道数据的求和,实现特征提取的自动化。
1.2.图卷积网络GCNN
图卷积网络(Graph Convolutional Networks, GCNNs)的数学表达通常依赖于图论的概念,特别是图上的信号处理。
-
图定义:
图GGG 由节点集合VVV 和边集合EEE 组成。对于加权图,每条边eije_{ij}eij 都有一个权重wijw_{ij}wij。 -
邻接矩阵AAA:
邻接矩阵AAA 是一个N×NN \times NN×N 的矩阵,其中NNN 是图中节点的数量。如果节点iii 和jjj 之间有边,则Aij=wijA_{ij} = w_{ij}Aij=wij,否则Aij=0A_{ij} = 0Aij=0。 -
度矩阵DDD:
度矩阵DDD 是一个对角矩阵,其中DiiD_{ii}Dii 是节点iii 的度,即与节点iii 相连的边的权重之和。 -
归一化邻接矩阵A^\hat{A}A^:
归一化邻接矩阵A^\hat{A}A^ 是通过AAA 除以其对应节点的度来计算的,即
A^=D−12AD−12\hat{A} = D^{-\frac{1}{2}}AD^{-\frac{1}{2}}A^=D−21AD−21。 -
图卷积操作:
图卷积操作通常定义为节点特征XXX 和可学习的权重矩阵KKK 之间的卷积,可以表示为Y=σ(A^XK)Y = \sigma(\hat{A}XK)Y=σ(A^XK),其中σ\sigmaσ 是一个非线性激活函数。 -
节点特征XXX:
节点特征XXX 是一个N×FN \times FN×F 的矩阵,其中FFF 是每个节点的特征维度。 -
权重矩阵KKK:
权重矩阵KKK 是一个F×F′F \times F'F×F′ 的矩阵,其中F′F'F′ 是卷积后的特征维度。 -
图卷积层:
图卷积层可以堆叠,每一层都可能有不同的权重矩阵,并且可以学习不同尺度的特征。 -
池化操作:
图池化操作用于减少节点的数量,同时保持重要的结构特征。 -
等变性:
GCNNs设计为对特定类型的图变换保持等变性,例如子图同构性或图的平移等。
GCNNs的关键在于它们能够在图结构数据上进行卷积操作,捕捉节点间的局部连接模式,同时保持对图结构的尊重。这使得GCNNs非常适合处理社交网络、分子结构、交通网络等图结构数据。
根据上面的讨论,我们对GCNN进行如下定义:
我们将对二维图像进行操作,这些图像通常定义在 R2\mathbb{R}^2R2上。因此,在构建一个能够跟踪输入中特征在何种姿态(即:来自群 G=R2⋊HG=\mathbb{R}^2\rtimes HG=R2⋊H的变换)下出现的网络的第一步,我们需要将信号转移到另一个域,在这个域中,不同姿态下的相同特征是解耦的。它通过提升卷积实现,它将输入信号 fin:R2→Rf_{in}:\mathbb{R}^2\rightarrow \mathbb{R}fin:R2→R中的特征映射到群 GGG 上的特征映射 foutf_{out}fout:G→R\text{G}\rightarrow \mathbb{R}G→R。对于在 R2\mathbb{R}^2R2 上定义的信号 fff 和核 kkk,以及群元素 g=(x,h)∈G=R2⋊Hg=(\boldsymbol{x}, h) \in G=\mathbb{R}^2 \rtimes Hg=(x,h)∈G=R2⋊H:
(f∗liftingk)(g)=∫R2f(x~)kh(x~−x) dx~.(f *_{\text{lifting}} k) (g) = \int_{\mathbb{R}^2} f(\tilde{\mathbf{x}})k_h(\tilde{\mathbf{x}} - \mathbf{x}) \,{\rm d}\tilde{\mathbf{x}}.(f∗liftingk)(g)=∫R2f(x~)kh(x~−x)dx~.
其中,khk_hkh 是核 k:R2→Rk:\mathbb{R}^2 \rightarrow \mathbb{R}k: