当前位置: 首页 > 知识库问答 >
问题:

如何精确计算卷积神经网络中滤波器的梯度?

田德馨
2023-03-14

我从几篇文章中了解到,要计算滤波器的梯度,只需以输入体积为输入,以误差矩阵为核进行卷积。之后,只需将过滤器权重减去梯度(乘以学习率)。我实现了这个过程,但它不起作用。

我甚至试着自己用笔和纸做反向传播过程,但我计算的梯度并没有使过滤器的html" target="_blank">性能更好。那么,我对整个过程的理解是否有误?

编辑:我将提供一个例子,说明我对CNN中反向传播及其问题的理解。

考虑卷积层的随机输入矩阵:

1,0,1

0、0、1

1、0、0

随机权重矩阵:

1,0

0,1

输出为(应用ReLU激活器):

1,1

0,0

该层的目标是一个2x2矩阵,其中填充有零。这样,我们知道权重矩阵也应该用零填充。

错误:

-1,-1

0,0

通过应用上述过程,梯度为:

-1,-1

1,0

因此,新的权重矩阵是:

2,1

-1,1

这是行不通的。如果我重复这个过程,过滤器的权重就会变得非常高。所以我一定是在什么地方出错了。那么我做错了什么?

共有1个答案

左丘积厚
2023-03-14

我会给你一个完整的例子,不会很短,但希望你能明白。为了简单起见,我省略了偏置和激活函数,但是一旦你明白了,添加它们就足够简单了。请记住,反向传播在CNN中本质上与简单的MLP相同,但不是乘法,而是卷积。所以,这是我的示例

输入:

.7 -.3 -.7 .5
.9 -.5 -.2 .9
-.1 .8 -.3 -.5
0 .2 -.1 .6

内核:

.1 -.3
-.5 .7

执行卷积产生(第一卷积层的结果和第二卷积层的输入):

.32 .27 -.59
.99 -.52 -.55
-.45 .64 .13

L2内核:

-.5 .1
.3 .9

L2激活:

.73 .29
.37 -.63

这里有一个扁平层和一个标准的MLP或SVM来进行实际分类。在反向传播过程中,您将收到一个delta,为了好玩,我们假设它如下所示:

-.07 .15
-.09 .02

这将始终与平坦层之前的激活大小相同。现在,为了计算当前L2的内核增量,您将用上面的增量来卷积L1的激活。我不会再把它写下来,但结果会是:

.17 .02
-.05 .13

更新内核是作为L2完成的。Kernel-=LR*ROT180(dL2.K),这意味着您首先旋转上面的2x2矩阵,然后更新内核。我们的玩具示例是:

-.51 .11
.3  .9

现在,要计算第一个卷积层的增量,请回想一下在MLP中您有以下内容:current\u delta*current\u weight\u matrix。在Conv层中,您几乎拥有相同的功能。您必须将L2层的原始内核(更新之前)与当前层的增量进行卷积。但这个卷积将是一个完整的卷积。结果是:

.04 -.08 .02
.02 -.13 .14
-.03 -.08 .01

这样,您将进入第一个卷积层,并将原始输入卷积为3x3增量:

.16 .03
-.09 .16

并以与上述相同的方式更新您的L1内核:

.08 -.29
-.5 .68

然后您可以从前馈重新开始。上述计算四舍五入到小数点后2位,并使用0.1的学习率来计算新的内核值。

TLDR:

>

  • 你得到一个三角形

    您计算将用于下一层的下一个增量为:FullConvolution(Li. Input, delta)

    计算用于更新内核的内核增量:卷积(Li.W,delta)

    转到下一层并重复。

  •  类似资料:
    • 创建卷积神经网络(CNN)时(如中所述https://cs231n.github.io/convolutional-networks/)输入层与一个或多个过滤器连接,每个过滤器表示一个要素地图。这里,过滤层中的每个神经元只与输入层的几个神经元相连。在最简单的情况下,我的n个过滤器中的每一个都具有相同的维度并使用相同的步幅。 我的问题是: 如何确保过滤器学习不同的特征,尽管它们使用相同的补丁进行训练

    • 我读过这篇文章“UFLDF”,它发展了autoencoder中隐藏层的可视化,但我很困惑如何可视化卷积神经网络的滤波器。在我看来,对于第一个卷积层,要使滤波器可视化,它需要这个等式: 对于第二个卷积层,它应该将滤波器投射到原始输入空间,但我不知道如何做。

    • 如果我有一个图像是WxHx3(RGB),我该如何决定制作多大的过滤器遮罩?它是尺寸(W和H)的函数还是其他函数?第二个、第三个……的维度是怎样的。。。过滤器是否与第一个过滤器的尺寸进行比较?(如有任何具体指示,将不胜感激。) 我看到了以下内容,但它们没有回答这个问题。 卷积神经网络的维数 卷积神经网络:每个过滤器将覆盖多少像素? 如何确定用于图像分类的卷积神经网络的参数?

    • 此问题似乎与在帮助中心定义的范围内编程无关。 我不明白为什么在使用卷积神经网络时需要翻转滤波器。 根据千层面文件, flip_filters:bool(默认值:True) 是在将过滤器滑动到输入上之前翻转过滤器,执行卷积(这是默认设置),还是不翻转过滤器并执行相关。请注意,对于千层面中的其他一些卷积层,翻转会产生开销,默认情况下是禁用的–使用从其他层学习的权重时,请查看文档。 这是什么意思?我从未

    • 注意: 本教程适用于对Tensorflow有丰富经验的用户,并假定用户有机器学习相关领域的专业知识和经验。 概述 对CIFAR-10 数据集的分类是机器学习中一个公开的基准测试问题,其任务是对一组大小为32x32的RGB图像进行分类,这些图像涵盖了10个类别: 飞机, 汽车, 鸟, 猫, 鹿, 狗, 青蛙, 马, 船以及卡车。 想了解更多信息请参考CIFAR-10 page,以及Alex Kriz

    • 卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网络由一个或多个卷积层和顶端的全连通层(对应经典的神经网络)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网络能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网络