网络结构
论文原图
AlexNet主要结构:五层卷积 + 三层全连接(不计池化层)
细化结构如下图:
图片来源Fan2g
从AlexNet结构中学习到:
- 特征提取:主要是由卷积、激活函数(这里用了ReLU)和池化这三个过程堆叠而成
- 分类:主要是由全连接、激活函数(这里用了ReLU)和 Dropout 堆叠而成
- 一般在卷积操作或全连接操作后均需使用激活函数(这里用了ReLU)来增加非线性,之后的池化操作或 Dropout 操作非必须
- LRN层为局部响应归一化,用于数据的标准化,其跟激活函数是有区别的,LRN一般是在激活、池化后进行的一种处理方法。LRN归一化技术首次在AlexNet模型中提出这个概念。通过实验确实证明它可以提高模型的泛化能力,但是提升的很少,以至于后面不再使用。
从卷积操作中学习到:
- 卷积核的输入通道数(in depth)由输入矩阵的通道数所决定。
- 输出矩阵的通道数(out depth)由卷积核的数量所决定,卷积核数是大佬经验所得,可自行设置。
- 卷积核的size大小一般设置为奇数×奇数:
① 卷积核大小为奇数,可以精确对准像素点中心;
② 当进行valid convolution或使用full convolution时,选用奇数还是偶数的差别并不是很
大。但是,若使用的是same convolution时就不一样了,假定步长为1,当在一个宽
度为m的输入维度(张量)上使用宽度为k的卷积核时,same convolution就需要补k-1
个0。如果k为奇数的话,补的这k-1个0可以在两侧对称分布,如果是偶数则不然。
- 卷积核中的参数只有初始化,其数值随着训练中反向传播的进行不断更新,最终保存训练效果最好的参数。
从激活函数学习到:
- 使用激活函数主要是为了增加非线性
- AlexNet全部使用了ReLU代替sigmoid或tanh:
① ReLU具有单侧抑制性,即在输入是负值的情况下,它会输出0,那么神经元就不会被
激活。这意味着同一时间只有部分神经元会被激活,从而使得网络很稀疏,进而对计
算来说是非常有效率的。
② Sigmoid的导数只有在0附近的时候有比较好的激活性,在正负饱和区的梯度都接近
于0,所以这会造成梯度弥散,而ReLU函数在大于0的部分梯度为常数,所以不会产
生梯度弥散现象。
从池化操作学习到:
- 主要用于降维,通过池化操作,可以将特征图的空间维度缩小,减少模型中需要训练的参数数量,从而降低计算复杂度。
- AlexNet 中使用层叠池化,即 poolsize > stride,这种操作非常像卷积操作,可以使相邻像素间产生信息交互和保留必要的联系。(作者在论文中证明,此操作可以有效防止过拟合的发生)。
从全连接操作学习到:
- 全连接层通常位于网络的最后一部分,用于将前一层(通常是卷积层或池化层)的输出映射到最终的输出类别或预测结果。
- 全连接操作需要把输入拉成一个列向量,例如:输入的feature map为3×2×2,需拉成12×1的列向量,再乘一个权重矩阵,得到输出。【网络构建完毕后,全连接层的权重矩阵就是固定的,则输入图像尺寸也必须固定,才能匹配】
从 Dropout 操作学习到:
- Dropout 指随机失活神经元
- 在模型训练阶段的前向传播过程中,让某些神经元的激活值以一定的概率停止工作
- 作用:Dropout 使得神经网络的节点随机失活,这样在训练时不会使得某一节点权重过大,达到压缩权重的效果,类似L2正则化,能避免过拟合。
图片来源三方斜阳
从 softmax 学习到:
- 归一化指数函数,一种常用的分类函数(用于多分类,二分类常用sigmoid )
- 将输出的分类结果映射到(0-1)之间
AlexNet 参数量:(论文中写的输入为224×224,但实际为227×227)
Layer Name | Filter | Tensor Size | Weights | Biases | Parameters |
Input Image | - | 227×227×3 | 0 | 0 | 0 |
Conv-1 | 11×11×96,s=4,p=0 | 55×55×96 | 3×11×11×96=34,848 | 96 | 34,944 |
MaxPool-1 | 3×3,s=2,p=0 | 27×27×96 | 0 | 0 | 0 |
Conv-2 | 5×5×256,s=1,p=2 | 27×27×256 | 96×5×5×256=614,400 | 256 | 614,656 |
MaxPool-2 | 3×3,s=2,p=0 | 13×13×256 | 0 | 0 | 0 |
Conv-3 | 3×3×384,s=1,p=1 | 13×13×384 | 256×3×3×384=884,736 | 384 | 885,120 |
Conv-4 | 3×3×384,s=1,p=1 | 13×13×384 | 384×3×3×384=1,327,104 | 384 | 1,327,488 |
Conv-5 | 3×3×256,s=1,p=1 | 13×13×256 | 384×3×3×256=884,736 | 256 | 884,992 |
MaxPool-3 | 3×3,s=2,p=0 | 6×6×256 | 0 | 0 | 0 |
FC-1 | - | 1×4096 | 256×6×6×4096=37,748,736 | 4096 | 37,752,832 |
FC-2 | - | 1×4096 | 4096×4096=16,777,216 | 4096 | 16,781,312 |
FC-3 | - | 1×1000 | 4096×1000=4096000 | 1000 | 4,097,000 |
Output | - | 1×1000 | 0 | 0 | 0 |
Total | - | - | - | - | 62,378,344 |
注:全连接层的参数量占了总参数量的90%以上,对全连接层进行改进将有效减少参数量。