如果没有激活函数,再深的神经网络也只是一根笔直的直线。本文解释为什么“非线性”是神经网络表达力的关键,并介绍几种常见激活函数的特点与取舍,包括曾经的主流与今天的默认选择。

核心要点

  • 没有激活函数,多层网络会退化成一次线性变换,层数再多也没意义。
  • ReLU 计算简单、梯度稳定,是现代网络中最常用的默认选择。
  • 输出层常根据任务改用 S 形或归一化指数函数,以便得到概率。

为什么需要弯折

设想把一个两层网络的式子写开:第一层加权求和,第二层再加权求和。如果去掉中间的激活函数,两次线性变换合并之后仍然只是一次线性变换,等于白搭一层。堆再多也没用,整个网络只能表达笔直的关系,而现实世界几乎处处是弯的。

激活函数的作用就是在每层输出上做一次非线性弯折。有了它,多层网络才能把输入空间反复折叠、扭曲,从而用有限的参数画出极其复杂的边界。所谓万能近似的说法,说的正是:只要神经元足够多、激活函数是非线性的,网络就能逼近相当广泛的一类函数。

几种常见曲线的取舍

早期常用的是 S 形函数,它把输入压到 0 到 1 之间,输出可以当概率用。但它有个麻烦:当输入很大或很小时,曲线几乎变平,梯度趋近于零,误差信号传不到前面的层,深层网络就训不动了。这个现象后来被称为梯度消失,一度阻碍了深层网络的发展。

如今的默认选择是 ReLU,规则简单得有点粗暴:输入大于零就原样输出,小于等于零就输出零。它在正区间梯度恒为常数,不会饱和,计算也极快,深层网络的训练因此变得顺畅。代价是负值区间完全死掉,有些神经元可能永远不再被激活,于是又出现了若干改良版本。

不同位置用不同函数

隐藏层和输出层的考量并不一样。隐藏层关心的是梯度好不好传、计算快不快,所以 ReLU 一类是主流。输出层则要匹配任务:二分类想得到 0 到 1 的概率,就用 S 形函数;多分类想让各类概率加起来等于一,就用归一化指数函数;做回归预测数值时,通常干脆不加激活。

还有一点常被忽略:激活函数的选择要和初始化、归一化配合使用。如果输入分布没被稳住,再好的激活函数也可能大面积落入饱和区或者死区。现代网络里,激活与归一化往往是成对出现的,二者共同决定了信号在深层中是否健康。

常见问题

激活函数可以自己设计吗?

可以,而且这是研究的一个方向。不过绝大多数场景没有这个必要:ReLU 及其改良版本已经在速度和稳定性上做了充分权衡,自己设计的函数往往缺乏经过验证的初始化配套。真正需要动手的,通常是针对特定硬件做效率优化。

本文为 AI 科普内容,仅用于知识普及,不构成任何技术选型、投资或职业决策建议。