小编Koe*_*oen的帖子

卷积神经网络:中央神经元在输出中的比例是否过高?

[这个问题现在也在交叉验证 中提出]

问题简而言之

我正在研究卷积神经网络,我相信这些网络不会同等对待每个输入神经元(像素/参数)。想象一下,我们有一个深度网络(多层),对某些输入图像应用卷积。图像“中间”的神经元有许多独特的路径通往许多更深层的神经元,这意味着中间神经元的微小变化会对输出产生很大的影响。然而,图像边缘的神经元只有 1 种(或者,根据具体的实现,大约为 1)其信息流经图形的路径。看来这些人“代表性不足”。

我对此感到担忧,因为边缘神经元的这种区分随着网络的深度(层数)呈指数级增长。即使添加最大池层也不会阻止指数增长,只有完整的连接才能使所有神经元处于平等地位。不过,我不相信我的推理是正确的,所以我的问题是:

  • 这种效应发生在深度卷积网络中,我说得对吗?
  • 有没有关于这个的理论,文献中是否提到过?
  • 有办法克服这种影响吗?

因为我不确定这是否提供了足够的信息,所以我将详细说明问题陈述,以及为什么我认为这是一个问题。

更详细的解释

想象我们有一个以图像作为输入的深度神经网络。假设我们在图像上应用 64x64 像素的卷积滤波器,每次将卷积窗口移动 4 个像素。这意味着输入中的每个神经元都会将其激活发送到第 2 层中的 16x16 = 265 个神经元。这些神经元中的每一个都可能会将其激活发送到另一个 265 个神经元,这样我们最顶层的神经元就会在 265^2 个输出神经元中表示,依此类推。然而,对于边缘上的神经元来说,情况并非如此:这些神经元可能仅在少量卷积窗口中表示,从而导致它们仅激活下一层中的 1 个神经元(按顺序)。使用诸如沿边缘镜像之类的技巧无济于事:将被投影到的第二层神经元仍然位于边缘,这意味着第二层神经元的代表性将不足(从而限制了我们的边缘神经元也是如此)。可以看出,这种差异随着层数呈指数级增长。

我创建了一个图像来可视化问题,可以在此处找到该图像(不允许我在帖子本身中包含图像)。该网络的卷积窗口大小为 3。神经元旁边的数字表示向下到达最深神经元的路径数量。该图像让人想起帕斯卡三角形

https://www.dropbox.com/s/7rbwv7z14j4h0jr/deep_conv_problem_stackxchange.png?dl=0

为什么这是个问题?

乍一看,这种效果似乎不是问题:原则上,权重应该以网络完成其工作的方式自动调整。而且,图像的边缘在图像识别中并不那么重要。这种效果在日常图像识别测试中可能并不明显,但它仍然让我担心,因为有两个原因:1)推广到其他应用程序,2)在非常深的网络的情况下出现的问题。1)可能还有其他应用,例如语音或声音识别,其中最中间的神经元并不最重要。应用卷积经常在这个领域进行,但我还没有找到任何提到我关心的效果的论文。2)非常深的网络会注意到边界神经元的区分会产生指数级的不良影响,这意味着中央神经元可能会被多个数量级过度代表(想象我们有 10 层,这样上面的例子将给出 265^10 种中央神经元的方式)神经元可以投射它们的信息)。随着层数的增加,必然会达到权重无法补偿这一影响的极限。现在想象一下我们对所有神经元进行少量干扰。与边缘神经元相比,中央神经元将导致输出变化几个数量级。我相信对于一般应用程序和非常深的网络,应该找到解决我的问题的方法吗?

machine-learning convolution neural-network

5
推荐指数
1
解决办法
386
查看次数

Theano:在自动编码器中用步幅(子采样)重建卷积

我想用Theano训练一个简单的卷积自动编码器,它一直很好用.但是,我没有看到conv2d在使用子采样(stride)时如何反转命令.有没有一种有效的方法可以在使用步幅时"反转"卷积命令,如下图所示?

图像无耻地被盗,并从http:/cs231n.github.io/convolutional-networks绘制.

例如,我想更改以下内容......

from theano.tensor.nnet.conv import conv2d
x = T.tensor4('x') 
y = T.tanh(  conv2d( x, W, border_mode='valid', subsample = (1,1) )  )
z = conv2d( y, Wprime, border_mode='full', subsample = (1,1)  )
Run Code Online (Sandbox Code Playgroud)

......进入的情况subsample = (2,2).第一层将按预期工作.但是,第二层将有效地"用步幅1进行卷积,然后丢弃一半的输出".这显然是与我正在寻找的不同的操作 - z甚至不会像长度一样具有相同数量的神经元x.第二个conv2d命令应该"重建"原件x

convolution neural-network theano conv-neural-network

3
推荐指数
1
解决办法
2592
查看次数