假设使用第一个过滤器进行卷积,得到第一个 4×4 矩阵。使用第二个过滤器进行卷积得到另外一个 4×4 矩阵。

1-7 单层卷积网络

最终各自形成一个卷积神经网络层,然后增加偏差,它是一个实数,通过 Python 的广播机制给这 16 个元素都加上同一偏差。然后应用非线性函数,为了说明,它是一个非线性激活函数 ReLU,输出结果是一个 4×4 矩阵。

对于第二个 4×4 矩阵,我们加上不同的偏差,它也是一个实数, 16 个数字都加上同一个实数,然后应用非线性函数,也就是一个非线性激活函数 ReLU,最终得到另一个 4×4 矩阵。然后重复我们之前的步骤,把这两个矩阵堆叠起来,最终得到一个 4×4×2 的矩阵。我们通过计算,从 6×6×3 的输入推导出一个 4×4×2 矩阵,它是卷积神经网络的一层,把它映射到标准神经网络中四个卷积层中的某一层或者一个非卷积神经网络中。

1-7 单层卷积网络

前向传播中一个操作就是:${z^{[1]}} = {W^{[1]}}{a^{[0]}} + {b^{[1]}}$, 其中${a^{[0]}} = x$,执行非线性函数得到${a^{[1]}}$,即${a^{[1]}} = g({z^{[1]}})$ ,这里的输入是${a^{[0]}}$,也就是x。卷积操作的输出结果是一个4×4 的矩阵,它的作用类似于${W^{[1]}}{a^{[0]}}$,也就是这两个 4×4 矩阵的输出结果,然后加上偏差。得到的这个 4×4×2 矩阵,成为神经网络的下一层,也就是激活层。

示例中我们有两个过滤器,也就是有两个特征,因此我们才最终得到一个 4×4×2 的输出。但如果我们用了 10 个过滤器,而不是 2 个,我们最后会得到一个 4×4×10 维度的输出图

像,因为我们选取了其中 10 个特征映射,而不仅仅是 2 个,将它们堆叠在一起,形成一个4×4×10 的输出图像。

假设你有 10 个过滤器,而不是 2 个,神经网络的一层是 3×3×3,那么,这一层有多少个参数呢?我们来计算一下,每一层都是一个 3×3×3 的矩阵,因此每个过滤器有 27 个参数,也就是 27 个数。然后加上一个偏差,用参数b表示,现在参数增加到 28 个。而现在我们有 10 个,加在一起是 28×10,也就是 280 个参数。

请注意一点,不论输入图片有多大, 1000×1000 也好, 5000×5000 也好,参数始终都是280 个。用这 10 个过滤器来提取特征,如垂直边缘,水平边缘和其它特征。即使这些图片很大, 参数却很少, 这就是卷积神经网络的一个特征, 叫作“避免过拟合”。

最后我们总结一下用于描述卷积神经网络中的一层(以�层为例),也就是卷积层的各种标记。

${f^{[l]}}$: 过滤器大小。

${p^{[l]}}$:padding 的数量,padding 数量也可指定为一个 valid 卷积,即无 padding。或是 same 卷积。

${s^{[l]}}$:步幅。

这一层的输入:$n_H^{^{[l - 1]}} times n_W^{^{[l - 1]}} times n_c^{^{[l - 1]}}$。H和W分别表示图像的高度和宽度。

这一层的输出:$n_H^{^{[l]}} times n_W^{^{[l]}} times n_c^{^{[l]}}$。

输出图像的高度:$n_H^{^{[l]}} = leftlfloor {frac{{{n_H}^{[l - 1]} + 2{p^{[l]}} - {f^{[l]}}}}{{{s^{[l]}}}} + 1} rightrfloor $。

输出图像的宽度:$n_W^{^{[l]}} = leftlfloor {frac{{{n_H}^{[l - 1]} + 2{p^{[l]}} - {f^{[l]}}}}{{{s^{[l]}}}} + 1} rightrfloor$。

输出图像也具有深度,通过上一个示例,我们知道它等于该层中过滤器的数量,如果有 2 个过滤器,输出图像就是4×4×2,它是二维的,如果有 10 个过滤器,输出图像就是 4×4×10。输出图像中的通道数量就是神经网络中这一层所使用的过滤器的数量。过滤器中通道的数量必须与输入中通道的数量一致。因此,输出通道数量就是输入通道数量,所以过滤器维度等于:${f^{[l]}} times {f^{[l]}} times n_c^{^{[l - 1]}}$。

当你执行批量梯度下降或小批量梯度下降时,如果有m个例子,就是有m个激活值的集合,那么输出: ${A^{[l]}} = m times n_H^{^{[l]}} times n_W^{^{[l]}} times n_c^{^{[l]}}$。

过滤器的数量:$n_c^{^{[l]}}$,权重也就是所有过滤器的集合再乘以过滤器的总数量,即${f^{[l]}} times {f^{[l]}} times n_c^{^{[l - 1]}} times n_c^{^{[l]}}$

每个过滤器都有一个偏差参数,它是一个实数。偏差包含了这些变量,它是该维度上的一个向量。偏差在代码中表示为一个:$1 times 1 times 1 times n_c^{^{[l]}}$ 的四维向量或四维张量。