CNN Architecture
AlexNet
首次使用了ReLU激活函数,使用Norm层,进行了数据增强,dropout层的概率为0.5,batch size的大小选择128,SGD momentum的值选0.9,learning rate为1e-2,当准确度不再提升时下降10倍,L2参数选择为5e-4。
值得注意的是结构中使用了两个并列运行的卷积结构,这是由当时的算力决定的,由于当时GPU的存储无法存储一个完整的网络才将网络分为两个。
VGG
将卷积层的大小限定为33, stride=1,pad=1的尺寸,使用22的Max pooling, stride=2。
使用小卷积核的原因是:小卷积核有更小的参数量,因此可以有更多的卷积核,尝试更深的网络,因此效果更好。
对于33卷积而言,三层33的卷积与7*7卷积effective respective filed(对应输入图片的大小)相同,但网络更深,有更多的线性组合和更少的参数量,效果更好。
对于存储和参数分布:存储量主要集中在前几层卷积的计算,参数则主要集中在最后的全连接层。
经试验验证,倒数第二个全连接层的输出具有很好的泛化性能,可以用其作为迁移学习的模版。
GooLeNet
googlenet共有22层,且没有使用全连接层,大幅度减少了参数的数量,只有5 million的参数,对比AlexNet减少了12倍的参数。
Googlenet中提出了Inception结构
首先该结构实现了在一层中使用多种卷积核,让神经网络自己选择需要使用的卷积核尺寸,同时使用1*1卷积核来降低channel的个数(bottleneck),降低计算复杂度。
使用辅助分类结果来将底层的特征映射出来,最终根据需要取平均或者最大值等得到最终结果。
ResNet
该网络中一共使用了152层结构,使得深层网络的实现成为可能。
在残差网络提出之前深层网络无论在训练集还是在测试集上的表现性能都不一定比相对浅层网络的好,可能原因是因为神经网络本身是一个优化问题,深层网络难以进行优化。
残差网络的原理是通过残差调节原来的输入来得到输出,而不是直接将输入扔进神经网络中训练。
F(x) 就是残差,我们想通过训练得到一个F(x)来修正输入X。
对于输入和输出大小不同的位置,论文给出了两种方法:
- 将输入中比输出少的channels用0填充
- 使用Ws*X来匹配多余的channels
ResNet中也有使用bottleneck来提高计算效率。
other architectures
Network in Network
- 在神经网络的一个卷积核的计算中添加两层全连接,增加卷积线性组合的可能性。
- 使用了全剧平均池化层代替全连接层(每一个channel输出一个值)。
Identity Mappings in Deep Residual Networks
Wide Residual Networks
讨论了更宽的网络对于residual network的影响,事实证明,更宽的网络带来了更好的表现性能。
ResNeXt
使用类似于Inception的结构构造了更宽的残差网络。
Deep Networks with Stochastic Depth
训练时随机抛弃一些层,在测试时使用全部的网络。
Ultra-Deep Neural Networks without Residuals
在一个网络中创造类似于浅层网络向深层网络的转变,在训练时也适用随机舍弃一些sub-path的训练方式,在测试时使用全部路径。
Densely Connected Convolutional Networks
使用更复杂的连接方式来减轻梯度消失的影响
SqueezeNet
使用11卷积核压缩channels,再使用11和3*3的卷积核扩展channels