花了一个礼拜时间从零开始查资料,学习了LeNet神经网络的基本架构,看遍各位大神的blog总结,都写的很好,这里以我一个入门的视角,从更容易的理解角度,整理记录下来,供以后消化和深入
先看LeNet网络模型:
上图包含输入层总共8层网络,分别为:
输入层(INPUT)、卷积层(Convolutions,C1)、池化层(Subsampling,S2)、
卷积层(C3)、池化层(Subsampling,S4)、卷积层(C5)、全连接层(F6)、输出层(径向基层)
先理解一些基本概念:
-
卷积: 矩阵对应的位置的值相乘再求和
https://www.zhihu.com/question/22298352卷积过程:
-
全连接和局部连接:
输入层(INPUT)是包含一张手写体是32x32像素的图片,(如果包含rgb信息,则深度为3)
下面是包含功能的feature maps
- 第一层,卷积层(Convolutions,C1): 提取特征
用6个5*5的卷积核与输入层卷积得到的卷积结果,
卷积过程:
这里需要设置的超参数有filter个数(k),filter大小(F),步长(S)
C1层数据:
输入图片:32*32
卷积核大小:5*5
卷积核种类:6
输出featuremap大小:28*28 (32-5+1)
神经元数量:28286
可训练参数:(5*5+1)*6(每个滤波器5×5=25个unit参数和一个bias参数,一共6个滤波器)
连接数:(5×5+1)628*28
这一层有两个基础的概念:
- 共享权重:lecun在文章里面单独提到了“共享权重”这个概念,但其实这个概念学过图像处理的人都知道卷积操作,比如对图像做垂直边缘检测子:
其实就是对图像每个位置做卷积操作,整幅图共享这个权重
本文提到“共享权重”就是这个意思。只不过卷积层的共享权重是个未知量,需要后续计算出来。 - 卷积的通俗理解:我得一点想法是如果拿滤波器类比假设每一个卷积层分别是低通、中通、高通滤波后的图像,卷积层就能获得图像的低频信息、图像的高频信息(比如噪声等);同样的小波变换、傅立叶变换也是类似的。
、
、
- 第二层:池化层(Subsampling,S2)也叫下采样层: 降低数据维度
这里采样2x2的选择框进 行压缩,如何压缩呢,通过选择框的数据求和再取平均值然后在乘上一个权值和加上一个偏置值,组成一个新的图片,每个特征平面采样的权值和偏置值都是一样的,因此每个特征平面对应的采样层只两个待训练的参数
输入:28*28
采样区域:2*2
采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid
采样种类:6
输出featureMap大小:14*14(28/2)
神经元数量:14146
可训练参数:2*6(和的权+偏置)
连接数:(2×2+1)614*14
S2中每个特征图的大小是C1中特征图大小的1/4
- 第三层,卷积层(C3)
这一层也是卷积层,和C2不同的是这一层有16个特征平面,那么16个特征平面是如何和上一层池化层是如何对应的呢?这里的16个特征平面是这样对应的,每个特征平面对应的卷积核,和池化层的多个平面进行卷积。这里把C3的卷积层特征平面编号即0,1,2,…,15,把池化层S2也编号为0,1,2,3,4,5.这两层具体如何对应呢?如下图
这一层一共用了16个卷积核,第0号5*5的卷积核(横坐标0)对上一层的结果的0,1,2三个特征平面进行卷积,依次组合进行采样,
输入:S2中所有6个或者几个特征map组合
卷积核大小:5*5
卷积核种类:16
输出featureMap大小:10*10
C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合
存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。
则:可训练参数:6*(3×25+1)+6*(4×25+1)+3*(4×25+1)+(25×6+1)=1516
连接数:10×10×1516=151600
- 第四层,池化层(S4):
这一层采样和前面的采样S2是一样的,使用的采样窗口为2x2的,对C3层进行采样,得到16个采样平面,此时的采样平面为5x5的,这里不细讲了,另外本层存在激活函数,为sigmod函数。
输入:10*10
采样区域:2*2
采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid
采样种类:16
输出featureMap大小:5*5(10/2)
神经元数量:5×5×16=400
可训练参数:2*16=32(和的权+偏置)
连接数:16*(2*2+1)*5×5=2000
S4中每个特征图的大小是C3中特征图大小的1/4�
- 第五层,卷积层(C5):
这一层用120个55的卷积核对上一层55的feature进行卷积,得到了120个一维的特征maps,每一个
神经元都是全连接
输入:S4层的全部16个单元特征map(与s4全相连)
卷积核大小:5*5
卷积核种类:120
输出featureMap大小:1*1(5-5+1)
可训练参数/连接:120*(16×5×5+1)=48120
- 第六层,全连接层(F6):
这一层其实就是BP网络的隐层,且为全连接层,即这一层有84个神经元,每一个神经元都和上一次的120个神经元相连接,那么连接数为(120+1)x84 = 10164,因为权值不共享,隐层权值数也是10164,至于为什么隐层是84个神经元稍后解释,本层的输出有激活函数,激活函数为双曲正切函数,
因为标准的每个字符都是像素都是12x7=84.这就是解释了为什么F6层的神经元为84个,因为他要把所有像素点和标准的比较在进行判断,因此从这里也可以看出,这里不仅仅可以训练手写体数字,也可以识别其他字符,取决于w_{ji}和网络的设计,这些可以认为修改的。
输出层:该层有十个神经元,可以理解这是对于手写体10个数,那个输出的数大,那个神经元代表的数字就是输出,下面我们看看他是和F6层是如何连接的,他不在是BP的神经输出层,而是基于径向基神经网络的输出层,径向基神经网络在上一节我们详细探讨了,上一节我们主要说了是关于高斯径向基,这里使用的是更简单的欧几里得径向基函数,如下:
输出层包含中间的隐藏层,隐藏了一层径向基神经网络,他基于距离进行衡量两个数据的相近程度的,RBF网最显著的特点是隐节点采用输人模式与中心向量的距离(如欧氏距离)作为函数的自变量,并使用径向基函数(如函数)作为激活函数。径向基函数关于N维空间的一个中心点具有径向对称性,而且神经元的输人离该中心点越远,神经元的激活程度就越低。上式是基于欧几里得距离,怎么理解那个式子呢?就是说F6层为84个输入用表示,而输出有10个用表示,而权值 使用,上式说明所有输入和权值的距离平方和为依据判断,如果越相近距离越小,输出越小则去哪个,如果我们存储的到的值为标准的输出,如标准的手写体0,1,2,3等,那么最后一层就说明。F6层和标准的作比较,和标准的那个图形越相似就说明就越是那个字符的可能性更大。我们看看标准的是什么样的:
以上就是LeNet神经网络的每一层的含义
参考:
https://blog.csdn.net/weixin_42398658/article/details/84392845
https://www.jianshu.com/p/ce609f9b5910