首页 > 解决方案 > Maxout 激活函数 - 在 NumPy 中实现前向和反向传播

问题描述

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

在进行了一些搜索之后,除了它们的定义( https://ibb.co/kXCpjKc)之外,我无法在 NumPy 中找到一个实现。前向传播的公式很清楚,我将在哪里取 max(Z)(其中 Z = wT * x + b)。但是,我将在反向传播中使用的它们的导数对我来说并不清楚。

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

任何帮助将非常感激!谢谢!

标签: pythonnumpyneural-networkactivation-function

解决方案


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

在神经网络设置中,您需要关于每个 x_i 的梯度,因此您需要全导数。在您提供的链接中,您可以看到只定义了一个偏导数。偏导数是一个向量(几乎全是 0 和 1,其中神经元最大),所以全梯度会变成一个矩阵。

您可以在numpyusing中实现这一点np.argmax


推荐阅读