浅尝深度学习 - AlexNet
简体中文 (current) | English
AlexNet
AlexNet是由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton在2012年ImageNet图像分类竞赛中提出的一种经典的卷积神经网络,论文可以在此处找到。
这个网络的架构并不复杂,且包括了深度学习网络中的几个基础层——输入层、卷积层、池化层、激活层、全连接层,因此很适合作为入门架构来理解一些重要概念。
AlexNet的架构在下图展示:

读者可能会被这些奇怪的概念、数字和结构吓到,但是当你阅读完本节后,自然会明白它们。
输入层
输入层是图像分类网络的起点,在这里图像被分为RGB三个通道输入网络,该层通常也会对图像进行resize操作,使所有输入大小相同。
上图中是一个227×227的图像,输入后以227×227×3的张量进入AlexNet。
卷积层
卷积层是深度学习网络最为重要的部分,用于提取图像中的特征。在单个卷积层中,通常有许多相同大小的内核,称为卷积核(Kernel)。例如,AlexNet的第一个Conv层包含96个大小为11×11×3的内核。注意,内核的宽度和高度通常相同,深度与通道数相同。

那么单个卷积核如何提取特征呢?我们以一个灰度图像为例,这里卷积核大小为3×3。它将在图像上以Z字形滑动来提取所有可能的特征。卷积核会将核上每个像素的值与源像素相乘求和,和作为卷积核中心像素的值。
读者不难看出,对于一张图片,每经过一次卷积运算,便会缩小一圈,因此需要在周围进行补0操作,保证图片大小一致。
三通道的彩色图片过程与此基本相同,不再赘述。

在实际的网络中,会有多个卷积层,以更好地提取图像特征。
重要参数
步长 (Stride)
这里需要引入步长的概念,在height和width两个维度上均生效,控制一次滑动的长度。当我们说stride=2时,指在两个维度上的步长都为2。
填充 (Padding)
padding参数控制补零操作,一般有valid和same两个值:
- valid:不进行补0操作,每次卷积两个维度数据均下降F-1,F为卷积核大小
- same:在输入图像像素的周围进行补零或复制数据填充,保证卷积前后两个维度大小相同
AlexNet总共有5个卷积层。
激活层
这里先引入损失函数的概念。

损失L的值通常由如下公式计算得到:
因此,训练的过程就是找到一个函数使损失尽可能小的过程,这样预测值就会尽可能逼近实际值。
激活层通过激活函数进行激活操作,即向模型中添加非线性元素,以保证梯度的持续下降。
梯度下降是深度学习模型学习参数的重要过程。梯度下降就是不断逼近损失函数最小值的过程,即梯度为0的点。线性函数没有梯度,因此需要使用激活函数激活。
现在通常使用ReLU Nonlinearity进行激活,但在AlexNet发布的年代,常用的是Sigmoid和tanh。后面两者具有vanishing gradient的问题,这部分内容不适合在这里展开,有兴趣的读者可以参考此处。

池化层
池化层在CNN网络中用于减少特征图的空间维度,同时保留最重要的特征,以期在保证精度的前提下减少整个网络的参数和计算量。
池化过程本质是在两个维度上进行下采样的过程,不会改变图像的深度。相当于使用一个人为定义的卷积核在图像上滑动,但该卷积核不包含参数。
通常有最大池化和平均池化两种方法:

- 最大池化:取池化窗口内的最大值
- 平均池化:取池化窗口内的平均值
全连接层

全连接层会将多层的特征展平为一维向量,取每层的各个类别进行加权求和,得出最终各类别的分数。
如果读者用心观察,会发现两个全连接层后跟着一个softmax激活函数,它将多分类的输出值归一化,即映射到[0,1]范围内,将各个类别转换为概率分布。
在AlexNet中,全连接层的作用是:
- 特征整合:将卷积和池化提取的局部特征整合为全局特征
- 分类映射:将特征映射到具体的分类结果
- 降维处理:通过权重矩阵实现特征的降维和筛选
小结
我们目前讨论了AlexNet涉及的一些重要概念,同时也是深度学习中的基础概念。在下一节中,将从代码的角度自行实现AlexNet并训练,以展现其实际应用的过程,同时还将对该网络的性能进行评估。
通过理解AlexNet的架构,读者应该已经掌握了:
- 卷积神经网络的基本组成
- 各层的作用和参数设置
- 前向传播的基本流程
这些知识将为后续学习更复杂的网络架构打下坚实的基础。