AlexNet论文阅读
个人心得: 1.更大的数据集(如ImageNet)可以帮助CNN训练至收敛。 2.适合的梯度下降函数(Relu)可以加速训练 3.GPU并行运算更加迅速 4.数据增广、批处理训练dropout、池化操作、LRN正则化可以减少过拟合
摘要
Alex小组训练了一个DCNN,由五个卷积层,一些max-pooling 层,三个全连接层组成,采用了GPU训练和"dropout"正则化,在ImageNet数据集上取得了很好的效果。
1.简介
收集更大的数据集、建立更大的模型、使用更好的防止过拟合的方法可以改善目标识别任务的表现。 目标识别任务的复杂性意味着,即使是ImageNet这样的数据集也没法指定某一问题,因此我们的模型需要大量的先验知识,以补偿没有的数据。 可以通过调节深度和宽度控制CNN的能力,并且CNN可以对图像性质(统计数据的平稳性和像素的位置相关性)做出strong and mostly correct 的假设。 CNN具有更少的connection和参数,更容易训练(GPU可以帮助训练,大数据可以减少过拟合)。 Alex小组训练了最大的CNN,并且部署在GPU训练,发现了深度对CNN性能很重要。
2.数据集
ImageNet由不同分辨率图像组成,我们将图片调整成256*256,并且直接对RGB图像做训练。
3.结构
 AlexNet包含8个学习层(5个卷积层和3个全连接层),下面按重要性描述结构(前面的更重要) 3.1 ReLU非线性 标准的神经元输出是函数 f 对输入 x 的作用 f(x) = tan(x) 或 f(x) = sigmoid(x)。而在ImageNet上我们主要关心过拟合,因此采用ReLU函数加速训练。(此处x应该指神经元权值运算结果z) 3.2 GPU训练 采用GPU训练加速了模型训练,并且可以并行训练。 3.3 Local Response Normalization ReLU能有效地防止饱和。然而我们发现LRN仍然有助于模型泛化。  n是相似空间位置近邻kernel的总和,N是层中kernel的总数。这种响应正则化是类似于神经元启发性的侧向抑制。 k,n,α,β(本论文为2, 5, 10^-4, 0.75)是超参数,我们在ReLU后面采用这种正则化。 3.4 重叠池化 CNN中的pooling操作汇合了在相似kernel中的临近组神经元的输出。传统的pooling并不重叠。一个pooling layer可被认为是池化单元网格间隔s个像素组成,每个单元汇合池化单元位置的中心尺寸z*z的近邻。当s=z时,是传统池化,当s<z时,获得重叠池化。重叠池化可以减少过拟合。 3.5 总体结构 
网络共八层,5层卷积层,3层全连接。最后一层全连接输出到1000路softmax,softmax层在1000个类别上产生分布。ReLU作用于每个卷积和全连接层的输出。 1.conv1层: 
注:输入应为2272273,否则算出输出维度不为55(有说舍弃小数,但一般设计时取整或用padding填充)。 Input的通道数 = kernel的通道数。 Output的channel数 = kernel的个数。 卷积层输出: W/H = (W - F + 2P)/S + 1 D2 = K 池化层输出: W/H = (W - F)/ S + 1 D2 = D1 **卷积操作:**故输出为555596个像素层,使用双GPU并行训练,故分成两组,每组48个卷积核,则对应生成两组555548的像素层。像素层经过relu1单元的处理,生成激活像素层,仍为两组555548的像素层数据。 **池化操作:**这些像素层数据经过pooling运算,pooling运算 F = 3(kernel_size),s = 2。故池化后像素规模为两组272748像素层。 LRN操作: norm尺度为55 反向传播时,每个卷积核对应一个偏差值,即第一层的96个卷积核对应上层输入的96个偏差值。??? 2.conv2层  默认卷积层步长为1,池化层(默认应该为2?) W = (27 - 5 + 22)/ 1 + 1 = 27 H = 27 D = 256 卷积层输出2727128(两组) W = (27 - 3)/ 2 + 1 = 13 D = 128 池化层输出 1313128(两组) 反向传播时,每个卷积核对应一个偏差值,即第一层的96个卷积核对应上层输入的256个偏差值。??? 3.conv3层  W = H = 13 D = 192(两组) 共1313384个像素层 4.conv4层  1313192(两组),共1313384像素层 5.conv5层  卷积层输出1313128(两组) 池化层输出66128(两组) 共输出66256个像素层 6.FC1  由于全连接层输入数据尺寸为66256,采用66256的滤波器对第六层的输入数据做卷积运算,每个66256尺寸的滤波器对第六层输入数据进行卷积运算生成一个运算结果,通过一个神经元输出运算结果。共有4096个运算通过relu生成4096个值,然后经过dropout,输出结果值。 **全连接层实现:**实际使用时,全连接层可由卷积操作实现:①前层是全连接的全连接层,可以将其转化为11的卷积 ②前层是卷积层的全连接层,可以将其转化为卷积核为 h * w 的全局卷积(h,w为前层输出的高和宽),后一层(输出层)的神经元个数作为卷积核的个数(卷积核数量为卷积层的输出通道数)。 **全连接层作用:**将分布式特征representation映射到标记样本空间。即将特征representation整合在一起,输出一个值,大大减少了特征位置对分类带来的影响。但因为空间结构特性被忽略了,所以全连接层不适合用于在方位上找Pattern的任务,比如segmentation,只适合分类任务。 7.FC2  8.FC3 
4.减少过拟合
4.1数据增广 采用了两种数据增广形式,第一种是图像平移和垂直映射。 第二种是改变RGB通道强度。执行PCA 4.2Dropout 随机(本文为0.5)对神经元输出置0,神经网络结构发生了变化但仍共享权值。
5.训练细节
SGD,初始化权值方法,并行训练方法
6.总结
1.CNN对图片分类是有效的,目标不在图片中心也能识别 2.深度对CNN表现很重要 3.时序结构会提供许多有用的信息(Video?NLP?) 4.CNN可以对图像性质(统计数据的平稳性和像素的位置相关性)做出可靠并几乎正确的假设。 5.猜想:如果两个图片生成的特征激活向量的欧氏距离很小,可以说NN高层认为它们很相似。 使用此度量,可以实现较好的图像检索。 通过欧氏距离计算两个4096维度效率太低,可以使用自动编码压缩向量成二进制码。这比直接在原始像素上使用自动编码效果更好。因为在raw pixels上使用quto-encoder,没用到标签数据,只是检索有相似边缘模式(similar patterns of edges)的图像,却不管他们语义(semantically)上是否相似。即,抽取特征后,压缩计算相似度。

参考文章:https://zhuanlan.zhihu.com/p/180554948 https://blog.csdn.net/qq_24695385/article/details/80368618
|