第18章:激活函数——神经元的“点火开关”

发布时间:2026/7/12 1:00:11
第18章:激活函数——神经元的“点火开关” 上一章我们把多层网络的结构搭好了。输入经过第一层权重矩阵得到线性变换的结果然后进入激活函数输出给下一层。再经过第二层权重矩阵再进入激活函数……如此反复。但你有没有注意到一个奇怪的地方如果每一层的输出都只是「权重矩阵乘以输入向量加上偏置」——那不管堆多少层最终的结果还是一个线性变换。两个线性变换的复合仍然是线性变换。十个也是。一百个也是。换句话说如果没有激活函数一个一百层的网络跟一个单层网络在数学上没有任何区别——它们都只能画直线。激活函数的作用就是打破这个「线性」的牢笼。它的另一个名字叫「非线性函数」。为什么需要「点火开关」我们再把单个神经元的结构拆开来看一次。一个神经元做的事情是把输入向量和权重向量做点积加上偏置得到一个分数。这个分数可以是个任意实数——负的、零的、正的。然后呢如果没有激活函数这个分数就直接传给下一层了。那整个网络就只是矩阵的反复乘法——线性的画不出曲线。但真实世界中你要拟合的关系几乎都不是线性的。房价和面积不是完美的一条直线。图片里的像素值和「是不是猫」之间的关系更不是——它可能是极其扭曲、极其复杂的曲面。所以神经元在算出那个分数之后需要做一个决定「这个分数够不够高值不值得我『点火』把信号传给下一层」——或者说用多强的信号传给下一层。这个「决定」就是激活函数在做的。Sigmoid温和的挤压器最早的激活函数是Sigmoid——我们在第12章见过它。Sigmoid的公式是σ(z) 1 / (1 e^(-z))它的图像是一条S形的曲线。无论z是多少它都给你一个0到1之间的输出。z趋向正无穷输出趋近1z趋向负无穷输出趋近0z等于0输出0.5。Sigmoid之所以被早期神经网络广泛使用是因为它有一个舒服的性质它的输出在0到1之间可以被解释为「概率」或「点火强度」。当z是一个很大的正数时神经元「完全点火」。当z是一个很大的负数时它「完全不点火」。当z在零附近时它「半点火」。但Sigmoid有两个致命的问题。第一是梯度消失。当z很大或很负的时候Sigmoid的导数几乎为零。这意味什么意味着在反向传播时误差信号传到这个神经元就「卡住」了很难再往前传。在深层网络中浅层的参数几乎得不到有效的梯度训练不动。这就是之前提到的「梯度消失」问题。第二是输出不以零为中心。Sigmoid的输出始终是正的这会导致下一层的神经元接收到的输入全是正数。这会让权重更新时出现「锯齿」——所有梯度都往同一个方向走效率很低。Tanh把输出拉到-1到1之间Tanh是Sigmoid的「升级版」。它的公式是tanh(z) (e^z - e^(-z)) / (e^z e^(-z))它的形状跟Sigmoid很像——也是S形曲线——但它的输出范围是-1到1而不是0到1。z趋向正无穷输出趋近1z趋向负无穷输出趋近-1z等于0输出0。这个「以零为中心」的性质比Sigmoid好。因为下一层的输入有正有负权重的更新方向不会全部挤在一起。但Tanh仍然有梯度消失的问题。当z很大或很负的时候导数同样趋近于零。在深层网络中它同样会卡住。ReLU简单粗暴但有效2010年前后一个名叫ReLU的激活函数开始流行。今天它仍然是深度学习里的默认首选。ReLU的公式极简单ReLU(z) max(0, z)就是输入正数就输出它自己输入负数就输出0。[图片建议ReLU函数曲线图——横轴从-6到6纵轴从-2到6负半轴是一条水平线y0正半轴是45度斜线yx标注「ReLU max(0, z)」]它的图像就是一条在原点处折了一下的折线。左边的输出是0——神经元「不点火」右边的输出是z本身——神经元「完全点火」。ReLU为什么这么受欢迎第一它没有梯度消失问题。在正半轴导数是1误差信号可以完整地传过去。在负半轴导数是0但实践中的做法是让这些神经元「死去」——后面会提到。第二它的计算极快。没有指数运算没有除法就是一个简单的比较。这在需要处理数十亿个激活值的大规模网络中意味着显著的训练速度优势。第三它引入了稀疏性。在任何一个前向传播中大约有一半的ReLU神经元输出为0——这意味着它们「关闭」了。这让网络的表示更加稀疏和高效也在一定程度上起到了正则化的作用。但ReLU也有一个问题神经元死亡。如果一个神经元的输入一直是负数那么它的输出永远是0梯度永远是0——它再也不会更新了。在训练过程中这会导致一部分神经元「永久死亡」。解决方法是ReLU的变种比如Leaky ReLU——负半轴不是0而是一个很小的斜率比如0.01。这样即使输入是负数神经元也能传一点微弱的信号不至于完全死亡。还有Parametric ReLU——把这个斜率作为可学习的参数让网络自己决定负半轴应该多陡。从Sigmoid到ReLU一个简洁的演化你发现没有激活函数的演化方向很明确越来越简单。Sigmoid有指数运算和除法。Tanh也有。ReLU只有一个比较。这个方向不是巧合。深度学习模型越做越大越做越深计算开销成了最主要的限制。一个能在亿级规模上稳定运行、同时不牺牲性能的简单函数比一个理论优雅但计算昂贵的复杂函数更有竞争力。今天的实践里ReLU及其变种是大多数前馈网络和卷积网络的默认激活函数。Sigmoid和Tanh仍然在某些场景下使用——比如输出层需要输出0到1之间的概率时用Sigmoid循环神经网络中某些门控机制用Tanh——但作为隐藏层的默认选择它们已经基本被ReLU取代了。一个直观的对照把三种激活函数放在一起看Sigmoid像一位温和的老师——无论学生考了多少分他都给一个0到1之间的评价。负数也给一个很低的分数正数也给一个很高的分数但永远不会给出「0分」或「100分」这种极端评价。Tanh像一位把评分标准拉平的老师——考试分数高的给正分低的给负分。他拉大了学生之间的差距但同样永远不给极端分数。ReLU像一位极其干脆的老师——考及格了就给你分数本身考不及格直接给零分。简单、直接、无情但效率最高。哪种老师更好在深度学习的课堂上ReLU赢了。下一站怎么衡量「错得多离谱」激活函数解决了「多层网络如何产生非线性表达」的问题。现在网络有非线性了可以拟合复杂曲面了。但我们还缺一样东西怎么衡量「这个网络猜得有多错」——也就是损失函数。线性回归用均方误差逻辑回归用交叉熵分类用交叉熵回归用MSE它们之间怎么选、为什么这么选下一章专门聊损失函数。参考文献Nair, V., Hinton, G. E. (2010). Rectified Linear Units Improve Restricted Boltzmann Machines.Proceedings of the 27th International Conference on Machine Learning, 807–814.推荐理由ReLU在深度学习领域的第一篇重要论文。Nair和Hinton在受限玻尔兹曼机上发现用ReLU替代Sigmoid后模型在多个数据集上的表现都有了显著提升。虽然读起来有一定门槛但它的摘要和引言部分清晰地阐述了「为什么简单激活函数更好」的直觉——也是本篇的核心主题。Glorot, X., Bordes, A., Bengio, Y. (2011). Deep Sparse Rectifier Neural Networks.Proceedings of the 14th International Conference on Artificial Intelligence and Statistics, 315–323.推荐理由这是另一篇ReLU的里程碑论文。Glorot等人系统地分析了ReLU在深层网络中的优势——稀疏性、梯度流动、训练速度并用实验证明了它的有效性。如果你想知道「为什么ReLU在深层上比Sigmoid好那么多」的数学答案这篇是入口。3Blue1Brown. (2017). “What is backpropagation really doing? | Chapter 3, Deep Learning”. YouTube.推荐理由这期视频在讲解反向传播的过程中用动画展示了激活函数对梯度流动的影响——当某一层的激活值落在Sigmoid的饱和区两端时误差信号几乎传不过去。配合本篇阅读你能直观看到「梯度消失」在多层网络中是怎么发生的以及ReLU如何绕过了这个问题。