深度学习入门笔记(二十):经典神经网络(LeNet-五、AlexNet和VGGNet)

欢迎关注WX公众号:【程序员管小亮】

专栏——深度学习入门笔记

声明

1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献。
2)本文仅供学术交流,非商用。因此每一部分具体的参考资料并无详细对应。若是某部分不当心侵犯了你们的利益,还望海涵,并联系博主删除。
3)博主才疏学浅,文中若有不当之处,请各位指出,共同进步,谢谢。
4)此属于初版本,如有错误,还需继续修正与增删。还望你们多多指点。你们都共享一点点,一块儿为祖国科研的推动添砖加瓦。html

深度学习入门笔记(二十):经典神经网络(LeNet-五、AlexNet和VGGNet)

一、为何要进行实例探究?

最快最直观地熟悉这些网络结构(好比卷积层、池化层以及全链接层这些组件)的方法就是看看一些卷积神经网络的实例分析,就像不少人经过看别人的代码来学习编程同样,经过研究别人构建有效组件的案例是个不错的办法,实际上在计算机视觉任务中表现良好的神经网络框架每每也适用于其它任务,好比,有人已经训练或者计算出擅长识别猫、狗、人的神经网络或者神经网络框架,那么对于计算机视觉识别任务的自动驾驶汽车,是彻底能够借鉴的。程序员

按照进度,你应该能够读一些计算机视觉方面的研究论文了,好比这几个经典的网络:
在这里插入图片描述web

  • LeNet-5 网络,初代手写数字识别网络,我记得应该是1980年代的;
  • 常常被引用的 AlexNet,开启新一轮深度学习热潮;
  • 还有 VGG 网络,发现了深度对网络效果提高的巨大影响;
  • 而后是 ResNet,又称残差网络;
  • 还会讲谷歌 Inception 神经网络的实例分析。

了解了这些神经网络,相信你会对如何构建有效的卷积神经网络更有感受!!还有期中使用的各类网络组件,即便计算机视觉并非你的主要方向,你也会从 ResNetInception 网络这样的实例中找到一些不错的想法。编程

二、经典网络

此次笔记来学习几个经典的神经网络结构,分别是:网络

  • LeNet-5
  • AlexNet
  • VGGNet

开始吧。app


1)LeNet-5

首先看看 LeNet-5 的网络结构。框架

论文地址:http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf机器学习

假设有一张32×32×1的图片,LeNet-5 能够识别图中的手写数字,好比7,由于 LeNet-5 是针对灰度图片训练的,因此图片的大小只有32×32×1,由于 LeNet-5 的结构使用6个5×5的过滤器,步幅为1,padding 为0,因此输出结果为28×28×6,而后进行池化操做,在这篇论文写成的那个年代,人们更喜欢使用平均池化,而如今咱们可能用最大池化更多一些!无论怎样,过滤器的宽度为2,步幅为2,图像的尺寸,高度和宽度都缩小了2倍,输出结果是一个14×14×6的图像。
在这里插入图片描述
接下来是卷积层,用一组16个5×5的过滤器,因此新的输出结果有16个通道,而 LeNet-5 的论文是在1998年撰写的,当时人们并不使用 padding,或者老是使用 valid 卷积,这就是为何每进行一次卷积,图像的高度和宽度都会缩小,因此图像从14到14缩小到了10×10,而后又是池化层,高度和宽度再缩小一半,输出一个5×5×16的图像。将全部数字相乘,乘积是400。svg

而后下一层是全链接层,有400个节点,每一个节点有120个神经元,这里已经有了一个全链接层,但有时还会从这400个节点中抽取一部分节点84个,去构建另外一个全链接层,就像这样,有2个全链接层。函数

最后一步就是利用这84个特征获得最后的输出,因此在这里再加一个节点用来预测 y ^ \hat{y} 的值, y ^ \hat{y} 有10个可能的值,对应识别0-9这10个数字。在如今的版本中则使用 softmax 函数输出结果,而在当时,LeNet-5 网络在输出层使用了另一种如今已经不多用到的分类器。

LeNet-5 的神经网络会小一些,只有约6万个参数,而如今,常常看到含有一千万到一亿个参数的神经网络,比这大1000倍的神经网络也不在少数。无论怎样,若是从左往右看,随着网络愈来愈深,图像的高度和宽度在缩小,从最初的32×32缩小到28×28,再到14×1四、10×10,最后只有5×5,与此同时,随着网络层次的加深,通道数量一直在增长,从1增长到6个,再到16个。
在这里插入图片描述
对于那些想尝试阅读论文的同窗,再补充几点:

  • 接下来的部分主要针对那些打算阅读经典论文的同窗,因此会更加深刻。
  • 这些内容若是你看过了,彻底能够跳过。
  • 固然也能够再看一下,算是对神经网络历史的一种回顾吧。
  • 最后,听不懂也没关系,慢慢来。

若是认真读到这篇经典论文 LeNet-5 时,你会发现,过去人们使用 sigmod 函数和 tanh 函数,而不是 ReLu 函数,这种网络结构的特别之处还在于,各网络层之间是有关联的,这在今天看来显得颇有趣。好比说,在当时计算机的运行速度很是慢,为了减小计算量和参数,经典的 LeNet-5 网络使用了很是复杂的计算方式,论文中提到的这些复杂细节,如今通常都不用了。

2)AlexNet

第二种经典神经网络是 AlexNet,是以论文的第一做者 Alex Krizhevsky 的名字命名的,另外两位合著者是 ilya SutskeverGeoffery Hinton,努力也许之后会有你本身的名字命名的网络结构也未可知。

论文地址:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
在这里插入图片描述
首先用一张227×227×3的图片做为输入,实际上原文中使用的图像是224×224×3,可是若是你尝试去推导一下,会发现227×227这个尺寸更好一些。

第一层使用96个11×11的过滤器,步幅为4,所以尺寸缩小到55×55,缩小了4倍左右。而后用一个3×3的过滤器构建最大池化层, f = 3 f=3 ,步幅 s s 为2,卷积层尺寸缩小为27×27×96。

接着再执行一个5×5的卷积,padding 以后,输出是27×27×276。而后再次进行最大池化,尺寸缩小到13×13。

再执行一次 same 卷积,相同的 padding,获得的结果是13×13×384,384个过滤器。

再作一次 same 卷积,就像这样。再作一次一样的操做,最后再进行一次最大池化,尺寸缩小到6×6×256。

6×6×256等于9216,将其展开为9216个单元,而后是一些全链接层。

最后使用 softmax 函数输出识别的结果,看它到底是1000个可能的对象中的哪个。

实际上,你应该能够看出,这个神经网络与 LeNet 有不少类似之处,不过 AlexNet 要大得多,正如前面讲到的 LeNetLeNet-5 大约有6万个参数,而 AlexNet 包含约6000万个参数。当用于训练图像和数据集时,AlexNet 可以处理很是类似的基本构造模块,这些模块每每包含着大量的隐藏单元或数据,这一点 AlexNet 表现出色。

AlexNetLeNet 表现更为出色的另外一个缘由是它使用了 ReLu 激活函数。
在这里插入图片描述
一样的,还会讲一些比较深奥的内容,若是你并不打算阅读论文,不听也没有关系。

第一点,在写这篇论文的时候,GPU 的处理速度还比较慢,因此 AlexNet 采用了很是复杂的方法在两个 GPU 上进行训练,大体原理是,这些层分别拆分到两个不一样的 GPU 上,同时还专门有一个方法用于两个 GPU 进行交流。

论文还提到,经典的 AlexNet 结构还有另外一种类型的层,叫做 局部响应归一化层Local Response Normalization),即 LRN 层,这类层应用得并很少,甚至如今已经没人用了,,,因此没有专门讲。局部响应归一层的基本思路是,假如这是网络的一块,好比是13×13×256,LRN 要作的就是选取一个位置,从这个位置穿过整个通道,能获得256个数字,并进行归一化。
在这里插入图片描述
你可能会问,为何要进行局部响应归一化?

对于这张13×13的图像中的每一个位置来讲,可能并不须要太多的高激活神经元,可是后来,不少研究者发现 LRN 起不到太大做用,这也是它被划掉的内容之一,如今并不用 LRN 来训练网络。

3)VGGNet

此次笔记要讲的第三个,也是最后一个范例是 VGG,也叫做 VGG-16 网络(VGG 有16和19,不过通常说的是16)。

论文地址:https://arxiv.org/pdf/1409.1556.pdf

值得注意的一点是,VGG-16 实际上是一个很深的网络,可是它的一大优势是简化了神经网络结构,因此并无那么多超参数,是一种只须要专一于构建卷积层的简单网络。。
在这里插入图片描述
输入图像尺寸是224×224×3,进行第一个卷积以后获得224×224×64的特征图,接着还有一层224×224×64,获得这样2个厚度为64的卷积层,意味着进行了两次卷积,这里采用的大小都为3×3,步幅为1,而且都是 same 卷积。

接下来建立一个池化层,池化层将输入图像进行压缩,从224×224×64缩小到多少呢?没错,减小到112×112×64。

而后又是若干个卷积层,使用128个过滤器,以及一些 same 卷积,输出112×112×128。

而后进行池化,能够推导出池化后的结果是56×56×128。

接着再用256个相同的过滤器进行三次卷积操做,而后再池化,而后再卷积三次,再池化,如此进行几轮操做后,将最后获得的7×7×512的特征图进行全链接操做,获得4096个单元,而后进行 softmax 激活,输出从1000个对象中识别的结果。
在这里插入图片描述
顺便说一下,VGG-16 的这个数字16,就是指在这个网络中包含16个层(卷积层和全链接层),因此确实是个很大的网络,总共包含约1.38亿个参数,即使以如今的标准来看,都算是很是大的网络,但 VGG-16 的结构并不复杂,这点是很是吸引人的,并且网络结构很规整,都是几个卷积层后面跟着能够压缩图像大小的池化层,池化层缩小图像的高度和宽度。

同时,卷积层的过滤器数量变化存在必定的规律,由64翻倍变成128,再到256和512,做者可能认为512已经足够大了,因此后面的层就再也不翻倍了。不管如何,每一步都进行翻倍,或者说在每一组卷积层进行过滤器翻倍操做,正是设计此种网络结构的另外一个简单原则。这种相对一致的网络结构对研究者颇有吸引力,而它的主要缺点是须要训练的特征数量很是巨大。

有些文章还介绍了 VGG-19 网络,它甚至比 VGG-16 还要大,可是因为 VGG-16 的表现几乎和 VGG-19 不分高下,因此不少人仍是会使用 VGG-16。另一点,我最喜欢它的一点是,文中揭示了,随着网络的加深,图像的高度和宽度都在以必定的规律不断缩小,每次池化后恰好缩小一半,而通道数量在不断增长,并且恰好也是在每组卷积操做后增长一倍,也就是说,图像缩小的比例和通道数增长的比例是有规律的,就是一个很是完美的对称结构,从这个角度来看,这篇论文真的很吸引人。

三、总结

以上就是三种经典的网络结构,若是你对这些论文感兴趣,建议的顺序是从介绍 AlexNet 的论文开始,而后就是 VGG 的论文,最后有空了再看 LeNet 的论文,虽然有些晦涩难懂,但对于了解这些网络结构颇有帮助。

推荐阅读

参考文章

  • 吴恩达——《神经网络和深度学习》视频课程