首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >卷积神经网络中滤波器尺寸的减小

卷积神经网络中滤波器尺寸的减小
EN

Stack Overflow用户
提问于 2017-04-13 02:19:18
回答 2查看 2.8K关注 0票数 7

我正在阅读Szegedy等人的“盗梦空间”论文:https://arxiv.org/abs/1512.00567,我很难理解它们如何通过用2层3x3过滤器替换单个5x5过滤器来减少计算量(第3.1节)。

特别是,这一段:

如果我们天真地滑动一个网络而不重用相邻网格块之间的计算,我们就会增加计算成本。滑动这个网络可以用两个3x3卷积层来表示,它们重用相邻瓷砖之间的激活。

我不明白我们怎么能再利用这些激活。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-13 14:18:27

我也一直在努力克服这种困惑,似乎每次我都需要重温“盗梦空间”的文件。

比较的适当设置是考虑一个玩具示例输入图像,即5x5的形状。若要用5x5卷积产生5x5输出图像,您需要在顶部、底部和侧面加上2个额外的填充像素,然后继续进行通常的5x5卷积。卷积滤波器有25个加权参数,输出的每个像素都需要输入的25项加权和。

现在,我们将完成两个阶段,而不是5x5过滤器。首先,我们将在顶部,底部和侧面加盖一个额外的像素,使其符合标准的3x3卷积在每一点。

这产生了一个中间图像,由于填充而产生的形状与输入相同,但是每个像素是3x3卷积的结果(因此每个像素控制了9项的加权和)。

现在,我们将在最后的3x3卷积中重复这一步骤,从我们的中间图像开始,从第一个3x3卷积开始。再一次,我们在顶部、底部和侧面放置一个像素,每一项输出都是通过9项输入的加权和来实现的。

您在问题中提供的图表演示了这如何允许聚合5x5卷积的相同空间信息范围,但只是通过两个3x3卷积的两个加权和的不同集合来计算。要明确的是,计算是不一样的,因为系数的两个9d滤波器不一定要与系数的25d滤波器相同。它们可能是不同的权重,但它们可以顺序跨越相同的距离,原始图像的5x5卷积可以。

最后,我们可以看到,每个单位的输出在5x5的情况下,需要25个乘积运算。在顺序3x3的情况下,最终输出的每一个单元都需要前9个乘法-加法使第一个3x3卷积单元,然后9个乘法-加法使最终输出的单位。

关于“激活共享”的具体注释指的是,您只计算中间3x3卷积的值一次。每个单元都要花费9次操作,但是一旦创建了这些单元,您只需要多花9次就可以得到最终的输出单元。您不会重复为最终输出的每个单元创建第一个3x3卷积的工作。

这就是为什么它不被计算为每个输出单元需要81次操作。当您跳到最后3x3卷积输出的下一个(i,j)位置时,您将重复使用中间3x3卷积的一组像素,因此每次只需执行9个操作即可获得最终输出。

5x5输入的5x5填充卷积运算数为25 * 25。

第一个3x3填充卷积的运算数是25 * 9,然后再加上另一个3x3卷积的成本,所以总体上是25 *9+ 25 *9= 25 * 18。

这就是它们如何达到(25 * 25) / (25 * 18) = 25/18的比率。

碰巧,这也同样减少了参数的总数。

我认为关键是,原始图表(从纸张和您的问题)做了一个非常糟糕的工作,表明您将首先支付标准的3x3卷积成本,以创建整个原始的5x5输入的中间像素集,包括填充。然后在中间结果中运行第二个3x3卷积(这就是他们所说的重用激活的意思)。

这张图片让它看起来像是单独的,对于每个最终的输出像素,你会在整个3x3中间层的所有正确点周围滑动原来的3x3卷积,每次计算9项加权和(总共81次),然后计算最后的9次加权和,得到单个像素的输出。然后回到原来的地方,把卷积点推到一个点上,然后重复。但是这是不正确的,也不会“重复使用”中间卷积层,相反,它将分别为最终输出层的每个单元重新计算它。

不过,总的来说,我同意这是超级非琐碎和难以想象的。这篇论文确实掩盖了它,并假定读者已经想到了许多上下文。

票数 4
EN

Stack Overflow用户

发布于 2017-06-19 17:47:48

因此,首先,作者指出:

这样,我们最终得到了一个净(9+9) / 25×缩减的计算,通过这种因式分解得到了28%的相对增益。

他说得对:对于5x5滤波器,必须使用25 (5*5)个权重。对于两个3x3过滤器,您必须使用9+9 (3*3 + 3*3)单个权重。因此,使用两个3x3过滤器需要更少的参数。然而,您是对的,这并不意味着它需要更少的计算:乍一看,使用两个3x3过滤器需要更多的操作。

让我们比较给定n*n输入的两个选项的操作量。演练:

  1. 计算给定输入((n - filtersize + 1)^2)上5x5滤波器的输出维数及其相应的操作
  2. 计算第一个3x3过滤器的输出维(与上面相同的公式)及其相应的操作。
  3. 计算第二个3x3滤波器的输出维及其相应的操作。

让我们从一个5x5输入开始:

代码语言:javascript
复制
1. (5 - 5 + 1)^2 = 1x1. So 1*1*25 operations = 25 operations
2. (5 - 3 + 1)^2 = 3x3. So 3*3*9  operations = 81 operations
3. (3 - 3 + 1)^2 = 1x1. So 1*1*9  operations = 9  operations
So 25 vs 90 operations. Using a single 5x5 filter is best for a 5x5 input.

接下来,6x6输入:

代码语言:javascript
复制
1. (6 - 5 + 1)^2 = 2x2. So 2*2*25 operations = 100 operations
2. (6 - 3 + 1)^2 = 4x4. So 4*4*9  operations = 144 operations
3. (4 - 3 + 1)^2 = 2x2. So 2*2*9  operations = 36  operations
So 100 vs 180 operations. Using a single 5x5 filter is best for a 6x6 input.

让我们先跳一步,8x8输入:

代码语言:javascript
复制
1. (8 - 5 + 1)^2 = 4x4. So 4*4*25 operations = 400 operations
2. (8 - 3 + 1)^2 = 6x6. So 6*6*9  operations = 324 operations
3. (4 - 3 + 1)^2 = 4x4. So 4*4*9  operations = 144 operations
So 400 vs 468 operations. Using a single 5x5 filter is best for a 8x8 input.

注意到模式了吗?给定输入大小为n*n5x5过滤器的操作有以下公式:

代码语言:javascript
复制
(n - 4)*(n - 4) * 25

对于3x3过滤器:

代码语言:javascript
复制
(n - 2)*(n - 2) * 9 + (n - 4) * (n - 4) * 9

所以让我们把这些画成:

他们看起来很相交!正如您从上面的图表中可以看到的那样,从n=10到以后的两个3x3过滤器的操作数量似乎要少一些!

结论:似乎在n=10后使用两个3x3过滤器是有效的。此外,与单个5x5过滤器相比,无论n,对于两个3x3过滤器都需要调整较少的参数。

不过,这篇文章有点奇怪,它让人觉得在5x5过滤器上使用了两个3x3过滤器,原因很明显:

通过在相邻块之间共享权重,此设置清楚地减少了参数计数。 又一次利用平移不变性,用两层卷积结构代替完全连通的构件,这似乎是自然的。 如果我们想天真的幻灯片

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43382499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档