一文精简介绍CNN神经网络

“简 介: 这是love1005lin在CSDN上2021-11-19发布的一篇深度学习的卷积神经网,内容整理的精简,移动,现在将其进行转载,供大家参考。
01 基本原理
卷积神经网络的基本结构大致包括:卷积层、激活函数、池化层、全连接层、输出层等。

▲ 图1.1 CNN的基本结构

▲ 图1.2 CNN 的基本结构

一、卷积层
1、二维卷积
给定二维的图像作为输入,二维卷积核,卷积运算可以表示为:$$S\left( {i,j} \right) = \left( {I * K} \right)\left( {i,j} \right) = \sum\limits_m{} {\sum\limits_n{} {I\left( {i - m,j - n} \right) \cdot K\left( {m,n} \right)} }$$
卷积运算中的卷积核需要进行上下翻转和左右翻转:
如果忽略卷积核的左右翻转,对于实数卷积实际上与互相换运算是一致的:

▲ 图1.1.1 二维卷积 运算示意图

2、卷积步长
卷积步长,也就是每次卷积核移动的步长。
下图显示了卷积步长分别为1,2两种情况下的输出结果。从中可以看到,当步长大于1之后,相当于从原来的的步长为1的情况下结果进行降采样。

▲ 图1.1.2 卷积步长分别为1,2两种情况下输出的结果

3、卷积模式
根据结果是否要求卷积核与原始图像完全重合,部分重合以及结果尺寸的要求,卷积模式包括有三种:

  • Full:允许卷积核部分与原始图像重合;所获得结果的尺寸等于原始图像尺寸加上卷积核的尺寸减1;
  • Same:允许卷积核部分与原始图像重合;但最终截取Full卷积结果中中心部分与原始图像尺寸相同的结果;
  • Validate:所有卷积核与原始图像完全重合下的卷积结果;结果的尺寸等于原始图像的尺寸减去卷积核尺寸加1;

下面显示了三种卷积模式对应的情况。实际上可以通过对于原始图像补零(Padding)然后通过Validate模式获得前面的Full,Same两种模式的卷积结果。

▲ 图1.1.3 三种卷积模式示意图

4、数据填充
(1)边缘填充
数据填充,也称为Padding。如果有一个尺寸为的图像,使用尺寸为卷积核进行卷积操作,在进行卷积之前对于原图像周围填充层数据,可以影响卷积输出结果尺寸。
下面就是对于原始的图像周围进行1层的填充,可以将Validate模式卷积结果尺寸增加1。

▲ 图1.1.4 对于原始的图像周围进行1层的填充,可以将Validate模式卷积结果尺寸增加1

▲ 图1.1.5 边缘填充,步长为2的卷积

(2)膨胀填充
对于数据的填充也可以使用数据上采样填充的方式。这种方式主要应用在转置卷积(反卷积中)。

▲ 图1.1.6 转置卷积对于数据膨胀填充

5、感受野
感受野:卷积神经网络每一层输出的特征图(featuremap)上的像素点在输 入图片上映射的区域大小,即特征图上的一个点对应输入图上的区 域。
下图反映了经过几层卷积之后,卷积结果所对应前几层的图像数据范围。

▲ 图1.1.7 经过几层卷积之后,卷积结果所对应前几层的图像数据范围

计算感受野的大小,可以从后往前逐层计算:

  • 第层的感受野大小和第层的卷积核大小、卷积步长有关系,同时也与层的感受野大小有关系;
  • 假设最后一层(卷积层或者池化层)输出的特征图感受也都大学(相对于其直接输入而言)等于卷积核的大小;

● 公式中:
Si:第i层步长,Stride
Ki:第i层卷积核大小,Kernel Size

感受野的大小除了与卷积核的尺寸、卷积层数,还取决与卷积是否采用空洞卷积(Dilated Convolve)有关系:

▲ 图1.1.8 卷积核进行膨胀之后,进行空洞卷积可以扩大视野的范围

▲ 图1.1.9 空洞卷积尺寸放大两倍的情况

6、卷积深度
卷积层的深度(卷积核个数):一个卷积层通常包含多个尺寸一致的卷积核。如果在CNN网络结构中,一层的卷积核的个数决定了后面结果的层数,也是结果的厚度

▲ 图1.1.10 多个卷积核形成输出结果的深度(厚度)

7、卷积核尺寸
卷积核的大小一般为奇数奇数 1×1,3×3,5×5,7×7都是最常见的。这是为什么呢?为什么没有偶数偶数?
(1)更容易padding
在卷积时,我们有时候需要卷积前后的尺寸不变。这时候我们就需要用到padding。
(2)更容易找到卷积锚点
在CNN中,进行卷积操作时一般会以卷积核模块的一个位置为基准进行滑动,这个基准通常就是卷积核模块的中心。若卷积核为奇数,卷积锚点很好找,自然就是卷积模块中心,但如果卷积核是偶数,这时候就没有办法确定了,让谁是锚点似乎都不怎么好。

▲ , LeNET CNN的结构示意图

二、激活函数
激活函数是用来加入非线性因素,提高网络表达能力,卷积神经网络中最常用的是ReLU,Sigmoid使用较少。

▲ 图1.2.1 常见到的激活函数

▲ 图1.2.2 激活函数表达式以及对应的微分函数

1、ReLU函数

ReLU函数的优点:

  • 计算速度快,ReLU函数只有线性关系,比Sigmoid和Tanh要快很多
  • 输入为正数的时候,不存在梯度消失问题

ReLU函数的缺点:

  • 强制性把负值置为0,可能丢掉一些特征
  • 当输入为负数时,权重无法更新,导致“神经元死亡”(学习率不 要太大)

2、Parametric ReLU

  • 当的时候,称为 Leaky ReLU;
  • 当从高斯分布随机产生的时候,称为 Randomized ReLU(RReLU)

PReLU函数的优点:

  • 比sigmoid/tanh收敛快;
  • 解决了ReLU的“神经元死亡”问题;

PReLU函数的缺点:

  • 需要再学习一个参数,工作量变大

3、ELU函数

ELU函数的优点:

  • 处理含有噪声的数据有优势
  • 更容易收敛

ELU函数的缺点:

  • 计算量较大,收敛速度较慢

CNN在卷积层尽量不要使用Sigmoid和Tanh,将导致梯度消失。首先选用ReLU,使用较小的学习率,以免造成神经元死亡的情况。
如果ReLU失效,考虑使用Leaky ReLU、PReLU、ELU或者Maxout,此时一般情况都可以解决
4、特征图

  • 浅层卷积层:提取的是图像基本特征,如边缘、方向和纹理等特征
  • 深层卷积层:提取的是图像高阶特征,出现了高层语义模式,如“车轮”、“人脸”等特征

三、池化层
池化操作使用某位置相邻输出的总体统计特征作为该位置 的输出,常用最大池化 (max-pooling)和均值池化(average- pooling) 。
池化层不包含需要训练学习的参数,仅需指定池化操作的核大小、操作步幅以及池化类型。

▲ 图1.3.1 最大值池化一是均值池化示意图

池化的作用:

  • 减少网络中的参数计算量,从而遏制过拟合;
  • 增强网络对输入图像中的小变形、扭曲、平移的鲁棒性(输入里的微 小扭曲不会改变池化输出——因为我们在局部邻域已经取了最大值/ 平均值)
  • 帮助我们获得不因尺寸而改变的等效图片表征。这非常有用,因为 这样我们就可以探测到图片里的物体,不管它在哪个位置

四、全连接与输出层

  • 对卷积层和池化层输出的特征图(二维)进行降维
  • 将学到的特征表示映射到样本标记空间的作用

输出层:

  • 对于分类问题采用Softmax函数:
  • 对于回归问题,使用线性函数:

五、CNN的训练
1、网络训练基本步骤
CNN的训练,也称神经网络的学习算法与经典BP网络是一样的,都属于随机梯度下降(SGD:Stochastic Gradient Descent),也称增量梯度下降,实验中用于优化可微分目标函数的迭代算法。

  • Step 1:用随机数初始化所有的卷积核和参数/权重
  • Step 2:将训练图片作为输入,执行前向步骤(卷积, ReLU,池化以及全连接层的前向传播)并计算每个类别的对应输出概率。
  • Step 3:计算输出层的总误差
  • Step 4:反向传播算法计算误差相对于所有权重的梯度,并用梯度下降法更新所有的卷积核和参数/权重的值,以使输出误差最小化

注:卷积核个数、卷积核尺寸、网络架构这些参数,是在 Step 1 之前就已经固定的,且不会在训练过程中改变——只有卷 积核矩阵和神经元权重会更新。
2、网络等效为BP网络
和多层神经网络一样,卷积神经网络中的参数训练也是使用误差反向传播算法,关于池化层的训练,需要再提一下,是将池化层改为多层神经网络的形式:

▲ 图1.5.1 神经网络中池化层对应着多层神经网络

▲ 图1.5.2 卷积层对应的多层神经网络的形式

▲ 图1.5.3 卷积层对应的多层神经网络形式

3、每层特征图尺寸

  • 输入图片的尺寸:一般用n×n表示输入的image大小。
  • 卷积核的大小:一般用 f*f 表示卷积核的大小。
  • 填充(Padding):一般用 p 来表示填充大小。
  • 步长(Stride):一般用 s 来表示步长大小。
  • 输出图片的尺寸:一般用 o来表示。
  • 如果已知n 、 f 、 p、 s 可以求得 o ,计算公式如下

● 其中:
[]:是向下取整符号,用于结果不是整数时向下取整

02 经典CNN

▲ 图2.1 CNN发展脉络

一、LeNet-5
1、简介
LeNet-5由LeCun等人提出于1998年提出,主要进行手写数字识别和英文字母识别。经典的卷积神经网络,LeNet虽小,各模块齐全,是学习 CNN的基础。
参考http://yann.lecun.com/exdb/lenet/
Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based learning applied to document recognition. Proceedings of the IEEE, November 1998.
2、网络结构

▲ 图2.1.1 LeNet-5网络结构

  • 输入层:32 × 32 的图片,也就是相当于1024个神经元;
  • C1层(卷积层):选择6个 5 × 5 的卷积核,得到6个大小为32-5+1=28的特征图,也就是神经元的个数为 6 × 28 × 28 = 4704;
  • S2层(下采样层):每个下抽样节点的4个输入节点求和后取平均(平均池化),均值 乘上一个权重参数加上一个偏置参数作为激活函数的输入,激活函数的输出即是下一层节点的值。池化核大小选择 2 ∗ 2 得到6个 14 ×14大小特征图
  • C3层(卷积层):用 5 × 5 的卷积核对S2层输出的特征图进行卷积后,得到6张10 × 10新 图片,然后将这6张图片相加在一起,然后加一个偏置项b,然后用 激活函数进行映射,就可以得到1张 10 × 10 的特征图。我们希望得到 16 张 10 × 10 的 特 征 图 , 因 此 我 们 就 需 要 参 数 个 数 为 16 × ( 6 × ( 5 × 5 ) ) 个参数
  • S4层(下采样层):对C3的16张 10 × 10 特征图进行最大池化,池化核大小为2 × 2,得到16张大小为 5 × 5的特征图。神经元个数已经减少为:16 × 5 × 5 =400
  • C5层(卷积层):用 5 × 5 的卷积核进行卷积,然后我们希望得到120个特征图,特征图 大小为5-5+1=1。神经元个数为120(这里实际上是全连接,但是原文还是称之为了卷积层)
  • F6层(全连接层):有84个节点,该层的训练参数和连接数都( 120 + 1 ) × 84 = 10164
  • Output层:共有10个节点,分别代表数字0到9,如果节点i的输出值为0,则网络识别的结果是数字i。采用的是径向基函数(RBF)的网络连接方式:

$$y_i = \sum\limits_j{} {\left( {x - j - w_{ij} } \right)2 } $$

  • 总结:卷积核大小、卷积核个数(特征图需要多少个)、池化核大小(采样率多少)这些参数都是变化的,这就是所谓的CNN调参,需要学会根据需要进行不同的选择。

二、AlexNet
1、简介
AlexNet由Hinton的学生Alex Krizhevsky于2012年提出,获得ImageNet LSVRC-2012(物体识别挑战赛)的冠军,1000个类别120万幅高清图像(Error: 26.2%(2011) →15.3%(2012)),通过AlexNet确定了CNN在计算机视觉领域的王者地位。
参考:A. Krizhevsky, I. Sutskever, and G. Hinton. Imagenet classification with deep convolutional neural networks. In NIPS, 2012.

  • 首次成功应用ReLU作为CNN的激活函数
  • 使用Dropout丢弃部分神元,避免了过拟合
  • 使用重叠MaxPooling(让池化层的步长小于池化核的大小), 一定程度上提升了特征的丰富性
  • 使用CUDA加速训练过程
  • 进行数据增强,原始图像大小为256×256的原始图像中重 复截取224×224大小的区域,大幅增加了数据量,大大减 轻了过拟合,提升了模型的泛化能力

2、网络结构
AlexNet可分为8层(池化层未单独算作一层),包括5个卷 积层以及3个全连接层:

▲ 图2.2.1 AlexNet网络结构

  • 输入层:AlexNet首先使用大小为224×224×3图像作为输入(后改为227×227×3) (227-11+2*0)/4+1=55
  • 第一层(卷积层):包含96个大小为11×11的卷积核,卷积步长为4,因此第一层输出大小为55×55×96;然后构建一个核大小为3×3、步长为2的最大池化层进行数据降采样,进而输出大小为27×27×96
  • 第二层(卷积层):包含256个大小为5×5卷积核,卷积步长为1,同时利用padding保证 输出尺寸不变,因此该层输出大小为27×27×256;然后再次通过 核大小为3×3、步长为2的最大池化层进行数据降采样,进而输出大小为13×13×256
  • 第三层与第四层(卷积层):均为卷积核大小为3×3、步长为1的same卷积,共包含384个卷积核,因此两层的输出大小为13×13×384
  • 第五层(卷积层):同样为卷积核大小为3×3、步长为1的same卷积,但包含256个卷积 核,进而输出大小为13×13×256;在数据进入全连接层之前再次 通过一个核大小为3×3、步长为2的最大池化层进行数据降采样, 数据大小降为6×6×256,并将数据扁平化处理展开为9216个单元
  • 第六层、第七层和第八层(全连接层):全连接加上Softmax分类器输出1000类的分类结果,有将近6千万个参数

三、VGGNet
1、简介
VGGNet由牛津大学和DeepMind公司提出:

参考:K. Simonyan and A. Zisserman. Very deep convolutional networks for large-scale image recognition. In ICLR, 2015.
比较常用的是VGG-16,结构规整,具有很强的拓展性。相较于AlexNet,VGG-16网络模型中的卷积层均使用 3 ∗ 3 的 卷积核,且均为步长为1的same卷积,池化层均使用 2 ∗ 2的 池化核,步长为2。
2、网络结构

▲ 图2.3.1 VGGNet网络结构

  • 两个卷积核大小为 3 ∗ 3 .55∗5, 相当于单个卷积核大小为 5 ∗ 5 的卷积层
  • 两者参数数量比值为( 2 ∗ 3 ∗ 3 ) / ( 5 ∗ 5 ) = 72 ,前者参数量更少
  • 此外,两个的卷积层串联可使用两次ReLU激活函数,而一个卷积层只使用一次

四、Inception Net
1、简介
Inception Net 是Google公司2014年提出,获得ImageNet LSVRC-2014冠军。文章提出获得高质量模型最保险的做法就是增加模型的深度(层数)或者是其宽度(层核或者神经元数),采用了22层网络。
Inception四个版本所对应的论文及ILSVRC中的Top-5错误率:

  • Going Deeper with Convolutions: 6.67%
  • Batch Normalization: Accelerating Deep Network Training by
  • Reducing Internal Covariate Shift: 4.8%
  • RethinkingtheInceptionArchitectureforComputerVision:3.5%
  • Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning: 3.08%

2、网络结构
Inception Module

  • 深度:层数更深,采用了22层,在不同深度处增加了两个 loss来避免上述提到的梯度消失问题
  • 宽度:Inception Module包含4个分支,在卷积核3x3、5x5 之前、max pooling之后分别加上了1x1的卷积核,起到了降低特征图厚度的作用
    • 1×1的卷积的作用:可以跨通道组织信息,来提高网络的表达能力;可以对输出通道进行升维和降维。

▲ 图2.4.1 Inception Net网络结构

五、ResNet
1、简介
ResNet(Residual Neural Network),又叫做残差神经网 络,是由微软研究院的何凯明等人2015年提出,获得ImageNet ILSVRC 2015比赛冠军,获得CVPR2016最佳论文奖。
随着卷积网络层数的增加,误差的逆传播过程中存在的梯 度消失和梯度爆炸问题同样也会导致模型的训练难以进行,甚至会出现随着网络深度的加深,模型在训练集上的训练误差会出现先降低再升高的现象。残差网络的引入则有助于解决梯度消失和梯度爆炸问题。
残差块
ResNet的核心是叫做残差块(Residual block)的小单元, 残差块可以视作在标准神经网络基础上加入了跳跃连接(Skip connection)。

  • 原连接:

▲ 图2.5.1 原链接结构示意图

  • 跳跃连接:

▲ 图2.5.2 跳跃结构示意图

  • Skip connection作用:

记:

我们有:

六、Densenet
1、简介
DenseNet中,两个层之间都有直接的连接,因此该网络的直接连接个数为L(L+1)/2。
对于每一层,使用前面所有层的特征映射作为输入,并且使用其自身的特征映射作为所有后续层的输入:

▲ 图2.6.1 DenseNet示意图

参考:Huang, G., Liu, Z., Van Der Maaten, L., & Weinberger, K. Q. (2017). Densely connected convolutional networks. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 4700- 4708).
2、网络结构
5层的稠密块示意图:

▲ 图2.6.2 5层DenseNet的结构

DenseNets可以自然地扩展到数百个层,而没有表现出优化困难。在实验中,DenseNets随着参数数量的增加,在精度上产生一致的提高,而没有任何性能下降或过拟合的迹象。
优点:

  • 缓解了消失梯度问题
  • 加强了特征传播,鼓励特征重用
  • 一定程度上减少了参数的数量

 总 结 ※
这是love1005lin在CSDN上2021-11-19发布的一篇深度学习的卷积神经网,内容整理的精简,移动,现在将其进行转载,并发布在公众号“TSINGHUAZHUOQING”中。
深度学习-卷积神经网络(CNN)[2] : https://blog.csdn.net/love1005lin/article/details/121418206?utm_source=app&app_version=4.20.0
参考资料
[1]深度学习-卷积神经网络(CNN)https://blog.csdn.net/love1005l

  • 5
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
卷积神经网络CNN)是一类包含卷积计算的前馈神经网络,专门用于图像处理等任务。CNN的设计基于图像任务中的平移不变性,也就是说图像中的对象在不同位置具有相同的含义。 CNN在图像处理领域得到了广泛应用,它能够有效处理高维的图像数据(如RGB矩阵表示),避免了传统的前馈网络需要大量输入神经元的问题。 使用CNN进行图像识别基本流程如下: 1. 数据准备:收集并标注大量的图像数据集,将其划分为训练集和测试集。 2. 网络构建:使用CNN的核心概念,如卷积层(Conv2D)、池化层(MaxPool2D)、展平层(Flatten)和全连接层(Dense),构建一个适合图像识别任务的网络结构。 3. 训练模型:使用训练集的图像数据作为输入,通过反向传播算法和优化器(如Adam)对网络进行训练,使其能够学习图像中的特征和模式。 4. 评估与调优:使用测试集的图像数据对训练好的模型进行评估,并根据评估结果进行调优,如调整网络参数、增加数据量等。 5. 应用模型:在实际应用中,使用训练好的模型对新的图像数据进行识别,实现图像分类、目标检测等任务。 综上所述,CNN卷积神经网络)是一种用于图像识别的神经网络模型,通过对图像进行卷积计算和特征提取,能够有效地进行图像分类和目标检测等任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [基于CNN的图像识别(Tensorflow)](https://blog.csdn.net/first_bug/article/details/124938432)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [一文弄懂CNN及图像识别](https://blog.csdn.net/m0_61899108/article/details/122401122)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值