记录一下对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)数据加强:spa
扩展数据集。从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)
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
FC2也是隐含层,以后增长一个dropout层,比例为0.5