【问题标题】:Why are PyTorch "convolutions" implemented as cross-correlations?为什么 PyTorch “卷积”被实现为互相关?
【发布时间】:2021-06-12 21:14:58
【问题描述】:

PyTorch 卷积实际上实现为cross-correlations。这不应该在训练卷积层中产生问题,因为一个只是另一个的翻转版本(因此学习的函数将同样强大),但它确实 prove an issue 何时:

  1. 尝试使用functional 库实现实际卷积
  2. 尝试从另一个深度学习库复制实际卷积的权重

作者在Deep Learning with PyTorch中说:

卷积,或者更准确地说,离散卷积1...

1. PyTorch 的卷积和数学的卷积之间存在细微差别:一个参数的符号被翻转。如果我们有一种迂腐的心情,我们可以将 PyTorch 的卷积称为 离散互相关。

但他们没有解释为什么它是这样实现的。有什么原因吗?

可能类似于 CrossEntropyLoss isn't actually cross entropy 的 PyTorch 实现方式,但类似的函数将“logits”作为输入而不是原始概率(以避免 numerical instability)?

【问题讨论】:

标签: python pytorch naming-conventions convolution cross-correlation


【解决方案1】:

我认为原因更简单。正如您所说,卷积是互相关的翻转版本,但这在训练 CNN 的情况下不是问题。所以我们可以避免做翻转,这样可以简化代码并减少计算时间:

互相关的优势在于它避免了翻转过滤器以执行卷积的额外步骤。

翻转内核不会对数学稳定性产生任何影响。操作保持不变。

【讨论】:

    猜你喜欢
    • 2017-08-15
    • 2019-12-09
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 2020-12-10
    • 2013-09-29
    相关资源
    最近更新 更多