激活函数有什么用?Sigmoid、Tanh、ReLU 到底怎么选?

🎯 博主简介

你好,我是安逸,CSDN「人工智能技术领域新星创作者」,码龄 6 年。博客总访问量 31万+,博客粉丝 1.2万+。

我长期关注人工智能技术与工程实践,主要研究和分享 AI Agent、RAG 系统、MCP 协议、OpenClaw、AI 编程工具以及大模型工程化落地。同时也持续输出 Java / Spring、Transformer、机器学习、深度学习与计算机视觉等方向的学习笔记和项目经验。

📚 推荐系列合集

目前已经整理了 生产级 RAG 系统实战Agent 记忆系统MCP 协议深度解析OpenClaw 系列Hermes Agent + Obsidian图解机器学习Claude Code 系列Agent 经典面试题等系列合集,涵盖 AI 应用开发、智能体实践、知识管理、机器学习与 AI 编程工具。

📱GZH:安逸Ai (科技前沿新闻,Github热门项目,最新免费资料...)

网页观看完整系列合集:🌐 Anyi AI 学习资源站


上篇文章我们把神经网络拆成了一颗颗"积木"------神经元。

你知道了加权求和是怎么回事,知道了信息是怎么一层层往前传的。

但有个问题一直悬着:每层神经元算完数字之后,是直接原封不动地传给下一层吗?

当然不是。

神经元的输出前,还要过一道"安检门"。这道门,决定了信号是放大、缩小,还是直接掐掉。

这个"安检门",就是激活函数。

它才是让神经网络真正"活"起来的东西。


激活函数是什么?------神经网络的"决策阀门"

先来看一颗神经元长什么样。

神经网络单个神经元工作流程图,显示输入加权求和、激活函数处理、输出的完整过程

你给它一堆输入 x1、x2、x3... 每个输入带个权重 w1、w2、w3...

神经元先把所有输入加权求和:z = w1×x1 + w2×x2 + w3×x3 + b

然后呢?

然后就完了吗?

如果就这样直接传出去,那神经网络跟一个计算器没什么区别。

三层堆在一起,也不过是做了更多次加法和乘法。

这东西学不了复杂规律,因为它本质上是线性的。

那怎么才能让它"非线性"呢?

加个激活函数。

激活函数把加权求和的结果 z 扔进去,吐出来一个非线性变换后的值 a。

a = f(z)

这个 a 才是神经元的真正输出。

你可能觉得这也没多玄乎。但就是这个小小的非线性函数,彻底改变了神经网络的能力边界。

没有它,十层网络等于一层。

有了它,神经网络能拟合任意复杂的关系------图片识别、自然语言处理、下棋、开车,统统拿下。

想象一个投票站。

神经元收到一堆意见,每条意见影响力不同(权重),最后汇总成一股声音。

但汇总完了还不能直接定结论------得看看这声音够不够响。

激活函数就是那个门槛:声音太小,直接淘汰;声音够大,才能影响最终决策。

这就是神经网络的"决策阀门"。


三个经典激活函数------Sigmoid、Tanh、ReLU的个性特征

神经网络发展了几十年,科学家们发明了一堆激活函数。

但真正被广泛使用的,就那么几个。

先看最经典的三剑客。

同一坐标系下Sigmoid、Tanh、ReLU三条激活函数曲线,标注各函数值域范围

Sigmoid:谨慎的"翻译官"

Sigmoid 的公式长这样:

σ(x) = 1 / (1 + e^(-x))

它把任意输入压缩到 0 到 1 之间。

x 越小,输出越接近 0;x 越大,输出越接近 1。

这像什么?

像一个谨慎的翻译官。

不管你说什么,它都给你翻译成"可能性"。

这件事发生的概率是多少?0.7。

那件事呢?0.2。

0 到 1 之间,天生适合表示概率。

所以 Sigmoid 长期被用在二分类问题的输出层。

但它有个致命缺陷。

当 x 很大或很小的时候,Sigmoid 的输出基本不动了------要么接近 0,要么接近 1。

这时候梯度也几乎变成了零。

梯度是反向传播的关键。梯度为零,权重就更新不了。

这叫"梯度消失"。

这个问题,我们后面会重点讲。

Tanh:双向"翻译官"

Tanh 的公式:

tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x))

它的输出范围是 -1 到 1。

跟 Sigmoid 比,它是以 0 为中心的。

什么意思?

输出可以是正的,也可以是负的。

正负代表两种"态度":正的是"支持",负的是"反对"。

这种特性让它在隐藏层比 Sigmoid 更好用。

收敛速度更快,训练更稳定。

但 Tanh 也没逃过梯度消失的命运。

当 x 绝对值很大时,曲线又变平了,梯度又没了。

ReLU:简单粗暴的"直通道"

ReLU 的公式简单到离谱:

f(x) = max(0, x)

就一行。

x 大于 0,直接输出 x;x 小于等于 0,输出 0。

像什么?

像一个直通道。

正向信号畅通无阻,负向信号直接砍掉。

ReLU 牛在哪里?

第一,计算极快。

不用算指数,不用算复杂函数,就一个比较操作。

第二,x 大于 0 时,梯度恒为 1。

反向传播时,梯度原封不动地往前传。

梯度消失?不存在的。

2012 年 AlexNet 用 ReLU 炸场之后,这玩意儿就成了隐藏层的默认选择。

但 ReLU 有个问题,而且挺严重。


梯度消失------深度学习的第一道坎

先搞清楚什么是梯度。

训练神经网络,本质上是不断调整权重,让输出越来越准。

怎么调整?

先算一个"误差"------预测值和真实值差多少。

然后把这个误差往回传,看看每个权重该往哪个方向改、改多少。

这个"该往哪个方向改"的信息,就是梯度。

梯度乘以学习率,就是权重的更新量。

现在问题来了。

Sigmoid 和 Tanh 这类函数,在 x 很大或很小的时候,输出几乎不变。

曲线两头是平的。

平的意味着什么?

斜率为零,梯度为零。

梯度为零,权重就更新了个寂寞。

而且这事儿是一层层传导的。

误差从输出层往输入层传,每传一层,梯度就要乘以激活函数的导数。

Sigmoid 的导数最大值才 0.25。

传 5 层,梯度就只剩下 0.25^5 ≈ 0.0003。

传 10 层,基本归零了。

多层神经网络反向传播梯度衰减示意图,用箭头粗细表示梯度从输出层到输入层逐渐变小

越靠近输入层,权重越难更新。

前面的层几乎学不到东西,后面的层倒是很努力。

但前面的层是打基础的呀!

底子打不好,后面再努力也白搭。

这就是深度学习的"第一道坎"------梯度消失。

它直接限制了神经网络的深度。

2006 年之前,神经网络都不敢做太深,就是这个原因。

后来 ReLU 出现,直接把这个问题解决了大半。

但 ReLU 带来了新问题。


ReLU的"死亡陷阱"------一半是天使,一半是魔鬼

ReLU 解决了梯度消失。

但它自己也有缺陷。

我们看 ReLU 的图像。

ReLU与LeakyReLU函数曲线对比图,标注负轴部分斜率差异

x > 0 时,曲线是斜率为 1 的直线,没问题。

x ≤ 0 时,输出恒为 0。

问题就出在这里。

假设有个神经元,因为各种原因,输出的值一直是负的。

经过 ReLU 之后,它永远输出 0。

一旦输出 0,后面就再也收不到任何信号了。

这个神经元"死"了。

而且是永久性的。

你可能觉得这个神经元反正也不干活,死了就死了呗。

但问题是,它的"死"是不可逆的。

梯度是 0,学习率再小、训练时间再长,它也活不过来。

更扎心的是,这事儿还挺容易发生。

权重初始化不好,可能死一片。

学习率设太大,也可能死一片。

数据分布不好,还可能死一片。

有研究说,用 ReLU 的网络中,有 20%~50% 的神经元是死的。

一半是天使,一半是魔鬼。

这话形容 ReLU 太准确了。

那怎么办?

LeakyReLU:给条活路

LeakyReLU 来了。

公式:

f(x) = max(0.01x, x)

x > 0 时,跟 ReLU 一样。

x < 0 时,不是输出 0,而是输出 0.01x。

一条很小很小的斜率。

这就好比给被判处"死刑"的神经元,留了一条缝。

不是完全畅通,但至少有信号透进来。

梯度不为零,神经元还有可能被救活。

0.01 这个数字可以调,叫 alpha。

还有 Parametric ReLU(PReLU),让网络自己学习这个斜率。

还有一个更狠的------ELU。

负值不是线性衰减,而是指数衰减。

曲线更平滑,训练更稳定。

但计算量大了点。

总结一下:

ReLU 是主流选择,够快够简单,小问题忍了。

想更稳妥?试试 LeakyReLU。

不差那点计算力?试试 ELU。


实战指南------不同任务如何选择激活函数

原理讲完了,该上实战了。

激活函数选择决策树,从任务类型、网络层次、模型架构三个维度分支

隐藏层:无脑选 ReLU

2012 年 AlexNet 之后,ReLU 就成了隐藏层的默认配置。

计算快、梯度不消失、稀疏激活------优点一箩筐。

死神经元问题?靠其他手段解决:初始化方法、Batch Normalization、合适的学习率。

别想太多,ReLU 就对了。

二分类输出层:Sigmoid

二分类问题,输出就两个选项:是或否。

需要输出一个概率值。

0 到 1 之间,Sigmoid 天生适合。

直接接个 sigmoid,输出就是"正类的概率"。

大于 0.5 就判正类,简单粗暴。

多分类输出层:Softmax

多分类不一样。

输出不是"是猫的概率",而是"是猫、是狗、是兔子的概率分别是多少"。

所有概率加起来得等于 1。

Softmax 干的就是这个活:

把 logits 转换成概率分布。

e^x 的特性让大的更大、小的更小,最终归一化。

回归任务:不用激活函数

回归问题输出的是一个连续值。

房价是多少?温度是多少?股票涨多少?

这些不需要压缩到 0-1 或 -1 到 1。

直接线性输出就行。

加激活函数反而画蛇添足。

RNN:Tanh 或门控机制

循环神经网络处理序列数据,有特殊要求。

Tanh 的 -1 到 1 范围适合循环计算,状态可以累加也可以抵消。

所以 LSTM 和 GRU 的核心门控,用的都是 Tanh。

Transformer:GELU

BERT、GPT 这些模型,用的是 Transformer 架构。

它们用的激活函数叫 GELU。

Gaussian Error Linear Unit。

比 ReLU 更平滑,比 Tanh 收敛更快。

公式稍微复杂一点,但效果确实好。

说白了:有钱(算力)的时候,选更好的。


一张表总结------三大激活函数核心对比

说了这么多,上表。

Sigmoid、Tanh、ReLU六维度对比表格,包含值域、零中心、梯度消失、计算复杂度、稀疏性、死神经元问题

维度 Sigmoid Tanh ReLU
值域 (0, 1) (-1, 1) [0, +∞)
零中心
梯度消失 严重 较严重
计算复杂度 高(指数运算) 高(指数运算) 低(比较运算)
稀疏激活
死神经元

这张表就是你的"激活函数体检报告"。

用的时候扫一眼,哪项不满足换哪个。


好了,激活函数的故事讲完了。

你知道了它为什么是神经网络的"决策阀门"。

知道了 Sigmoid、Tanh、ReLU 各自的脾气。

知道了梯度消失是怎么回事,也知道了 ReLU 的"死亡陷阱"。

下次搭网络的时候,你就能说出"这一层用 ReLU 是因为..."了。

但等等。

数据往前传叫"前向传播",误差往回传叫"反向传播"。

我们讲了激活函数怎么影响前向传播的输出,也讲了梯度消失和反向传播的关联。

那反向传播具体是怎么算的?权重是怎么一步步调整的?

这就是下一篇文章要聊的了。

等你回来,我们一起把神经网络训练的全流程走一遍。

相关推荐
IT_陈寒1 小时前
SpringBoot这个特性差点让我加班到凌晨
前端·人工智能·后端
Dovis(誓平步青云)1 小时前
《 固井工程软件 Cemsol 的数据管理与国产化适配实践》
android·java·开发语言·人工智能
咖啡星人k1 小时前
AI编程Agent为何要配真服务器:拆解MonkeyCode云端沙箱
人工智能·aigc
大模型码小白1 小时前
AI安全前沿:AI大模型安全防护的前沿技术
java·网络·人工智能·python·深度学习·学习·安全
程序员z71 小时前
DeepSeek Harness 一文快览:对标 Claude Code 的 Agent 控制与编排系统
人工智能
默 语1 小时前
AI Agent Skills 工程化实践:从参考框架到自定义工作流的完整构建指南
人工智能
Python私教1 小时前
多 Agent 交接如何防串稿:一套内容哈希与回执协议
人工智能·后端
小白说大模型1 小时前
OpenClaw 测试策略实战:AI Agent 自动化测试体系搭建与落地
人工智能·重构·开源·prompt·embedding
糖果店的幽灵1 小时前
Codex官网前端可抄吗?从模仿到创新的技术实践指南
前端·人工智能