卷积神经网络结构与参数计算
卷积神经网络(Convolutional Neural Network,CNN)受人脑视觉神经启发,是计算机图像识别中最常见的算法。本文将从一个典型的CNN网络结构,即AlexNet[1]入手,分析其参数与结构。
1、CNN基本结构
卷积神经网络的3个基本结构为:卷积层
(Convolutional Layer)、池化层
(Pooling Layer)和全连接层
(Fully Connected Layer)。另外还有一些基本操作,如归一化、激活函数、Dropout等等。
- 卷积层:卷积层的主要任务是特征提取,它有多个卷积核,每一个卷积核视作一个过滤器,匹配某种模式。
- 池化层:池化层的主要任务是数据降维,对数据进行下采样,增加非线性操作,大大减少运算量。
- 全连接层:全连接层是神经网络的输出层,它将之前提取的分散特征结合,输出最终结果。
2、参数计算
尺寸(Size):尺寸指的是每张通道图的“空间大小”,即高(Height)× 宽(Width)。
通道(Channel):通道指的是图像中“不同种类的信息层数”。灰度图为1,RGB彩色图为3。
模型参数主要由卷积层的参数和全连接层的参数构成。相关计算规则如下:
卷积层输出尺寸计算:
卷积层参数计算:
拿第一层卷积为例:
Forward Computation(前向计算量),指的是模型在进行一次前向传播(inference)时所执行的总计算操作量,有MACs(Multiply–Accumulate Operations)和FLOPs(Floating Point Operations)两种衡量标准,这两者常常被人们混淆。实际上,1 MACs包含一个乘法操作与一个加法操作,大约包含2 FLOPs。通常MACs与FLOPs存在一个2倍的关系。这里用MACs表示向前计算量。
这里计算了biases,所以卷积核参数和计算量都有+1操作。如果不计算biases,则不做+1操作。
3、AlexNet结构
AlexNet的结构如下图所示:
其主要参数计算为:
其中参数总和为各层相加,向前计算量亦如此。
反向传播(Backward Computation)与正向传播的参数量一样,但是计算量却是其的2-3倍。
References
[1] Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[J]. Advances in neural information processing systems, 2012, 25.