难以理解卷积神经网络

Trouble understanding Convolutional Neural Network

我从 here 那里了解了卷积神经网络。然后我开始玩火炬7。我对 CNN 的卷积层感到困惑。

来自教程,

1

The neurons in a layer will only be connected to a small region of the layer before it, instead of all of the neurons in a fully-connected manner.

2

For example, suppose that the input volume has size [32x32x3], (e.g. an RGB CIFAR-10 image). If the receptive field is of size 5x5, then each neuron in the Conv Layer will have weights to a [5x5x3] region in the input volume, for a total of 5*5*3 = 75 weights.

3

如果输入层是[32x32x3],CONV layer will compute the output of neurons that are connected to local regions in the input, each computing a dot product between their weights and the region they are connected to in the input volume. This may result in volume such as [32x32x12].

我开始研究 CONV 层可能对图像做些什么。我在 torch7 中做到了这一点。这是我的实现,

require 'image'
require 'nn'

i = image.lena()

model = nn.Sequential()
model:add(nn.SpatialConvolutionMM(3, 10, 5, 5)) --depth = 3, #output layer = 10, filter = 5x5

res = model:forward(i)
itorch.image(res)
print(#i)
print(#res)

输出

  3
 512
 512
[torch.LongStorage of size 3]

  10
 508
 508
[torch.LongStorage of size 3]

现在让我们看看CNN的结构

所以,我的问题是,

问题 1

卷积是这样完成的吗 - 假设我们拍摄了一张 32x32x3 的图像。并且有 5x5 过滤器。那么 5x5 过滤器将通过整个 32x32 图像并产生复杂的图像?好的,所以在整个图像上滑动 5x5 过滤器,我们得到一个图像,如果有 10 个输出层,我们得到 10 个图像(如您从输出中看到的)。我们如何得到这些? (如有需要,请参阅图片进行说明)

问题 2

conv层的神经元数量是多少?是输出层数吗?在我上面写的代码中,model:add(nn.SpatialConvolutionMM(3, 10, 5, 5))。是10吗? (输出层数?)

如果是这样,第 2 点没有任何意义。据此 If the receptive field is of size 5x5, then each neuron in the Conv Layer will have weights to a [5x5x3] region in the input volume, for a total of 5*5*3 = 75 weights. 那么这里的权重是多少呢?我对此非常困惑。在 torch 中定义的模型中,没有权重。那么权重在这里是如何发挥作用的呢?

谁能解释一下这是怎么回事?

Is the convolution done like this - lets say we take an image 32x32x3. And there is 5x5 filter. Then the 5x5 filter will pass through the whole 32x32 image and produce the convoluted images?

对于 32x32x3 输入图像,5x5 过滤器将迭代每个像素,并针对每个像素查看 5x5 邻域。该邻域包含 5*5*3=75 个值。下面是单个输入通道上的 3x3 滤波器的示例图像,即具有 3*3*1 值邻域的图像 (source).

对于每个单独的邻居,过滤器将有一个参数(也称为权重),因此有 75 个参数。然后,为了计算一个单一的输出值(像素 x、y 处的值),它读取这些相邻值,将每个值与相应的 parameter/weight 相乘,并在最后相加(参见 discrete convolution)。必须在训练期间学习最佳权重。

所以一个过滤器将遍历图像并逐个像素地生成新的输出。如果你有多个过滤器(即 SpatialConvolutionMM 中的第二个参数 >1),你会得到多个输出("planes" in torch)。

Okay, so sliding 5x5 filter across the whole image, we get one image, if there are 10 output layers, we get 10 images(as you see from the output). How do we get these? (see the image for clarification if required)

每个输出平面都由其自己的过滤器生成。每个过滤器都有自己的参数(在您的示例中为 5*5*3 个参数)。多个过滤器的过程与一个完全相同。

What is the number of neurons in the conv layer? Is it the number of output layers? In the code I've written above, model:add(nn.SpatialConvolutionMM(3, 10, 5, 5)). Is it 10? (no. of output layers?)

你应该称它们为权重或参数,"neurons" 并不适合卷积层。如前所述,在您的示例中,每个过滤器的参数数量为 5*5*3=75。因为您有 10 个过滤器 ("output planes"),所以您总共有 750 个参数。如果您使用 model:add(nn.SpatialConvolutionMM(10, 10, 5, 5)) 向网络添加第二层,则每个过滤器将有额外的 5*5*10=250 个参数,总共有 250*10=2500 个参数。请注意这个数字是如何快速增长的(一层中有 512 filters/output 个平面在 256 个输入平面上运行并不少见)。

如需进一步阅读,您应该查看 http://neuralnetworksanddeeplearning.com/chap6.html。向下滚动到章节 "Introducing convolutional networks"。在 "Local receptive fields" 下有可视化效果,可能会帮助您了解过滤器的作用(上面显示了一个)。

免责声明: 我在下面提供的信息主要摘自以下论文: 猫视觉皮层的信息处理 基于梯度的学习应用于文档识别 新皮质激素 猫视觉皮层的感受野

Is the convolution done like this - lets say we take an image 32x32x3. And there is 5x5 filter. Then the 5x5 filter will pass through the whole 32x32 image and produce the convoluted images?

是的,一个 5x5 的过滤器将通过整个图像创建一个 28x28 的 RGB 图像。所谓的 "feature map" 中的每个单元接收连接到输入图像中 5x5 区域的 5x5x3 输入(这个 5x5 邻域称为单元的 "local receptive field")。特征图中相邻(相邻)单元的感受野以上一层的相邻(相邻)单元为中心。

Okay, so sliding 5x5 filter across the whole image, we get one image, if there are 10 output layers, we get 10 images(as you see from the output). How do we get these? (see the image for clarification if required)

注意特征图层上的单元共享同一组权重,并对图像的不同部分执行相同的操作。(也就是说,如果您移动原始图像,特征图上的输出也会移动相同数量)。也就是说,对于每个特征图,您将权重集限制为每个单元都相同;你只有 5x5x3 个未知权重。

由于这个限制,并且因为我们想从图像中提取尽可能多的信息,所以我们添加了更多层,特征图:拥有多个特征图有助于我们在每个像素处提取多个特征。

可惜我对Torch7不熟悉