深层如何从卷积网络中的前一层特征映射中学习

How deeper layers learn from previous layers feature maps in Conv nets

我读了很多关于 convnets 的文章,但我仍然错过了一个重要的部分。

假设我们有一个包含 32 个过滤器的 conv2D 层:

我知道这些过滤器权重在开始时是随机初始化的,并且在训练过程中形成了这些过滤器。 所以在第一层他们开始检测边缘。

现在在池化之后我们有另一个 conv 层(假设又是 32 个过滤器),它将对前一层的结果应用过滤器。

因此第 2 层将对来自第一层的这 32 个输出中的任何一个应用 32 个过滤器。 我看到了很多这些特征图的例子:第一层产生边缘图片,下一层图片是形状、耳朵、鼻子等。 我的问题是这怎么可能?

如果第 2 层在第 1 层结果上应用过滤器,而第 1 层结果是边缘,那么如何从边缘获取表单?

我显然在这里遗漏了一些东西,请帮助我理解 conv 网络中的每一下一层如何产生更丰富的特征,如形式、眼睛、面部,以防它使用前一层的生产,其中特征只是线条和边缘?

在我丢失的过程中是否有一些信息合并,或者是更多?

提前致谢

简单示例:假设您尝试区分简单的几何形状。例如。钻石矩形。

在第一层你有各种边缘检测器。有些在检测到水平边缘时触发,有些在检测到垂直边缘时触发,有些在检测到对角线边缘时触发。

第二层现在可以将这些输入组合成更复杂的形状。 因此,如果在第一层检测到垂直和水平边缘,一个 filter/detector 将触发。这是矩形的过滤器。

当第一层告诉它检测到对角线边缘时,另一个过滤器将触发。这是钻石的过滤器。

您可能会熟悉卷积层的输入和输出维度。

Input = W1xW1xD1

Output:
W2 = (W1 - F + 2P)/S + 1
D2 = K

Terminology: K = Number of Filters, F= Spatial Size of Filter, P=ZeroPadding, S=Stride

您可能会发现这有帮助:

https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks/

http://cs231n.github.io/convolutional-networks/