为什么卷积滤波器在卷积神经网络中翻转?

时间:2017-07-17 19:47:36

标签: neural-network theano conv-neural-network convolution lasagne

我不明白为什么在使用卷积神经网络时需要翻转滤镜。

根据千层面文件,

  

flip_filters:bool(默认值:True)

     

在将滤镜滑过输入之前是否翻转滤镜,   执行卷积(这是默认值),或不翻转它们   并执行相关。请注意,对于其他一些卷积   在烤宽面条中的层,翻转导致开销,并被禁用   default - 使用学习的权重时检查文档   另一层。

这是什么意思?在任何神经网络书籍中进行卷积时,我从未读过关于翻转过滤器的内容。有人会澄清吗?

2 个答案:

答案 0 :(得分:3)

转置卷积滤波器的根本原因是卷积运算的定义 - 这是信号处理的结果。执行卷积时,您希望内核相对于您执行卷积的轴进行翻转,因为如果不这样做,您最终会计算信号与其自身的相关性。如果您考虑将1D卷积应用于有问题的函数变化非常剧烈的时间序列中,您会更容易理解 - 您不希望您的卷积被您的卷积倾斜或与之相关联信号。

来自数字信号处理堆栈交换站点的

This answer提供了一个很好的解释,通过数学解释为什么卷积滤波器被定义为与信号的反方向相反。

This page详细介绍了翻转操作的示例。这是一种特殊类型的滤波器,用于边缘检测,称为Sobel滤波器。它没有解释为什么翻转已经完成,但是很好,因为它为您提供了2D中的完整示例。

我提到在1D情况下理解为什么(因为,为什么这样定义卷积)更容易一些(DSP SE网站的答案真的是一个很好的解释);但是这个约定也适用于2D和3D(Conv2DDNN和Conv3DDNN层都有flip_filter选项)。然而,最终,因为卷积滤波器权重不是人类程序的东西,而是“学习”和“#34;通过网络,它完全是任意的 - 除非您从另一个网络加载权重,在这种情况下,您必须与该网络中的卷积定义一致。如果正确定义了卷积(即,根据惯例),则将翻转滤波器。如果定义不正确(在更多"天真"和"懒惰"方式),它不会。

卷积是其中一部分的更广泛的领域是线性系统理论"因此,除了神经网络的背景之外,搜索这个术语可能会更多地涉及到这一点。

请注意,卷积/相关区别也在千层面的corrmm.py类的文档字符串中提到:

  

flip_filters:bool(默认值:False)           是否翻转滤镜并执行卷积,或不翻转           他们并执行相关。翻转会增加一些开销,所以它           默认情况下禁用。在大多数情况下,这没有什么区别           无论如何,因为过滤器是学习的。但是,flip_filters应该           如果加载了使用的学习权重,则设置为True           例如:class lasagne.layers.Conv2DLayer,例如。

答案 1 :(得分:1)

首先,由于 CNN 是从头开始训练而不是人工设计的,如果翻转操作是必要的,那么学习的过滤器将是翻转的过滤器,并且 实现了与翻转滤波器的互相关。 其次,在一维时间序列处理中需要翻转,因为在给定“当前”输入的情况下,过去的输入会影响当前的系统输出。但是在2D/3D图像空间卷积中,没有“时间”的概念,也没有“过去”的输入及其对“现在”的影响,因此,我们不需要考虑“信号”和“系统”的关系,并且只有“信号”(图像块)和“信号”(图像块)的关系,这意味着我们只需要互相关而不是卷积(尽管DL从信号处理中借用了这个概念)。 因此,实际上不需要翻转操作。 (我猜。)