ImageNet Classification with Deep Convolutional Neural Networks-AlexNet详细解读

作者: 18届 CYL

日期:2020-7-20

标签:AlexNet 卷积神将网络

一、写在前面的话

常识区:
1、 ImageNet是一个在2009年创建的图像数据集,之后就是从2010年开始到2017年为期七届的ImageNet挑战赛ImageNet Large Scale Visual Recognition ChallengeI(LSVRC),在这个挑战赛上诞生了AlexNet,ZFNet,OverFeat,VGG,Inception,ResNet、WideResNet,FractalNet,DenseNet,ResNeXt,DPN,SENet等经典模型
2、 在上述比赛中描述训练结果好坏通常用两个标准
Top-1 = (正确标记 与 模型输出的最佳标记不同的样本数)/ 总样本数;
Top-5 = (正确标记 不在 模型输出的前5个最佳标记中的样本数)/ 总样本数;
3、 Alexnet在2012年提出,当时计算机计算能力不足,有着6000w参数和65w神经元的区区八层神经网络用双GPU并行计算需要五到六天,为接下来引出为什么要想尽办法减少计算量加快迭代速率和想尽办法设计模型来并行计算奠定现实基础。
4、 “易“证明也已证明一个拥有足够多设计良好的参数的神经网络模型可以解决任意复杂度的线性或非线性可分的问题。此证明也进一步为神经网络走上神坛奠定基础。
5、 一个参数很多的神经网络模型在迭代次数足够多的情况下是容易造成过拟合的。可以不恰当的想象为一个 解9个十元一次方程 组成的方程组——无数多个解。在经过无数次迭代之后虽然形成了一组解可以很好地满足方程组成立,但是无法确保此解为通解(泛化能力差、过拟合)也就是再给一组数未必满足。那么解决方式也呼之欲出要么增加方程组中方程地个数,要么减少未知数的数量。(分别对应此论文中解决过拟合地方法:数据增强、Dropout正则化)
6、 大数据集采用参数少的模型就相当于想要用杀鸡刀杀牛——小模型怎么可能胜任呢。所以在imageNet这个较大的数据集上就用参数较多也更深更宽的AlexNet

二、AlexNet中使用的策略(建议结合提出背景与实际问题理解各个策略)

1、relu激活函数(增快收敛速度,减小计算量)

在这里插入图片描述
标准的L-P神经元一般使用tanh或者sigmoid作为激活函数。这两个函数在x->∞时导数几乎为0导致在反向传播梯度下降的过程中出现梯度弥散的现象(梯度消失,收敛速度放缓)。
在这里插入图片描述
(使用tanh与relu激活函数做对比)

2、LRN归一化(Local Response Normalization)又称局部响应归一化(想要在限制Relu激活函数值域的同时,增加跨通道交流的能力,增加非线性表达能力,放大有用特征)

由于sigmoidtanh都会将输出压缩到一定范围内,而relu函数的值域没有一个区间,所以需要再借助归一化操作来限制输出范围,因此引入局部响应归一化。(这里多说一句:LRN后续被证明没有什么用,但是归一化的方向是对的,后续模型中有更好的归一化操作),LRN尽管没用但是思想仍然值得一看。下图为公式加粗样式
b代表归一化后的结果,a表示归一化前的值,n的意义是卷积核深度(卷积核个数),k为一个为了防止分母为0的超参数,α为一个系数超参数,β为一个指数超参数。(α、β的数学意义我也没有理解,他们的值的确定只是说根据验证集确定,而没有给具体的方法,在下面解释LRN的意义中先忽略这几个超参数)。 分母的意义就是 同一位置经过不同卷积核操作后的值加和。在这里插入图片描述
容易看出经过这个操作之后,一个比较大的值对周围的其他值有抑制作用。形成强的更强,弱的更弱的效果,来放大有效特征。(这是理论上应有的效果,但是为什么后续说此操作对最终结果没有作用我还没有读相应论文)

3、Overlapping Pooling(覆盖的池化操作)(想要提取更多信息)

一般的池化操作没有重叠,所以pool_size和stride一般是相等的,例如:88的图像,经过22的池化操作之后会得到4*4的结果,这种设置叫做不覆盖的池化操作,但是当步长stride<池化大小pool_size时就会出现覆盖。尽管理论上覆盖池化可以保留更多的信息,在top-1,top-5的结果中也有了一定程度的效果提升,但是后续有理论依然证明此操作与不覆盖池化效果一样。

4、Data Augmentation(数据扩张,就是对原始数据经过平移,旋转,拉长,变形,来防止过拟合)

防止过拟合的最简单的办法,只需要对原始的数据集进行适当地变换,就会得到更多有差异的数据集。

5、Dropout正则化(增加扰动因子,防止过拟合)

dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而***每一个mini-batch都在训练不同的网络***。
而Dropout为何有用
Hinton认为:(此处先举个例子方便理解:考虑到决策树与随机森林的关系即随机森林是由无数个单独的决策树组成的,那么用随机森林进行分类就是将每个决策树的结果输出然后取平均,这个例子应该可以很好理解:一个决策树过拟合了还能用另一个决策树往回掰一掰,不至于随机森林整个都过拟合。也就是既然一个模型容易过拟合,那就几个模型组合使用来解决过拟合问题,然而传统的机器学习反正也比较小,弄几百个决策树也可以几秒出结果,神经网络光是训练一个就费死老劲了,怎么可能训练成百上千个)返回来看dropout加红字体,就很好理解,引入dropout正则化相当于让一个模型实现多个模型的效果。
其他有名学者也提出自己的看法:dropout强迫前一层的神经元与后一层的多个随机神经元共同工作,会作为扰动因子不断破坏原有的固有联系,而去尝试寻找新的可能存在的内在联系。(有点类似于L2正则化削弱一个极大参数作用,而让多个参数共同作用有异曲同工之妙。)

三、AlexNet网络结构概览

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(注:八层是指卷积层+全连接层为八层,输入层池化层均不计入在内,卷积层操作内包含了池化操作。)

注:若有侵权请联系我们

猜你喜欢

转载自blog.csdn.net/cyl_csdn_1/article/details/108898723