【问题标题】:Back Propagation in Convolutional Neural Networks and how to update filters卷积神经网络中的反向传播以及如何更新过滤器
【发布时间】:2018-05-13 05:49:41
【问题描述】:

我正在学习Convolutional Neural Networks,现在我对如何实现它感到困惑。

我了解常规神经网络和 Gradient DescentBack Propagation 等概念,并且我可以直观地理解 CNN 的工作原理。

我的问题是关于 CNN 中的反向传播。它是怎么发生的?最后一个全连接层是常规的神经网络,这没有问题。但是我如何更新卷积层中的过滤器?如何将错误从完全连接的层反向传播到这些过滤器?我的问题是更新过滤器!

过滤器只是简单的矩阵?或者他们有像常规神经网络这样的结构,层之间的连接模拟了这种能力?我读到了Sparse ConnectivityShared Weights,但我无法将它们与CNN 联系起来。我真的对实现 CNN 感到困惑,我找不到任何关于这些概念的教程。我看不懂论文,因为我对这些东西不熟悉,而且我的数学不好。

我不想使用TensorFlow或类似的工具,我学习主要概念并使用纯Python

【问题讨论】:

    标签: machine-learning neural-network deep-learning artificial-intelligence convolutional-neural-network


    【解决方案1】:

    首先,我可以推荐this CNN 简介。也许你可以通过这个更好地理解它的想法。

    简要回答您的一些问题:

    假设您想使用 CNN 进行图像分类。图片由 NxM 像素组成,具有 3 个通道 (RBG)。要在其上应用卷积层,请使用过滤器。过滤器是(通常但不一定)二次形状(例如 PxP)的矩阵,并且通道数等于应用它的表示的通道数。因此,第一个 Conv 层过滤器也有 3 个通道。通道是过滤器的层数,可以这么说。

    将滤镜应用于图片时,您会执行一种称为离散卷积的操作。你拿着你的过滤器(通常比你的图像小),一步一步地把它滑到图片上,然后计算卷积。这基本上是矩阵乘法。然后你在它上面应用一个激活函数,甚至可能是一个池化层。需要注意的重要一点是,该层上所有执行卷积的过滤器保持不变,因此每层只有 P*P 参数。您以某种方式调整过滤器,使其尽可能适合训练数据。这就是为什么它的参数被称为共享权重。应用 GD 时,您只需将其应用于所述过滤器权重即可。

    此外,您还可以找到一个不错的卷积演示 here

    实现这些东西当然是可能的,但一开始你可以尝试 tensorflow 进行实验。至少这是我学习新概念的方式:)

    【讨论】:

    • 感谢您的回答。你知道,我读了很多关于 CNN 的文章,但我读到的每一篇文章都以 Tensorflow 等结尾。但我想知道幕后发生了什么。例如,做卷积层,在阅读了一些教程后,我认为这可以通过 im2col 方法实现,但我不知道如何发生反向传播。在另一个教程中,我看到 conv 层的实现是一种使用快速傅立叶变换(fft)的方法。我很困惑! im2col 方法不对?有什么标准吗?有效的方法是什么?我的主要问题是卷积层和备份...
    • 有几种方法可以实现这一点,没有真正的对错。只需选择一个并尝试让它运行。如果您担心性能,您最终将使用为此目的开发的解决方案,例如 tensorflow 或 pytorch。如果您遇到困难,只需发布​​您的代码,以便我们为您提供帮助。
    • 你知道,我认为造成我困惑的原因是我阅读的每篇论文或教程都有自己的方法!他们中没有人指出,这只是其他方法之外的一种方法,可以通过多种方式实现。我想将它们连接起来并最终得到一种实现方法,但我读到的每一篇文章都让我更加困惑……感谢您在这方面帮助我。你让我开心!
    猜你喜欢
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 2019-09-10
    • 1970-01-01
    • 2016-03-10
    • 2011-04-16
    • 2015-03-03
    相关资源
    最近更新 更多