Maxout 激活函数 - 在 NumPy 中实现前向和反向传播

Maxout activation function- implementation in NumPy for forward and backpropogation

我正在使用 NumPy 从头开始​​构建普通神经网络,并测试不同激活函数的模型性能。我特别想知道 'Maxout' 激活函数将如何影响我的模型性能。

经过一些搜索后,除了它们的定义 (https://ibb.co/kXCpjKc),我没能在 NumPy 中找到实现。前向传播的公式很清楚,我会在哪里取 max(Z)(其中 Z = w.T * x + b)。但是,我不清楚我将在反向传播中使用的它们的导数。

在这种情况下,j = argmax(z) 是什么意思?我如何在 NumPy 中实现它?

如有任何帮助,我们将不胜感激!谢谢!

稍微改变任何非最大值都不会影响输出,因此它们的梯度为零。梯度从下一层仅传递到达到最大值的神经元(在您提供的 link 中梯度 = 1)。请参阅此 Whosebug 答案:https://datascience.stackexchange.com/a/11703.

在神经网络设置中,您需要关于每个 x_i 的梯度,因此您需要完整的导数。在您提供的 link 中,您可以看到只定义了一个偏导数。偏导数是一个向量(几乎所有的都是零和 1,其中神经元最大),因此完整的梯度将成为一个矩阵。

您可以在 numpy 中使用 np.argmax 实现此功能。