【MindSpore易点通】深度学习系列-经典卷积神经网络

上周小伙伴说我们卷积神经网络讲的太简单了,基础嘛,当然要先打好(
【MindSpore易点通】深度学习系列-经典卷积神经网络
文章图片

)。这不,更加复杂的卷积神经网络来了~经典CNN之LeNet手写字体识别模型LeNet5诞生于1994年,是最早的卷积神经网络之一。LeNet5利用卷积、参数共享、池化等操作提取特征,避免了大量的计算成本,最后使用全连接神经网络进行分类识别。
【MindSpore易点通】深度学习系列-经典卷积神经网络
文章图片

LeNet5的网络结构示意图LeNet5由7层CNN(不包含输入层)组成,图中输入的原始图像大小是32×32像素,卷积层:Ci;子采样层(pooling,池化):Si;全连接层:Fi。C1层(卷积层):该层使用了6个卷积核,每个卷积核的大小为5×5,可以得到6个特征图(feature map)。(1)特征图大小每个卷积核(5×5)与原始的输入图像(32×32)进行卷积,这样得到的特征图大小为(32-5+1)×(32-5+1)= 28×28这里有个小知识点:卷积核与输入图像按卷积核大小逐个区域进行匹配计算,匹配后原始输入图像的尺寸将变小,因为边缘部分卷积核无法越出界,只能匹配一次,匹配计算后的尺寸变为Cr×Cc=(Ir-Kr+1)×(Ic-Kc+1),其中Cr、Cc,Ir、Ic,Kr、Kc分别表示卷积后结果图像、输入图像以及卷积核的行列大小。(2)参数个数由于参数(权值)共享,对于同个卷积核每个神经元均使用相同的参数,因此,参数个数为(5×5+1)×6= 156,其中5×5为卷积核参数,1为偏置参数。(3)连接数卷积后的图像大小为28×28,因此每个特征图有28×28个神经元,每个卷积核参数为(5×5+1)×6,因此,该层的连接数为(5×5+1)×6×28×28=1223042、S2层(下采样层,也称池化层):(1)特征图大小这一层主要是做池化或者特征映射(特征降维),池化单元为2×2,因此,6个特征图的大小经池化后即变为14×14。由于池化单元之间没有重叠,在池化区域内进行聚合统计后得到新的特征值,因此经2×2池化后,每两行两列重新算出一个特征值出来,相当于图像大小减半,因此卷积后的28×28图像经2×2池化后就变为14×14。这一层的计算过程是:2×2 单元里的值相加,然后再乘以训练参数w,再加上一个偏置参数b(每一个特征图共享相同的w和b),然后取sigmoid值(S函数:0-1区间),作为对应的该单元的值。
【MindSpore易点通】深度学习系列-经典卷积神经网络
文章图片

卷积操作与池化的示意图(2)参数个数S2层由于每个特征图都共享相同的w和b这两个参数,因此需要2×6=12个参数(3)连接数下采样之后的图像大小为14×14,因此S2层的每个特征图有14×14个神经元,每个池化单元连接数为2×2+1(1为偏置量),因此,该层的连接数为(2×2+1)×14×14×6 = 58803、C3层(卷积层):C3层有16个卷积核,卷积模板大小为5×5。(1)特征图大小与C1层的分析类似,C3层的特征图大小为(14-5+1)×(14-5+1)= 10×10(2)参数个数需要注意的是,C3与S2并不是全连接而是部分连接,有些是C3连接到S2三层、有些四层、甚至达到6层,通过这种方式提取更多特征,连接的规则如下表所示:
【MindSpore易点通】深度学习系列-经典卷积神经网络
文章图片

例如第一列表示C3层的第0个特征图(feature map)只跟S2层的第0、1和2这三个feature maps相连接,计算过程为:用3个卷积模板分别与S2层的3个feature maps进行卷积,然后将卷积的结果相加求和,再加上一个偏置,再取sigmoid得出卷积后对应的feature map了。其它列也是类似(有些是3个卷积模板,有些是4个,有些是6个)。因此,C3层的参数数目为(5×5×3+1)×6 +(5×5×4+1)×9 +5×5×6+1 = 1516(3)连接数卷积后的特征图大小为10×10,参数数量为1516,因此连接数为1516×10×10= 151600S4(下采样层,也称池化层):(1)特征图大小与S2的分析类似,池化单元大小为2×2,因此,该层与C3一样共有16个特征图,每个特征图的大小为5×5。(2)参数数量与S2的计算类似,所需要参数个数为16×2 = 32(3)连接数连接数为(2×2+1)×5×5×16 = 2000C5层(卷积层):(1)特征图大小该层有120个卷积核,每个卷积核的大小仍为5×5,因此有120个特征图。由于S4层的大小为5×5,而该层的卷积核大小也是5×5,因此特征图大小为(5-5+1)×(5-5+1)= 1×1。这样该层就刚好变成了全连接,当然这里真的只是coincidence,如果原始输入的图像比较大,则该层就不是全连接了。(2)参数个数本层的参数数目为120×(5×5×16+1) = 48120(3)连接数由于该层的特征图大小刚好为1×1,因此连接数为48120×1×1=481206、F6层(全连接层):(1)特征图大小F6层有84个单元,由于输出层的对应的是一个7×12的比特图,如下图所示,-1表示白色,1表示黑色,这样每个符号的比特图的黑白色就对应于一个编码。
【MindSpore易点通】深度学习系列-经典卷积神经网络
文章图片

该层有84个特征图,特征图大小与C5一样都是1×1,与C5层全连接。(2)参数个数由于是全连接,参数数量为(120+1)×84=10164。跟经典神经网络一样,F6层计算输入向量和权重向量之间的点积,再加上一个偏置,然后将其传递给sigmoid函数得出结果。(3)连接数由于是全连接,连接数与参数数量一样,也是10164。7、OUTPUT层(输出层):Output层也是全连接层,共有10个节点,分别代表数字0到9。如果第i个节点的值为0,则表示网络识别的结果是数字i。(1)特征图大小该层采用径向基函数(RBF)的网络连接方式,假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:
【MindSpore易点通】深度学习系列-经典卷积神经网络
文章图片

上式中的Wij的值由i的比特图编码确定,i从0到9,j取值从0到7×12-1。RBF输出的值越接近于0,表示当前网络输入的识别结果与字符i越接近。(2)参数个数由于是全连接,参数个数为84×10=840(3)连接数由于是全连接,连接数与参数个数一样,也是840LeNet卷积层用来识别图像?的空间模式,例如线条和物体局部,池化层则?来降低卷积层对位置的敏感性,在交替使用卷积层和最大池化层后接全连接层来进?图像分类,展示了通过梯度下降训练卷积神经网络可以达到手写数字识别在当时最先进的结果。经典CNN之AlexNet第一个典型的CNN是LeNet5网络结构,但是第一个引起大家注意的网络却是AlexNet。
【MindSpore易点通】深度学习系列-经典卷积神经网络
文章图片

AlexNet网络结构网络总共的层数为8层,5层卷积,3层全连接层。1、第一层:卷积层C1,输入为224×224×3的图像,卷积核的数量为96,卷积核的大小为11×11×3,步长stride 为4,pad = 0,表示不扩充边缘; 卷积后的图形大小:wide = (224 + 2 padding - kernel_size) / stride + 1 = 54height = (224 + 2 padding - kernel_size) / stride + 1 = 54dimention = 96然后进行 (Local Response Normalized), 后面跟着池化pool_size = (3, 3), stride = 2, pad = 0,最终获得第一层卷积的feature map。2、第二层:卷积层C2, 输入为上一层卷积的feature map,卷积的个数为256个,卷积核的大小为:5×5×48,pad = 2,stride = 1,然后做 LRN,最后 max_pooling, pool_size = (3, 3), stride = 2。3、第三层:卷积层C3, 输入为第二层的输出,卷积核个数为384, kernel_size = (3 ×3×256),padding = 1,第三层没有做LRN和Pool。4、第四层:卷积层C4, 输入为第三层的输出,卷积核个数为384, kernel_size = (3×3), padding = 1, 和第三层一样,没有LRN和Pool。5、第五层:卷积层C5, 输入为第四层的输出,卷积核个数为256,kernel_size = (3×3×3), padding = 1。然后直接进行max_pooling, pool_size = (3, 3), stride = 2; 6、第6,7,8层是全连接层,每一层的神经元的个数为4096,最终输出softmax为1000,然后全连接层中使用了RELU和Dropout。AlexNet将LeNet的思想发扬光大,把CNN的基本原理应用到了很深很宽的网络中。首先成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。Relu函数:
【MindSpore易点通】深度学习系列-经典卷积神经网络
文章图片

【【MindSpore易点通】深度学习系列-经典卷积神经网络】【MindSpore易点通】深度学习系列-经典卷积神经网络
文章图片

然后选择采用覆盖的池化操作。常规的池化层由于没有重叠,所以pool_size 和 stride一般是相等的,例如8×8的一个图像,如果池化层的尺寸是2×2,那么经过池化后的操作得到的图像是4×4,这种设置叫做不覆盖的池化操作。而如果 stride < pool_size, 那么就会产生覆盖的池化操作,这种有点类似于convolutional化的操作,在训练模型过程中,覆盖的池化层更不容易过拟合。同时,神经网络的一个比较严重的问题就是过拟合问题,AlexNet采用的数据扩充和Dropout的方法处理过拟合问题。对于某一层神经元,通过定义的概率来随机删除一些神经元,同时保持输入层与输出层神经元的个数不变,然后按照神经网络的学习方法进行参数更新,下一次迭代中,重新随机删除一些神经元,直至训练结束。总结AlexNet和LeNet的设计理念非常相似,但也存在显著差异。首先,AlexNet比相对较小的LeNet5要深得多。AlexNet由八层组成:五个卷积层、两个全连接隐藏层和一个全连接输出层。其次,AlexNet使用ReLU而不是sigmoid作为其激活函数。
【MindSpore易点通】深度学习系列-经典卷积神经网络
文章图片

AlexNet的更高层建立在底层表示的基础上,以表示更大的特征,如眼睛、鼻子、草叶等等。而更高的层可以检测整个物体,如人、飞机、狗或飞盘。最终的隐藏神经元可以学习图像的综合表示,从而使属于不同类别的数据易于区分。AlexNet首次证明了学习到的特征可以超越手工设计的特征,AlexNet在结果上要优于LeNet很多,特别是其在处理大规模数据方便的优势更是明显。AlexNet的问世也开启了深度学习在计算机视觉领域的大规模应用。一般我们可以将其看做浅层神经网络和深层神经网络的分界线。当然啦,经典的CNN还是有很多其他的网络的,比如VGG、GoogLeNet、ResNet等等,欢迎大伙儿一起学习使用呀!

    推荐阅读