激活函数是什么?为什么神经网络不能没有它

发布时间:2026/6/27 3:15:12
激活函数是什么?为什么神经网络不能没有它 上一篇文章里我们把神经网络理解成一套可以从样本中学习规律的函数。但这里马上会出现一个问题如果神经网络每一层都只是做加权求和那它真的能学到复杂规律吗答案是不够。激活函数就是为了解决这个问题出现的。先看没有激活函数会怎样一个最简单的神经元大概会做这样的计算输出 输入1 * 权重1 输入2 * 权重2 偏置这是一种线性计算。如果第一层是线性的第二层也是线性的第三层还是线性的那么把它们叠在一起本质上仍然可以合并成一个大的线性计算。也就是说网络看起来变深了但表达能力并没有真正变强。这就像你连续做了很多次加减乘除里的线性变换最后还是很难表达弯曲、分段、复杂边界这些关系。激活函数做了什么激活函数会放在神经元的加权求和之后。它会把原本的线性结果再处理一下让网络具备非线性能力。可以粗略理解成输出 激活函数(加权求和结果)这一步看起来很小但意义很大。因为现实世界里的很多规律都不是直线关系。图片分类、文本理解、语音识别、推荐系统它们背后的边界往往都很复杂。激活函数让神经网络有机会去拟合这些复杂关系。ReLU 为什么常见最常见的激活函数之一是ReLU。它的规则非常简单如果输入大于 0就输出它自己 如果输入小于 0就输出 0也就是ReLU(x) max(0, x)它简单、计算快而且在很多深度学习模型里效果很好。刚入门时可以先记住一个直觉ReLU 像一个开关小于 0 的信号被关掉大于 0 的信号被保留。Sigmoid 和 Tanh除了 ReLU还有两个经典激活函数Sigmoid和Tanh。Sigmoid会把输入压到0到1之间所以它经常出现在二分类模型的输出层里用来表示概率。Tanh会把输入压到-1到1之间它比 Sigmoid 多了负数区间在一些早期神经网络里很常见。不过在隐藏层里现在更常用的通常还是 ReLU 及其变体。激活函数该怎么选入门阶段不用一开始就纠结所有激活函数。可以先按这个规则记隐藏层优先理解ReLU二分类输出常见Sigmoid多分类输出常见Softmax这不是全部情况但足够支撑你读懂大多数入门代码。小结激活函数的核心作用是给神经网络加入非线性。没有激活函数很多层线性计算叠起来表达能力仍然有限有了激活函数网络才有机会学习弯曲的边界和复杂的规律。所以它不是可有可无的小配件而是神经网络能够变强的关键原因之一。技术图把关键链路画清楚可运行实验直接比较 ReLU、Sigmoid 与 Tanh激活函数改变数值分布也影响梯度传播。用同一组输入比较三种函数可以看到它们的输出范围和零点行为。import torch ​ x torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0]) for name, fn in [(ReLU, torch.relu), (Sigmoid, torch.sigmoid), (Tanh, torch.tanh)]: values [round(v, 3) for v in fn(x).tolist()] print(f{name:7s}, values)运行结果ReLU [0.0, 0.0, 0.0, 1.0, 2.0] Sigmoid [0.119, 0.269, 0.5, 0.731, 0.881] Tanh [-0.964, -0.762, 0.0, 0.762, 0.964]ReLU 保留正值并截断负值Sigmoid 把结果压到 0 到 1Tanh 输出落在 -1 到 1。隐藏层常从 ReLU 类函数开始输出层则由任务决定。常见误区每一层都必须使用同一种激活函数。隐藏层和输出层承担不同职责。分类模型最后一定手动加 Softmax。使用CrossEntropyLoss时应直接传 logits。动手练习把输入扩展到[-10, 10]观察 Sigmoid 和 Tanh 是否更接近饱和区。本文首发于「去你想去的地方」 激活函数是什么为什么神经网络不能没有它 | 去你想去的地方完整学习路线、视频版和后续更新请访问原文。