考虑 103×103 的输入图像:
- 全连接,隐层神经元的数目为 106 时,则每一个输入像素与每一个隐层神经元之间都是待学习的参数,
- 数目为 106×106=1012
- 卷积,卷积核的大小为 10×10 时,
- 步长为 10,103×10310×10×(10×10),103×10310×10表示的是输入图像可划分的块数,也即经卷机作用后的输出图像;
- 步长为 1,(103−10+1)×(103−10+1)⋅(10×10)
- 在不考虑步长的前提下,可近似将待学习的参数的数目视为 (103×103)⋅(10×10)
1. 全连接层对参数个数的显著提升
现考虑图像输入层和 500 个隐层神经元的全连接:
- MNIST:28×28×1×500=392000
- CIfar:32×32×3×500=1536000
- 而对于卷积操作而言,如 5×5 深度为 16 的卷积核而言,则需要的计算量为:5×5×3×16+16=1216,极大地降低了参数的规模;
参数增多导致计算速度减慢,且很容易导致过拟合。
2. 卷积的共享参数特性
通过一个某一卷积核(过滤器),将一个 2×2×3 的节点矩阵变化为 1×1×5 的单位节点矩阵,则本次卷积操作,共需要的参数为:
2×2×3×5+5⇒65
+5 表示偏值项参数,
对于 cifar-10 数据集,输入层矩阵的维度是 32×32×3,假设第一层卷积层使用尺寸为 5×5 深度为 16,则此卷基层的参数为:
5×5×3×16+×16=1216
注意区分卷积层的参数,与当前输入层与卷积层的连接的个数(也即参数的个数与连接的数目):
比如对于 LeNet-5 网络,32×32 的输入数据,经过 5×5×1×6 的卷积,得到 28×28×6 的特征映射:
- 卷积层的参数:5×5××1×6+6=156
- 核的长*核的宽*输入的通道数*输出的通道数;
- 卷积层共 28×28×6=4704 个节点,每个节点和 5×5 个当前输入层节点相连,因此共连接数:4704×(5×5+1)=122304
- 连接的数目与输入层的大小无关;
3. 卷积输出矩阵尺寸的大小
通过使用填充(padding,比如 zero-padding),或者使用过滤器移动的步长来结果输出矩阵的大小。
下面的公式给出在同时使用全零填充时结果矩阵的大小:
outlength=⌈inlength/stridelength⌉outwidth=⌈inlength/stridewidth⌉
如果不使用填充:
outlength=⌈(inlength−filterlength+1)/stridelength⌉outwidth=⌈(inlength−filterwidth+1)/stridewidth⌉