激活函数基础:ReLU、Sigmoid、Tanh 对比

P.S. 目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。

一、开篇:被"激活"二字劝退的那些年

我当初学神经网络的时候,第一个破防的瞬间,不是啥反向传播,也不是梯度下降,而是看到"激活函数"这四个字的时候——我当时就蚌埠住了,这名字起的,听起来像是某种科幻电影里的核弹启动装置,或者至少是健身房里让人血脉喷张的补剂?结果呢?它就是数学公式!数学公式啊!就几个加减乘除指数运算,非要包装得这么唬人,拿捏谁呢这是?

但后来我自己跑项目踩坑踩多了才明白,这玩意儿虽然名字中二,却是神经网络的命门所在。没有它,你的神经网络就是一堆线性操作的叠叠乐,再多层也只是一个 fancy 的线性回归,懂?那还不如直接用 Excel 画折线图呢,至少不会爆显卡。

今天我就用人话+血泪史,把这仨最经典的激活函数——Sigmoid、Tanh、ReLU——给您扒个底朝天。咱不整那些"该函数具备良好的非线性特性"这种教科书废话,咱就说:这仨货到底是干嘛的?啥时候该用谁?又有那些不为人知的坑?

坐稳了,发车!

二、先整明白:激活函数到底在"激活"啥?

在说具体函数之前,咱得先把这个概念给吃透了,不然后面全白搭。

说白了,激活函数就是神经元里的一个开关。你想啊,咱们的大脑有860亿个神经元,它们不是随时都在发疯一样放电的,对吧?只有接收到足够强的刺激,神经元才会"啪"地一下兴奋起来,把信号传给下一个神经元。这个"啪"的过程,就是激活。

在人工神经网络里,每个神经元收到前面传来的数据(加权求和的结果),不能原封不动地往后传,得先经过一个函数处理一下——这个函数决定这神经元到底是"兴奋地传下去",还是"装死不动",亦或是"负向抑制"。

没有激活函数,无论你的神经网络有100层还是10000层,它最终都只能拟合线性关系。而现实世界哪有那么多线性关系啊!图像识别、语音识别、自然语言处理,全是复杂的非线性问题。所以,激活函数就是给神经网络注入"非线性灵魂"的那剂猛药。

搞懂了这个,咱们再看那三个主角,就轻松多了。

三、Sigmoid:老牌网红,但已"过气"?

3.1 这货是谁?

Sigmoid 函数,全名 Logistic 函数,公式长这样:
σ(x) = 1 / (1 + e^(-x))

哎哟我去,看到公式别急着划走!我给您翻译一下:它就是把任意一个实数,不管是 -10000 还是 +10000,都压缩到 0 和 1 之间。画出来像啥?像字母"S",所以也叫 S 型函数。

3.2 当年为啥火?

这玩意儿在 2012 年深度学习爆发那会儿,绝对是yyds!为啥?因为它输出在 0 到 1 之间,这天生就是做二分类问题的神器啊!输出接近 1 就是"是猫",接近 0 就是"不是猫",完美契合概率解释,简直不要太香。

而且它的数学性质好,处处可导,光滑得像德芙巧克力。那时候做反向传播,老师们都推荐用这个,稳!

3.3 后来为啥被嫌弃了?

但是!(重点来了,我要开始吐槽了)这货有个致命绝症,叫"梯度消失"。

您看那个图像,当输入值很大(比如 x=10)或者很小(x=-10)的时候,函数曲线几乎变平了,斜率接近 0。这意味着啥?意味着反向传播的时候,梯度传到这儿就几乎被掐断了!就像打电话串线,声音越来越小,最后啥也听不见了。

我当年用 Sigmoid 跑一个 8 层的 CNN 做图像分类,前面几层死活学不动,loss 卡在那儿不降,我以为是代码 bug,查了三宿没合眼,最后才发现是梯度消失搞的鬼!那感觉,就像你拼命踩油门,结果发现手刹没松,还特么是断的!

而且 Sigmoid 的输出不是零中心的(zero-centered),都是正数,这会导致下一层的输入全是正的,梯度更新的时候 zigzag 现象严重,收敛慢得像蜗牛。

所以现在的共识是:隐藏层别用 Sigmoid 了,真的,听劝! 但输出层做二分类的时候,还是可以用的,毕竟概率解释直观。

四、Tanh:Sigmoid 的"亲兄弟",但脾气更暴

4.1 改进在哪?

Tanh(双曲正切函数),公式是:
tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x))

这货跟 Sigmoid 长得贼像,也是 S 型曲线,但它输出范围是 -1 到 1,而且是以 0 为中心的!

4.2 比 Sigmoid 强在哪?

零中心化这个特性太重要了! 输出有正有负,下一层神经元的输入也是均值为 0 的分布,这样梯度更新的时候不会一直朝着一个方向偏,收敛速度快了不少。我做过实验,同样条件下,Tanh 比 Sigmoid 收敛快大概 30% 左右,这可不是小数目啊!

而且它的导数范围是 (0,1],比 Sigmoid 的 (0,0.25] 要强一些,梯度消失的问题虽然还在,但没那么惨烈。

4.3 但本质问题没解决

然而,梯度消失这个绝症 Tanh 也没治好。只要网络层数一深,该消失还得消失。我去年跑一个 15 层的 LSTM 做时序预测,隐藏层用的 Tanh,前面 5 层还能学,后面 10 层基本就在摸鱼了,参数更新微乎其微。

而且 Tanh 也涉及指数运算,计算量比 ReLU 大得多。在现在这种大模型时代,参数都是百亿千亿级别的,每一次指数运算都是在烧钱啊朋友们!算力就是钱,懂?

所以现在 Tanh 主要在 RNN、LSTM 这些循环神经网络里还能见到,因为它们的序列特性需要这种有界的输出,但在 CNN 和普通的全连接层里,基本也被 ReLU 家族给卷没了。

五、ReLU:现在的"真香"担当,但也不是完美圣人

5.1 简单粗暴就是美

ReLU(Rectified Linear Unit,整流线性单元),这名字听着就硬气,公式更简单到离谱:
f(x) = max(0, x)

翻译成人话:大于 0 的保持不变,小于 0 的直接归 0。 画出来就是一根折线,左边是 0,右边是斜率为 1 的直线。

5.2 为啥它成了主流?

首先,计算速度快到飞起!没有指数运算,没有除法,就是一个简单的比较和取最大值操作。我在 GPU 上跑 ResNet-50 的时候,用 ReLU 比用 Tanh 快了差不多 40%,这省下来的时间都是钱啊!

其次,它在正区间不会梯度消失!导数永远是 1,梯度可以畅通无阻地反向传播。这意味着你可以放心地堆叠很多层,我试过 100 层的 ResNet,用 ReLU 一样训得动,这在 Sigmoid 时代简直不敢想。

还有,它引入了稀疏性。因为负数区域直接输出 0,这意味着一部分神经元实际上是被"杀死"的,不会激活。这种稀疏性被证明对模型的泛化能力有好处,有点像 dropout 的效果,但不用手动调参。

5.3 但 ReLU 也有大坑!

第一个坑叫"神经元死亡"(Dying ReLU)。如果学习率设得太高,或者初始化不好,某个神经元的输入一直是负的,那它输出永远是 0,梯度也永远是 0,这个神经元就彻底死了,再也活不过来了!就像996过度直接猝死的打工人,救不回来了。

我在做一个 NLP 项目的时候就遇到过,训练到一半发现某层 40% 的神经元都在装死,模型精度直接崩了。后来换了 Leaky ReLU(给负区间一个很小的斜率,比如 0.01)才解决。

第二个坑是它不是零中心的,输出全是非负的,这会导致梯度更新的时候还是有点小问题,虽然没 Sigmoid 那么严重。

所以现在有了各种变种:Leaky ReLU、PReLU、ELU、SELU… 2025 年最新的趋势是用 Swish 和 GELU(Gaussian Error Linear Unit),尤其是 GELU,在 Transformer 模型(像 GPT、BERT 这种)里基本成了标配,比 ReLU 平滑,性能更好。但基础入门阶段,ReLU 依然是 must know 的。

六、硬核对比:三张图说清优劣

我给您整了个对比表,一目了然:

特性SigmoidTanhReLU
输出范围(0, 1)(-1, 1)[0, +∞)
是否零中心
梯度消失严重中等正区间无,负区间死亡
计算速度慢(指数)慢(指数)极快
适用场景输出层二分类隐藏层(浅层)隐藏层(深层)

我的实战经验总结:

  1. 别在隐藏层用 Sigmoid 了,真的,那是上古时代的做法。除非你在做极浅层的网络(比如3层以内),或者需要严格的概率输出。
  2. Tanh 在 RNN/LSTM 里还能用,但在 CNN 和 Dense 层里,2025 年的今天已经被 ReLU 卷没了。
  3. ReLU 是默认选择,但记得调学习率,建议从 0.001 开始试,别一上来就 0.01,很容易把神经元搞死。如果发现有大量死亡神经元,马上换成 Leaky ReLU。
  4. 做二分类输出层,Sigmoid 依然是标配;多分类输出层用 Softmax(这个今天没展开讲,下次单独聊)。

七、2025 年的新趋势:激活函数也在进化

说到这,我得提一嘴最新的动态。2025 年的大模型训练里,GELU 和 Swish 正在取代 ReLU成为 Transformer 的标配。GELU 在数学上更平滑,避免了 ReLU 在 0 点的不可导问题,在 GPT-4、Claude 3 这种级别的模型里,都是用的这种激活函数。

还有 Mish 激活函数,去年在一些计算机视觉任务里表现绝绝子,但计算量比 ReLU 大,适合不差算力的场景。

但咱们作为学习者,先把 ReLU、Sigmoid、Tanh 这三个老祖宗吃透,再看那些变种就轻松多了。基础不牢,地动山摇啊朋友们!

八、写在最后:选激活函数就像选对象

说真的,选激活函数跟选对象似的——没有完美的,只有最适合当下场景的。

Sigmoid 就像那个稳重但有点油腻的中年大叔,靠谱但缺乏激情,适合过日子(输出层解释概率);Tanh 像是改进版的大叔,脾气好了点,但本质还是老派;ReLU 就像热血青年,冲劲十足但容易猝死(神经元死亡),需要你会调教他。

我在这仨货上踩过的坑,流的泪,够灌满一个游泳池了。今天全倒给你们,就是希望你们别在走我走过的弯路。说真的,神经网络这玩意儿,理论知识是一方面,动手跑代码,看 tensorboard 里的梯度变化,感受 loss 曲线的抖动,才是真的能内化的过程。

互动时间到了! 您们在用激活函数的时候踩过那些坑?是遇到过梯度消失训不动,还是碰到过 ReLU 神经元大规模死亡?或者您就是坚持用 Sigmoid 的"复古派"?评论区大声说出来! 我在线蹲守,咱们一起聊聊那些炼丹爆炉的崩溃瞬间!

下期预告:我打算讲讲 Batch Normalization 到底在归一化啥,以及它和激活函数的爱恨情仇。想看的扣 1,不想看的扣眼珠子(开玩笑的,哈哈)!

就这样,散会!

P.S. 目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能看懂,还有各种段子风趣幽默,从深度学习基础原理到各领域实战应用都有讲解,我22年的AI积累全在里面了。注意,教程仅限真正想入门AI的朋友,否则看看零散的博文就够了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值