AlexNet 《ImageNet Classification with Deep Convolutional Neural Networks》学习笔记

AlexNet的主要结构

AlexNet 《ImageNet Classification with Deep Convolutional Neural Networks》学习笔记

总共包含8层学习层:5层卷积层和三层全连接层


下面介绍了几个重要的网络结构:

1.ReLU Nonlinearity

相比较于f(x) = tanh(x) 或者 f(x) = (1 + e^-x)^-1这样的饱和非线性(这两个函数在 -1,1 和 0,1附近接近饱和),对于随机梯度下降的方法,f(x) = max(0; x) 也就是ReLU要比两者快很多,下图是一个对比图

AlexNet 《ImageNet Classification with Deep Convolutional Neural Networks》学习笔记

一个四层的卷积网络,ReLU和tanh 分别作为非线性单元, 训练误差达到25%的时间, ReLU比tanh快6倍。

所以要训练这种大型网络,ReLU的速度就是吊打tanh啦。

2.在多个GPU上训练

首先就是说一个GPU算起来很慢啦,我们现在的技术可以跨GPU并行计算,所以我们要用这种高端大气上档次的方法加速啦。

然后作者采取的策略是一个GPU承载一半的卷积核或者神经元计算,然后,作者在这里采取了一个小技巧,就是只在特定的层进行两个GPU的数据交互,

举个例子就是第二层的feature map作为所有第三层的输入(也就是两个GPU的第三层输入都用到了第二层的输出),但是第三层的feature map只作为它所在GPU的第四层输入,也就是说作者只在第二层和第三层做了GPU之间的交互, 而第三层到第四层没有交互。(好绕。。)

作者说这种方式会带来交叉验证的问题,不过可以减少不同GPU的数据交互加快计算之类的,反正就是我要快快快 !


3.Local Response Normalization(局部响应归一化)

首先就是说ReLU特别好啦,不需要对输入归一化来避免输入进入饱和区难训练,只要给个正的输入就可以训练。但是作者发现LRN这个东西有助于泛化,公式AlexNet 《ImageNet Classification with Deep Convolutional Neural Networks》学习笔记

这个公式在ReLU的结果之后使用,大概的作用就是局部神经元的活动创建竞争机制,使得响应比较大的值相对更大,提高模型泛化能力。

作者说这个功能的提高了性能,不过后来很多人用过说没啥用,之后也很快被取代了,公式有点复杂,不过既然没太大意义就不纠结了哈哈哈。


4.重叠池化(Overlapping Pooling)

好像之前的pooling 的kernel size和stride都是一样长的,这里让stride <kernel size啦,然后就说效果又提高啦,我屌不屌。


5.整体架构

我们现在回头来看AlexNet的结构

AlexNet 《ImageNet Classification with Deep Convolutional Neural Networks》学习笔记


一共八层:前5层都是卷积层,后面两层是全连接层,全连接层后的输出结果放到一个1000维的softmax得到预测分类概率的向量。2,4,5层的数据都只在它所在的GPU进行传递,第三层则进行了两个GPU的数据交互。图上也画出来了,就是为了减少计算量。


6.减少过拟合

首先这个模型的参数有6千万左右,很容易过拟合,作者采取了两个方法避免过拟合

(1)数据增强

数据增强是很好用的增加数据集的方法啦,作者采取了两种方法,计算起来都特别快快快。

第一种就是从256*256的图片里面随机选择224 * 224的块(所以第一层的输入是224*224),同时做水平映射,这就又产生了很多训练集,当然了,这样数据会有相关性。在测试的时候,作者将图片的上下左右中间分别提取224*224的块以及它们的水平映射,最后平均它们的运算结果得到最终结果。


第二种就是改变图像的rgb值,做法就是先用pca得到 特征值,然后根据一个标准正态分布生成的值作为特征值的权重,进行加权。


(2)Dropout

作者先说综合多个模型的结果(也就是模型融合)效果很好,但是对于神经网络来说太费时间了,代价太大,因此我们可以用dropout来代替模型融合。它的思想也很简单,就是每个神经元的输出结果有0.5的概率变成0. 也就是“”失活“”了,对于前向传递没有贡献,也不参与反向传播。这样就会产生很多不同的神经网络的子集,在测试的时候对于结果再乘以0.5做加权就得到最终结果啦。 基本的思想就是产生了两个模型,然后加权融合。

作者说实验结果显示这个方法可以减少过拟合,迭代次数会翻倍。


还有一些训练的细节:batch size of 128 examples, momentum of 0.9,weight decay of 0.0005. 作者说小的weight decay不仅有正则的作用,还可以减小训练误差。

还有一些参数略过不说了,作者说关于学习率的设定,初始化为0.01,当validation error以现在的学习率不在改善的时候就对学习率除以10。


最后的实验结果总之就是特别吊,比之前提升了很多。。。。略过不说了。‘