卷积神经网络中的反向传播以及如何更新过滤器
Back Propagation in Convolutional Neural Networks and how to update filters
我正在学习 Convolutional Neural Network
,现在我对如何实施它感到困惑。
我了解常规神经网络和 Gradient Descent
和 Back Propagation
等概念,而且我可以直观地理解 CNN 的工作原理。
我的问题是关于 CNN 中的反向传播。它是怎么发生的?最后一个完全连接的层是常规的神经网络,这没有问题。但是我如何更新卷积层中的过滤器?我如何将错误从完全连接的层反向传播到这些过滤器?我的问题是更新过滤器!
过滤器只是简单的矩阵?或者它们具有像常规神经网络这样的结构,层与层之间的连接模拟了这种能力?我读到了 Sparse Connectivity
和 Shared Weights
,但我无法将它们与 CNN 联系起来。我真的对实施 CNN 感到困惑,我找不到任何讨论这些概念的教程。我无法阅读论文,因为我对这些东西不熟悉,而且我的数学也不好。
我不想使用 TensorFlow
或这样的工具,我正在学习主要概念并使用纯 Python
。
首先,我可以推荐 this CNN 简介。也许你可以通过这个更好地理解它的想法。
简要回答您的一些问题:
假设您想使用 CNN 进行图像分类。图片由 NxM 像素组成,有 3 个通道(RBG)。要在其上应用卷积层,您可以使用过滤器。过滤器是(通常但不一定)二次形状(例如 PxP)和多个通道的矩阵,这些通道等于应用它的表示的通道数。因此,第一个 Conv 层过滤器也有 3 个通道。通道是过滤器的层数,可以这么说。
在对图片应用滤镜时,您会执行一种称为离散卷积的操作。你把你的过滤器(通常比你的图像小)一步一步地滑过图片,然后计算卷积。这基本上是一个矩阵乘法。然后你在它上面应用一个激活函数,甚至可能是一个池化层。需要注意的重要一点是,该层上所有执行的卷积的过滤器保持不变,因此每层只有 P*P 个参数。您以某种方式调整过滤器,使其尽可能适合训练数据。这就是为什么它的参数被称为共享权重。应用 GD 时,您只需将其应用于所述过滤器权重。
此外,您还可以找到一个不错的卷积演示 here。
实现这些东西当然是可能的,但对于开始,您可以尝试使用 tensorflow 进行实验。至少那是我学习新概念的方式:)
我正在学习 Convolutional Neural Network
,现在我对如何实施它感到困惑。
我了解常规神经网络和 Gradient Descent
和 Back Propagation
等概念,而且我可以直观地理解 CNN 的工作原理。
我的问题是关于 CNN 中的反向传播。它是怎么发生的?最后一个完全连接的层是常规的神经网络,这没有问题。但是我如何更新卷积层中的过滤器?我如何将错误从完全连接的层反向传播到这些过滤器?我的问题是更新过滤器!
过滤器只是简单的矩阵?或者它们具有像常规神经网络这样的结构,层与层之间的连接模拟了这种能力?我读到了 Sparse Connectivity
和 Shared Weights
,但我无法将它们与 CNN 联系起来。我真的对实施 CNN 感到困惑,我找不到任何讨论这些概念的教程。我无法阅读论文,因为我对这些东西不熟悉,而且我的数学也不好。
我不想使用 TensorFlow
或这样的工具,我正在学习主要概念并使用纯 Python
。
首先,我可以推荐 this CNN 简介。也许你可以通过这个更好地理解它的想法。
简要回答您的一些问题:
假设您想使用 CNN 进行图像分类。图片由 NxM 像素组成,有 3 个通道(RBG)。要在其上应用卷积层,您可以使用过滤器。过滤器是(通常但不一定)二次形状(例如 PxP)和多个通道的矩阵,这些通道等于应用它的表示的通道数。因此,第一个 Conv 层过滤器也有 3 个通道。通道是过滤器的层数,可以这么说。
在对图片应用滤镜时,您会执行一种称为离散卷积的操作。你把你的过滤器(通常比你的图像小)一步一步地滑过图片,然后计算卷积。这基本上是一个矩阵乘法。然后你在它上面应用一个激活函数,甚至可能是一个池化层。需要注意的重要一点是,该层上所有执行的卷积的过滤器保持不变,因此每层只有 P*P 个参数。您以某种方式调整过滤器,使其尽可能适合训练数据。这就是为什么它的参数被称为共享权重。应用 GD 时,您只需将其应用于所述过滤器权重。
此外,您还可以找到一个不错的卷积演示 here。
实现这些东西当然是可能的,但对于开始,您可以尝试使用 tensorflow 进行实验。至少那是我学习新概念的方式:)