目录
老饼讲解:一步一步上手深度学习

【辨析】说说sigmoid和tanh函数

作者 : 老饼 发表日期 : 2025-10-13 02:09:28 更新日期 : 2026-05-20 12:24:24
老饼讲解-简单易懂,干货满满,爽过嗦螺!


好了,今天我们专门来唠唠MLP中的sigmoid函数和tanh函数,加深对它们的认识,就会知道它们的区别,与及它们在MLP中分别充当着什么角色了。

一、先看看sigmoid函数

好了,我们先来看看sigmoid函数吧,它是最早应用于MLP中的激活函数。

1.1.sigmoid的基本信息

sigmoid函数的图像如下:

sigmoid函数图像

sigmoid函数的公式如下:

sigmoid的导数如下:

1.2.sigmoid作为激活函数的优点

我们都知道,刚开始大家都是用sigmoid函数作为激活函数的。

只要研究事物的关系研究得多,就知道大千世界许多事物的变化都符合这函数。例如,人口问题,人口刚开始会慢慢增长,然后到达一定阶段,就是疯狂暴增,而暴增之后呢,又受资源上限的影响,慢慢趋向人口上限。所以用sigmoid函数作为神经网络的激活函数,它是比较有合理的背景意义的。

再来看它的数学性质,看它的优点:

1. sigmoid的输出范围在0-1之间,可以有效的控制神经元的输出,避免单个神经元对下层影响过大。
2. sigmoid具有局部非线性,这是它可以拟合任意关系的重要原因。
3. sigmoid具有连续可导性质,使得它拟合出来的曲线也是连续可导的。
4. sigmoid的的导数可以由它自身简单表示,不会给MLP的梯度计算带来负担。

它很好呀!简直就是天赐我完美函数!

二、tanh函数

好了,我们知道,MLP刚提出时隐层一般用sigmoid作为激活函数,但现在一般都改为tanh函数了。上面说得sigmoid这么完美,怎么不跟它好好过日子,又去找个tanh函数回来惹事生非呢?

下面我们不妨来看看tanh函数吧!

2.1. tanh函数的基本信息

tanh函数的图像如下:

tanh函数图像

tanh函数的公式如下:

tanh函数的导数如下:

好了,仔细看一下就会发现,tanh仅仅是将sigmoid的[0,1]范围拉到[-1,1]范围,此外并无其它~

那为什么要将sigmoid改为tanh呢?这就不得不说tanh相比sigmoid作为激活函数的优势了。

意义上的优势:人们发现,sigmoid这家伙呀,它输出永远是正数,总是那么乐观,喂什么给它吃,它都说好吃。事实上,东西总是有好有坏的,不能给你喂点垃圾,你也说好吃吧。所以,作为隐变量,sigmoid永远输出正数是有所欠妥的,而实际中,一个变量它更应该是有正有负,因此,tanh作为隐变量的激活函数更加适合。

数学上的优势:下文我们会说到神经元死亡的概念,由于sigmoid和tanh的非线性区间在0附近,因此wx+b最好也在0附近。而tanh的输出在[-1,1]之间,它有正有负,与wx+b运算后更加容易倾向于0附近,而sigmoid永远为正,相比tanh更容易令神经元死亡。特别在多层MLP中,前层的神经元死亡会导致下层死亡的概率更大,多层传播后,就更容易令神经元死亡了。

三、sigmoid与tanh的激活与失活

3.1. 什么是神经元死亡

我们知道sigmoid与tanh都用来作为神经元的激活函数,它们都具有局部非线性的特点。

激活函数-激活与死亡

这里以tanh为例,因为sigmoid是类似的。如图所示,tanh函数大概在[-2,2]内,y值对x的变化较为敏感,这段变化敏感的区间就称为tanh的激活区间。而在区间外,y对x几乎不作反应,可以认为y是固定值-1或1,这时就称为神经元失活或者死亡。

3.2. 神经元死亡的危害

神经元死亡是比较悲剧的一件事,不仅是训练后、还是训练中,都很悲剧。

1. 训练后-神经元死亡

我们知道,MLP靠的就是非线性区间、也就是激活区间来拟合目标曲线,如果训练完模型后,神经元不在激活区间,此时它的取值近似于一个固定常数,可以认为它对拟合是无贡献、无效的。因此,为了使每个神经元都能尽量的发挥作用,需要尽量使神经元激活前的值(即Wx+b)在激活区间内,只有处于激活区间,它才能算是一个有用的神经元。

2. 训练中-神经元死亡

训练中发生大量神经元死亡,也是非常悲剧的,因为神经元死亡时,代表神经元处于非激活的平缓区,此时它的梯度非常小,这会导致模型很容易发生梯度消失,梯度消失是什么?这个我们以后会说,反正它就会令模型参数的梯度很小,因此训练极度缓慢。

总的来说,神经元死亡是一件不好的事,以后我们会遇到神经元死亡而导致的问题,在这里暂时知道这样一回事就行了,知道什么是神经元死亡就行了。

总结

好了,最后我们总结一下,这节我们主要讲了:

1.sigmoid函数与tanh函数都是S型激活函数,它们的特性是:

     (1) 连续可导

     (2) 有固定的输出范围

     (2) 具有局部非线性,它的激活区间在-2,2之间

     (3) 导数可以由自身表示

2. tanh仅仅是sigmoid的平移与拉伸

3. 隐层使用S型激活函数时,一般用tanh,而不用sigmoid。

    这里说的只是隐层哦,输出层仍然可以根据实际要求使用sigmoid函数作为激活函数。

4. 尽量让激活前的值处于激活区间,不然神经元失活无效了。



图标 评论
添加评论