1. 卷积层的基本结构
CNN层次结构 | 输出尺寸 | 作用 |
---|---|---|
输入层 | W1×H1×3 | 卷积网络的原始输入,可以是原始或预处理后的像素矩阵 |
卷积层 | W1×H1×K | 参数共享、局部连接,利用平移不变性从全局特征图提取局部特征 |
激活层 | W1×H1×K | 将卷积层的输出结果进行非线性映射 |
池化层 | W2×H2×K | 进一步筛选特征,可以有效减少后续网络层次所需的参数量 |
全连接层 | (W2⋅H2⋅K)×C | 将多维特征展平为2维特征,通常低维度特征对应任务的学习目标(类别或回归值) |
注:W1×H1×3对应原始图像或经过预处理的像素值矩阵,3对应RGB图像的通道;K表示卷积层中卷积核(滤波器)的个数;W2×H2为池化后特征图的尺度,在全局池化中尺度对应1×1;(W2⋅H2⋅K)是将多维特征压缩到1维之后的大小,C对应的则是图像类别个数。
常见的卷积主要是由连续紧密的卷积核对输入的图像特征进行滑窗式点乘求和操作,除此之外还有其他类型的卷积核在不同的任务中会用到:
卷积类别 | 示意图 | 作用 |
---|---|---|
标准卷积 | 最常用的卷积核,连续紧密的矩阵形式可以提取图像区域中的相邻像素之间的关联关系,3×3的卷积核可以获得3×3像素范围的感受视野 | |
扩张卷积(带孔卷积或空洞卷积) | 引入一个称作扩张率(Dilation Rate)的参数,使同样尺寸的卷积核可以获得更大的感受视野,相应的在相同感受视野的前提下比普通卷积采用更少的参数。同样是3×3的卷积核尺寸,扩张卷积可以提取5×5范围的区域特征,在实时图像分割领域广泛应用 | |
转置卷积 | 先对原始特征矩阵进行填充使其维度扩大到适配卷积目标输出维度,然后进行普通的卷积操作的一个过程,其输入到输出的维度变换关系恰好与普通卷积的变换关系相反,但这个变换并不是真正的逆变换操作,通常称为转置卷积(Transpose Convolution)而不是反卷积(Deconvolution)。转置卷积常见于目标检测领域中对小目标的检测和图像分割领域还原输入图像尺度。 | |
可分离卷积 | 标准的卷积操作是同时对原始图像H×W×C三个方向的卷积运算,假设有K个相同尺寸的卷积核,这样的卷积操作需要用到的参数为H×W×C× K个;若将长宽与深度方向的卷积操作分离出变为H×W与C的两步卷积操作,则同样的卷积核个数K,只需要(H×W+C)×K个参数,便可得到同样的输出尺度。可分离卷积(Seperable Convolution)通常应用在模型压缩或一些轻量的卷积神经网络中,如MobileNet[1]、Xception[2]等 |
1.1 卷积层参数
卷积层中需要用到卷积核(滤波器或特征检测器)与图像特征矩阵进行点乘运算,利用卷积核与对应的特征感受域进行划窗式运算时,需要设定卷积核对应的大小、步长、个数以及填充的方式,如表所示。
参数名 | 作用 | 常见设置 |
---|---|---|
卷积核大小 (Kernel Size) | 卷积核的大小定义了卷积的感受野 | 在过去常设为5,如LeNet-5;现在多设为3,通过堆叠3×3的卷积核来达到更大的感受域 |
卷积核步长 (Stride) | 定义了卷积核在卷积过程中的步长 | 常见设置为1,表示滑窗距离为1,可以覆盖所有相邻位置特征的组合;当设置为更大值时相当于对特征组合降采样 |
填充方式 (Padding) | 在卷积核尺寸不能完美匹配输入的图像矩阵时需要进行一定的填充策略 | 设置为’SAME’表示对不足卷积核大小的边界位置进行某种填充(通常零填充)以保证卷积输出维度与与输入维度一致;当设置为’VALID’时则对不足卷积尺寸的部分进行舍弃,输出维度就无法保证与输入维度一致 |
输入通道数 (In Channels) | 指定卷积操作时卷积核的深度 | 默认与输入的特征矩阵通道数(深度)一致;在某些压缩模型中会采用通道分离的卷积方式 |
输出通道数 (Out Channels) | 指定卷积核的个数 | 若设置为与输入通道数一样的大小,可以保持输入输出维度的一致性;若采用比输入通道数更小的值,则可以减少整体网络的参数量 |
1.1.1卷积层的本质是什么?
- 稀疏交互
- 动机:全连接网络,任意一对输入与输出神经元间都存在连接,现成稠密结构
- 思路:卷积核尺度远小于输入维度,每个输出神经元仅与前一层特定局部区域内的神经元存在连接
- 优点:全连接层的 参数 为 m;卷积层为 kn(m为输入,n为输出,k 为 卷积维度)
- 参数共享
- 思路:在同一模型的不同模块中使用相同参数,为卷积运算的固有属性
- 区别
- NN:计算每层输出时,权值参数矩阵中每个元素只作用于每个输入元素一次
- CNN:卷积核中每个元素将作用于每个局部输入的特定位置上
- 物理意义:使卷积层具有平移不变性 (满足 f(g(x))=g(f(x)) 时,称 f(x) 关于g 具有等变性)
1.1.2 卷积神经网络为什么有平移不变性
平移不变性:即目标在空间内发生平移,但是结果(标签)不变
-
平移不变性=卷积+最大池化。卷积层具有平移等变性,池化层具有平移不变性。卷积神经网络的平移不变性,是池化层赋予的。
如果一个函数满足“输入改变,输出也以同样的方式进行改变”这一性质,我们就说该函数是等变的(equivariant)。形式化地,如果函数f(x)与g(x)满足f(g(x))=g(f(x)),我们就说f(x)对于变换g具有等变性。卷积层具有平移等变性,也就是说卷积层对平移是敏感的,输入的平移能等价地影响输出。直观地,如果把一张输入图像先平移后卷积,其结果与先卷积后平移效果是一样的。如果我们移动输入图像中的物体,它的表示也会在输出中移动同样的量。
-
卷积层的参数共享(Parameter Sharing)特性使得卷积层具有平移等变性。参数共享是指在一个模型的多个函数中使用相同的参数。在传统的神经网络中,当计算一层的输出时,权重矩阵的每个元素只使用一次。当它乘以输入的一个元素后,就再也不会用到了。但是在卷积神经网络中,卷积核的每一个元素都作用在输入的每一个位置上。卷积运算中的参数共享保证了我们只需要学习一个参数集合,而不是对于每个位置都需要学习一个单独的参数集合。
如果一个函数满足“输入改变,输出不会受影响”这一性质,我们就说该函数是不变的(invariant)。形式化地,如果函数f(x)与g(x)满足g(x)=x’且f(x)=f(x’)=f(g(x)),我们就说f(x)对于变换g具有不变性。池化层具有(近似)平移不变性,也就是说池化层对平移不敏感。不管采用什么样的池化函数,当输入做出少量平移时,池化能够帮助输入的表示近似不变。例如我们使用最大池化,只要变换不影响到最大值,我们的池化结果不会收到影响。对于一个卷积核来说,只有一个值的变动会影响到输出, 其他的变换都不会造成扰动。平均池化的近似不变性就稍弱些。
局部平移不变性是一个很有用的性质,尤其是当我们关心某个特征是否出现而不关心它出现的具体位置时。
1.2 1x1卷积作用?
●实现信息的跨通道交互和整合。
●对卷积核通道数进行降维和升维,减小参数量。
1.3 什么是空洞卷积以及作用
- 动机
- 正常CNN 的 filler 作用于输入矩阵连续位置,利用 卷积 和 池化 整合多尺度的上下文信息,导致分辨率损失
- pooling 会损失信息,降低精度,不加则导致感受野变小,学不到全局信息
- CNN提取特征的能力受到卷积核大小的限制,特别是对于序列问题,容易造成长距离依赖问题
- 介绍:Dilated Convolutions,翻译为扩张卷积或空洞卷积。空洞卷积与普通的卷积相比,除了卷积核的大小以外,还有一个扩张率参数,主要用来表示扩张的大小,以及去掉 pooling。
- 空洞卷积与普通卷积的相同点:卷积核的大小是一样的,在神经网络中即参数数量不变,区别在于扩张卷积具有更大的感受野。感受野指的是特征图上某个元素的计算受输入图像影响区域的范围,即特征图上神经元能够“看到”的图像范围,例如3×3卷积核的感受野大小为9。
具体地,空洞卷积通过给卷积核插入“空洞”变相增加其大小。如果在卷积核的每两个元素之间插入D-1个空洞,该卷积核的有效大小为
K′=K+(K−1)×(D−1)- 其中K为原始卷积核大小,D称为膨胀率(扩张率,dilation rate)。当D=1时卷积核为普通的卷积核。
例如下图中
- 其中K为原始卷积核大小,D称为膨胀率(扩张率,dilation rate)。当D=1时卷积核为普通的卷积核。
- (a) 普通卷积,1-dilated convolution,卷积核的感受野为3×3=9。
- (b) 空洞卷积,2-dilated convolution,卷积核的感受野为7×7=49。
- © 空洞卷积,4-dilated convolution,卷积核的感受野为15×15=225。
- 优点:dilated width 会随着层数增加而指数增加,层数 增加,参数量线性增长, 感受野 指数增加,可覆盖全部信息
例如卷积核大小为3,步长为1,膨胀率为2的空洞卷积。 - 空洞卷积的作用
- 扩大感受野。如果希望增加输出单元的感受野,一般可以通过增加卷积核大小、增加卷积层数,或在卷积前增加池化操作来实现。但是前两者会增加参数数目,第三种方式会损失信息。空洞卷积就是一种增加感受野的同时不增加参数数量的方法。
- 捕获多尺度上下文信息:在进行空洞卷积前,通过双线性插值,对feature map进行上采样之后,再进行空洞卷积,这样可以在提高feature map的像素的同时,提取更多的全局信息。
1.4 反卷积
反卷积原理:反卷积=上采样=(转置卷积+微步卷积)⊆ 空洞卷积=一般意义上的广义卷积(包含上采样和下采样)。
上采样:在应用在计算机视觉的深度学习领域,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小,而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(e.g.:图像的语义分割),这个采用扩大图像尺寸,实现图像由小分辨率到大分辨率的映射的操作,叫做上采样(Upsample)。
反卷积是一种特殊的正向卷积,先按照一定的比例通过补0来扩大输入图像的尺寸,接着旋转卷积核,再进行正向卷积。
反卷积又被称为Transposed(转置) Convolution,其实卷积层的前向传播过程就是反卷积层的反向传播过程,卷积层的反向传播过程就是反卷积层的前向传播过程。因为卷积层的前向反向计算分别为乘 C 和 C^T,而反卷积层的前向反向计算分别为乘 C^T 和 (CT)T,所以它们的前向传播和反向传播刚好交换过来。
上图展示一个反卷积的工作过程,乍看一下好像反卷积和卷积的工作过程差不多,主要的区别在于反卷积输出图片的尺寸会大于输入图片的尺寸,通过增加padding来实现这一操作,上图展示的是一个strides(步长)为1的反卷积。
上图中的反卷积的stride为2,通过间隔插入padding来实现的。同样,可以根据反卷积的o、s、k、p参数来计算反卷积的输出i,也就是卷积的输入。公式如下:i=(o−1)∗s+k−2∗p。
1.4.1.作用
- 通过反卷积可以用来可视化卷积的过程
- 反卷积在GAN等领域中有着大量的应用。 比如用GANs生成图片,其中的generator和discriminator均采用深度学习,generator生成图片过程中采用的就是反卷积操作(当然discriminator采用卷积对generator生成的图片判别真伪)。
- 将一些低分辨率的图片转换为高分辨率的图片。
2.池化层
池化操作通常也叫做子采样(Subsampling)或降采样(Downsampling),在构建卷积神经网络时,往往会用在卷积层之后,通过池化来降低卷积层输出的特征维度,有效减少网络参数的同时还可以防止过拟合现象。
池化类型 | 示意图 | 作用 |
---|---|---|
一般池化(General Pooling) | 通常包括最大池化(Max Pooling)和平均池化(Mean Pooling)。以最大池化为例,池化范围(2×2)和滑窗步长(stride=2) 相同,仅提取一次相同区域的范化特征。 | |
重叠池化(Overlapping Pooling) | 与一般池化操作相同,但是池化范围Psize与滑窗步长stride关系为Psize>stride,同一区域内的像素特征可以参与多次滑窗提取,得到的特征表达能力更强,但计算量更大。 | |
空间金字塔池化∗(Spatial Pyramid Pooling) | 在进行多尺度目标的训练时,卷积层允许输入的图像特征尺度是可变的,紧接的池化层若采用一般的池化方法会使得不同的输入特征输出相应变化尺度的特征,而卷积神经网络中最后的全连接层则无法对可变尺度进行运算,因此需要对不同尺度的输出特征采样到相同输出尺度。 |
2.1 池化层 反向传播 是什么样的?
- 动机:由于 Pooling 操作容易改变 feature map 的 尺寸大小,使得 Pooling 层不可导;
- 举例说明:假定 2∗2的 池化,会生成 2∗2∗2∗2= 16 个梯度,即梯度无法传递到对应的位置;
- 方法:将一个像素的loss (梯度) 传递给4个像素,且需要保证传递的 loss (梯度)总和不变。
具体的,我们以平均池化和最大池化来举例子: - mean pooling 前向传播介绍:将 patch 中的值求平均来做 pooling;
- mean pooling 反向传播介绍:将值的梯度均等分为 n*n 份 分配给上一层,以保证 池化 前后 梯度之和保存不变;
- max pooling 前向传播介绍:将 patch 中的值取 max 来做 pooling 结果 传递给下一层;
- max pooling 反向传播介绍:把梯度直接传给前一层 值最大的一个像素,而其他像素不接受梯度,也就是为0;
参考资料:
大多数内容参考为DASOU,后续根据自己理解逐渐完善