通过可视化 Python 示例理解 ReLU
Source: Dev.to
请提供您希望翻译的完整文本(除代码块和 URL 之外),我将按照要求将其翻译成简体中文并保留原有的格式。
使用 ReLU 激活函数
在之前的文章中,我们使用反向传播并绘制图表来正确预测数值。所有这些示例都采用了 Softplus 激活函数。
现在让我们切换到 ReLU(修正线性单元) 激活函数,它是深度学习和卷积神经网络中最流行的选择之一。
定义
[ \text{ReLU}(x)=\max(0,;x) ]
输出范围是 0 到 ∞。
假设的参数值
w1 = 1.70 b1 = -0.85
w2 = 12.6 b2 = 0.00
w3 = -40.8 b3 = -16
w4 = 2.70
我们将使用 剂量值从 0 到 1。
Source: …
第一步 – 第一次线性变换 ((w_1, b_1)) + ReLU
| 剂量 | 线性项 (w_1·x + b_1) | ReLU 输出 |
|---|---|---|
| 0.0 | (0·1.70 + (-0.85) = -0.85) | 0 |
| 0.2 | (0.2·1.70 + (-0.85) = -0.51) | 0 |
| 0.6 | (0.6·1.70 + (-0.85) = 0.17) | 0.17 |
| 1.0 | (1·1.70 + (-0.85) = 0.85) | 0.85 |
随着剂量的增加,ReLU 输出保持 0,直到线性项变为正值,此后输出沿直线增长——形成一条“弯曲的蓝线”。
示例代码
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 1, 100)
w1, b1 = 1.70, -0.85
z1 = w1 * x + b1
relu1 = np.maximum(0, z1)
plt.plot(x, relu1, label="ReLU(w1·x + b1)")
plt.xlabel("Dosage")
plt.ylabel("Activation")
plt.title("ReLU Activation")
plt.legend()
plt.show()

第2步 – 将 ReLU 输出乘以 (w_3 = -40.8)
将弯曲的蓝线乘以 ‑40.8 会使其向下翻转并缩放其幅度。
示例代码
w3 = -40.8
scaled_blue = relu1 * w3
plt.plot(x, scaled_blue, label="ReLU × w3")
plt.xlabel("Dosage")
plt.ylabel("Value")
plt.title("ReLU Output × w3")
plt.legend()
plt.show()

第 3 步 – 底部节点 ((w_2, b_2))
由于 (b_2 = 0),变换 (w_2·x + b_2) 产生一条直的橙色线。
演示代码
w2, b2 = 12.6, 0.0
z2 = w2 * x + b2
plt.plot(x, z2, color="orange", label="w2·x + b2")
plt.xlabel("Dosage")
plt.ylabel("Value")
plt.title("Bottom Node")
plt.legend()
plt.show()

步骤 4 – 将底部节点乘以 (w_4 = 2.70)
示例代码
w4 = 2.70
scaled_orange = z2 * w4
plt.plot(x, scaled_orange, color="orange", label="(w2·x + b2) × w4")
plt.xlabel("Dosage")
plt.ylabel("Value")
plt.title("Scaled Bottom Node")
plt.legend()
plt.show()

Step 5 – Add the Two Paths Together
The sum of the bent blue line and the straight orange line creates a green wedge‑shaped curve.
Demo code
combined = scaled_blue + scaled_orange
plt.plot(x, combined, color="green", label="Combined Signal")
plt.xlabel("Dosage")
plt.ylabel("Value")
plt.title("Combined Signal")
plt.legend()
plt.show()

第 6 步 – 添加偏置 (b_3 = -16)
最后,我们将合成信号整体向下平移偏置项的数值。
演示代码
b3 = -16
combined_bias = combined + b3
plt.plot(x, combined_bias, color="green", label="Combined + b3")
plt.xlabel("Dosage")
plt.ylabel("Value")
plt.title("Combined Signal + Bias")
plt.legend()
plt.show()

摘要
通过将 Softplus 替换为 ReLU 并遵循线性‑变换‑缩放‑相加 步骤,我们得到一个分段线性模型,可以在每个阶段进行可视化。上述代码片段可以直接运行,以重现所有图形。
第 7 步 – 再次应用 ReLU
现在我们在绿色楔形上应用 ReLU。这会将所有负值转换为 0,并保持正值不变。
示例代码
final_output = np.maximum(0, combined_bias)
plt.plot(x, final_output, color="green")
plt.xlabel("Dosage")
plt.ylabel("Activation")
plt.title("Final ReLU Output")
plt.show()

这就是我们的最终结果,我们使用 ReLU 绘制了一条曲线,使其在真实世界情境中更为逼真。
我们将在后续文章中进一步探讨神经网络。
您可以在 Colab notebook 中尝试这些示例。
正在寻找更简便的工具、库或整个仓库的安装方式?
试试 Installerpedia —— 一个社区驱动、结构化的安装平台,让您以最小的麻烦和清晰、可靠的指导安装几乎任何东西。
ipm install repo-name

🔗 在此探索 Installerpedia: https://hexmos.com/freedevtools/installerpedia/