难以理解卷积神经网络
Posted
技术标签:
【中文标题】难以理解卷积神经网络【英文标题】:Trouble understanding Convolutional Neural Network 【发布时间】:2016-04-22 05:25:02 【问题描述】:我从here 了解到卷积神经网络。然后我开始玩torch7。我对 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 中定义的模型中,没有权重。那么重量是如何在这里发挥作用的呢?
有人能解释一下是怎么回事吗?
【问题讨论】:
【参考方案1】:卷积是这样完成的吗?假设我们拍摄了 32x32x3 的图像。并且有 5x5 过滤器。那么 5x5 的过滤器会通过整个 32x32 的图像并产生卷积图像吗?
对于 32x32x3 的输入图像,5x5 过滤器将遍历每个像素,并针对每个像素查看 5x5 邻域。该邻域包含 5*5*3=75 个值。下面是单个输入通道上的 3x3 过滤器的示例图像,即一个具有 3*3*1 邻域值 (source) 的图像。
对于每个单独的邻居,过滤器将有一个参数(也称为权重),因此有 75 个参数。然后计算一个输出值(像素 x, y 处的值),它读取这些相邻值,将每个值与相应的参数/权重相乘,最后将它们相加(参见discrete convolution)。最佳权重必须在训练期间学习。
因此,一个过滤器将遍历图像并逐像素生成新的输出。如果您有多个过滤器(即SpatialConvolutionMM
中的第二个参数>1),您将获得多个输出(torch 中的“平面”)。
好的,所以在整个图像上滑动 5x5 过滤器,我们得到一张图像,如果有 10 个输出层,我们得到 10 张图像(如您从输出中看到的那样)。我们如何得到这些? (如果需要,请参见图片以进行说明)
每个输出平面都由自己的过滤器生成。每个过滤器都有自己的参数(在您的示例中为 5*5*3 参数)。多个过滤器的过程与一个完全相同。
conv 层的神经元数量是多少?是输出层数吗?在我上面写的代码中,model:add(nn.SpatialConvolutionMM(3, 10, 5, 5))。是10吗? (输出层数?)
您应该称它们为权重或参数,“神经元”并不真正适合卷积层。如前所述,在您的示例中,每个过滤器的参数数量为 5*5*3=75。由于您有 10 个过滤器(“输出平面”),因此您总共有 750 个参数。如果您使用 model:add(nn.SpatialConvolutionMM(10, 10, 5, 5))
在网络中添加第二层,则每个过滤器将有额外的 5*5*10=250 个参数,总共 250*10=2500 个参数。注意这个数字是如何快速增长的(一层中的 512 个过滤器/输出平面在 256 个输入平面上运行并不少见)。
要进一步阅读,您应该查看 http://neuralnetworksanddeeplearning.com/chap6.html 。向下滚动到“介绍卷积网络”一章。在“本地接受域”下,有一些可视化可能会帮助您了解过滤器的作用(如上所示)。
【讨论】:
【参考方案2】:免责声明: 我在下面提供的信息主要来自以下论文: 猫视觉皮层中的信息处理 应用于文档识别的基于梯度的学习 新皮质激素 猫视觉皮层的感受野
卷积是这样完成的吗?假设我们拍摄了 32x32x3 的图像。并且有 5x5 过滤器。那么 5x5 的过滤器会通过整个 32x32 的图像并产生卷积图像吗?
是的,5x5 滤镜将通过整个图像,创建 28x28 RGB 图像。所谓的“特征图”中的每个单元接收连接到输入图像中 5x5 区域的 5x5x3 输入(这个 5x5 邻域称为单元的“局部感受野”)。特征图中相邻(相邻)单元的感受野以前一层的相邻(相邻)单元为中心。
好的,所以在整个图像上滑动 5x5 过滤器,我们得到一张图像,如果有 10 个输出层,我们得到 10 张图像(如您从输出中看到的那样)。我们如何得到这些? (如果需要,请参见图片以进行说明)
请注意,特征图层上的单元共享相同的 wights 集,并对图像的不同部分执行相同的操作。(也就是说,如果您移动原始图像,特征图上的输出也将移动相同的量)。也就是说,对于每个特征图,您将每个单元的权重集约束为相同;你只有 5x5x3 的未知权重。
由于这个限制,并且由于我们希望从图像中提取尽可能多的信息,我们添加了更多层、特征图:拥有多个特征图有助于我们在每个像素处提取多个特征。
很遗憾,我对 Torch7 并不熟悉。
【讨论】:
以上是关于难以理解卷积神经网络的主要内容,如果未能解决你的问题,请参考以下文章