本篇博客将介绍经典的网络结构—AlexNet
神经网络AlexNet,是以论文的第一作者Alex Krizhevsky的名字命名的,另外两位合著者是Ilya Sutskever和Geoffery Hinton。
AlexNet首先用一张227x227x3的图片作为输入,实际上原文中使用的图像是224x224x3,但是如果你尝试去推导一下,你会发现227x227这个尺寸更好一些。
第一层我们使用96个11x11的过滤器,步幅为4,由于步幅是4,因此尺寸缩小到55x55,缩小了4倍左右。
然后用一个3x3的过滤器构建最大池化层,f=3,步幅s为2,卷积层尺寸缩小为27x27x96。
接着再执行一个5x5的卷积,padding之后,输出是27x27x276。
然后再次进行最大池化,尺寸缩小到13x13。
再执行一次same卷积,padding = same,得到的结果是13x13x384,384个过滤器。
再做一次same卷积,就像这样,再做一次同样的操作,最后进行一次最大池化,尺寸缩小到6x6x256。6x6x256等于9216,将其展开为9216个单元,然后是一些全连接层。最后使用softmax函数输出识别的结果,看它究竟是1000个可能的对象中的哪一个。
实际上,这种神经网络与LeNet有很多相似之处,不过AlexNet要大得多。正如前面讲到的LeNet或LeNet-5大约有6万个参数,而AlexNet包含约6000万个参数。当用与训练图像和数据集时,AlexNet能够处理非常相似的基本构造模块,这些模块往往包含着大量的隐藏单元或数据,这一点AlexNet表现出色。AlexNet比LeNet表现更为出色的另一个原因是它使用了ReLu激活函数。
同样的,我还会讲一些比较深奥的内容,如果你并不打算阅读论文,不听也没有关系。
第一点,在写这篇论文的时候,GPU的处理速度还比较慢,所以AlexNet采用了非常复杂的方法在两个GPU上进行训练。大致原理是,这些层分别拆分到两个不同的GPU上,同时还专门有一个方法用于两个GPU进行交流。
论文还提到,经典的AlexNet结果还有另一种类型的层,叫做“局部响应归一化”(Local Response Normalization),即LRN层,这类层应用得并不多,所以没有专门讲。
局部响应归一层的基本思路是,假如这是网络的一块,比如是13x13x256,LRN要做的就是选取一个位置,比如说这样一个位置,从这个位置穿过整个通道,能得到256个数字,并进行归一化。
进行局部响应归一化的动机是,对于这张13x13的图像中的每个位置来说,我们可能并不需要太多的高激活神经元。但是后来,很多研究者发现LRN起不到太大作用,这应该是被我划掉的内容之一,因为并不重要,而且我们现在并不用LRN来训练网络。
如果你对深度学习的历史感兴趣的话,我认为在AlexNet之前,深度学习已经在语言识别和其它几个领域获得了一些关注,但正是通过这篇论文,计算机视觉群体开始重视深度学习,并确信深度学习可以应用于计算机视觉领域。此后,深度学习在计算机视觉及其他领域的影响力与日俱增。
AlexNet网络结构看起来相对复杂,包含大量超参数,这些数字(55x55x96、 27x27x96、27x27x256……)都是Alex Krizhevsky及其合著者不得不给出的。
Reference
吴恩达深度学习第四门课:卷积神经网络