学过线代就可看懂的卷积神经网络基本结构

模型分析

卷积神经网络(Convolutional Neural Networks, CNN)是目前计算机视觉较多使用的模型结构。其训练方法主要是通过卷积核(Kernel)遍历目标图像的像素点,提取图像特征,并对图像进行预测,在大量数据的反馈训练中不断调整网络参数,形成一套对测试图像有良好识别效果的网络。卷积神经网络相较于普通网络有着显著优点。针对于图片的像素点来说,往往在空间上下具有高度相似的特征,它们之间有着较为紧密的联系。而将图片像素展开成一维向量时,则丢失了大量的位置信息,这显然不符合我们人类正常神经网络的工作原理。同时,如果图片像素点过多,需要全连接的参数就会很多,将会使拟合出来的模型过拟合, 不利于目标分类或者检测。因此引入卷积的概念——一种数学分析中的积分变换方法,既能提取到相邻像素之间的特征模式,又能保证参数的个数不随图片尺寸变化。

卷积神经网络模型的基本模块

  1. 卷积(Convolution)
  2. 池化(Pooling)
  3. 激活函数(Activation Function)
  4. 批归一化(Batch Normalization)
  5. 丢弃(Dropout)
    经典卷积神经网络

卷积

  1. 卷积计算

卷积核也被称作滤波器(Fliter)。我们可以假设卷积核的高和宽分别为kh和kw,则将此卷积核称为khkw的卷积。卷积核的计算过程可以用如下的数学公式表示出来,其中a代表输入图片,b代表输出特征图片,w是卷积核参数,它们都是二位数组,∑uv表示对卷积核参数进行遍历并求和。

当然,为了消除线性的影响,通常我们可以在卷积计算中加入偏置项,假设偏置量为c,则有公式:
在这里插入图片描述
卷积网络计算
2. 填充

假设原图片尺寸为HW,则经过一次卷积之后,图片尺寸会变小,设输出的高和宽分别为HoutWout,则在一次卷积操作之后:
在这里插入图片描述
为了使卷积操作之后的图片大小与原图一样,可以引入填充概念,即在第一行之前填充Ph1行,最后一行后面填充Ph2行;相对的,在宽度方向分别填充Pw1和Pw2列。则经过同样kh*kw的卷积操作之后,输出图片尺寸为:
在这里插入图片描述
如果采取等量填充操作,即选ph1=ph2=ph,pw1=pw2=pw,输出图片尺寸为:
在这里插入图片描述
填充
3. 步幅

步幅指的是通过每一次卷积操作之后在图片移动的像素点步长,当宽和高方向的步幅分别为Sh和Sw时,输出图像的尺寸为:

在这里插入图片描述
步幅为2的卷积操作
4. 感受野

输出特征图上每个点的数值,是由输入图片上khkw的区域的元素与卷积核每个元素相乘再相加得到的,所以输入图像上khkw区域内每个元素数值的改变,都会影响输出点的像素值,我们将这个区域叫做输出特征图上对应点的感受野。感受野内每个元素数值的变动,都会影响输出点的数值变化。

  1. 多输入通道、多输出通道和批量操作
  • 多输入通道

针对于只有一个通道的灰度图可以针对上述单通道卷积操作,而实际中的图片大多数拥有RGB三个通道或者RGBA四个通道。此时,我们应该针对通道数匹配相应的卷积核的个数。设输入的通道数为Cin,则卷积核的输入通道数也为Cin。我们可以确定当卷积核的维度为Cinkhkw,对于任意通道的CinHinWin输入,可以得到的Hout*Wout输出结果。

多输入通道

  • 多输出通道

一般来说,卷积操作的输出特征图也会有多个通道Cout,这时我们设输入的通道数为Cin,输出结果的通道数则为Cout,则卷积核的输入通道数也为Cin。我们可以确定当卷积核的维度为CoutCinkhkw,对于任意通道的CinHinWin输入,可以得到CoutHout*Wout的输出结果,图例如下:

多输出通道的计算过程

  • 批量操作

在卷积神经网络中,通常将多个数据集样本放在一起形成一个mini-batch进行批量操作。在数据集训练量很大的情况下,采用批量操作可以加快模型参数优化,便于模型收敛。类比于多通道输入输出,批量操作增加了一个维度N,即输入的数据维度变为NCinHinWin,相应的我们可以得到NCoutHoutWout的输出。图例如下:

批量操作的计算过程
池化

池化操作是使用某个位置相邻域的总体特征输出来代替网络在该位置的全部输出。简单来说就是在对于图像分类和识别的过程中,不用保留图像所有的特征点,只需取出最重要部分的特征构建神经网络即可训练模型推理运算。池化操作的好处在于它缩小了图片的像素尺寸,减少了神经网络的参数数量,精简了繁琐的计算步骤,节省存储空间并且提高效率,同时减少图片对某一个重复区域位置的过度计算,可以有效防止过拟合的情况出现。

池化操作一般分为两种方式:平均池化和最大池化。

1.平均池化:是在对池化窗口内的元素取平均值,获得相应的输出图像像素。
2.最大池化:是在池化窗口选出最能代表该窗口的一个像素来代替整块池化窗口区域。
池化

同理卷积操作,池化操作的步长和卷积核类似,可以分别用sh和sw表示高度和宽度方向的池化步幅。

同理填充操作,可以在池化之前对行之前之后分别填充ph1行和ph2行,在列之前之后分别填充pw1和pw2列,这样得到的输出特征图的大小为:

在这里插入图片描述

在卷积神经网络中,通常使用2*2大小的池化窗口,步幅也使用2,填充为0,则输出特征图的尺寸大小为:

在这里插入图片描述

通过这种池化的方法,可以使输出特征图的高和宽都减半,但通道数保持不变。

激活函数

在神经网络的叠算中,常常出现线性的过拟合现象,比如假设第一层的变换是z1=x1+y1、 z2=x2+y2,第二层的变换是y=z1+z2,则输出y=x1+y1+x2+y2,输出的数据依然是线性的。所以我们引入非线性的激活函数来增强神经网络的非线性能力。常用的激活函数有Sigmoid和ReLU。

Sigmoid激活函数的定义如下:

在这里插入图片描述

ReLU激活函数的定义如下:

在这里插入图片描述
做出两种激活函数的函数曲线图:
激活函数
引入梯度消失的概念:在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。

从以上的函数图像可以看出,在x值较大和较小的时候,Sigmoid函数的值都接近于0或者1这样的常数,而在0值附近有较大变化,我们可以对Sigmoid函数进行求导,结果如下:

在这里插入图片描述

可以看出,当x=0时dy/dx取得最大值1/4,即x的梯度值最大为y梯度的1/4。由于最开始神经网络的参数是随机化初始的,如果当x的初值很大或者很小,则Sigmoid函数的导数接近于0,使得梯度下降接近于0,而即使在x=0附近,由于多层网络使用Sigmoid函数,梯度将会成(1/4)^n下降,进而衰减到非常小的值,甚至可能消失。因此我们考虑引入ReLU函数。

ReLU函数是一个分段函数,在x<0时dy/dx=0,在x>0时dy/dx=1。这样,在x>0的范围上能够完整的将梯度变化从y传递给x,而不会产生多层网络经过多层激活函数而梯度消失的现象。

批归一化

批归一化方法是由Ioffe和Szegedy于2015年提出的数据集处理方法。目的在于改善神经网络中间层的输出标准化处理,进而使输出更加稳定。目前该方法已经稳定用于深度学习和计算机视觉当中。

标准化是指我们对神经网络的数据进行批量处理,使处理后的样本满足均值为0方差为1的正态分布,可以使在输入数据分布比较固定的情况下有利于loss值的收敛。而在深度学习的神经网络中,参数是不断更新的,即使在输入时对输入数据进行归一化处理,在中间层的输出过程中也有可能出现数据波动较大的情况,这样会使loss值在下降一定时间之后出现波动,导致模型不稳定不收敛,这时我们提出批归一化的中间层输出方式,使中间层网络的输出更加稳定,有利于模型的收敛。并且还具有如下优点:

  • 可以使用较大的学习率加快收敛(能够使用较大的学习率)
  • 降低模型对初始输入数据的敏感性
  • 降低过拟合风险

1.训练过程中批归一化

(1)计算mini-batch内样本的均值,其中xi表示mini-batch中第i个样本。
在这里插入图片描述
(2)计算mini-batch内样本的方差
在这里插入图片描述

(3)计算标准化后的输出
在这里插入图片描述
其中是一个很小的数,主要是防止出现分母为0的情况。

如果强制输出层的分布为标准化,则有可能导致某些特征模式的丢失,所以在标准化之后BatchNorm会对数据进行缩放和平移。具体公式如下:

在这里插入图片描述

γ和β为可学习的参数,可以在训练过程中不断学习调整。

2.测试过程中批归一化

在预测时采用的批量归一化和训练时稍有不同,因为同一个预测模型和其他模型进行归一化之后得到的数据通常来讲是不确定的,这样的话对预测结果来说是不合理的。因此我们对预测模型的归一化参数采用在训练过程中训练好的样本均值和方差,在预测时不再计算。采用如下的计算方式进行计算:

在这里插入图片描述

在训练的过程中将最开始saved_μb的saved_σb2和设置为0,每输入一批新的样本,计算出μb和σb2,然后通过上面的公式更新saved_μb和saved_σb2,在训练的过程中不断的更新他们的值,并作为BatchNorm层的参数保留下来。预测的时候将加载saved_μb和saved_σb2,用他们来替代μb和σb^2。

丢弃法

丢弃法是深度学习中一种常见的抑制过拟合的方法。在训练的数据集上,很有可能在某一特征上面数据集的参数过多,导致在其他问题的权重比例下降,训练出来的模型会有对这一特定特征具有较大识别度而对其他情况敏感性不足。因此我们在训练时候,随机选出一部分神经元,将其丢掉,这些神经元将不再参与到神经网络的计算中,使各种类别的特征权重大致相同,减小过拟合现象。

丢弃法
由此而来产生的问题在于,训练的时候随机dropout一些输入层,而在预测的时候,则会向前传递所有的神经元信号,这样将导致训练和测试时候数据的分布不一样。为了解决这个问题,我们引入两个思路:

  • 训练时候以比例r随机丢弃一部分神经元,不向后传递他们的信号;在预测时传递所有的神经元信号,但是将每个神经元上的数值乘以(1-r);
  • 训练时以比例r随机丢弃一部分神经元,不向后传递它们的信号,但是将那些被保留的神经元上的数值除以 (1−r);预测时向后传递所有神经元的信号,不做任何处理。

对于卷积的基本操作就介绍到这里,从下一章开始将对Airsim仿真平台进行分析,方便我们获取数据和处理数据,并打好将数据集喂入进行训练的基础。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值