深度卷积神经网络(AlexNet)
AlexNet跟LeNet结构类似,但使用了更多的卷积层和更大的参数空间来拟合大规模数据集ImageNet
它是浅层神经网络和深度神经网络的分界线。 虽然看上去AlexNet的实现比LeNet的实现也就多了几行代码而已,但这个观念上的转变和真正优秀实验结果的产生令学术界付出了很多年
AlexNet与LeNet的设计理念非常相似,但也有显著的区别
第一,与相对较小的LeNet相比,AlexNet包含8层变换,其中有5层卷积和2层全连接隐藏层,以及1个全连接输出层。下面我们来详细描述这些层的设计
第二,AlexNet将sigmoid激活函数改成了更加简单的ReLU激活函数。一方面,ReLU激活函数的计算更简单,例如它并没有sigmoid激活函数中的求幂运算。另一方面,ReLU激活函数在不同的参数初始化方法下使模型更容易训练。这是由于当sigmoid激活函数输出极接近0或1时,这些区域的梯度几乎为0,从而造成反向传播无法继续更新部分模型参数;而ReLU激活函数在正区间的梯度恒为1。因此,若模型参数初始化不当,sigmoid函数可能在正区间得到几乎为0的梯度,从而令模型无法得到有效训练
第三,AlexNet通过丢弃法(控制全连接层的模型复杂度,而LeNet并没有使用丢弃法
第四,AlexNet引入了大量的图像增广,如翻转、裁剪和颜色变化,从而进一步扩大数据集来缓解过拟合
使用重复元素的网络(VGG)
VGG-11通过5个可以重复使用的卷积块来构造网络,根据每块里卷积层个数和输出通道数的不同可以定义出不同的VGG模型
VGG块的组成规律是:连续使用数个相同的填充为1、窗口形状为3×3的卷积层后接上一个步幅为2、窗口形状为2×2的最大池化层。卷积层保持输入的高和宽不变,而池化层则对其减半,我们使用vgg_block函数来实现这个基础的VGG块,它可以指定卷积层的数量和输入输出通道数
对于给定的感受野(与输出有关的输入图片的局部大小),采用堆积的小卷积核优于采用大的卷积核,因为可以增加网络深度来保证学习更复杂的模式,而且代价还比较小(参数更少)。例如,在VGG中,使用了3个3x3卷积核来代替7x7卷积核,使用了2个3x3卷积核来代替5*5卷积核,这样做的主要目的是在保证具有相同感知野的条件下,提升了网络的深度,在一定程度上提升了神经网络的效果
网络中的网络(NiN)
NiN重复使用由卷积层和代替全连接层的1×1卷积层构成的NiN块来构建深层网络
NiN去除了容易造成过拟合的全连接输出层,而是将其替换成输出通道数等于标签类别数的NiN块和全局平均池化层
NiN的以上设计思想影响了后面一系列卷积神经网络的设计
我们知道,卷积层的输入和输出通常是四维数组(样本,通道,高,宽),而全连接层的输入和输出则通常是二维数组(样本,特征)
如果想在全连接层后再接上卷积层,则需要将全连接层的输出变换为四维
NiN块是NiN中的基础块。它由一个卷积层加两个充当全连接层的1×11×1卷积层串联而成,其中第一个卷积层的超参数可以自行设置,而第二和第三个卷积层的超参数一般是固定的
含并行连结的网络(GoogLeNet)
Inception块相当于一个有4条线路的子网络,它通过不同窗口形状的卷积层和最大池化层来并行抽取信息,并使用1×1卷积层减少通道数从而降低模型复杂度
GoogLeNet将多个设计精细的Inception块和其他层串联起来,其中Inception块的通道数分配之比是在ImageNet数据集上通过大量的实验得来的
GoogLeNet和它的后继者们一度是ImageNet上最高效的模型之一:在类似的测试精度下,它们的计算复杂度往往更低