CV论文笔记1——Alexnet

记录一下对Alexnet一些关键技术的理解。

问题1:网络设计上Alexnet有什么新的贡献?

  1)ReLu激活函数:反向传播时,经过ReLu的梯度要么是1要么是0,不会出现sigmoid函数在两端梯度变化很小的情况。直观的效果使网络更容易训练,训练速度更快。

  2)多GPU的训练架构:在两块gpu上各分配一半神经元节点,但只在第3层卷积和全连接层进行通信。多gpu的设计首要是解决算力不足的问题,但意外带来了精度提升。很好的启发了mobilenet等网络,按通道分组计算的设计思路

  3)LRN局部归一化:该算法引入相邻单元的值,修正当前位置的值。在sigmoid做激活函数的网络中,通常需要对输入做归一化,来减缓其饱和的风险。使用ReLu消除了饱和问题,但对输入做归一化依然有增加模型泛化性能的好处。该方法已被BN取代,对输入数据归一化,能有效控制输入数据的分布,使网络更容易收敛,同时有减小过拟的作用。

  4)重叠池化:kernel的移动步长小于kernel大小。此时相邻两个卷积使用的像素会有重叠,这部分冗余的计算信息对性能的提高是否有必要?(仅有轻微的实践支持)。目前大部分网络步长取1,加上一定的padding,这样在卷积操作后特征图大小不会变化,更容易调控网络。

问题2:Alexnet采用哪些技术来防止过拟合?

  1)数据增强:

  扩展数据集。从256x256中,随机提取224x224的块,以及其水平镜像(翻转),因此训练集扩展了2048倍,样本之间高度相关。模型推理时提取四角和中间的patches以及它们的水平镜像共10张,再取网络softmax输出的平均值。(该方式十分耗费计算量,目前不提倡)

  RGB像素扰动。对整个训练图片集的RGB像素值,做PCA分解。从3x3的RGB矩阵中分解出独立的基(特征向量+特征值),基于该基构造像素值的随机扰动,添加到原图的RGB值中。该策略用于捕捉图片本身的属性,一定程度排除光照强度和颜色的影响。

  2)Dropout:

  将隐含层神经元按一定概率(有效比例)设置为0,"失活”的神经元不参与前向和反向传播。每次提供一个输入时,神经网络采样不同的架构进行预测(由于共享权重,不会增加计算)。该技术减少了神经元之间复杂的“联合适应性”(co-adaptations),因此一个神经元不会依赖特定的其他神经元,通过引入更多样的连接方式,会强制网络学习更鲁棒的特征。

  该策略的直观效果,相当于测试时合并多个不同模型的结果用于减小误差。另外预测时使用所有神经元,但是将其输出乘以有效比例,保证和训练时有一致的容量。

问题3:Alexnet整体结构如何设计?

使用5层卷积和3层全连接网络,解决大分辨率图片识别问题。模型输入采用224x224的图片。

  1)Conv_1:kernel大小11x11, 步长4,输出96维。为保证输出图大小为55,padding=2,相当于输入图228。具体实施时使用两路gpu每路48个kernel。

  2)Max_p1:kernel=3,步长为2,padding='valid',输出图大小为27。

  3)Conv_2:kernel大小5x5,步长1,输出256维。两路gpu每路128个kernel。

  4)Max_p2:和p1一样,输出为13。

  5)Conv_3:kernel=3, 步长=1,padding='same',维持输出特征图13不变,共输出382维。两路gpu每路192维,使用所有256维输入。

  6)Conv_4:重复Conv_3,不同的地方是使用前一层一半的输出192维作为输入。

  7)Conv_5:重复Conv_4,只是输出维度变成256维

  8)Max_p3:和p1一样, 输出维为6

  9)FC1:直接将特征图拉成一维向量,共输出4096维,两路gpu每路输出2048维。FC1是隐含层,之后增加一个dropout层,比例为0.5。

  10)FC2:同FC1,输出4096维。FC2也是隐含层,之后增加一个dropout层,比例为0.5

  11)FC3:同FC1, 输出1000维。

猜你喜欢

转载自www.cnblogs.com/QJuse/p/12146671.html