第 16 篇 · 神经网络基础

激活函数:AI的「开关」

决定信号要不要通过

想象你家里的电灯开关。按一下,灯亮了;再按一下,灯灭了。开关的作用很简单:决定是否让电流通过。

神经元也需要这样的开关。它接收了很多输入信号,加权求和后,需要决定是否要把这个结果传递出去。这个「决定」就是由激活函数做出的。

今天,我们来看看激活函数是如何工作的。

1
为什么需要激活函数?

如果没有激活函数,神经网络会变成什么样?

没有激活函数的问题
只有线性变换

输出 = 输入 × 权重 + 偏置

(这是一个线性函数)

多层叠加后

多层线性 = 还是线性

无论多少层,都等价于一层

❌ 结果:神经网络失去意义,无法学习复杂模式

关键洞察:激活函数引入非线性,让神经网络能够学习和表示复杂的非线性关系。没有非线性,深度网络就失去了意义。

继续看下去

2
常见的激活函数

Sigmoid:经典的S型曲线
输入输出→ 1→ 0

Sigmoid特点:

  • ✅ 输出范围 (0, 1),像概率
  • ✅ 平滑可导
  • ❌ 容易梯度消失
  • ❌ 输出不是0均值

公式:σ(x) = 1 / (1 + e^(-x))

现在主要用于输出层(二分类)

ReLU:现代深度学习的主流
输入输出负数→0正数→不变

ReLU特点:

  • ✅ 计算简单,速度快
  • ✅ 缓解梯度消失
  • ✅ 引入稀疏性
  • ❌ 负数永远为0(死亡ReLU)

公式:ReLU(x) = max(0, x)

目前最常用的激活函数

Tanh:Sigmoid的改进版
输入→ 1→ -1

Tanh特点:

  • ✅ 输出范围 (-1, 1)
  • ✅ 0均值,训练更稳定
  • ❌ 仍有梯度消失问题

公式:tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x))

某些场景下比Sigmoid好

3
ReLU的变体

为了解决ReLU的「死亡」问题(负数永远为0),研究者提出了一些改进版本。

ReLU变体对比
Leaky ReLU

负数有小的斜率

PReLU

斜率可学习

ELU

负数平滑曲线

💡
虽然有很多变体,但普通的ReLU在大多数场景下已经足够好。除非遇到死亡ReLU问题,否则不需要特意使用变体。

4
如何选择激活函数?

选择指南

🎯 隐藏层默认选择

ReLU。简单、快速、效果好。如果遇到死亡ReLU,试试Leaky ReLU。

🎯 二分类输出层

Sigmoid。输出在0-1之间,可以解释为概率。

🎯 多分类输出层

Softmax。把输出变成概率分布,所有类别概率之和为1。

🎯 回归问题输出层

通常 不需要激活函数,或者根据输出范围选择(如用Sigmoid限制在0-1)。

5
常见误区

❌ 误区1:所有层用同样的激活函数

隐藏层和输出层通常需要不同的激活函数。隐藏层用ReLU,输出层根据任务选择Sigmoid/Softmax/线性。

❌ 误区2:激活函数越复杂越好

复杂的激活函数(如Swish、GELU)在某些任务上确实更好,但ReLU在大多数情况下已经足够,而且计算更快。

❌ 误区3:激活函数可以随便换

不同的激活函数有不同的输出范围和梯度特性,更换时可能需要调整学习率等其他超参数。

总结

🎓 一句话总结

  • 激活函数 = 引入非线性,让神经网络能学习复杂模式
  • ReLU 是目前最常用的:正数不变,负数变0
  • Sigmoid/Tanh 有梯度消失问题,现在主要用于输出层
  • 隐藏层默认用ReLU,输出层根据任务选择

下篇预告

第17篇:优化器——让AI学得更快的「加速器」

梯度下降是基础,但实际使用中有很多改进版本。优化器决定了AI学习的速度和效果。下一篇,我们来看看各种优化器。

✏️ 手绘图解 · AI Catch 出品

第 16 篇 / 共 84 篇