CNN卷积神经网络基础知识

1 卷积

1.1 卷积核大小的选择

1. 选择奇数卷积核
①. 保护位置信息,奇数卷积核的中心点位置在中心,有利于定位任务。
②. padding时左右对称。
2. 在感受野相同的情况下优先选择较小的卷积核以减少计算量
①. 两个3x3卷积核的感受野与一个5x5卷积核的感受野相同
②. 两个3x3卷积核的参数量为3x3x2=18,而一个5x5卷积核的参数量为5x5=25。
③. 两个3x3卷积核比一个5x5卷积核多进行了一次非线性(卷积层后面通常接激活层)。
如下图,5x5的图像通过3x3的卷积,可以得到一个3x3的图像,将3x3的图像再进行一次3x3的卷积就变成了一个1x1的图像,这个1x1的图像包含了5x5图像的感受野。
在这里插入图片描述

1.2 1x1 卷积核的作用

1 * 1 卷积实际上是对每个像素点在通道方向的组合,在保留了图片原有分辨率的同时调节了通道数。
①. 升维降维,改变通道数。
②. 增加非线性。(卷积层后面通常接激活层)

1.3 常规卷积、Depthwise卷积与Pointwise卷积

1.3.1 常规卷积

常规卷积可以改变输入图像的通道数,具体设置如下:
卷积核的通道数 = 输入图像的通道数
卷积核的个数 = 输出图像所需要的通道数

参数量计算:
假设输入图像为3通道,需要输出的fp为4通道,那么我们需要4个3通道的卷积核,若卷积核大小为3 * 3,此时卷积层的flops = 3 * 3 * 3 * 4 = 108
在这里插入图片描述

1.3.2 Depthwise卷积

Depthwise卷积只可以改变输入图像的大小,不可以改变输入图像的通道数,
其利用单通道的卷积核对输入图像的每个通道单独进行卷积
,具体设置如下:
卷积核的通道数 = 1
卷积核的个数 = 输入图像的通道数 = 输出图像的通道数

缺点:没有有效利用输入图像在不同通道上的位置信息。

参数量计算:
假设输入图像为3通道,那么我们需要3个1通道的卷积核,若卷积核大小为3 * 3,此时卷积层的flops = 3 * 3 * 1 * 3 = 27
在这里插入图片描述

1.3.3 Pointwise卷积

Pointwise卷积只可以改变输入图像的通道数,不可以改变输入图像的大小,
其利用1 * 1的卷积核对输入图像在chanel方向上进行加权
,具体设置如下:
卷积核的通道数 = 输入图像的通道数
卷积核的个数 = 输出图像所需要的通道数

卷积核的尺寸 = 1 * 1

参数量计算:
假设输入图像为3通道,需要输出的fp为4通道,那么我们需要4个3通道的 1 * 1的卷积核,此时卷积层的flops = 1 * 1 * 3 * 4 = 12
在这里插入图片描述

1.4 反卷积

1.4.1 反卷积的作用

常用于图像的上采样,可将低分辨率图像恢复成高分辨率图像。不同于人工定义的插值方法,反卷积的参数可以网络自动学习。

1.4.2 反卷积的原理

假设输入图像为4 * 4,利用一个3 * 3的卷积核通过卷积运算可以得到一个2 * 2的输出。
在这里插入图片描述可以将上面的卷积操作转变成矩阵乘法,即输入图像变为16 * 1的矩阵A,卷积核变为4 * 16的矩阵B,这时输出图像C = BA,维度为4 * 1,将其reshape即可得到2 * 2的输出图像。

反过来,我们可以用BT * C = A,获得输入图像A,此时BT 维度为16 * 4,C的维度为4 * 1,那么A的维度为16 * 1,经过reshape 即可得到一个4 * 4的输入图像。

在这里插入图片描述

1.4.3 棋盘格效应

当卷积核的大小不能被步长整除时,反卷积会出现不均匀的重叠,从而形成棋盘格现象。
如下图,卷积核大小为3. 步长为2,浅灰处没有重叠,深灰处出现了两次重叠,而黑色部分则出现了四次重叠。

解决方法:
① . 确保卷积核大小被步长整除
②. 先利用(最近邻插值或双线性插值)提升分辨率,再进行卷积操作
在这里插入图片描述

1.5 卷积计算

1.5.1 计算输出特征图尺寸

输出w = (输入w - k + 2p)/ s +1
输出h = (输入h - k + 2p)/ s +1
在这里插入图片描述

1.5.2 计算卷积层参数量与计算量

所谓参数量实际计算的是卷积核的参数量,其与卷积核的大小、卷积核的通道数、卷积核的个数有关。
c ---- 卷积核通道数,常规卷积核的通道数 = 上一层输出通道数
n ---- 卷积核个数, 常规卷积的卷积核个数 = 该层需要输出的通道数
1 ---- bias参数
参数量:parms = (k_size * k_size * c + 1) * n
计算量:flops = 参数量 * 输入w * 输入h

2 池化

2.1 CNN中池化的作用

图像中相邻的像素往往值相近,卷积后的输出图像包含了很多冗余信息,通过池化可以完成对图像的下采样,获得有效信息,减少参数量。

2.2 池化如何进行反向传播

2.2.1 平均池化

对于平均池化,其前向传播是取某特征区域的平均值进行输出,这个区域的每一个神经元都参与了前向传播,因此,在反向传播时,需要将梯度平均分配给每一个神经元再进行反向传播:
在这里插入图片描述

2.2.2 最大池化

对于最大池化,其前向传播是取某特征区域的最大值进行输出,这个区域只有最大值的神经元参与了前向传播,因此,在反向传播时,将梯度分配给最大值神经元位置即可,其余为0:
在这里插入图片描述

3 激活函数

3.1 激活函数的作用

1. 引入非线性因素,方便学习复杂数据。
2. 激活函数可以把当前特征空间通过一定的线性映射转换到另一个空间,让数据能够更好的被分类。

3.2 常见的激活函数

1. sigmoid 激活函数
f ( x ) = 1 1 + e − x f(x) = \frac{1}{1 + e^{-x}} f(x)=1+ex1, 其值域为 ( 0 , 1 ) (0,1) (0,1)
函数图像:
在这里插入图片描述
导函数图像
在这里插入图片描述
2. tanh 激活函数
f ( x ) = t a n h ( x ) = e x − e − x e x + e − x f(x) = tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} f(x)=tanh(x)=ex+exexex,值域为 ( − 1 , 1 ) (-1,1) (1,1)

在这里插入图片描述

3. Relu 激活函数
f ( x ) = m a x ( 0 , x ) f(x) = max(0, x) f(x)=max(0,x) ,值域为 [ 0 , + ∞ ) [0,+∞) [0,+)

Relu 的优点
①. 导数为1,解决了梯度消失、梯度爆炸问题。
②. 计算方便,加速了网格的训练。
③. 正饱和区的梯度大于0,不会造成梯度弥散。
Relu 的缺点
①. 由于负数部分恒为0,会导致一些神经元无法激活(可通过设置小学习率部分解决)
②. 输出不是以0为中心的
在这里插入图片描述

4. Leak Relu 激活函数
f ( x ) = m a x ( k ∗ x , x ) f(x) = max(k∗x , x) f(x)=max(kx,x),值域为 ( − ∞ , + ∞ ) (-∞,+∞) (,+)
解决了Relu中0区间的影响,k为leak系数,一般选择0.01或0.02。

在这里插入图片描述
5. Softmax 激活函数

S i = e i ∑ j e j S_i = \frac{e^i}{\sum_j e^j} Si=jejei

Softmax 将多个神经元的输出映射到[0,1]区间内,并且他们的和为1,用于多分类神经网络输出。因而我们可以将每个Softmax值理解为概率。选取概率最大的值作为分类的类别。

Softmax的计算
在这里插入图片描述

3.3 激活函数的性质

  1. 非线性
  2. 可导性:梯度计算
  3. 单调性:当激活函数是单调的时候,单层网络能够保证是凸函数
  4. f ( x ) ≈ x f(x)≈x f(x)x:训练更高效

3.4 激活函数的选择

  1. 如果在隐藏层上不确定使用哪个激活函数,那么通常会使用 Relu 激活函数。有时,也会使用 tanh 激活函数。
  2. 如果遇到了一些死的神经元,我们可以使用 Leaky Relu 函数。
  3. 输出层损失函数计算需要one-hot格式时可以使用sigmoid
  4. sigmoid不存在类间竞争,用于多标签,softmax存在类间竞争,用于多分类。

4 Dropout

4.1 dropout 原理

输入层与输出层保持不变,隐藏层的神经元按比例随机失活。

4.2 dropout解决过拟合的方式

①. dropout使神经元随机失活,由于此次失活的神经元不更新参数只保留先前的结果,因而能保证每一神经元的参数不会过大,起到了L2正则化压缩权重平方和开方的效果。
②.在单次训练中随机关掉部分神经元,简化了模型结构,减少了神经元之间的相互依赖。
③. 类似于训练了多个简单的网络,结果采用取平均的方式。

4.3 dropout 的参数keep_prob

  1. 在不同层可以选择不同的keep_prob,结构复杂的层,取小keep_prob,结构简单的层选择大keep_prob。
  2. keep_prob等于1表示不使用dropout,即该层的所有节点都保留。
  3. 一般情况keep_prob=0.5效果最佳(随机生成的网络结构最多。)

4.4 训练时的缩放参数

由于测试中不会随机丢失神经元,因此在训练时对没有被失活的神经元做一个rescale加权。
rescale rate = 1 / (1 - keep_prob)

4.5 dropout的缺点

代价函数J不再被明确定义,无法保证每次训练梯度都会下降,不便于调试。

5 BN(Batch Normalization)

5.1 归一化的必要性(产生背景)

① 神经网络本质是学习数据分布,一旦训练数据与测试数据的分布不同,网络的泛化能力将大大降低;
② 若每个batch训练数据的分布各不相同,那么网络每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度。
③ 由于本层的输入由上一层的参数和输入得到,而上一层的参数在训练过程中会一直跟新,因此必然导致其后面每一层的数据分布。我们把网络中间层在训练过程中,数据分布的改变称之为:“Internal Covariate Shift(ICS)”。因此理所当然的想到在上一层网络输出之后,本层网络输入之前做一个数据预处理来改变ICS现象,这就引出了BN。

5.2 BN的实现过程

①. 对某一层的网络输入进行归一化,其中E(x (k))指每一批数据,x (k)的平均值,分母为每批数据x (k)的标准差。
在这里插入图片描述

②. 引入可学习的重构参数γ、β,以恢复原始网络学到的特征分布-----------γ、β的作用
在这里插入图片描述
每一个神经元x (k)都会有一对这样的参数γ、β。这样其实当:
在这里插入图片描述
在这里插入图片描述
可以恢复原始网络学到的特征x (k)

5.3 BN的训练与推理过程

训练过程:
其中m = batch_size
x i: 本层的网络输入(上一层网络激活层后输出)
y i:网络学习的特征分布
在这里插入图片描述
推理过程:
由于推理阶段,网络输入不存在batch的概念,因此直接用训练时获得的全局统计量来当作推理阶段的均值和方差
在这里插入图片描述在这里插入图片描述

5.3 BN的优点

  1. 减少了人为选择的参数,可以取消dropout和L2正则项参数。
  2. 减少了对学习率的要求。可以使用初始很大的学习率,或者选择较小的学习率也能快速收敛。
  3. 打散了原来数据的分布,一定程度上能缓解过拟合。
  4. 减少梯度消失,加快收敛速度,提高训练精度。

6 感受野

6.1 感受野定义

在卷积神经网络中,feature map上某个元素受输入图像上某个区域的影响,这个区域即该元素的感受野。

6.2 感受野计算

r l : 第l层的感受野
r l-1 : 第l-1层的感受野
k l : 第l层的kernel_size
s i : 第i层的步长

start l: 第l层的感受野中心点
p l:第l层的padding
在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42454048/article/details/129628047