深度学习之卷积神经网络CNN(一)网络结构

卷积神经网络(Convolutional Neural Networks)是一种深度前馈神经网络,基于视觉神经感受野的理论而提出,已成功应用于图像识别、语音识别、运动分析、自然语言处理等领域。CNN的核心思想是:将局部感受野、权值共享以及时间或空间亚采样这三种结构思想结合起来,获得了某种程度的位移、尺度、形状的不变性。与传统DNN的区别在于,CNN包含由卷积层和子采样层构成的特征提取器,能够通过加深网络层次、减少网络参数、非线性映射、避免复杂的预处理等操作得到原始图像的有效表征。CNN的缺点在于网络整体复杂性较大,难以优化且容易陷入过拟合等。

 

一、相关概念

1、卷积核/滤波器(kernel/filter)

给定输入图像,输出图像中每一个像素是输入图像中一个小区域内像素的加权平均,权值由一个函数定义,这个函数就是卷积核。卷积核只关注局部的特征,局部的程度取决于卷积核的大小。一般卷积层会含有多个卷积核,目的是学习输入的不同特征。卷积核在与输入进行卷积时,它的参数是固定的——权值共享,参数通过GD优化而非人为设定,因此参数的初始化非常重要。

卷积核常用的尺寸有3*3、5*5、7*7等,不用偶数尺寸的原因在于:奇数的对称性核便于确定中心(锚点)、对角线,padding对称计算简单;偶数的非对称性核不能保证特征图尺寸不变,导致混叠错误。1*1的卷积核虽然没有考虑前一层局部关系,但可以增加非线性、增加/减少特征图的数量(Inception)、实现跨通道的交互和信息整合(NIN),类似全连接的效果。大尺寸卷积核可以提取图像的复杂特征,适用于高清大图;小尺寸卷积核可以提取图像的显著特征,适用于较小的图片。相比一个大的卷积核,使用几个小的卷积核stack叠加在一起,与输入层的连通性不变,但可以大大降低参数个数及计算复杂度。

 

2、特征图(feature map)

卷积层包含卷积核对输入层进行卷积得到的三维形式的数据,三维数据可看作由多个二维图片叠加而成,每个二维图片称为一个feature map。不同的卷积核会提取不同的特征图,可以理解为从多个角度去分析图片。

 

3、局部感受野(receptive field)

大脑在识别图片的过程中,会由不同的皮质层处理不同方面的数据(颜色、形状、亮暗等),得到局部的认知;然后将不同皮质层的处理结果进行合并映射,得出全局的认知。CNN模仿大脑对图片的处理过程,认为局部的像素相关性较强,距离较远的像素则相关性较弱。所以每个神经元不必对全局图像进行感知,只需要进行局部感知,然后在更高层次对局部信息进行整合即可得到全局信息。

         

 

感受野用来表示网络内部不同神经元对原始图像的感受范围,即CNN每一层输出的特征图上的像素点映射到原始图片上的区域大小。神经元的感受野越大表示它能接触到的原始图像范围就越大、蕴含更为全局的特征;感受野越小表示它所包含的特征越趋向局部和细节,因此感受野可以用来判断每一层的抽象层次。

感受野的计算和之前所有层的卷积核尺寸kernel和步长stride有关:kernel影响本层特征图的感受野、stride只影响下一层的感受野,padding不影响感受野的大小。计算方法是从输出倒推输入,令r为感受野大小,j为两个相邻特征之间的距离(空洞dilated卷积>1),n为特征个数(特征图大小),start为第一个特征的坐标,k为卷积核大小,p为填充尺寸,s为步长:

        j_{out}=j_{in}*s

        r_{out}=r_{in}+(k-1)*j_{in}

        n_{out}=\frac{n_{in}+2p-k}{s}+1

        \mathrm{start}_{out}=\mathrm{start}_{in}+(\frac{k-1}{2}-p)*j_{in}

       

增大感受野的方法有:增大卷积核尺寸,池化,空洞卷积等。

空洞卷积是在卷积层中增加空洞,以此增加感受野,比传统的卷积增加了一个超参数j,传统卷积的缺陷有:上采样/池化层是确定的,内部数据结构、空间层级信息丢失,小物体信息无法重建(假设有4个池化层则任何小于2^4=16 pixel的物体信息理论上无法重建)。

       

 

二、CNN的基本组成

不同的资料对CNN的组成有不同的描述,但基本组成都是相近的,CNN的主要结构如下:

       

1、数据输入层 input layer

在CNN中,输入图片被看作由许多神经元组成,每个神经元代表一个像素值,CNN能基本上让图片保真,而不必压缩成矢量。和机器学习中的传统神经网络一样,首先需要对输入数据进行预处理操作,原因在于:

(1)输入数据单位不一致,可能导致神经网络收敛速度慢、训练时间长;

(2)方差大的特征在模式分类中的作用可能偏大,反之偏小;

(3)由于激活函数有值域限制,因此需要将目标函数映射到激活函数的值域中。

常见的数据预处理方式有:

(1)去均值:将输入数据的各个维度中心化为0;

(2)归一化:将输入数据的各个维度的幅度归一化到同样的范围;

(3)PCA:将数据降维,去掉特征之间的相关性;

(4)白化:在PCA的基础上,对转换后的数据每个特征轴上的幅度进行归一化。

在CNN中一般只会使用去均值和归一化对数据进行处理,很少使用PCA和白化的操作。

       

       

2、卷积层 CONV layer

卷积是一组固定的权重和窗口内数据做矩阵内积后求和的过程,每个卷积核可看做一个特征提取器,不同的卷积核复杂提取不同的特征,卷积核一般以随机小数矩阵的形式初始化,在网络的训练过程中卷积核将习得合理的权值。输入层中与卷积核尺寸相同的区域为局部感受野,二者之间的卷积结果为一个特征图上的数值,每个卷积层的神经元通常包含若干特征图,特征图个数为卷积核的深度depth。

卷积层的特点

(1)局部感知:将每个神经元看做一个卷积核,窗口(感受野)滑动时卷积核对局部数据进行计算;

(2)填充值(padding):图像外围如何填充,方法有全零、均值、镜像等;

(3)权值共享:每个特征图上的神经元是由同一个卷积核卷积得到的,共享权值可以减少网络参数个数,同时也降低了过拟合的风险;

(4)滑动窗口重叠:卷积核每次移动的距离为步长stride,步长一般小于卷积核尺寸使得窗口间出现重叠,这样可以降低窗口间的边缘不平滑的特性。

       

 

3、激励层 incentive layer

将卷积层的输出进行非线性映射,激励函数使用建议:

(1)首选ReLU函数,迭代速度快且将小于0的元素都置零;

(2)在ReLU失效的情况下,考虑使用Leaky ReLU或Maxout等函数;

(3)只在全连接层使用sigmoid系函数;

(4)tanh函数在某些情况下有比较好的效果,但应用场景比较少。

 

4、池化层 pooling layer

池化也称子(下)采样,通过减小表征的空间尺寸来减少参数个数,通常分为Max Pooling和Average Pooling两种形式,顾名思义,最大池化就是取窗口内的最大值,平局池化就是取窗口内的平均值。由于池化会损失一部分信息,有时候加上池化后效果反而变差了,因此需要做实验比较,具体问题具体分析。

       

 

5、全连接层 fully connected layer

类似DNN的结构,FC层与上一层之间所有神经元都有权重连接,通常FC层只会在CNN的尾部出现,将分布式特征表示映射到样本标记空间。实现方式:若上一层为全连接层可以使用1*1的卷积;若上一层为卷积层可以使用对应宽高的全局卷积;还可以使用全局平均池化GAP取代FC,然后使用softmax等函数作为目标函数训练网络。

 

6、Batch Normalization Layer

在数据预处理阶段,数据通常会被标准化以降低样本之间的差异性、加快收敛速度。同样地,对神经网络内部隐藏层的输出也可以进行标准化,即增加BN层使输出服从高斯分布,然后再送入下一层进行处理。BN层一般位于卷积层或FC层的后面,池化层的前面。

       

 

由于 \hat{x}_{i} 经过标准化后为正态分布,使得网络的表达能力下降。为了解决这个问题,引入两个新的参数β、γ,它们是在训练网络时自己学习得到的,极端情况下等于mini-batch的均值和方差。

BN的优点:梯度传递更加顺畅,不易导致神经元饱和;学习率可以设置的大一点,对初始值的依赖减少。

BN的缺点:如果网络层次比较深,再加入BN层可能会导致模型训练速度很慢,因此慎用BN层。

 

三、CNN的优缺点

优点:

        卷积核参数共享,对高维数据的处理没有压力;

        无需选择特征属性,只要训练好权重即可得到特征值;

        深层次的网络抽取图像信息比较丰富,表达效果好。

缺点:

        需要大量样本、大量调参,训练迭代次数很多,最好使用GPU加速训练;

        物理含义不明确,从每层输出中很难看出含义。

       

 

参考资料

https://www.zhihu.com/question/54149221/answer/192246237

https://blog.csdn.net/yunpiao123456/article/details/52437794

https://www.cnblogs.com/alexcai/p/5506806.html

https://www.cnblogs.com/hellcat/articles/7220040.html

 

  • 3
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
深度学习卷积神经网络(CNN)详解与代码实现(一) 卷积神经网络(CNN)是深度学习领域应用广泛的一种神经网络,它通过卷积、池化等操作,能够有效地处理图像、语音、文本等数据类型。本文将从卷积神经网络的基本原理、结构、训练方法等方面进行详细介绍,并通过代码实现,加深读者对卷积神经网络的理解。 一、卷积神经网络的基本原理 卷积神经网络(CNN)的基本原理是通过卷积操作对输入数据进行特征提取,然后通过全连接层对特征进行分类或回归。卷积操作是CNN的核心,它可以有效地减少网络的参数数量,提高模型的泛化能力。 卷积操作是指将一个卷积核(kernel)与输入数据进行卷积运算,得到一个特征图(feature map)。卷积核是一个小的矩阵,可以通过学习得到,它的作用是对输入数据进行特征提取。卷积操作可以提取出输入数据的局部特征,不同的卷积核可以提取出不同的特征,从而实现对输入数据的特征提取。 二、卷积神经网络的结构 卷积神经网络的结构包括卷积层、池化层、全连接层等。其卷积层和池化层是CNN的核心,全连接层用于分类或回归。 1. 卷积层 卷积层是CNN最重要的层之一,它的作用是对输入数据进行特征提取。卷积层的参数包括卷积核的大小、深度、步长等,其卷积核的大小和深度是最重要的参数。 卷积层的输入是一个四维张量,分别表示样本数量、图像高度、图像宽度、图像通道数。卷积核是一个三维张量,分别表示卷积核的高度、宽度、深度。 卷积操作可以通过矩阵乘法实现,也可以通过FFT等方法实现,但是者的方法在卷积核较小时速度较慢,后者在卷积核较大时速度较慢。 2. 池化池化层是CNN另一个重要的层,它的作用是对卷积层的输出进行降维和特征提取。池化操作可以通过最大池化、平均池化等方法实现。最大池化是指在一个池化区域内选取最大的值作为池化结果,平均池化是指在一个池化区域内取平均值作为池化结果。 池化操作可以有效地减少数据的大小,提高模型的泛化能力。但是需要注意的是,过度的池化会导致信息的丢失,从而影响模型的性能。 3. 全连接层 全连接层是CNN的最后一层,它的作用是将卷积层和池化层的输出进行分类或回归。全连接层是一个标准的神经网络,其每个神经元都与一层的所有神经元相连。 全连接层的输出可以通过softmax函数进行分类,也可以通过线性函数进行回归。 三、卷积神经网络的训练方法 卷积神经网络的训练方法与其他神经网络类似,主要包括向传播和反向传播两个过程。向传播是指将输入数据通过卷积层、池化层、全连接层等一系列操作,得到最终的输出结果。反向传播是指将输出结果与真实标签进行比较,然后通过梯度下降等方法,不断调整网络参数,使得输出结果更加接近真实标签。 在训练过程,需要注意的是,卷积神经网络通常需要较长的训练时间和大量的训练数据,以便得到更好的性能。此外,还需要注意选择适当的优化算法、学习率、正则化等参数,以避免过拟合和欠拟合等问题。 四、代码实现 下面是一个简单的卷积神经网络的代码实现,用于对手写数字进行分类。 ```python import tensorflow as tf # 加载数据 mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() # 数据预处理 x_train, x_test = x_train / 255.0, x_test / 255.0 # 定义模型 model = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)), tf.keras.layers.MaxPooling2

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值