由于当时GPU的限制,AlexNet网络太大不能在单个GPU上训练,因此分布在了两个GPU上训练,下图中上面一层是在第一个GPU上训练,下面一层在第二个GPU上训练,第一层和第二层有时会交叉传递信息,例如,C2层和C3层之间。
C1:96个kernel,大小11*11*3,其中3是因为输入图片是3通道(RGB),stride=4,得到96个feature maps;随后紧跟响应归一化和最大池化,这个图上面没有显示;
C2:256个kernel,大小5*5*48,其中48是指连接到上一层的feature map有48个(96/2=48),得到256个feature maps;随后紧跟相应归一化和最大池化,这个图上面没有显示;
C3:384个kernel,大小3*3*256,得到384个feature maps;
C4:384个kernel,大小3*3*192,得到384个feature maps;
C5:256个kernel,大小3*3*192,得到256个feature maps;
F1:4096个神经元;
F2:4096个神经元;
Dense:1000维,因为测试的ImageNet有1000个不同的类别。
写完Alex Net网络架构,我发现,kernel的大小是前面大后面小。该文章的贡献:1.训练了到当时为止最大的神经网络之一,并取得当时最好的结果;2. 编写了高度优化的2D(高和宽)卷积GPU实现,换句话说就是使用了GPU。
该网络中还用了以下常用技巧来提高检测准确度:
- 使用relu神经元替代tanh(x)或者(1+e-x)-1,能够提高网络运行速度(为什么?文章也没有讲);
- 局部响应归一化,能够增强泛化能力(为什么?文章没有讲)。
- Overlapping Pooling,该文章说,训练中,如果在pooling时存在overlapping,会减轻过拟合的可能性。
- 两种数据增广的方式:1.图像变换和水平翻转,2.改变训练图像的RGB通道强度,对RGB像素值集合执行PCA(不懂这个操作)。
- dropout,“失活的”的神经元不再进行前向传播并且不参与反向传播。
- SGD,随机梯度下降。