CNN 的过滤器是如何学习的?

Posted

技术标签:

【中文标题】CNN 的过滤器是如何学习的?【英文标题】:How are filters for CNNs learned? 【发布时间】:2017-05-25 17:13:39 【问题描述】:

我了解输入(比如说图像)通过 CNN 前向传递、卷积和下采样。然后,在一个全连接层,根据它产生的最终权重分配一个标签。在训练中,计算出一个 E 误差变量,以便我们可以利用梯度下降(或其他一些优化函数)来调整权重,使得 E 接近零。

过滤器在这个过程中从哪里学到的?我不明白过滤器如何从高斯噪声变为线条、角落和颜色。然后我想这些过滤器被明确写到一个文件中进行测试,对吗?

【问题讨论】:

过滤器在哪里学习是什么意思?你的意思是反向传播过程? @MarcinMożejko 是的,我想了解数学是如何找到最佳过滤器的。 【参考方案1】:

从 CNN 学习的每个内核都是创建这些特征(线、角等)的过滤器。

让我们以 Sobel 为例,Sobel 使用特定的核对图像进行卷积,使用该核我们可以恢复图像在 X 和 Y 中的梯度,用作边缘检测器。但是,如果这些特征(线)不是我们想要恢复的唯一想法,或者它不是我们特定问题的理想特征,那又如何呢?因此,我们可以学习这些内核并创建不同的图像。

从内核创建的这些图像称为特征图,可以使用different techniques 进行可视化,我真的建议观看该视频,因为您可以更好地了解 CNN 正在学习的特征是什么,并看看这个@987654322 @。

学习此过滤器的一种方法是让您知道预期的输出是什么。您可以将图像与随机值(过滤器/权重中的第一个值)进行卷积,然后学习这些值,直到获得更好地预测您的训练集的东西,因此,您可以学习什么是最好的,而不是使用典型的 sobel内核/过滤器以恢复更能代表您的图像的特征。

所以,这些过滤器最终就是您刚刚学习的网络的权重。

【讨论】:

所以我知道这个过程会发生,但我的主要问题是数学是如何实现的。对于 NN 中单个权重的反向传播,您可以对损失函数求导,然后迭代到所述函数的最小值。对于过滤器,您是否会调整过滤器中的每个值,然后再次应用过滤器以查看结果?这似乎计算量很大。

以上是关于CNN 的过滤器是如何学习的?的主要内容,如果未能解决你的问题,请参考以下文章

为啥不同的机器学习领域都可以使用CNN,CNN解决了这些领域的哪些共性问题?是如何解决的?

如何在 tensorflow 上可视化学习的过滤器

如何让CNN学习位置约束?

机器学习:图像分类:CNN:如何识别红车?

利用更快的r-cnn深度学习进行目标检测

深度学习卷积神经网络(CNN)原理