什么是卷积神经网络的深度?

What is Depth of a convolutional neural network?

我正在看 CS231n Convolutional Neural Networks for Visual Recognition 的卷积神经网络。在卷积神经网络中,神经元排列成 3 个维度(heightwidthdepth)。我在使用 CNN 的 depth 时遇到了问题。我无法想象它是什么。

在 link 他们说 The CONV layer's parameters consist of a set of learnable filters. Every filter is small spatially (along width and height), but extends through the full depth of the input volume

例如看这张照片。对不起,如果图像太蹩脚。

我可以理解我们从图像中取出一小块区域,然后将其与 "Filters" 进行比较的想法。那么过滤器将是小图像的集合?他们还说 We will connect each neuron to only a local region of the input volume. The spatial extent of this connectivity is a hyperparameter called the receptive field of the neuron. 那么感受野与过滤器的维度是否相同?还有这里的深度是多少?我们使用 CNN 的深度表示什么?

所以,我的问题主要是,如果我拍摄一张尺寸为 [32*32*3] 的图像(假设我有 50000 张这些图像,使数据集成为 [50000*32*32*3]),我应该选择什么作为它的深度以及深度意味着什么。还有过滤器的尺寸是多少?

此外,如果任何人都可以提供一些 link 对此有一些直觉,那将会很有帮助。

编辑: 所以在教程的一部分(Real-world 示例部分)中,它说 The Krizhevsky et al. architecture that won the ImageNet challenge in 2012 accepted images of size [227x227x3]. On the first Convolutional Layer, it used neurons with receptive field size F=11, stride S=4 and no zero padding P=0. Since (227 - 11)/4 + 1 = 55, and since the Conv layer had a depth of K=96, the Conv layer output volume had size [55x55x96].

这里我们看到深度是96。那么深度是我任意选择的吗?或者我计算的东西?同样在上面的例子中(Krizhevsky 等人)他们有 96 个深度。那么它的96深度是什么意思呢?教程还指出 Every filter is small spatially (along width and height), but extends through the full depth of the input volume

也就是说深度会是这样?如果是这样,那么我可以假设 Depth = Number of Filters 吗?

在深度神经网络中,深度指的是网络的深度,但在此上下文中,深度用于视觉识别,它转换为图像的 3rd 维度.

在这种情况下,您有一张图像,此输入的大小为 32x32x3,即 (width, height, depth)。随着深度转化为训练图像的不同通道,神经网络应该能够基于此参数进行学习。

更新:

在 CNN 的每一层中,它都会学习有关训练图像的规律性。在最开始的层中,规律是曲线和边缘,然后当你沿着这些层深入时,你会开始学习更高层次的规律,比如颜色、形状、物体等。这是基本的想法,但有很多技术细节。在继续之前试一试:http://www.datarobot.com/blog/a-primer-on-deep-learning/

更新 2:

看看您提供的 link 中的第一个数字。它说 'In this example, the red input layer holds the image, so its width and height would be the dimensions of the image, and the depth would be 3 (Red, Green, Blue channels).' 这意味着 ConvNet 神经元通过将其神经元排列成三个维度来变换输入图像。

作为对您问题的回答,深度对应于图像的不同颜色通道。

另外,关于过滤深度。本教程说明了这一点。

每个过滤器在空间上都很小(沿着宽度和高度),但延伸到输入体积的整个深度。

这基本上意味着过滤器是图像的较小部分,它围绕图像的深度移动以了解图像中的规律性。

更新 3:

对于真实世界的例子,我刚刚浏览了原始论文,它是这样说的:第一个卷积层使用 96 个大小为 11×11×3 的内核过滤 224×224×3 输入图像步幅为 4 个像素。

在教程中将深度称为通道,但在现实世界中,您可以设计任何您喜欢的维度。毕竟那是你的设计

本教程旨在让您大致了解 ConvNet 在理论上的工作原理,但如果我设计一个 ConvNet,没有人可以阻止我提出一个具有不同深度的方案

这有意义吗?

网络的深度是网络中的层数。在 Krizhevsky 论文中,深度为 9 层(模数如何计算层数的栅栏柱问题?)。

我不确定为什么会如此严重地跳过它。一开始我也很难理解它,除了 Andrej Karpathy(感谢 d00d)之外很少有人解释过它。尽管在他的文章 (http://cs231n.github.io/convolutional-networks/) 中,他使用与动画中不同的示例来计算输出体积的深度。

首先阅读标题为“Numpy 示例”的部分

这里,我们迭代进行。

在这种情况下,我们有一个 11x11x4。 (为什么我们从4开始有点奇怪,因为深度为3会更容易掌握)

真正注意这一行:

A depth column (or a fibre) at position (x,y) would be the activations X[x,y,:].

A depth slice, or equivalently an activation map at depth d would be the activations X[:,:,d].

V[0,0,0] = np.sum(X[:5,:5,:] * W0) + b0

V是你的输出音量。第零个索引 v[0] 是您的列 - 在本例中 V[0] = 0 这是输出量中的第一列。 V[1] = 0 这是输出卷中的第一行。 V[3]= 0 是深度。这是第一个输出层。

现在,这就是人们感到困惑的地方(至少我是这样)。输入深度与您的输出深度绝对无关。输入深度只控制过滤深度。 W 在 Andrej 的例子中。

旁白:很多人想知道为什么标准输入深度是 3。对于彩色输入图像,对于普通 ole 图像,这将始终为 3。

np.sum(X[:5,:5,:] * W0) + b0(卷积1)

在这里,我们正在计算权重向量 W0 之间的元素,它是 5x5x4。 5x5 是任意选择。 4 是深度,因为我们需要匹配我们的输入深度。权重向量是你的过滤器、内核、感受野或人们决定给它起的任何混淆名称。

如果您没有 python 背景,这可能就是为什么会出现更多混淆的原因,因为数组切片表示法是 non-intuitive。计算是图像的第一个卷积大小 (5x5x4) 与权重向量的点积。输出是单个标量值,它占据第一个滤波器输​​出矩阵的位置。想象一个 4 x 4 矩阵,表示整个输入中每个卷积运算的和积。现在为每个过滤器堆叠它们。这将为您提供输出量。在 Andrej 的文章中,他开始沿着 x 轴移动。 y 轴保持不变。

这里有一个 V[:,:,0] 卷积的例子。记住这里,我们索引的第三个值是你输出层的深度

[result of convolution 1, result of convolution 2, ..., ...] [..., ..., ..., ..., ...] [..., ..., ..., ..., ...] [..., ..., ..., result of convolution n]

动画最适合理解这一点,但 Andrej 决定用一个与上面的计算不匹配的例子来交换它。

这花了我一段时间。部分原因是 numpy 没有像 Andrej 在他的例子中那样索引,至少我没有玩过它。此外,还有一些假设和积运算是明确的。这是了解输出层是如何创建的、每个值代表什么以及深度是什么的关键。

希望对您有所帮助!

CONV 层的深度是它使用的过滤器的数量。 过滤器的深度等于它用作输入的图像的深度。

例如:假设您正在使用 227*227*3 的图像。 现在假设您使用的过滤器大小为 11*11(空间大小)。 这个 11*11 的正方形将沿着整个图像滑动,以生成一个二维数组作为响应。但是为了做到这一点,它必须覆盖11*11区域内的方方面面。因此,过滤器的深度将是图像的深度 = 3。 现在假设我们有 96 个这样的过滤器,每个过滤器都产生不同的响应。这将是卷积层的深度。它只是使用的过滤器数量。

由于我们在做图像分类问题时的输入量是N x N x 3。一开始不难想象深度意味着什么——只是通道数——Red, Green, Blue。好的,所以第一层的含义很清楚。但是接下来的呢?这是我尝试将想法形象化的方法。

  1. 在每一层上,我们应用一组围绕输入进行卷积的过滤器。假设目前我们在第一层,我们围绕大小为 N x N x 3 的体积 V 进行卷积。正如@Semih Yagcioglu 在一开始提到的那样,我们正在寻找一些粗略的特征:曲线、边缘等...假设我们应用 N 个大小相等 (3x3) 且步幅为 1 的过滤器。然后这些过滤器中的每一个都在寻找不同的围绕 V 进行卷积时的曲线或边缘。当然,过滤器具有相同的深度,我们希望提供全部信息而不仅仅是灰度表示。

  2. 现在,if M 过滤器将寻找 M 条不同的曲线或边。而这些过滤器中的每一个都会产生一个由标量组成的特征图(标量的意思就是过滤器说:这里有这条曲线的概率是X%)。当我们在体积周围使用相同的过滤器进行卷积时,我们会得到这张标量图,告诉我们我们在哪里看到了曲线。

  3. 然后是特征图堆叠。把堆叠想象成下面的样子。我们有关于每个过滤器在哪里检测到特定曲线的信息。很好,然后当我们堆叠它们时,我们会获得有关输入体积的每个小部分可用的曲线/边缘的信息。这是我们第一个卷积层的输出。

  4. 考虑到3,很容易理解非线性背后的思想。当我们在某些特征图上应用 ReLU 函数时,我们说:删除该位置的曲线或边的所有负概率。这当然是有道理的。

  5. 那么下一层的输入将是一个卷 $V_1$ 携带关于不同空间位置的不同曲线和边缘的信息(记住:每一层携带关于 1 条曲线或边缘)。

  6. 这意味着下一层将能够通过组合这些曲线和边缘来提取有关更复杂形状的信息。同样,要将它们组合起来,滤波器的深度应与输入体积相同。
  7. 我们有时会应用池化。意思就是缩小体积。因为当我们使用 strides = 1 时,对于同一特征,我们通常会多次查看一个像素(神经元)。

希望这是有道理的。查看著名的 CS231 课程提供的惊人图表,检查特定位置每个特征的概率是如何计算的。

首先要注意的是

receptive field of a neuron is 3D 

即如果感受野是 5x5,神经元将连接到 5x5x(输入深度)个点。所以无论你的输入深度是多少,一层神经元只会产生一层输出。

现在,接下来要注意的是

depth of output layer = depth of conv. layer

即输出量与输入量无关,只取决于过滤器的数量(深度)。从上一点来看,这应该很明显。

注意过滤器的数量(cnn层的深度)是一个超参数。您可以随心所欲地使用它,而不受图像深度的影响。每个过滤器都有自己的一组权重,使其能够在过滤器覆盖的同一局部区域上学习不同的特征。

简单来说,可以解释如下,

假设您有 10 个过滤器,其中 每个过滤器的大小为 5x5x3。这是什么意思?该层的 depth10 等于过滤器的数量。每个过滤器的大小可以根据需要定义,例如,在这种情况下为 5x5x3,其中 3 是前一层的深度。准确地说,下一层中每个滤波器的深度应该是 10 (nxnx10),其中 n 可以根据需要定义,例如 5 或其他。希望会让一切都清楚。