卷积神经网络中的过滤器和激活图如何连接?


11

给定层的激活图如何连接到该层的过滤器?我不是在问如何在过滤器和激活图之间进行卷积运算,我是在问这两个具有的连接类型。

例如,假设您要进行完全连接。在给定的层中,您有f个过滤器和n个激活图。您将在下一层获得f * n个激活图,激活图的数量将随每个新层的增加而增加。这是我认为完成的方式。

或者您可以说每个过滤器仅连接到一个激活图。在这种情况下,过滤器的数量将等于激活图的数量,并且每个层将具有相同数量的过滤器和激活图。这是我的网络的当前体系结构,似乎学习得很好。

我感到困惑的主要原因是看网上看到的卷积图。其中一些在过滤器和激活图之间具有“完全连接”,例如- 在此处输入图片说明 在第一层中,您有4个激活图,大概有2个过滤器。每个图都与每个过滤器卷积,从而在下一层生成8个图。看起来很棒。

但是,这里的架构对我来说没有意义- 在此处输入图片说明 您如何从第一层的6张地图转到第二层的16张地图?我可以想到从6张地图中获取16张地图的方法,但这样做毫无意义。

Answers:


10

您发布的第二种卷积神经网络(CNN)架构来自本文。在本文中,作者描述了S2和C3层之间发生的情况。他们的解释不是很清楚。我要说的是,这种CNN架构不是“标准”的,作为CNN的第一个示例,它可能会造成很大的混乱。

CNN架构

首先,需要澄清特征图的生成方式以及它们与过滤器的关系。特征图是滤波器与特征图卷积的结果。让我们以INPUT和C1层为例。在最常见的情况下,要在C1层中获取6个尺寸为特征图,则需要6个尺寸为滤镜(“有效”卷积尺寸为的图像与的大小滤波器,假设,具有尺寸28×285×5M×MN×NMN(MN+1)×(MN+1)。但是,您可以通过组合由多于或少于6个过滤器生成的特征图(例如,将它们加起来)来生成6个特征图。在本文中,虽然对于C1层没有任何暗示。

以下是在S2层和C3层之间发生的情况。由S2层中的6个特征图生成的C3层中有16个特征图。C3层中的滤波器数量确实并不明显。实际上,仅从体系结构图中,就无法判断生成这16个特征图的确切滤波器数量。该论文的作者提供了下表(第8页):

S2和C3层之间的连接

他们使用该表提供以下说明(第7页的底部):

C3层是具有16个特征图的卷积层。每个特征图中的每个单元在S2的特征图中子集的相同位置上连接到 x邻域。5×5

在表中,作者表明,C3层中的每个要素图都是通过组合3个或更多要素图(第8页)生成的:

前六个C3特征图从S2中三个特征图的每个连续子集中获取输入。接下来的六个从四个相邻的子集中获取输入。接下来的三个从四个不连续的子集中获取输入。最后,最后一个从所有S2特征图中获取输入。

现在,C3层中有多少个过滤器?不幸的是,他们没有解释这一点。两种最简单的可能性是:

  1. 每个C3特征图的每个S2特征图有一个过滤器,即与同一C3特征图相关联的S2特征图之间没有共享的过滤器。
  2. 每个C3特征图只有一个过滤器,该过滤器在组合的S2层的(3个或更多)特征图中共享。

在这两种情况下,“组合”都意味着每个S2特征图组的卷积结果需要组合到生成的C3特征图上。作者没有指定完成的方式,但是添加是一种常见的选择(例如,参见本页中间的gif动画。

不过,作者提供了一些其他信息,可以帮助我们解密体系结构。他们说“ C3层有1,516个可训练参数”(第8页)。我们可以使用此信息来决定上述情况(1)和(2)。

在(1)的情况下,我们有 x过滤器。过滤器大小为。在这种情况下,可训练参数的数量为可训练参数。如果我们假设每个C3特征图的偏置单位为1,则得到参数,这就是作者所说的。为了完整起见,在情况(2)中,我们将拥有参数,情况并非如此。(6×3)+(9×4)+(1×6)=60(1410+1)×(1410+1)=5×55×5×60=1,5001,500+16=1,516(5×5×16)+16=416

因此,如果我们再次查看上面的表I,则每个S2特征图都有10个不同的 C3过滤器(因此总共有60个不同的过滤器)。

作者解释了这种选择:

[在C3层中]不同的特征图被迫提取不同的(希望是互补的)特征,因为它们获得了不同的输入集。

我希望这可以澄清情况。


3

您确实是正确的,@之前的值表示过滤器的数量,而不是要素图的数量(尽管对于第一个卷积层,这些值是一致的)。

关于您的最后一个问题:是的,将第l层的每个要素图都连接到第l + 1层的每个过滤器确实有意义。这样做的唯一原因是,它大大增加了网络的表达能力,因为它具有更多组合特征图的方式(路径),因此可以更好地区分输入图像上的内容。

最后,我不知道您是否通过自己实施神经网络技能来练习神经网络技能,但是如果您只想将卷积网络应用于特定任务,那么已经有一些出色的神经网络库,例如Theano,Brainstorm,Caffe


我认为我要做的是将两种方法进行比较以作为基准。使用非完全连接版本,它将更快地训练和计算其分类。但是准确性更为重要。在非完全连接版本中,每个过滤器都定位于更具体的任务,而不是更一般的任务。在完全连接的版本中,将根据最适合所有以前的过滤器而不是仅一种功能来更新过滤器。我一直在使用C#从100%开始建立我的网络。当然不是做事的简单方法...但是它教会了我更多的知识
Frobot

这听起来像一个合理的计划。祝好运!
Sjoerd,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.