全面深入理解卷积神经网络与LeNet 5 的结构

一、卷积神经网络的起源

卷积神经网络起源于上世纪九十年代Yann LeCun提出的Lenet5,卷积神经网络可用于目标检测、交通流量检测,还可用于人口密度测算,在医学上面,卷积神经网络可用于辅助诊断,在图像的语义分析方面卷积也是一个重要的算法,需要我们把图像中不同的物体用不同的颜色区分出来,是基于像素级的分析。

1.与传统神经网络相比,卷积的优势何在

前馈神经网络因为层与层之间是全连接的结构,当隐层较多时参数量很多,整个网络计算量很大,卷积神经网络采用局部连接模式很好的解决了这一问题。

2.感受野机制

神经元所影响的刺激区域称为感受野,不同神经元感受野的大小和性质都不同
研究表明:有些细胞对处于某一角度上的线条、垂直线条、直角或明显的边缘线都有特别的反应,直线的朝向只能落在一个很小的角度范围里即细胞的感受野内。

二、如何实现感受野?

如何用数学的方法实现感受野呢?在信号学中有一个卷积可以实现感受野机制。

1.什么叫卷积呢?

卷积操作简单地说就是相乘相加。
卷积主要是对两个函数的一种运算,假设我们有f函数和g函数
可以分为连续函数和离散函数

  • 连续函数的卷积公式
    y = f ∗ g = ∫ − ∞ + ∞ f ( x ) ⋅ g ( n − x )   d x y=f*g=\int_{-\infty}^{+\infty} f(x)\cdot g(n-x)\, \text dx y=fg=+f(x)g(nx)dx
    解释:f函数对g函数做卷积,实际上是一个先相乘后积分的过程 ,高数中我们学过对一个函数做积分实际上表示函数对应曲线下边的面积
    示意图:
    在这里插入图片描述

图中有f函数,g函数,我们首先对g函数做一个反转,再平移 n 个单位长度,再和 f 函数相乘,最后求积分实际上就是求相乘后图像的面积。平移可以每次平移一个步长也可平移多个步长。
从卷积公式可以看出最后的输出y是步长n的函数,f 函数与g函数的乘积实际上就是两函数相交部分的面积。
随着平移的进行,我们可以看到两函数图像的交集是一个从开始的零到相交部分取得最大值,再由最大值减少为零的过程。当g函数全部落在正方形内时达到最大值。

  • 离散函数的卷积公式:
    y ( n ) = f ( m ) ⋅ g ( n − m ) = ∑ m = − ∞ + ∞ f ( m ) ⋅ g ( n − m ) = ∑ m = − ∞ + ∞ g ( m ) ⋅ f ( n − m ) y(n)=f(m)\cdot g(n-m)=\sum_{m=-\infty}^{+\infty}f(m)\cdot g(n-m)=\sum_{m=-\infty}^{+\infty}g(m)\cdot f(n-m) y(n)=f(m)g(nm)=m=+f(m)g(nm)=m=+g(m)f(nm)
    示意图:
    在这里插入图片描述
    从图中我们可以很好地理解卷积的作用,就是把原图的特征提取出来。

三、如何实现图像的卷积?

图像的编码:将图像生成灰度图
灰度图;把图形的每一个像素点用对应的灰度值表示出来。每一个像素点都对应一个位置。
灰度图的编码就是一个 f 函数,想要获得图的特征,我们需要找一个 g 函数(核函数)做为滤波器提取图像的特征。
如下图,在卷积动画中,一般来说经卷积操作后图像会变小。

1.卷积的特征:

特征保留:卷积保留原始图像的特征
特征变少:经卷积后得到的图像比原来的图像小
在这里插入图片描述

2.卷积操作示例:

卷积核一般比较小,如3×3,5×5,7×7
现在的算法都是用小卷积,多深度。这样可以把特征获取得更全。
在这里插入图片描述
从图中可看到,3×3的像素图经卷积操作后是1个像素,卷积的本质就是压缩图像。

3.步长

卷积操作还要平移,每次移动一个步长,相应两个函数对应区域相乘相加,移动的时候可从左往右再从上往下,整个图像都经过卷积后原来5×5的图像变成一个3×3的特征图。在这里插入图片描述

4.Padding(填充)

在上述卷积操作中,图像边缘的部分只是做一次操作,可能会损失图像的边缘特征,这就引入了Padding操作,也就是补零。
在这里插入图片描述
通过Padding操作,很好的保留了原图的边缘特征。

5.特征图大小计算

新的特征图大小如何计算?
计算公式如下:
n o u t = ⌊ n i n + 2 p − f s + 1 ⌋ n_{out}=\lfloor\frac{n_{in}+2p-f}{s}+1\rfloor nout=snin+2pf+1
式中nin表示输入图像的大小;p表示Padding;f 表示卷积核的大小;s表示步长,步长是以像素为单位的。根据这个公式,我们可以很容易求出经过卷积后的特征图的大小。
如上边例子中,我们输入的是5×5的图像,Padding为1,步长 s 为1,卷积核是3×3的,那么输出的就是5×5的特征图。
n o u t = ⌊ 5 + 2 − 3 1 + 1 ⌋ = 5 n_{out}=\lfloor\frac{5+2-3}{1}+1\rfloor=5 nout=15+23+1=5

6.不同方向的卷积

如果我们想获得水平方向的特征,我们可以使用卷积核(1),该滤波器的特征是水平方向有一行全为1,其余方向全为零;可以很好地把水平方向的特征提取出来,把其他方向的特征隐去。
如果我们想获得垂直方向的特征,我们可以使用卷积核(2),该滤波器的特征是垂直方向有一列全为1,其余方向全为零,从而很好地吧垂直方向的特征提取出来,吧其余方向的特征隐去;
当然,也可以获得其他方向的特征,如45度角方向,我们可以使用卷积核(3),该卷积核的特征是斜向上45度对角线全为1,其余方向全为零。
在这里插入图片描述
由此可知,同一张图我们可以使用不同的卷积核获取不同方向的特征。

7.彩色图像如何编码呢?

基于三基色原理,任何一种颜色我们都可以通过红蓝绿三种颜色暗一定比例调出来,图像上的任意一个像素都可以分解成RGB三个值,我们就可以用三个矩形,一个张量来表示图像。
对于彩色图像如何进行卷积呢?
会用到多通道卷积。所谓多通道卷积就是用是哪个卷积核分别对图像像素点的RGB三个矩阵作卷积得到三个同样大小的特征图,最后将这三个特征图对应像素值相加合成一个特征图。
在这里插入图片描述

四、卷积神经网络计算-池化

池化也叫下采样,通常和卷积配对使用。池化实际上就是对图像进一步的压缩将图像最重要的特征保留下来。
常用的池化方法有两种:

1.最大池化:

把特征图分块后,取其中像素的最大值最为输出。

2.平均池化:

把特征图分块后,计算每一小块所有像素值的平均值作为输出。

在这里插入图片描述

六、Lenet5框架结构分析

1998年,LeCun提出LeNet,并成功应用于手写数字识别,测试误差小于1%。
这个网络看起来很像传统神经网络,但实际上它的结构发生了很大的变化。

1.输入层——卷积层C1

在这里插入图片描述
从输入层到第一个卷积层,卷积层到池化层它的就结构都发生了很大变化。
输入层:32×32灰度图像(28×28),周围有两个填充像素。
卷积的目的是为了实现感受野,它是不提倡使用全连接的,而是使用了6个5×5的卷积核提取图像的特征,继而得到6个通道的28×28的特征图。
在输入层与第一个卷积层之间我们用了共享权重。
所谓“共享权重”就是指同一个卷积核对图像不同位置进行特征提取时所作的卷积操作的权重是一致的,输入层原图的每个5×5的像素对应隐层的一个神经元,因为卷积核是一样的所以输出的神经元的偏置也是一样的。
在这里插入图片描述
参数计算:
LeNet 结构输入层与第一个卷积层,使用的深度为6,即学习6个不同的内核,一次第一个卷积层C1的输出为6×28×28。
每个内核具有5×5=25个权重,(外加一个偏置项,因此实际上是26个参数),权重总数=6×26=156。
传统神经网络是全连接的,LeNet5网络结构由于共享权重大大减少了参数的数目。
紧接着就是池化
池化的目的是进行特征图的压缩,用的是2×2的池化可以得到14×14的特征图,特征图变小了,特征图的编码压缩了。

2.卷积层C1 ——池化层S1

池化单元大小为2×2,得到6个14×14的特征图
在这里插入图片描述仅仅一对卷积+池化是不够的,因此又来了一对卷积池化操作

3.池化层S1——第二个卷积层C2

在这里插入图片描述
上一层6个通道如何转换成16个通道呢?
6个通道14×14的特征图转换成了16个通道10×10 的特征图。
在这里插入图片描述

  • 如上图所示:6个通道为0~5,16个通道0 ~15它们之间的对应关系如下:第一个卷积核分别对0,1,2三个特征图做卷积得到相应的三个个特征图,然后累加成一个特征图;其他的对应关系以此类推;
  • 从上图可以看出1个卷积核对3个特征图做卷积有6种情况;
  • 一个卷积核对4个特征图做卷积得到4个新的特征图然后再做累加会得到第七个特征图。一对四是从6~14的9种情况;
    一个卷积核对6个特征图做卷积得到5个新的特征图然后再做累加会得到第16个特征图。
    上述==一个卷积核对应多个通道。==的物理含义是用更多的通道获得更多的特征,并且用同一个卷积核对上一层次的多个通道先做卷积再融合,通过这种特征之间的融合可以获得更丰富的特征。
    C2与S1参数计算:
    参数计算中5×5×3表示的是一个卷积核对是3个特征图做卷积操作;5×5×4表示的是一个卷积核对是4个特征图做卷积操作;5×5×6表示的是一个卷积核对是6个特征图做卷积操作;

在这里插入图片描述

4.第二个卷积层C2——第二个池化层S2

在这里插入图片描述
S2与C2参数计算
第二个池化层
C2与S2之间的连接:

  • 连接
    C2中10×10的特征图通过2×2的池化核变为5×5的特征图,S2层的一个通道对应的连接为(2×2+1)×16×(5×5)=2000个,计算思路如下:共16个通道,S2层一个通道是5×5=25个像素,每个像素对应C2层4个连接+一个偏置。
  • 参数:
    层与层之间权重和偏置都是共享的,C2中2×2的区域通过卷积映射到下一层只有一个像素,所以权重只有一个,再加上一个偏置,即一个通道参数为2,一共16个通道所以参数数目为32个。
    以上就是LeNet5两层卷积+池化的特征提取。

5.全连接层与输出层

获得特征后如何分类呢? LeNet5有两层全连接层,两层相比一层映射更加充分,与传统前馈神经网络一样,做拟合和映射工作。
全连接层与池化层S2的连接
全连接层

将S2层的特征图(矩形编码)进行“拉直”操作,所谓“拉直”就是将矩形的编码第二行放在第一行后面拉直成一个向量,16个通道的矩形首尾相连组成一个大的向量。
第一个全连接层有120个神经元,第二个全连接层有84个神经元,输出层有10个。

LeNet 5 特殊的地方主要在于隐层层数加深了,层与层之间不再是全连接,而是卷积池化的局部连接,参数个数大大减少了。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zkaisen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值