通过最大池层反向传播?


62

这是一个概念上的小问题,困扰了我一段时间:我们如何通过神经网络中的最大池层反向传播?

本教程中使用Torch 7的nn库时,我遇到了最大池化层。该库为深度网络的每一层抽象了梯度计算和前向传递。我不明白最大池层的梯度计算是如何完成的。

我知道,如果您有一个输入进入第层的神经元,则(定义为的计算公式为: zililδilδil=Ezil

δil=θ(zil)jδjl+1wi,jl,l+1

因此,最大池化层将接收下一层的;但是由于最大池神经元的激活函数接受了一个值(在其上最大)的向量作为输入,因此不再是单个数字,而是一个向量(必须替换为)。此外,作为最大函数的就其输入而言是不可区分的。δjl+1δilθ(zjl)θ({zjl})θ

所以....应该如何精确计算呢?

Answers:


58

对于非最大值没有梯度,因为稍微改变它们不会影响输出。此外,相对于实际达到最大值的输入,最大值与斜率1局部线性相关。因此,来自下一层的梯度仅传递回达到最大值的那个神经元。所有其他神经元的梯度为零。

因此,在您的示例中,将是全零的向量,除了第个位置将得到一个值,其中δili{δjl+1}i=argmaxi(zil)


7
哦,对了,通过非最大神经元向后传播没有意义-这是至关重要的见解。因此,如果我现在正确地理解了这一点,则在最大池化层中进行反向传播只会选择最大值。来自上一层(已完成最大池化)的神经元,并仅通过该层继续进行反向传播。
shinvu

但是,您不需要与激活函数的导数相乘吗?
杰森

1
@Jason:对于获得最大值的激活,max函数是局部线性的,因此其导数为常数1。对于未通过的激活,其为0。从概念上讲,这与区分ReLU(x )= max(0,x)激活函数。
克里吉

最大池的步幅小于内核宽度的步幅是多少?
Vatsal

1
好答案!如果多个条目具有相同的最大值(例如,来自ReLU的2个值的值为0,而其他2个值为负),边缘情况又如何呢?
DankMasterDan

6

最大池

因此,假设您有一个位于P层之上的P层。然后,向前通过将是这样的:

Pi=f(jWijPRj)

其中是P层的第i个神经元的激活,f是激活函数,W是权重。因此,如果推导得出,则通过链式规则,您将得到如下所示的渐变流:Pi

grad(PRj)=igrad(Pi)fWij

但是现在,如果您具有最大池化,则 表示最大神经元,表示所有其他神经元,因此表示上一层的最大神经元,表示所有其他神经元神经元。所以:f=idf=0f=1f=0

grad(PRmax neuron)=igrad(Pi)Wi max neuron

grad(PRothers)=0.


2

@ Shinvu的答案写得很好,我想指出一个解释MAX()操作的梯度视频一个计算图表是快速的掌握之中!

在实现maxpool操作(计算图-您的NN体系结构中的计算节点)时,我们需要一个函数来创建一个“掩码”矩阵,该矩阵跟踪矩阵的最大值。True(1)表示最大值在X中的位置,其他条目为False(0)。我们跟踪最大值的位置,因为这是最终影响输出的输入值,因此也影响了成本。反向传播算法是根据成本计算梯度,因此任何影响最终成本的梯度都应为非零。因此,反向传播将使梯度“传播”回影响成本的特定输入值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.