想象你是一座城市灌溉系统的总工程师。整个管网里奔流着水——这就是神经网络中流动的“信号”。每一段管道末端都装着阀门,阀门的开合方式决定了有多少水能继续流向下游,这就是“激活函数”。在工程史上,最早被广泛使用的两种阀门,一个叫Sigmoid,一个叫Tanh。Sigmoid像一只进不出的单向阀,开度只能从0到100%;Tanh像能双向调节的泵阀,开度从-100%到+100%,还能反向抽水。它们的共同点是:当开度接近极限时,无论怎么拧阀门,流量都不再变化,这就是“梯度饱和”;这种“卡死”在多段管道串联后,会让末端的调节信号传不到上游,这就是“梯度消失”。今天我们就用这套灌溉系统的视角,把这两种阀门的结构、手感、脾气和适用工位彻底讲清楚,帮你为神经网络的每一层选对阀门。

岗位关联

掌握Sigmoid与Tanh的数学特性和梯度行为,是理解现代激活函数演化、诊断网络训练不收敛问题的基本功。

目录
  1. 可视化演示
  2. 函数表达式
  3. 输出值域
  4. 导数特性
  5. 梯度消失
  6. 收敛速度
  7. 现代替代
  8. 应用场景
  9. 常见误区
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

动态演示Sigmoid与Tanh激活的核心机制,通过采集/分析/决策/反馈四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Sigmoid与Tanh激活:Sigm Sigmoid函数的数学公式与 Tanh函数的零均值化优势 核心机制可视化 Sigmoid与Tanh激活整体架构与关键组件

函数表达式

想象你去采购灌溉系统的阀门,供应商递来两本说明书。第一本写的是Sigmoid阀门:给定一个输入信号x,它输出的开度始终在0到1之间。这个“0到1”的压缩动作,在数学上由一个指数函数构造出来。第二本写的是Tanh阀门:输出范围变成-1到1,不但能放水还能反向抽水。两本说明书看起来都是S形曲线,但内里的数学结构并不相同。

Sigmoid的公式非常经典,它把任何实数x映射到0和1之间,像一个把无限长的数轴折叠成一小段绳子的魔术。

Tanh的表达式则自带双曲函数的光环:tanh(x) = (eˣ − e⁻ˣ)/(eˣ + e⁻ˣ)。更妙的是,Tanh可以看成Sigmoid的“改装版”——把自变量拉伸、输出缩放再平移。后面我们会看到这个换算公式,它像说明书里的“兼容改装指南”,告诉你两个阀门其实是同一个家族的兄弟。

回到灌溉系统:Sigmoid像“只进不出”的单向阀门,Tanh像“可进可退”的双向泵阀。说明书第一页的差异,就是输出刻度盘不同,而这个小差异会在整个管网里引发连锁反应。

σ(x)=11+e−x\sigma(x) = \frac{1}{1 + e^{-x}}
  1. 指数衰减项当x趋近正无穷时,e⁻ˣ趋近0,分母趋近1,输出趋近1;当x趋近负无穷时,e⁻ˣ趋近无穷,输出趋近0。
    e−xe^{-x}
  2. 加一构造分母给指数项加1,保证分母始终大于1且永不为0,使输出严格落在0和1的开区间内。
    1+e−x1 + e^{-x}
  3. 取倒数压缩对分母取倒数,把无穷区间映射到(0,1),形成一条平滑的S形曲线,这就是Sigmoid的形状。
    σ(x)=11+e−x\sigma(x) = \frac{1}{1 + e^{-x}}

输出值域

Sigmoid阀门上的刻度只有0到1,Tanh阀门的刻度却是-1到1,而且0刻度在正中央。别小看这个差别——它直接影响后面每段管道里的水位。如果每一级阀门都只允许正水位通过,整个系统就会慢慢积攒一层“底水”,信息总是往正方向偏移。

数学上,Tanh与Sigmoid的关系可以通过一个漂亮的换算公式说清楚。这个公式相当于:把Sigmoid的曲线横向压紧一半,纵向拉伸两倍,再整体下沉一格。

这个换算公式揭示了两件事。第一,Tanh的值域确实是(-1,1),输出有正有负;第二,Tanh的输出关于0对称,均值天然接近0,这就是“零均值化”。在神经网络里,零均值化意味着数据经过Tanh后不会整体偏向正值,下一层的梯度更新方向更均衡。

灌溉系统里,Sigmoid让每段管道都积着一层底水,而Tanh能排水也能倒灌,水位始终围绕0波动。这样的“新鲜水流”让整个管网的信息传递更高效,也让Tanh在隐藏层一度成为比Sigmoid更受欢迎的选择。

tanh⁡(x)=2σ(2x)−1\tanh(x) = 2\sigma(2x) - 1
  1. 内部拉伸2x把Sigmoid的自变量乘以2,让曲线从缓慢爬坡变成更陡峭的转变,压缩了“中间过渡区”的宽度。
    2x2x
  2. 外部放大2σ(2x)把原本0到1的输出拉伸成0到2,变化范围扩大的同时,斜率也被放大了。
    2σ(2x)2\sigma(2x)
  3. 整体减1把0到2的区间整体下移1个单位,得到-1到1,曲线关于原点对称,输出不再恒为正值。
    2σ(2x)−12\sigma(2x) - 1

导数特性

阀门不是只管“开多大”,还得知道“拧一格能改变多少流量”——这就是灵敏度。在神经网络里,灵敏度就是导数,它决定反向传播时“调节力度”能传多远。Sigmoid的灵敏度曲线非常特别:它的导数完全可以用自身输出来表达,公式简洁得让人惊叹。

Sigmoid的导数是“当前开度”与“剩余可开度”的乘积。开度太小,流量变化慢;开度接近全开,可变化空间又没了,灵敏度自然趋近0。

Tanh的导数也有类似的自表达形式:tanh'(x) = 1 − tanh²(x),峰值在x=0处取1,比Sigmoid的0.25大了4倍。这说明在中间活跃区,Tanh的灵敏度更高,同样的输入扰动能带来更大的梯度信号。但别忘了,只要|x|变大,Tanh的导数也会一路衰落到0,同样有饱和问题。

想象你拧灌溉系统的阀门:中间区域拧一格,水流哗哗变化;开到接近全开或全关时,再拧好几圈水流也纹丝不动。这个“拧不动”的区域,就是梯度饱和区。Sigmoid和Tanh这对难兄难弟,在阀门两端都会失灵,而这正是深层网络训练的隐患来源。

σ′(x)=σ(x)(1−σ(x))\sigma'(x) = \sigma(x)\left(1 - \sigma(x)\right)
  1. 函数值乘积导数是当前输出与“离1还差多少”的乘积,两个因子都在0到1之间,所以乘积永远小于等于0.25。
    σ(x)(1−σ(x))\sigma(x)(1 - \sigma(x))
  2. 峰值位置当x=0时σ(0)=0.5,两个因子相乘得0.25,这是Sigmoid灵敏度的最大值。
    σ′(0)=0.5×0.5=0.25\sigma'(0) = 0.5 \times 0.5 = 0.25
  3. 两端趋零当x很大或很小时,σ(x)趋近1或0,乘积趋近0,形成两端的“梯度饱和区”。
    lim⁡x→+∞σ′(x)=0\lim_{x \to +\infty} \sigma'(x) = 0

梯度消失

灌溉系统不是单层管道,而是几十层串在一起的庞大管网。信号要从最上游阀门一路传到下游,调节指令(梯度)却要从下游往上游传。问题是,每经过一层阀门,调节指令都要乘以一个灵敏度系数。如果每层都只放行一小部分,传到上游时指令早就衰减得无影无踪。

反向传播里,损失对第一层权重的梯度,相当于途经每一层灵敏度与连接权重的连乘。这个连乘算式,是理解梯度消失的核心数学表达式。

当输入落到饱和区时,f'趋近0,连乘结果直接抹零,第一层权重几乎收不到任何更新信号,训练陷入停滞。Sigmoid由于导数峰值只有0.25,连乘衰减尤其猛烈;Tanh虽然峰值是1,但饱和区同样存在,在几十层的深度网络中依然难以幸免。

这就好比水流要经过几十道只开一半的闸门,到最上游时只剩一滴水。检修工人从下游往上传递“调大一号阀门”的指令,还没走到一半,嗓门已经哑了——上游阀门永远得不到调整,整个系统的效率当然提不上去。

∂L∂w1=∂L∂an∏i=1n−1(f′(zi)⋅wi+1)\frac{\partial L}{\partial w_1} = \frac{\partial L}{\partial a_n} \prod_{i=1}^{n-1} \left( f'(z_i) \cdot w_{i+1} \right)
  1. 连乘符号Π表示从第1层到第n-1层逐项累乘,层数越多乘的次数越多,衰减越严重。
    ∏i=1n−1\prod_{i=1}^{n-1}
  2. 激活函数导数因子每一层f'(zᵢ)代表该层阀门的灵敏度,Sigmoid最大只有0.25,Tanh最大为1。
    f′(zi)f'(z_i)
  3. 权重因子权重wᵢ₊₁通常是小于1的初始化数值,在连乘中进一步压低梯度。
    wi+1w_{i+1}
  4. 雪崩效应多个小于1的数反复相乘,结果指数级缩小,深层的梯度很快就会变成接近0的“干涸水滴”。
    (f′(zi)⋅wi+1)\left( f'(z_i) \cdot w_{i+1} \right)

收敛速度

如果灌溉系统每段管道里都常年积着半管底水,新水流进来得先填满积水才能继续前进,流动效率自然低下。Sigmoid输出恒为正的特性,就会造成这样的“积水效应”:每一层输出都带一个正的底数,信号在传递过程中不断累积正向偏移。

Tanh则完全不同,它的输出关于0对称,平均水位接近0。数学上,Tanh是一个奇函数,正负输出天然抵消,这使得梯度更新方向更加均衡,不会出现Sigmoid那种锯齿状之字形的优化路径。

这个均值差异直接体现在收敛速度上。Sigmoid的恒定正输出会让后层神经元的输入全部偏向正值,梯度更新在同一方向上累积,训练路径像锯齿一样左右摇摆;Tanh的零均值让梯度正负交替、方向更直,每次更新都更高效。因此深度学习早期有一句经验之谈:隐藏层优先选Tanh,而不是Sigmoid。

没有底水的管道,水流说走就走、说退就退;常年积水的管道,每次换水都要先排半天底水。Tanh的零均值特性,就是那条没有积水的管道,让训练信号畅通无阻。

E[tanh⁡(x)]=0\mathbb{E}[\tanh(x)] = 0
  1. 期望符号E表示对输入分布求平均,衡量函数输出的整体偏移量。
    E[ ⋅ ]\mathbb{E}[\,\cdot\,]
  2. 奇函数性质tanh(−x)=−tanh(x),正负输出完全对称,对任意对称输入分布,输出均值严格为0。
    tanh⁡(−x)=−tanh⁡(x)\tanh(-x) = -\tanh(x)
  3. Sigmoid的对比σ(x)恒大于0且图像不对称,输出均值总是正的,这就是“底水”的来源。
    E[σ(x)]>0\mathbb{E}[\sigma(x)] > 0

现代替代

既然Sigmoid和Tanh这对“老阀门”都有两端卡死的毛病,工程师们干脆设计了一种“几乎不卡死”的新阀门:ReLU。它的思路极其简单——输入为正就原样放行,输入为负就彻底关闭,没有任何平滑过渡。

ReLU的全称是“修正线性单元”,它在正半轴的导数恒为1,彻底告别了饱和区。这个特性让深层的连乘梯度不再指数衰减,成为现代深度网络的主流选择。

ReLU的出现在很大程度上缓解了梯度消失问题,但代价是负区间“完全关死”,如果太多神经元落入负区,就可能出现“神经元死亡”。后来人们又设计了Leaky ReLU、PReLU等变体,本质都是给负区间留一条小缝。尽管ReLU家族大行其道,老阀门Sigmoid和Tanh并没有彻底退场——一些特殊工位上,它们依然有着不可替代的价值。

ReLU像粗犷的电动闸门,要么全开要么全关,简单粗暴效率高;Sigmoid和Tanh像需要精心维护的精密阀门,虽然慢,但在某些需要精细调节的场景依然不可替代。选阀门不能只看谁新,要看工位是否匹配。

f(x)=max⁡(0,x),f′(x)={1,x>00,x≤0f(x) = \max(0, x), \quad f'(x) = \begin{cases} 1, & x > 0 \\ 0, & x \le 0 \end{cases}
  1. max取最大值正数部分原样通过,负数部分全部截断为0,输出范围变成[0, +∞)。
    max⁡(0,x)\max(0, x)
  2. 正半轴导数恒为1只要输入大于0,灵敏度就是满格1,不会像Sigmoid那样衰减,梯度连乘不再被“打折”。
    f′(x)=1f'(x) = 1
  3. 负半轴导数为0输入小于等于0时完全关闭,大量神经元输出0,产生稀疏激活,计算效率更高。
    f′(x)=0f'(x) = 0

应用场景

老阀门虽然退出主流舞台,但在一些特殊工位依然无可替代,最典型的当属“最终出水口”。想象灌溉系统最后一道阀门前,你要决定某块田地到底浇还是不浇,输出一个“浇灌概率”——Sigmoid的0到1输出正好派上用场。

在深度学习里,二分类问题的输出层通常使用Sigmoid,因为它能把神经网络的原始打分"logits"映射成概率。这个概率解释和交叉熵损失配合默契,是训练分类模型的标准配置。

Tanh也有自己的保留地:循环神经网络(RNN)的隐藏层、LSTM内部的候选记忆生成,以及自编码器等生成模型的中间层,都常用Tanh来提供有正有负的特征表示。全连接层在小规模网络或数值敏感场景下,Tanh的零均值特性依然值得信赖,经常与ReLU搭配互补。

现代水利工程大量使用电动闸门,但某些需要精细调节的旧站点仍保留手动阀。选型不是“谁最先进”,而是“谁在当前位置最合适”——输出概率找Sigmoid,零均值特征找Tanh,深层特征提取找ReLU,各司其职才能让整个系统高效运转。

p(y=1∣x)=σ(z)=11+e−zp(y=1 \mid x) = \sigma(z) = \frac{1}{1 + e^{-z}}
  1. z表示logits网络最后一层输出的原始分数,可以取任意实数,相当于阀门前的水压读数。
    zz
  2. σ(z)映射到概率把任意实数压缩到(0,1),接近1表示正类概率大,接近0表示负类概率大。
    11+e−z\frac{1}{1 + e^{-z}}
  3. 条件概率符号p(y=1|x)表示给定输入x时输出类别为1的概率,这正是分类器需要的数学表达。
    p(y=1∣x)p(y=1 \mid x)

常见误区

很多新手买回Tanh阀门,直接替换掉原来的Sigmoid,结果发现效果不升反降,于是抱怨“新阀门还不如老阀门”。其实问题不在阀门,而在换错了工位。这两个阀门在原点附近的手感确实很像,都是S形、都有平滑过渡,但这只是小范围内的巧合。

数学上,在|x|小于1的区间里,两个函数都可以用一条直线近似,而直线的斜率揭示了它们的灵敏度差异。

但一旦x超出这个小范围,两个函数的走向立刻分道扬镳:Sigmoid饱和在0和1,Tanh饱和在-1和1。真正的高手选阀门时会先看工位:输出层要概率就选Sigmoid,隐藏层要零均值就选Tanh,深层网络就选ReLU系列。同时还得注意权重初始化,尽量让输入落在非饱和区,别一上来就把阀门推到卡死的位置。

两个阀门在开度10%时手感很像,但一个最大只能开到100%,另一个能反向开到100%。拿到图纸先看工位再选阀门,才不会在实战中闹出“换阀如换刀”的笑话。

σ(x)≈0.5+x4,tanh⁡(x)≈x(∣x∣<1)\sigma(x) \approx 0.5 + \frac{x}{4}, \quad \tanh(x) \approx x \quad (|x| < 1)
  1. Sigmoid小范围近似在原点附近,Sigmoid近似为斜率0.25的直线,外加0.5的恒定偏移。
    σ(x)≈0.5+x4\sigma(x) \approx 0.5 + \frac{x}{4}
  2. Tanh小范围近似Tanh在原点附近近似为斜率1的直线,没有恒定偏移。
    tanh⁡(x)≈x\tanh(x) \approx x
  3. 斜率对比4倍同样大小的输入扰动,Tanh的输出变化是Sigmoid的4倍(1 vs 0.25),灵敏度差异从这里就能看出来。
    1=4×0.251 = 4 \times 0.25

AI 应用场景

垃圾邮件分类的输出层

阶段:输出层设计、二分类任务

解决的问题:传统规则式过滤器用关键词打分判断邮件是否垃圾,但分数没有概率意义,阈值难调。Sigmoid把神经网络的原始打分压缩到(0,1),可以直接解释为“是垃圾邮件的概率”,配合交叉熵损失自动学习最优决策边界。

具体案例:某邮件安全团队将BERT提取的文本特征接一个全连接层,输出层用σ(z)得到垃圾概率,在公开数据集SpamAssassin上将F1从0.87提升到0.93,同时可通过调节概率阈值灵活控制误杀率与漏网率。

LSTM语言模型的隐层激活

阶段:隐藏层激活、序列建模

解决的问题:RNN处理文本时,需要把历史信息压缩成一个向量传给下一步。Sigmoid恒正输出会让记忆持续正向累积,数值越滚越大;Tanh的零均值特性让隐藏状态在正负之间保持平衡,梯度更新更稳定,缓解长期依赖下的梯度消失。

具体案例:经典Seq2Seq机器翻译模型和LSTM单元内部,都用tanh生成候选记忆:输入门和遗忘门用Sigmoid决定“记多少、忘多少”,候选记忆用Tanh决定“写入什么内容”。这个搭配在语音识别、情感分析等序列任务中被广泛验证。

自编码器的特征压缩

阶段:特征变换、中间表示学习

解决的问题:无监督学习中要把高维数据压缩到低维,同时希望特征有正有负、保留方向信息。Tanh输出落在[-1,1],与归一化后的图像像素区间天然对齐,零均值特性让编码器的中间表示更加对称、判别性更强。

具体案例:图像异常检测系统中,自编码器中间层采用Tanh将1024维像素压缩为64维特征,重建误差能更灵敏地反映异常;相比Sigmoid中间层,训练收敛步数减少约30%,异常样本的AUC提升2.4个百分点。

Python 演示

python49 行
import numpy as np def sigmoid(x):    return 1.0 / (1.0 + np.exp(-x)) def sigmoid_grad(x):    s = sigmoid(x)    return s * (1.0 - s) def tanh_grad(x):    t = np.tanh(x)    return 1.0 - t * t def train(activation, grad_fn, steps=300, lr=0.1, seed=42):    rng = np.random.default_rng(seed)    X = rng.normal(0, 1.0, (32, 4))    Y = (X[:, 0] + X[:, 1] > 0).astype(float).reshape(-1, 1)    W1 = rng.normal(0, 1.0, (4, 8))    b1 = np.zeros(8)    W2 = rng.normal(0, 1.0, (8, 1))    b2 = np.zeros(1)    losses = []    for _ in range(steps):        h = activation(X @ W1 + b1)        out = h @ W2 + b2        loss = np.mean((out - Y) ** 2)        losses.append(loss)        d_out = 2.0 * (out - Y) / len(X)        d_h = d_out @ W2.T        dh = d_h * grad_fn(h)        W1 -= lr * (X.T @ dh)        b1 -= lr * dh.sum(axis=0)        W2 -= lr * (h.T @ d_out)        b2 -= lr * d_out.sum(axis=0)    return losses def main():    loss_sigmoid = train(sigmoid, sigmoid_grad)    loss_tanh = train(np.tanh, tanh_grad)    print("sigmoid first 5 losses:")    print(" ".join("%.4f" % v for v in loss_sigmoid[:5]))    print("sigmoid final loss: %.4f" % loss_sigmoid[-1])    print("tanh first 5 losses:")    print(" ".join("%.4f" % v for v in loss_tanh[:5]))    print("tanh final loss: %.4f" % loss_tanh[-1])    print("tanh converges faster:", loss_tanh[-1] < loss_sigmoid[-1]) if __name__ == "__main__":    main()
目的:在完全相同的网络结构和初始化下,对比Sigmoid与Tanh作为隐藏层激活函数时的损失下降速度,直观验证零均值特性带来的收敛优势。
  1. h = activation(X @ W1 + b1)前向传播:数据经过权重和偏置后,交给激活函数“阀门”决定放行多少信号。
  2. dh = d_h * grad_fn(h)反向传播中与激活函数导数相乘,饱和区导数接近0时,这个“调节力矩”会骤减。
  3. losses.append(loss)每步记录损失值,用于最后对比两种激活函数的收敛曲线。
  4. rng = np.random.default_rng(seed)固定随机种子,确保两个实验在相同数据与权重初始化下公平对比。
  5. W1 -= lr * (X.T @ dh)梯度下降更新第一层权重,这是训练能够推进的核心操作。

常见误区

误区很多初学者看到Sigmoid输出0到1,觉得它“看起来像概率”,于是把每个隐藏层都换成Sigmoid,结果训练又慢又容易卡死,还百思不得其解。

正解Sigmoid只有放在输出层并配合交叉熵损失时才具有概率解释。放在隐藏层时,它的输出恒为正值,会让下一层神经元的输入全部偏向正方向,导致梯度更新方向受限,收敛变慢;更糟的是它两端饱和、导数最大只有0.25,深层网络里梯度消失会被急剧放大。隐藏层应该优先用Tanh或ReLU家族。

为何常见:教材里第一个介绍的就是Sigmoid,加上“0到1”的视觉直觉太像概率,初学者很容易把它的适用场景错误泛化到所有层。

误区既然Tanh零均值、导数峰值更大,那我干脆把所有Sigmoid都替换成Tanh,效果肯定更好。换完之后发现无论输出层还是隐藏层,表现都不如预期。

正解二分类输出层要输出概率,Sigmoid仍是不可替代的标准选择,Tanh的输出包含负数,根本无法解释为概率。而深层网络中Tanh同样会进入梯度饱和区,收敛依然困难,这时ReLU往往更合适。选型的核心是“工位匹配”,不是“谁绝对值更优”。

为何常见:对比结论容易被过度泛化,人们看到Tanh在隐藏层优于Sigmoid,就误以为它是全局最优解,忽略了具体任务对输出范围的要求。

误区训练不收敛时,第一反应就是激活函数不行,把Sigmoid换成ReLU后问题依旧,于是怀疑是框架或数据出错,其实根本没找到病根。

正解梯度消失是“多层连乘”共同作用的结果,激活函数导数只是其中一个因子。权重初始化(如Xavier初始化就是针对Tanh设计的)、批归一化(BatchNorm)、残差连接都会显著影响梯度的传递。换激活函数是重要手段,但不是唯一解,系统性排查才能根治训练停滞问题。

为何常见:梯度消失的经典教材案例都拿Sigmoid说事,让学习者误以为激活函数是唯一元凶,忽略了网络架构中其他同样关键的因素。

误区两个函数画出来都是S形,曲线差不多,直接把代码里的sigmoid换成tanh,应该只是换个函数名的事,但训练结果却完全不是那么回事。

正解虽然tanh(x)=2σ(2x)−1,但两者的输出范围、导数峰值、零均值特性都不同。直接互换会改变每一层输出的数据分布,而原来的权重初始化策略是匹配特定激活函数的,不经调整的互换通常会让训练更差。正确做法是换激活函数后同时调整初始化方式与学习率。

为何常见:只盯着函数曲线形状的“视觉相似”,忽略了数值范围和梯度行为这些真正影响训练的数学本质。

面试题

Q1. Sigmoid函数的输出范围是什么?

单选题 · easy

  • A.(-1, 1)
  • B.(0, 1)← 正确答案
  • C.(0, +∞)
  • D.(-∞, +∞)

答案:B。Sigmoid把任意实数压缩到0和1之间,x趋近负无穷时输出趋近0,x趋近正无穷时趋近1,且永远取不到端点,因此是开区间(0,1)。Tanh才是(-1,1),C和D分别对应ReLU和线性函数。

Q2. Tanh的导数最大值出现在哪里?

单选题 · easy

  • A.x = 0处← 正确答案
  • B.x = 1处
  • C.x = -1处
  • D.x = 无穷处

答案:A。tanh'(x)=1−tanh²(x),当tanh(x)=0时导数最大,而tanh(x)=0唯一对应x=0,此时导数为1。在x=±1处tanh约为±0.76,导数为1−0.58≈0.42,远小于峰值。

Q3. Sigmoid导数的最大值是多少?

单选题 · easy

  • A.1.0
  • B.0.5
  • C.0.25← 正确答案
  • D.0.0

答案:C。σ'(x)=σ(x)(1−σ(x)),两个因子都在0到1之间,和为1,因此乘积在σ=0.5时最大,0.5×0.5=0.25。这就是为什么Sigmoid在深层网络中梯度衰减格外严重。

Q4. tanh(x)=2σ(2x)−1这个公式说明了什么?

单选题 · mid

  • A.Tanh是Sigmoid缩放平移← 正确答案
  • B.Tanh是Sigmoid反函数
  • C.两者输出完全相等
  • D.Tanh值域为0到1

答案:A。Tanh可以通过把Sigmoid的自变量拉伸2倍、输出放大2倍再整体减1得到,本质是缩放加平移。它说明两个函数同源,也解释了为何Tanh值域是(-1,1)而Sigmoid是(0,1)。

Q5. 关于梯度饱和区,下列说法正确的有哪些?

多选题 · mid

  • A.饱和区导数接近0← 正确答案
  • B.饱和区会导致梯度消失← 正确答案
  • C.ReLU正区间不饱和← 正确答案
  • D.饱和区输出恒为1

答案:ABC。饱和区指输入绝对值很大时,S形函数输出接近上下限、导数趋近0的区域,A对。导数趋近0会让反向传播的梯度连乘结果消失,B对。ReLU在正半轴导数恒为1,不存在饱和,C对。D错误,饱和区只是“趋近”极限值而非恒等于1,负方向的饱和值实际上是0或-1。

Q6. 为什么Tanh通常比Sigmoid收敛更快?

单选题 · mid

  • A.输出零均值化← 正确答案
  • B.输出范围更大
  • C.计算更加简单
  • D.一定能避免过拟合

答案:A。Tanh输出关于0对称,梯度更新时正负方向都有信号,避免了Sigmoid恒正输出导致的锯齿状之字形更新路径。计算复杂度二者相近,输出范围大不是收敛快的原因,收敛速度与过拟合没有直接关系。

Q7. 关于梯度消失的连乘效应,下列说法正确的有哪些?

多选题 · hard

  • A.层数越多梯度越小← 正确答案
  • B.Sigmoid导数峰值0.25← 正确答案
  • C.Tanh导数峰值为0.25
  • D.ReLU正区间缓解消失← 正确答案

答案:ABD。反向传播的梯度是一系列小于1的因子连乘,层数越多乘积越小,A对。Sigmoid导数峰值只有0.25,连乘衰减尤其猛烈,B对。Tanh导数峰值是1而非0.25,C错。ReLU正半轴导数为1,连乘不再被打折,因而能缓解梯度消失,D对。

Q8. 二分类问题的输出层通常选择哪个激活函数?

单选题 · easy

  • A.Sigmoid← 正确答案
  • B.Tanh
  • C.ReLU
  • D.Leaky ReLU

答案:A。Sigmoid输出落在(0,1),可以解释为正类概率,配合交叉熵损失是二分类的标准方案。Tanh输出包含负值,不能直接作为概率;ReLU和Leaky ReLU的输出无上界,用于概率输出时既不符合数值范围,也没有概率解释。

Q9. Sigmoid作为隐藏层激活时训练缓慢,最直接的原因是?

单选题 · mid

  • A.输出恒正致之字形← 正确答案
  • B.函数图像过于平滑
  • C.参数量比其他层大
  • D.梯度数值始终为负

答案:A。Sigmoid输出恒为正值,使同一层神经元梯度符号趋同,权重更新路径呈现锯齿状摇摆,这就是“之字形”问题。图像平滑本身不是问题,参数量与激活函数无关,梯度也不始终为负。

Q10. 关于激活函数选型,正确的做法有哪些?

多选题 · hard

  • A.输出概率用Sigmoid← 正确答案
  • B.隐层优先考虑ReLU← 正确答案
  • C.任何情况都用Tanh
  • D.RNN隐层常用Tanh← 正确答案

答案:ABD。输出层要概率解释用Sigmoid,A对。隐藏层现代首选ReLU系列以缓解梯度消失,B对。RNN和LSTM内部候选记忆常用Tanh,利用零均值特性保持状态稳定,D对。C是典型的一刀切错误,任何场景都用同一个函数必然在部分工位上翻车。