AlexNet论文学习
1.AlexNet背景介绍
AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevsky设计的。AlexNet在2012年的ImageNet竞赛中以top-1的37.5%错误率和top-5的17.0%错误率一举夺得冠军,计算机视觉开始逐渐进入深度学习主导的时代。
2.AlexNet创新之处
-
采用了ReLU非线性单元作为激活函数
ReLU在网络中的效果比Sigmod激活函数要好,计算速度要快(Sigmod函数涉及到指数运算,而且在反向传播求误差梯度时,用的除法计算,计算量大,同时Sigmod函数在接近饱和的地方,变化缓慢,会出现梯度消失的问题)。ReLU激活函数使得一部分网络输出为0,造成了网络的稀疏性,减少了参数的相互依存关系,降低了过拟合发生的概率。
-
采用了2个GPU并行计算,减少训练时间
这是因为当时硬件水平跟不上,所以采用了多GPU计算,缓解计算时间问题,在现在已经不需要担心这个问题,所以这里也不详谈。
-
采用了LRN(局部相应归一化)
该方法启发与神经生物学中的一个概念叫做侧抑制,指的是被激活的神经元会抑制相邻神经元。但是LRN存在争议,在VGGNet的论文中提到LRN基本没什么用。
-
采用重叠池化
相比于正常的池化(步长s=2,窗口z=2),重叠池化(步长s=2, 窗口z=3)的窗口大于步长。同时重叠池化在一定程度上避免过拟合。
-
采用了Dropout(随机失活)
在前向传播中,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。
3.网络结构详解
AlexNet有8层网络,含5层卷积层和3层全连接层。如下图所示:
此图分为上下两部分是因为当时GPU运算能力不足,所以在两块GPU上训练,但现在已经不需要担心这个问题了。
ConV1:
上图中的网络输入为224 * 224 * 3,但是实际输入为227 * 227 * 3。经过卷积和池化之后,其输出为27 * 27* 96。
依据公式:[input_size - kernel_size + 2*paddin]/ stride + 1 = output_size
计算过程如下:**(227 - 11 + 2 * 0) / 4 + 1 =55 **; (55 - 3) / 2 + 1 = 27
ConV2:
其输入为 27 * 27 * 96,输出为 13 * 13 * 256
ConV3:
其输入为 13 * 13 * 256,其输出为 13 * 13 * 384
ConV4:
其输入为 13 * 13 * 384,其输出为 13 * 13 * 384
ConV5:
其输入为 13 * 13 * 384, 其输出为 6 * 6 * 256
FC6:
其输入为ConV5的输出,是6 * 6 * 256,其输出为 4096 * 1
直接将 6 * 6 * 256 的三维数据拉成一维向量来处理
FC7:
其输入为 4096 * 1 ,其输出为 4096 * 1
FC8:
其输入为 4096 * 1,其输出为 1000 * 1