假设我们有一些维[100,100,32]的数据(让我们忽略批处理大小,并假设通道是最后的),我们希望将它传递到一个有64个过滤器的卷积层。在不进行分组的情况下,我们可以直接将输入传递到第二卷积层,得到一个形状为[100,100,64]的输出。
或者,我们可以将输入分成n个组。例如,让我们假设是n=2。这将输入从1 [100,100,32]张量更改为2 [100,100,16]张量。然后用64/n = 32滤波器将每个输入传递给不同的卷积层,得到两个形状为[100,100,32]的输出。这两个输入比级联通道明智地得到一个形状为[100,100,64]的输出。
如果这是正确的,我理解这对于多个GPU/CPU上的分布式培训是如何有用的(我相信这就是AlexNet所做的)。然而,我已经看到分组卷积改善性能的说法,我觉得这两种方法(分组和非分组)在数学上是相同的,在性能上应该没有区别。
每个过滤器由c核组成,其中c是输入中的通道数。这是因为每个内核都应用于单个通道。同一过滤器中的内核之间不存在交互作用。因此,不管频道是如何放置的(即。在一个堆栈或一个组中),产生的过滤器将是相同的。
我搞错了吗?
声称分组卷积提高性能的
发布于 2021-07-20 00:57:44
正如本文中所提到的,不同的组为数据学习不同的表示形式。
在普通卷积网络中,每一层学习一个唯一的表示。但是,在这里,在同一层,我们可以导出不同的表示。它还可以涉及到软件工程中的关注点分离原则。由于不同的过滤组是单独训练的,所以他们一定要学习不同的东西。
从统计的角度来看,当训练传统的卷积层时,核权重之间的相关性就会存在。因为,在这里,我们把它们分成几个组,因为它们是分开训练的,所以相关性不会发生。
https://datascience.stackexchange.com/questions/98082
复制相似问题