3.2.4 stride-步长
以上例子中我们看到的都是每次移动一个像素步长的结果,如果将这个步长修改为2,3,那结果如何?
这样如果以原来的计算公式,那么结果
N + 2P - F + 1 = 6 + 0 -3 +1 = 4N+2P−F+1=6+0−3+1=4
但是移动2个像素才得出一个结果,所以公式变为
\frac{N + 2P - F}{2} + 1 = 1.5 + 1 = 2.52N+2P−F+1=1.5+1=2.5,如果相除不是整数的时候,向下取整,为2。这里并没有加上零填充。
所以最终的公式就为:
对于输入图片大小为N,过滤器大小为F,步长为S,零填充为P,
(\frac{N + 2P - F}{S} + 1),(\frac{N + 2P - F}{S} + 1)(SN+2P−F+1),(SN+2P−F+1)
3.2.5 多通道卷积
当输入有多个通道(channel)时(例如图片可以有 RGB 三个通道),卷积核需要拥有相同的channel数,每个卷积核 channel 与输入层的对应 channel 进行卷积,将每个 channel 的卷积结果按位相加得到最终的 Feature Map。
3.2.5.1 多卷积核
当有多个卷积核时,可以学习到多种不同的特征,对应产生包含多个 channel 的 Feature Map, 例如上图有两个 filter,所以 output 有两个 channel。这里的多少个卷积核也可理解为多少个神经元。
相当于我们把多个功能的卷积核的计算结果放在一起,比如水平边缘检测和垂直边缘检测器。
3.2.6 卷积总结
我们来通过一个例子看一下结算结果,以及参数的计算
- 假设我们有10 个Filter,每个Filter3 X 3 X 3(计算RGB图片),并且只有一层卷积,那么参数有多少?
计算:每个Filter参数个数为:3 3 3 + 1 bias = 28个权重参数,总共28 * 10 = 280个参数,即使图片任意大小,我们这层的参数也就这么多。
- 假设一张200 200 3的图片,进行刚才的FIlter,步长为1,最终为了保证最后输出的大小为200 * 200,需要设置多大的零填充
(\frac{N + 2P - F}{s} + 1) = N(sN+2P−F+1)=N
P = \frac{(N -1) * s + F - N}{2} = \frac{199 + 3 - 200}{2} = 1P=2(N−1)∗s+F−N=2199+3−200=1
3.2.6.1 设计单个卷积Filter的计算公式
假设神经网络某层ll的输入:
- inputs: n_{h}^{[l -1]},n_{w}^{[l -1]},n_{c}^{[l -1]}nh[l−1],nw[l−1],nc[l−1]
卷积层参数设置:
- f^{[l]}f[l]:filter的大小
- p^{[l]}p[l]:padding的大小
- s^{[l]}s[l]:stride大小
- n_{c}^{[l]}nc[l]:filter的总数量
- outputs:n_{h}^{[l]},n_{w}^{[l]},n_{c}^{[l]}nh[l],nw[l],nc[l]
所以通用的表示每一层:
- 每个Filter:f^{[l]} * f^{[l]} * n_{c}^{[l -1]}f[l]∗f[l]∗nc[l−1]
- 权重Weights:f^{[l]} * f^{[l]} * n_{c}^{[l -1]} * n_{c}^{[l]}f[l]∗f[l]∗nc[l−1]∗nc[l]
- 应用激活函数Activations:a^{[l]} = n_{h}^{[l]},n_{w}^{[l]},n_{c}^{[l]}a[l]=nh[l],nw[l],nc[l]
- 偏差bias:1 * 1 * 1 * n_{c}^{[l]}1∗1∗1∗nc[l],通常会用4维度来表示
之前的式子我们就可以简化成,假设多个样本编程向量的形式
Z^{[l]} = W^{[l]} * X^{[l-1]} + b^{[l]}Z[l]=W[l]∗X[l−1]+b[l]
A^{[l]} = g(Z^{[l]})A[l]=g(Z[l])
3.2.7 池化层(Pooling)
池化层主要对卷积层学习到的特征图进行亚采样(subsampling)处理,主要由两种
- 最大池化:Max Pooling,取窗口内的最大值作为输出
- 平均池化:Avg Pooling,取窗口内的所有值的均值作为输出
意义在于:
- 降低了后续网络层的输入维度,缩减模型大小,提高计算速度
- 提高了Feature Map 的鲁棒性,防止过拟合
对于一个输入的图片,我们使用一个区域大小为2 2,步长为2的参数进行求最大值操作。同样池化也有一组参数,f, sf,s,得到2 2的大小。当然如果我们调整这个超参数,比如说3 * 3,那么结果就不一样了,通常选择默认都是f = 2 * 2, s = 2f=2∗2,s=2
池化超参数特点:不需要进行学习,不像卷积通过梯度下降进行更新。
如果是平均池化则:
3.2.8 全连接层
卷积层+激活层+池化层可以看成是CNN的特征学习/特征提取层,而学习到的特征(Feature Map)最终应用于模型任务(分类、回归):
- 先对所有 Feature Map 进行扁平化(flatten, 即 reshape 成 1 x N 向量)
- 再接一个或多个全连接层,进行模型学习
3.2.9 总结
掌握卷积神经网路的组成
- 掌握卷积的计算过程
- 卷积过滤器个数
- 卷积过滤器大小
- 卷积过滤器步数
- 卷积过滤器零填充
掌握池化的计算过程原理