激活函数:简单曲线如何赋能神经网络

发布: (2025年12月24日 GMT+8 03:36)
5 min read
原文: Dev.to

Source: Dev.to

Source:

激活函数 – 神经网络的构建模块

在我之前的文章中,我们涉及了 序列到序列模型 并介绍了 RNN(循环神经网络)
要理解 RNN,首先需要了解神经网络的基础——激活函数

什么是激活函数?

神经网络由 组成,每层包含许多 神经元。在神经元内部会发生两件事:

  1. 使用权重将输入组合
  2. 将结果通过激活函数

可以把激活函数想象成一个称重秤——它决定了在给定输入下神经元应当“触发”多少。

激活函数的曲线

激活函数是将输入值转换为输出值的数学曲线。最常讨论的有:

  • 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(修正线性单元)

ReLU illustration

  • 如果输入是 负数,输出为 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 plot

ReLU 因其简洁和高效,成为大多数现代神经网络的默认选择。

2. Softplus(平滑 ReLU)

Softplus 是 平滑版 的 ReLU。ReLU 在零点处有尖锐的拐角,而 Softplus 则是逐渐过渡。

Softplus illustration

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 plot

Softplus 能避免 ReLU 的“死神经元”问题,但计算成本更高,因此在实践中使用得较少。

3. Sigmoid

Sigmoid 将任意输入压缩到 (0, 1) 区间,因而适用于二分类输出。

Sigmoid illustration

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()

Sigmoid activation function plot

输出呈 S 形曲线,非常适合二分类任务。

小结

  • ReLU – 简单、快速,隐藏层的默认选择。
  • Softplus – ReLU 的平滑版本,缓解尖锐拐角带来的问题。
  • Sigmoid – 将输出压缩到 (0, 1),常用于二分类输出。

Source:

ner 问题的计算成本更高。

  • ReLU – 将输入映射到 ([0, \infty)),在深层网络中计算高效且收敛快,但在负值区域会出现“死亡”神经元。
  • Leaky ReLU – 为负值提供一个小斜率,以缓解死亡神经元问题。
  • ELU – 在负值区域平滑收敛,能够产生更快的学习速度,但计算成本略高。
  • Sigmoid – 将输入映射到 ((0, 1)),适用于二分类的输出层,但在深层网络中容易出现梯度消失。

理解这些激活函数是掌握更复杂架构(如 RNN 和序列到序列模型)的第一步。祝编码愉快!

您可以通过 Colab notebook 试运行示例。


正如激活函数让神经元在网络中高效工作,合适的工具也能让开发者的工作事半功倍。如果您曾为重复性任务、晦涩的命令或调试头疼,那么这个平台就是为您而生。它免费、开源,并专为开发者设计。

Free developer tools platform
探索平台 →

Back to Blog

相关文章

阅读更多 »

神经网络:绝对初学者

引言 如果你曾经想过机器是如何识别面孔、翻译语言,甚至生成艺术的,背后的秘密往往是 neural networks。Do...