引言
读经典论文,更能获得一些通用的idea启发,同时也是补充基础知识的过程。本文stepwise更新,且读且更新~
AlexNet
文章:2012-NIPS-Imagenet classification with deep convolutional neural networks
使用了分组卷积:
- 最初是因为显存不够使用的,后来被发现是一种很好的降低参数量的方式
- 具体机制可以参考分组卷积:Grouped convolution,搞懂原理后可以得知,分几组,参数量就减少为几分之一
VGG-Net
文章:2015-ICLR-Very deep convolutional networks for large-scale image recognition
展现了一个简单且有效的构造深度网络的策略:堆叠相同shape的building block
ResNet
文章:2016-CVPR-ResNet-Deep residual learning for image recognition
堆叠具有相同拓扑结构的模块(相对于VGG的相同shape的block,此概念的范围更广,某拓扑结构的模块可能是多个block的集合)
- 这个策略减少了超参数的自由选择,同时深度成为了网络中的重要维度
- 同时能够减少适应某个数据集的超参的过拟合风险
Inception models家族
代表文章:
- 2015-CVPR-Going deeper with convolutions
- 2015-ICML-Batch normalization: Accelerating deep network training by reducing internal covariate shift
- 2016-CVPR-Rethinking the inception architecture for computer vision
- 2616-ICLR-Inceptionv4, inception-resnet and the impact of residual connections on learning
证明了精心设计的拓扑能够在低理论复杂度下获得有竞争力的准确率
- 常用策略:split-transform-merge策略;输入首先被 1 ∗ 1 1*1 1∗1卷积切分为几个低维嵌入,然后使用特定卷积核进行转换(比如 3 ∗ 3 3*3 3∗3、 5 ∗ 5 5*5 5∗5的卷积核),最后将特征concat;
- 这种结构的解空间是操作在高维嵌入中的单一大层解空间的严格子空间(听不大懂,因为还没看过具体论文,但是大概意思是说这种先切分后合并的策略,理论上证明是合理的)
- 这种split-transform-merge策略能够逼近大而密层的表示能力(就是说小结构获得大能量)
- 然而会有较大的计算复杂度(理论上低,但也是要牺牲计算复杂度的)
- 模型的实现伴随着一系列复杂的因素,比如每个变换的卷积核数值和大小需要定制,以及模型需要一步步地定做(也就是说对于新任务新数据集,这些超参需要重新进行严格地设定)
ResNeXt
文章:2017-CVPR-ResNeXt-Aggregated Residual Transformations for Deep Neural Networks
提出一个简单的、高度模块化的网络(老朋友了,高模块化就是说,整个网络可以浓缩为几个高频building block,这些block就是整个网络的关键):
- 这里的building block能够聚合有相同拓扑的变换集,如下图右
- 这个高频block与之前不同的是,提出了一个新的维度,称为基数(cardinality),表示变换集的大小(也就是上图右的path)。这个参数在准确率的表现上,经验证比网络的深度(层数)和宽度(通道数)更为重要;同时它还能保证不增加网络的复杂度(FLOPs)和参数量
- 在真正实践中,可以处于工程妥协,将block进行等价的变换: