2017-04-13 178 views
3

我正在阅读Szegedy等人的Inception论文:https://arxiv.org/abs/1512.00567 我很难理解如何通过用2层3x3滤波器替换单个5x5滤波器来减少计算量第3.1节)。减少卷积神经网络中的滤波器大小

enter image description here

尤其是这样一段话:

如果我们将naivly不重用相邻网格砖之间的计算 滑动的网络,我们会增加计算 成本。滑动该网络可以由两个3x3卷积 层表示,其重复使用相邻瓦片之间的激活。

我不明白我们如何重用这些激活。

回答

1

所以首先,笔者指出这:

这样,我们 结束了净(9 + 9)/ 25×还原计算,在一个相对增益导致 28%通过这种分解。

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

我们来比较给定n*n输入的两个选项的操作量。漫游:对给定的输入((n - filtersize + 1)^2)5×5滤波器的

  1. 计算输出尺寸,并且其相应的操作
  2. 计算第一3×3滤波器的输出尺寸(相同的公式如上),及其相应的操作
  3. 计算第二3×3滤波器的输出尺寸,一个第二其相应的操作

让我们先从一个5x5输入:

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输入:

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输入:

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*n输入尺寸,对于5x5过滤器的操作有以下公式:

(n - 4)*(n - 4) * 25 

而对于3x3的过滤器:

(n - 2)*(n - 2) * 9 + (n - 4) * (n - 4) * 9 

所以我们绘制这些:

enter image description here

他们似乎相交!从上图可以看出,从n=10开始的两个3x3滤波器的操作次数似乎更少!

结论:看起来在n=10之后使用两个3x3滤波器似乎是有效的。此外,不管n,与单个5x5滤波器比较,需要调整两个3x3滤波器的参数较少。


文章是一种奇怪的是,它使得它感觉像使用两个3×3滤波器在一个5×5滤波器“明显的”出于某种原因:

此设置明确减少了参数个数通过共享 相邻瓷砖之间的权重。

似乎天生 再次利用平移不变性和两层卷积架构

更换完全 连接组件。如果我们将naivly幻灯片

+0

谢谢你的回答,我对延迟回复表示歉意。实际上,我发现他们在论文中的意思是:他们对填充的输入进行卷积运算,因此输出映射的大小保持不变(输入和输出都是N×N)。如果考虑到这一点,那么计算结果就会减少25/18。请用这些信息更新您的答案,我会接受它。 – MichaelSB