最大池化层的反向传播:多个最大值

x3t*_*t2h 9 python backpropagation deep-learning conv-neural-network max-pooling

我目前正在用普通的 numpy 实现一个 CNN,并且有一个关于最大池层反向传播的特殊情况的简短问题:

虽然很明显非最大值的梯度消失了,但我不确定切片的几个条目等于最大值的情况。严格来说,函数在这个“点”上不应该是可微的。但是,我认为可以从相应的次微分中选择一个次梯度(类似于在 x=0 处为 Relu 函数选择次梯度“0”)。

因此,我想知道简单地形成关于最大值之一的梯度并将剩余的最大值视为非最大值是否就足够了。

如果是这种情况,是否建议随机选择最大值以避免偏差,还是总是选择第一个最大值?

Yub*_* Hu 1

这是一个很好的问题,但大多数人从不担心它,因为它几乎从未发生过。假设您随机初始化参数,您的图像不是人工生成的,并且您使用的是 float32,那么具有两个相等最大值的概率约为 N * 2^-32 (N * 0.0000000002),其中 N 是输入的数量最大池层。

因此,除非您有接近 10 亿个输入,否则您想要的任何实现都应该具有类似的效果。