AlexNet模型回顾
0 摘要
Hinton大神(BP算法提出者)的学生Alex提出于2012年,主要创新和贡献为
【1】首次利用GPU和ReLU加快训练
【2】 使用dropout减少过拟合
【3】提出LRN层和重叠最大池化(max pooling)
AlexNet一举夺得视觉领域竞赛ILSVRC 2012的桂冠,在ImageNet数据集合上,效果远超过传统的方法,从传统的70%多提升到80%多。
1 网络架构
AlexNet共有八层网络
5层卷积层,3层全连接层,参数数量60M,神经元个数650k,分类数目1000类
网络层 | 感受野 | 卷积核个数 | 卷积核尺寸 | 步长 | padding | feature_map |
---|---|---|---|---|---|---|
conv1 | 227*227 | 48*2 | 11*11*3 | 4 | 2 | 227*227 |
max pooling | 55*55 | 48*2 | 3*3*3 | 2 | - | 56*56 |
conv2 | 27*27 | 48*2 | 5*5*48 | 1 | 2 | 27*27 |
max pooling | 25*25 | 128*2 | 3*3*48 | 2 | - | 27*27 |
conv3 | 12*12 | 192*2 | 3*3*128 | 1 | 1 | 13*13 |
conv4 | 10*10 | 192*2 | 3*3*192 | 1 | 1 | 13*13 |
conv5 | 8*8 | 128*2 | 3*3*192 | 1 | 1 | 13*13 |
max pooling | 6*6 | 128*2 | 3*3*128 | 2 | - | 6*6 |
fc1 | - | 2048*2 | 6*6*256 | - | - | - |
fc2 | - | 2048*2 | 1*1*4096 | - | - | - |
fc3 | - | 1000 | 1*1*4096 | - | - | - |
1.1 ReLU
f(x)= max(0,x)
1、与使用tanh相比ReLUs能以6倍快的速度到达25%的训练错误率(CIFAR-10数据集)。
2、解决了sigmoid在网络层次较深时的梯度弥散问题。
1.2 Overlap Max pooling
f(x)= max(0,x)
Pooling的步长stride比Kernel Size要小,重叠池化窗口能够分别将第一名的错误率降低0.4%,第5名的错误率降低0.3%
1.3 减少过拟合
1.3.a 数据增强(data augmentation)
方法一:水平翻转和图像变换
方法二:PCA Jittering
1.3.b Dropout
训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。
朴素思想:以0.5的概率让隐藏层的输出为0,失活的神经元不再进行前向传播且不参与反向传播
AlexNet:前两个全连接层使用dropout,会减少过拟合,但会使训练迭代次数翻一倍
1.4 LRN(局部响应归一化)
提出了LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。在后来的设计中,这一层已经被诸如Regularization技术,如drop out, batch normalization取代了。
2 后续发展
1)全连接层的替换(使用全卷积来进行替换)
2)卷积核大小的修改(类似inception)
3)通道分组卷积(类似shufflenet)
4)通道、权重剪枝(类似Channel pruing)
5)LRN被batch normalization等泛化增强技术替代
3 附录
感受野计算公式(不考虑padding,从下往上反推)
rfsize = (output - 1) * stride + ksize
Feature Map的尺寸计算公式
fm(output)=(input_size + 2 * padding_size − ksize)/stride+1
卷积核的厚度=被卷积的图像的通道数 (卷积后三通道合为1)
卷积核的个数=卷积操作后输出的通道数 (即feature map的通道数)
全连接概念
拿第一层全连接层举例,该操作其实就是用2048个13*13 *256(256是池化层的厚度)的卷积核卷积出来的,对于输入的每一张特征图,都使用一个和图像大小一样的核卷积进行点积运算,这样整幅图就变成了一个数了,如果厚度是256就是那256个核卷积完了之后相加求和。这样就能把一张图高度浓缩成一个数了。