卷积神经网络发展概览
卷积神经网络的结构发展概述,主要包括:
- 早期探索:Hubel实验、LeNet、AlexNet、ZFNet、VGGNet
- 深度化:ResNet、DenseNet
- 模块化:GoogLeNet、Inceptionv3和Inception-ResNet、ResNeXt、Xception
- 注意力:SENet、scSE、CBAM
- 高效化:SqueezeNet、MobileNet、ShuffleNet、GhostNet
- 自动化:NASNet、EfficientNet
这篇博客并没有详细讲述各种卷积神经网络架构,只是简单记录对卷积神经网发展的印象,是对卷积神经网络框架的简单了解。在后续的学习过程中,注意力应放在几个主要的基本框架上。
一、早期探索
LeNet
LeNet网络结构:
理解难点:S2到C3的详细解释过程,参照下文的解释
LeNet详解
卷积神经网络(CNN)Python的底层实现——以LeNet为例
AlexNet
卷积神经网络之AlexNet
卷积神经网络模型(2)-AlexNet解读
初探Alexnet网络结构
https://blog.csdn.net/briblue/article/details/83063170
从《百面深度学习》这本书中的相关内容介绍领悟到,Dropout这种以一定比例随机丢弃神经元的方式是一种Bagging的思想:神经网络通过Dropout层以一定比例随机丢弃神经元,使得每次训练的网络模型都不相同,多个Epoch下来相当于训练了多个模型,同时每一个模型都参与了对最终结果的投票,从而提高了模型的泛化能力。在此注意,Dropout与Bagging有一点不同是:Bagging的各个模型之间是相互独立的, 而Dropout各个模型之间是共享权重的。
VGG
- VGG16包含了16个隐藏层(13个卷积层和3个全连接层),如上图中的D列所示。
- VGG19包含了19个隐藏层(16个卷积层和3个全连接层),如上图中的E列所示。
各种网络结构可视化网址:https://dgschwend.github.io/netscope/quickstart.html
经典的AlexNet虽然它在识别效果方面非常令人惊艳,但是这些都是建立在对超参数进行大量的调整的基础上,而它并没有提出一种明确的模型设计规则以便指导后续的新网络模型设计,这也限制了它的迁移能力。因此,虽然它很知名,但是在近几年的模型基础框架却很少出现AlexNet的身影,反观VGG则成为了很多新模型基础框架的必选项之一,这也是它相对于AlexNet的优势之一:VGG提出用基础块代替网络层的思想,这使得它在构建深度网络模型时可以重复使用这些基础块。
正如前面所说,VGG使用了块代替层的思想,具体的来说,它提出了构建基础的卷积块和全连接块来替代卷积层和全连接层,而这里的块是由多个输出通道相同的层组成。
因为 VGG非常经典,所以网络上有VGG的预训练权重,我们可以直接读取预训练的权重去搭建模型,这样就可以忽略对输入和输出通道数的感知,要简单很多,但是为了更加清楚的理解网络模型,在这里还是从最基本的部分开始搭建,自己初始化权重和偏差,这样能够更加清楚每层输入和输出的结构。
二、深度化
ResNet
假设现有一个比较浅的网络(Shallow Net)已达到了饱和的准确率,这时在它后面再加上几个恒等映射层(Identity mapping,也即y=x,输出等于输入),这样就增加了网络的深度,并且起码误差不会增加,也即更深的网络不应该带来训练集上误差的上升。而这里提到的使用恒等映射直接将前一层输出传到后面的思想,便是著名深度残差网络ResNet的灵感来源。
残差网络的基本结构如下图所示:
除了上面提到的两层残差学习单元,还有三层的残差学习单元,如下图所示:
DenseNet
先列下DenseNet的几个优点,感受下它的强大:
1、减轻了vanishing-gradient(梯度消失)
2、加强了feature的传递
3、更有效地利用了feature
4、一定程度上较少了参数数量
如下图: x 0 x_0 x0是input, H 1 H_1 H1的输入是 x 0 x_0 x0(input), H 2 H_2 H2的输入是 x 0 x_0 x0和 x 1 x_1 x1( x 1 x_1 x1</