本篇博客将介绍经典的网络结构—LeNet5
首先看看LeNet-5的网络结构,假设你有一张32x32x1的图片,LeNet-5可以识别图中的手写数字,比如像这样手写数字7.LeNet-5是针对灰度图片训练的,所以图片的大小只有32x32x1。
实际上LeNet-5的结构和我们上一篇博客 的范例非常相似,使用6个5x5的过滤器,步幅为1.由于使用了6个过滤器,步幅为1,padding为0,输出结果为28x28x6,图像尺寸从32x32缩小到28x28。然后进行池化操作,在 这篇论文写成的那个年代,人们更喜欢使用平均池化,而我们现在可能用最大池化更多一些。在这个例子中,我们进行平均池化,过滤器的宽度为2,步幅为2,图像的尺寸,高度和宽度都缩小了2倍,输出结果是一个14x14x16的图像。我觉得这张图片应该不是完全按照比例绘制的,如果严格按照比例绘制,新图像的尺寸应该刚好是原图像的一半。
接下来是卷积层 ,我们用一组16个5x5的过滤器,新的输出结果有16个通道。LeNet-5的论文 是在1998年撰写的,当时人们并不使用padding,或者总是使用valid卷积,这就是为什么每进行一次卷积,图像的高度和宽度都会缩小,所以这个图像从14x14缩小到了10x10。然后又是池化层,高度和宽度再缩小一半,输出一个5x5x16的图像,将所有数字相乘,乘积是400。
下一层是全连接层,在全连接层中,有400个节点,每个节点有120个神经元,这里已经有了一个全连接层。但有时还会从这400个节点中抽取一部分节点构建另一个全连接层,就像这样,有2个全连接层。
最后一步就是利用这84个特征得到最后的输出,我们还可以在这里再加一个节点用来预测yhat的值,yhat有10个可能的值,对应识别0-9这10个数字。在现在的版本中则使用sotfmax函数输出十种分类结果,而在当时,LeNet-5网络在输出层使用了另外一种,现在已经很少用到的分类器。
相比现代版本,这里得到的神经网络会小一些,只有约6万个参数。而现在,我们经常看到含有一千万到一亿个参数的神经网络,比这大1000倍的神经网络也不在少数。
不管怎样,如果我们从左往右看,随着网络越来越深,图像的高度和宽度在缩小,从最初的32x32缩小到28x28,再到14x14,10x10,最后只有5x5。与此同时,随着网络层次的加深,通道数量一直在增加,从1增加到6个,再到16个。
这个神经网络中还有一种模式至今仍然经常用到,就是一个或多个卷积层后面跟着一个池化层,然后又是若干个卷积层再接一个池化层,然后是全连接层,最后是输出,这种排列方式很常用。
对于那些想尝试阅读论文的同学,需要补充几点。
读到这篇经典论文时,你会发现,过去,人们使用sigmoid函数和tanh函数,而不是ReLU函数,这篇论文中使用的正是sigmoid函数和tanh函数。这种网络结构的特别之处还在于,各网络层之间是有关联的,这在今天看来显得很有趣。
比如说,你有一个nH xnW xnC的网络,有nC个通道,使用尺寸为fxfxnC的过滤器,每个过滤器的通道数和它上一层的通道数相同。这是由于在当时,计算机的运行速度非常慢,为了减少计算量和参数,经典的LeNet-5网络使用了非常复杂 的计算方式,每个过滤器都采用和输入模块一样的通道数量。论文中提到的这些复杂细节,现在一般都不用了。
我认为当时所进行的最后一步其实到现在也还没有真正完成,就是经典的LeNet-5网络在池化后进行了非线性函数处理,在这个例子中,池化层之后使用了sigmoid函数。如果你真的去 读这篇论文,这会是最难理解的部分之一,我们会在后面讲到。
图片的大部分内容来自于论文的第二段和第三段,论文的后几段介绍了一种思路。文中提到的这种图像变形网络如今并没有得到广泛应用,所以在读这篇论文的时候,我建议精读第二段,这段重点介绍了这种网络结构。泛读第三段,这里面主要是一些有趣的实验结果。
Reference
吴恩达深度学习第四门课:卷积神经网络