姓名:吴丞楚 学号:20012100032 学院:竹园三号书院
【嵌牛导读】在2014年的ImageNet大赛中,由Google. Inc开发的GooLeNet以6.67%(人类大约为5%)的失误率拔得头筹,该篇论文就是对其算法实现的详细论述。
【嵌牛鼻子】CNN算法、神经网络训练
【嵌牛提问】Google自己创造的inception算法具体实施的操作主要有哪些?
首先,在摘要部分其首先点明了该算法沿用了当时先进的CNN算法,并命名为Inception(此处为致敬盗梦空间)。然后说明该算法并非单纯的提高参数数量和压榨计算机算力,而是对神经网络结构的深度和宽度的进一步探索。
接着提出了该算法是运用 Hebbian principle(赫比原则) 和Intuition of Multi-Scale Processing(多尺度的直觉处理) 进行优化,并支持在不同情况下对其(卷积层以及全连接层)大小进行调整,并且不会影响其参数数量。最后,其说明参与测试的大型卷积神经网络被命名为GooLeNet,共包含22个layer层。
引言部分,其主要介绍了当年图像识别与目标检测领域的大发展并不是由于计算力的发展而进步的,而主要是对网络结构的改进而取得的卓越进步。并且,其提出随着移动与嵌入式计算不断发展,对于算法的钻研(以图提升功率与内存的利用率)变得愈加重要,因此当大多数机构以图将参数量级升高的时候,Google团队可以在较小规模时处理大型数据集并取得远胜它们的结果。在相关工作部分,他们提出自从LeNet-5之后,卷积神经网络(CNN)几乎成为该领域的首选(因此,GoogLeNet的Le正是致敬LeNet-5)。这种结构的基本特征是使用卷积层进行堆叠,其中辅以Max-Pooling(最大池化),最后在规范化输入后,再附以多个全连接层。这样的结构几乎成了规范,并且它在面对类似MNIST这样的小数据时取得了骄人的成绩,即使在面对ImageNet这样的大数据集时,它也可以通过适当提高网络尺寸和数量来提升准确度,并伴以Dropout(随机失活)来解决过拟合的问题。
他们表明,Inception算法运用了仿生学的知识,卷积层结构与灵长类生物的视觉皮层神经。并且与最初使用类似模型的Serre等人不同,他们并未仅仅使用两个固定的深层模型学习,而是将模型构建为了一个22层的深层模型。Network-in-Network是Lin等人为了提高神经网络表示能力(这里的NIN网络模型依然值得好好学习,因为他与该篇论文同在2014,皆为经典论文)/*对于NIN网络,它的全名为Network-in-Network,它主要的非比寻常之处集中在两点,这两点成功缓解了当时CV领域的两大难题,感受野大于1的卷积层特征提取能力较低,全连接BN层的参数过多导致的过拟合问题。其一对比普通的卷积层,NIN使用的是1*1卷积网络,它将所选值进行对应运算后与0选出较大值,不仅能够使特征更为清晰,甚至可以实现数据降维以及不同网络的数据汇总。
并且在当时随着卷积层加深,由于特征的愈加抽象,小口径的卷积层特征提取能力已经明显不足,但随着5*5卷积层的使用比例增多,不仅计算量增大,效果也不理想。在当时,如果我们需求提取的特征是线性可分的,那么对于线性的卷积运算来说,这是可行的,但是,当特征为线性不可分甚至为高度非线性时(一般情况),我们就需要使用滤波器,将低于或高于某一值的数据失效,但如此完备的滤波器系统带来的参数与运算量是恐怖的
因此,NIN系统的提出了自己的MLP Convolution Layers层,它可以有效过滤掉失去意义的数据,并为后续的大型卷积层网络减少计算量。其二,当时结构末端大都采用全连接层辅以SoftMax来处理分类任务,但这样的代价是参数过多,增加计算量的同时容易导致过拟合的产生,由此,Hinton团队提出了Dropout来定期的使一些神经元失活,但仍然不足以解决这个问题。因此,NIN提出直接使用全局平均池化层代替全连接层,直接将结果送入SoftMax,这样做好处之一是使得特征图与分类任务直接关联,另一个优点是全局平均池化不需要优化额外的模型参数,因此模型大小和计算量较全连接大大减少,并且可以避免过拟合。*/GoogLeNet团队提出,当时主要的目标检测(Object detection)技术为R-CNN(关于RCNN我们也要着重介绍一下)/*R-CNN是当时十分先进的一种对象识别方法。它主要的特点如下: 当你识别上图那样的图片时,如果你的目标是图像识别,你的目的仅仅是发现它是一只猫;当你的目标是目标检测时,你还需要给出这个猫的位置。 它的具体做法是这样的:首先从图片中,扣出来2000个备选区域,用于判断这些里面哪个有目标。其后对每一个区域分别进行图像识别。最后通过概率大小,选出其中最可能包含目标物的哪个(些)区域。首先,对于区域的提取,RCNN采用了Selective Search 算法(具体我就不再详说了)。接着,RCNN将输入的图像分解为一个4096维的特征向量。但值得注意的是,RCNN采用的Alex Net图像输入为默认的227*227,但通过Selective Search切割出来的区域却大多不是这个尺寸,对此,RCNN使用了一个暴力的方式——无条件的令其尺寸变换,直到它达到227*227。然后,对于多个重叠图像框的筛选,RCNN对loU值的计算采取的是NMS算法即Non-Maximum Suppression(非极大值抑制)顾名思义该区域若不是得分最高的那个,就要被抑制消除。如0.75,0.8得分的就被0.9分的抑制消失,最终确定了人脸的最准确位置。对于区域的选取,一般采用的是二值分类,也就是如果检测到了对象的存在,则返回True,反之则为False。然而如果这个区域只有对象的一部分呢?这时就要使用IoU值的阈值方法,通过手动设置阈值,当其超过阈值,则视其为True,反之即使它值并不小,只要低于阈值则视为False。当然,其中的阈值来自 {0,0.1,0.2,0.3,0.4,0.5} 的数值组合,并非随机设定的。如果设为0.5则准确率直接下降五个百分点。
当然,这个模型还面临着每一个object detection都面临的问题,数据过多,计算机无法承载。这时RCNN采用了Hard negative mining的方法。该方法顾名思义,是将容易错的Hard数据一遍一遍的重新输入进去,直到它精确度不再增长为止(类似于错题本上的易错题一次又一次的做,直到通透为止)。*/第三部分,他们点明自己使用了疏松连接体系(Sparsely Connected Architectures)来替代一部分全连接层。这一做法是为了呼应Hebbian Principle的仿生学知识(当每次摇铃铛都给狗吃的,则一旦摇铃铛狗就流口水,因为铃铛与食物之间的神经已经被强化了),这一发现的主要作用为,当两个神经元经常在一起产生动作电位的时候,两个神经元之间的关系则会被强化,反之则被减弱。然而,当时的计算机很难处理疏松连接的体系结构,无论是CPU还是GPU表现都不佳。因此,大家又回到了全连接,大尺度的卷积以及大量滤波系统的使用。最后他也表明了对于上述新方法的一些建议和支持。
第四部分,整个论文的核心部分,架构的细节介绍。 其中,Conv表示卷积层,1s表示其向右每次平移一格,1v表示每次向下平移一格。LocalRespNorm为LRN归一化方法,并采用Concat拼接,用SoftMax进行选择输出,在最后还采用了平均池化层(Average Pool)代替了全连接层。其中,为了特征提取的精确性,采用了Inception叠加的方法,并且多个SoftMax出口辅助结果(前面几个出口将乘一个较小的参数如0.3加和进入最终结果)。如下就是卷积层的基本工作方式,由Filter(滤波器)对卷积进行分别相乘,然后再加上常数b。3*3代表卷积大小,s=2代表每次位移2格。MaxPooling表示从某大小的区域里面选择最大的作为特征提取并输出。而LRN作为归一化方法,它最大的作用就是防止神经元因为参数过于接近1或0而死亡(因为当其接近0或1)它对于数据的影响能力收敛RELU和Sigmoid函数对于其激活能力下降,而LRN能重构其参数,令其焕发生机,也被称作神经元复苏。
在之后的内容之中,GoogLeNet团队给出了自己训练的方式以及在比赛中取得的卓越成绩。这些我们都已经体会到了,就不再赘述,后面我会使用python. TensorFlow给出GoogLeNet的简单模型复现,并给出它在面对MNIST数据集的结果。
最终结果如下:4/4 [==============================] - 1s 349ms/step - loss: 3.6453 - dense_85_loss: 2.3059 - dense_82_loss: 2.1815 - dense_84_loss: 2.2829 - dense_85_accuracy: 0.0703 - dense_82_accuracy: 0.3516 - dense_84_accuracy: 0.2578
这里采用的样本集只有256与128,可以看到Accuracy还是非常低的,但当读取数据不断提高,其效率增加到速度十分抢眼。以上就是关于GoogLeNet的简单叙述。