激活函数:简单曲线如何赋能神经网络
Source: Dev.to
Source: …
激活函数 – 神经网络的构建模块
在我之前的文章中,我们涉及了 序列到序列模型 并介绍了 RNN(循环神经网络)。
要理解 RNN,首先需要了解神经网络的基础——激活函数。
什么是激活函数?
神经网络由 层 组成,每层包含许多 神经元。在神经元内部会发生两件事:
- 使用权重将输入组合。
- 将结果通过激活函数。
可以把激活函数想象成一个称重秤——它决定了在给定输入下神经元应当“触发”多少。
激活函数的曲线
激活函数是将输入值转换为输出值的数学曲线。最常讨论的有:
- ReLU
- Softplus
- Sigmoid
下面我们将使用一个简短的 Python 代码片段(NumPy + Matplotlib)来可视化每个函数。
import numpy as np
import matplotlib.pyplot as plt
生成输入值
# 400 个均匀分布在 -10 到 10 之间的值
x = np.linspace(-10, 10, 400)
-10→ 范围的起点(最负的输入)10→ 范围的终点(最正的输入)400→ 点的数量,绘图时可得到平滑曲线
x 代表 激活函数的输入。将这些值全部传入某个函数(例如 ReLU 或 Sigmoid),我们就能直观看到该函数是如何把输入转换为输出的。
1. ReLU(修正线性单元)

- 如果输入是 负数,输出为 0。
- 如果输入是 正数,输出与输入 相同。
def relu(x):
return np.maximum(0, x)
plt.figure()
plt.plot(x, relu(x), label="ReLU")
plt.title("ReLU Activation Function")
plt.xlabel("Input")
plt.ylabel("Output")
plt.grid(True)
plt.legend()
plt.show()

ReLU 因其简洁和高效,成为大多数现代神经网络的默认选择。
2. Softplus(平滑 ReLU)
Softplus 是 平滑版 的 ReLU。ReLU 在零点处有尖锐的拐角,而 Softplus 则是逐渐过渡。

def softplus(x):
return np.log(1 + np.exp(x))
plt.figure()
plt.plot(x, softplus(x), label="Softplus")
plt.title("Softplus Activation Function")
plt.xlabel("Input")
plt.ylabel("Output")
plt.grid(True)
plt.legend()
plt.show()

Softplus 能避免 ReLU 的“死神经元”问题,但计算成本更高,因此在实践中使用得较少。
3. Sigmoid
Sigmoid 将任意输入压缩到 (0, 1) 区间,因而适用于二分类输出。

def sigmoid(x):
return 1 / (1 + np.exp(-x))
plt.figure()
plt.plot(x, sigmoid(x), label="Sigmoid")
plt.title("Sigmoid Activation Function")
plt.xlabel("Input")
plt.ylabel("Output")
plt.grid(True)
plt.legend()
plt.show()

输出呈 S 形曲线,非常适合二分类任务。
小结
- ReLU – 简单、快速,隐藏层的默认选择。
- Softplus – ReLU 的平滑版本,缓解尖锐拐角带来的问题。
- Sigmoid – 将输出压缩到 (0, 1),常用于二分类输出。
Source: …
ner 问题的计算成本更高。
- ReLU – 将输入映射到 ([0, \infty)),在深层网络中计算高效且收敛快,但在负值区域会出现“死亡”神经元。
- Leaky ReLU – 为负值提供一个小斜率,以缓解死亡神经元问题。
- ELU – 在负值区域平滑收敛,能够产生更快的学习速度,但计算成本略高。
- Sigmoid – 将输入映射到 ((0, 1)),适用于二分类的输出层,但在深层网络中容易出现梯度消失。
理解这些激活函数是掌握更复杂架构(如 RNN 和序列到序列模型)的第一步。祝编码愉快!
您可以通过 Colab notebook 试运行示例。
正如激活函数让神经元在网络中高效工作,合适的工具也能让开发者的工作事半功倍。如果您曾为重复性任务、晦涩的命令或调试头疼,那么这个平台就是为您而生。它免费、开源,并专为开发者设计。
