通过最大池化层进行反向传播

数据挖掘 机器学习 神经网络 卷积神经网络 反向传播
2021-09-26 02:45:23

我对这个问题有一个小问题

我知道,当通过最大池化层反向传播时,梯度会以一种方式返回,即前一层中被选为最大值的神经元获得所有梯度。我不能 100% 确定下一层中的梯度如何被路由回池化层。

所以第一个问题是我是否有一个连接到全连接层的池化层 - 如下图所示。

示例1

在计算池化层的青色“神经元”的梯度时,我是否对来自 FC 层神经元的所有梯度求和?如果这是正确的,那么池化层的每个“神经元”都具有相同的梯度?

例如,如果 FC 层的第一个神经元的梯度为 2,第二个的梯度为 3,第三个的梯度为 6。池化层中蓝色和紫色“神经元”的梯度是什么?为什么?

第二个问题是池化层何时连接到另一个卷积层。那我该如何计算梯度呢?请参见下面的示例。

示例2

对于池化层最右边的“神经元”(勾勒出的绿色),我只取下一个卷积层中紫色神经元的梯度并将其路由回去,对吗?

填充的绿色怎么样?由于链式法则,我需要将下一层的第一列神经元相乘吗?还是我需要添加它们?

请不要张贴一堆方程式并告诉我我的答案就在那里,因为我一直试图围绕方程式进行思考,但我仍然不能完全理解它,这就是为什么我要简单地问这个问题大大地。

1个回答

如果这是正确的,那么池化层的每个“神经元”都具有相同的梯度?

,这取决于权重和激活函数。最典型的是,池化层的第一个神经元到 FC 层的权重不同于池化层的第二层到 FC 层的权重。

所以通常你会遇到这样的情况:

FCi=f(jWijPj)

在哪里 FCi 是全连接层中的第 i 个神经元, Pj 是池化层中的第 j 个神经元,并且 f 是激活函数和 W 权重。

这意味着关于 P_j 的梯度是

grad(Pj)=igrad(FCi)fWij.

j=0 或 j=1 不同,因为 W 不同。

第二个问题是池化层何时连接到另一个卷积层。那我该如何计算梯度呢?

它连接到什么类型的层并没有区别。它始终是同一个等式。下一层所有梯度的总和乘以这些神经元的输出如何受上一层神经元的影响。FC 和卷积之间的区别在于,在 FC 中,下一层的所有神经元都会提供贡献(即使可能很小),但在卷积中,下一层的大多数神经元根本不受前一层神经元的影响,因此它们的贡献正好为零。

对于池化层最右边的“神经元”(勾勒出的绿色),我只取下一个卷积层中紫色神经元的梯度并将其路由回去,对吗?

对。加上该卷积层上任何其他神经元的梯度,这些神经元将池化层的最右上神经元作为输入。

填充的绿色怎么样?由于链式法则,我需要将下一层的第一列神经元相乘吗?还是我需要添加它们?

添加它们。因为链式法则。

Max Pooling 到目前为止,正如您所见,它是 max pool 的事实完全无关紧要。最大池化就是该层上的激活函数max. 所以这意味着前一层的梯度grad(PRj)是:

grad(PRj)=igrad(Pi)fWij.

但现在f=id对于最大神经元和f=0对于所有其他神经元,所以f=1对于前一层的最大神经元和f=0对于所有其他神经元。所以:

grad(PRmaxneuron)=igrad(Pi)Wi max neuron,

Gr一个d(RHers)=0。