python - Maxout 激活函数 - 在 NumPy 中实现前向和反向传播
问题描述
我正在使用 NumPy 从头开始构建一个普通的神经网络,并试验不同激活函数的模型性能。我特别想看看“Maxout”激活函数将如何影响我的模型性能。
在进行了一些搜索之后,除了它们的定义( https://ibb.co/kXCpjKc)之外,我无法在 NumPy 中找到一个实现。前向传播的公式很清楚,我将在哪里取 max(Z)(其中 Z = wT * x + b)。但是,我将在反向传播中使用的它们的导数对我来说并不清楚。
j = argmax(z) 在这种情况下是什么意思?如何在 NumPy 中实现它?
任何帮助将非常感激!谢谢!
解决方案
稍微改变任何非最大值不会影响输出,因此它们的梯度为零。梯度仅从下一层传递到达到最大值的神经元(您提供的链接中的梯度 = 1)。请参阅此 stackoverflow 答案:https ://datascience.stackexchange.com/a/11703 。
在神经网络设置中,您需要关于每个 x_i 的梯度,因此您需要全导数。在您提供的链接中,您可以看到只定义了一个偏导数。偏导数是一个向量(几乎全是 0 和 1,其中神经元最大),所以全梯度会变成一个矩阵。
您可以在numpy
using中实现这一点np.argmax
。
推荐阅读
- python - 仅使用 if 语句查找字符串的第一个元音
- matlab - matlab中遗传算法的优化
- python - 如何配置多个 PUB/单个 SUB python ZMQ Ubuntu
- python - sync_diff() 无法保持排序/顺序
- django - Django elasticsearch dsl完成字段问题
- docker - Docker:`RUN apt update`上的`exec format error`
- r - 使用百分比创建马赛克图
- python - Python无限while循环在按下ctrl-c之前不应该暂停
- airflow - Snowpipe vs Airflow 继续将数据加载到雪花中
- r - 我需要按分类值(邻域)排序的捐赠信息的描述性统计数据(平均值,超过一定数量的百分比)