一、AlexNet
模型设计
在AlexNet的第一层,卷积窗口的形状是 11×11。 由于ImageNet中大多数图像的宽和高比MNIST图像的多10倍以上,因此,需要一个更大的卷积窗口来捕获目标。 第二层中的卷积窗口形状被缩减为 5×5,然后是 3×3。 此外,在第一层、第二层和第五层卷积层之后,加入窗口形状为 3×3、步幅为2的最大汇聚层。
激活函数
此外,AlexNet将sigmoid激活函数改为更简单的ReLU激活函数。 一方面,ReLU激活函数的计算更简单,它不需要如sigmoid激活函数那般复杂的求幂运算。 另一方面,当使用不同的参数初始化方法时,ReLU激活函数使训练模型更加容易。 当sigmoid激活函数的输出非常接近于0或1时,这些区域的梯度几乎为0,因此反向传播无法继续更新一些模型参数。 相反,ReLU激活函数在正区间的梯度总是1。 因此,如果模型参数没有正确初始化,sigmoid函数可能在正区间内得到几乎为0的梯度,从而使模型无法得到有效的训练。
容量控制和预处理
AlexNet通过dropout控制全连接层的模型复杂度,而LeNet只使用了权重衰减。
二、用块的网络(VGG)
与 AlexNet、LeNet 一样,VGG 网络可以分为两部分:第一部分主要由卷积层和汇聚层组成,第二部分由全连接层组成。
三、网络中的网络NiN
NiN 块以一个普通卷积层开始,后面是两个 1×1 的卷积层。这两个1×1 卷积层充当带有 ReLU 激活函数的逐像素全连接层。 第一层的卷积窗口形状通常由用户设置。 随后的卷积窗口形状固定为 1×1。
四、含并行连结的网络GoogLeNet
在GoogLeNet中,基本的卷积块被称为Inception块。Inception块由四条并行路径组成。 前三条路径使用窗口大小为 1×1、3×3 和 5×5 的卷积层,从不同空间大小中提取信息。 中间的两条路径在输入上执行 1×1 卷积,以减少通道数,从而降低模型的复杂性。 第四条路径使用 3×3 最大汇聚层,然后使用 1×1 卷积层来改变通道数。 这四条路径都使用合适的填充来使输入与输出的高和宽一致,最后我们将每条线路的输出在通道维度上连结,并构成Inception块的输出。在Inception块中,通常调整的超参数是每层输出通道的数量。
GoogLeNet 一共使用 9 个Inception块和全局平均汇聚层的堆叠来生成其估计值。Inception块之间的最大汇聚层可降低维度。
五、残差网络ResNet
ResNet 沿用了 VGG 完整的 3×3 卷积层设计。 残差块里首先有 2 个有相同输出通道数的 3×3 卷积层。 每个卷积层后接一个批量归一化层和 ReLU 激活函数。 然后我们通过跨层数据通路,跳过这 2 个卷积运算,将输入直接加在最后的 ReLU 激活函数前。 这样的设计要求 2 个卷积层的输出与输入形状一样,从而可以相加。 如果想改变通道数,就需要引入一个额外的 1×1 卷积层来将输入变换成需要的形状后再做相加运算。 残差块的实现如下:
一种是在 use_1x1conv=False
、应用 ReLU 非线性函数之前,将输入添加到输出。 另一种是在 use_1x1conv=True
时,添加通过 1×1 卷积调整通道和分辨率。
“猫狗大战”resNet改进
还在进行