视频封面

视频元信息

  • 课程:吴恩达深度学习专项课程(Deep Learning Specialization)—— 神经网络与深度学习
  • 章节:3.6 激活函数(Activation Functions)
  • 时长:约 11 分钟

内容摘要(TL;DR)

本视频系统讲解了神经网络中常用的激活函数:Sigmoid、Tanh、ReLU 与 Leaky ReLU。核心结论是——隐藏层几乎不再使用 Sigmoid,Tanh 通常优于 Sigmoid,而 ReLU 是当前最常用的默认选择;Sigmoid 仅保留给二分类任务的输出层。视频还解释了激活函数导致梯度消失的机制,以及如何通过验证集实验来选择最佳激活函数。


一、激活函数的通用表示 [00:29]

在神经网络中,我们之前学过 Sigmoid 函数:

$$a = \sigma(z) = \frac{1}{1 + e^{-z}}$$

但更一般地,我们可以用不同的函数 $g(z)$ 作为激活函数:

$$a = g(z)$$

  • 要点:$g$ 可以是非线性函数,不一定是 Sigmoid。
  • 理解:激活函数的核心作用是引入非线性,使神经网络能够拟合复杂函数。如果不用激活函数(或使用线性激活函数),多层网络等价于单层线性变换。

考点:激活函数必须是非线性的,否则深层网络退化为线性模型。


二、Tanh 函数(双曲正切函数)[01:02]

公式:

$$\tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}$$

特点:

  • 取值范围为 $(-1, +1)$,均值为 0
  • 实际上是 Sigmoid 函数的平移版本:Sigmoid 经过缩放平移后经过原点 $(0,0)$
  • 推导:$\tanh(z) = 2\sigma(2z) - 1$,这就是两者的数学关系。

为什么 Tanh 几乎总是优于 Sigmoid?

  • 关键原因:Tanh 输出值在 $(-1, +1)$ 之间,均值接近 0,起到数据中心化的效果
  • 类似训练机器学习模型时对数据做零均值归一化,使下一层的学习更容易
  • 如果激活值均值是 0.5(Sigmoid),下一层的输入会有偏移,学习效率降低

重点:吴恩达明确表示——几乎不再使用 Sigmoid 激活函数,Tanh 严格优于 Sigmoid。

唯一例外:输出层

  • 如果 $y \in {0, 1}$(二分类任务),输出层应使用 Sigmoid,因为 $\hat{y}$ 需要落在 $(0,1)$ 区间
  • 典型结构:隐藏层用 Tanh,输出层用 Sigmoid

不同层可使用不同激活函数

  • 用方括号上标表示:$g^{[1]}(z)$ 表示第 1 层的激活函数,$g^{[2]}(z)$ 表示输出层的激活函数
  • 它们可以不同

三、Sigmoid 和 Tanh 的共同缺陷:梯度消失 [04:18]

核心问题:

  • 当 $z$ 非常大或非常小时,Sigmoid 和 Tanh 的导数(斜率)都趋近于 0
  • 这会导致梯度下降变慢(梯度消失问题)

理解:Sigmoid 导数最大值为 0.25,Tanh 导数最大值为 1,但在饱和区导数都趋近 0。反向传播时梯度逐层相乘,容易指数级衰减。

易错点:梯度消失是深层网络训练困难的核心原因之一,Sigmoid 和 Tanh 在饱和区都会加剧这一问题。


四、ReLU 函数(修正线性单元)[04:38]

公式:

$$a = \max(0, z)$$

导数:

  • 当 $z > 0$:导数为 1
  • 当 $z < 0$:导数为 0
  • 当 $z = 0$:导数在数学上未定义

关于 $z = 0$ 处的处理:

  • 理论上不可导,但实际编程中恰好取到 $z = 0$ 的概率极小
  • 实践中可以假装导数为 1 或 0,都能正常工作

ReLU 的优势:

  • 在 $z$ 的大部分范围内,导数远离 0,不会出现梯度消失
  • 使用 ReLU 的神经网络通常比使用 Tanh 或 Sigmoid 学习快得多
  • 虽然 $z < 0$ 时导数为 0,但实际中足够多的隐藏单元会有 $z > 0$,学习仍然高效

考点:ReLU 是当前隐藏层的默认选择,主要因为其缓解梯度消失、计算简单、收敛快。


五、Leaky ReLU(带泄漏的 ReLU)[06:32]

公式:

$$a = \max(0.01z, \ z)$$

特点:

  • 当 $z < 0$ 时,不再是 0,而是一个很小的斜率(如 0.01)
  • 这样在负半轴也有梯度,避免神经元完全"死亡"
  • 通常比 ReLU 效果更好,但实际中使用频率不如 ReLU

关于常数 0.01:

  • 也可以将其设为学习算法的另一个参数(可学习)
  • 有些人尝试这样做,效果因人而异
  • 思考:如果 0.01 变成可学习参数,就变成了 PReLU(Parametric ReLU),在某些任务上表现更好。

六、激活函数选择经验法则 [05:39]

场景 推荐激活函数
二分类输出层 Sigmoid
隐藏层(不确定时) ReLU
隐藏层(备选) Tanh / Leaky ReLU

总结对比:

  1. Sigmoid:几乎不用,除非二分类输出层
  2. Tanh:几乎总是严格优于 Sigmoid,可用于隐藏层
  3. ReLU:最常用的默认选择,不确定时就用它
  4. Leaky ReLU:通常效果更好,但实践中使用较少

重点:如果不确定隐藏层用什么,直接用 ReLU。


七、如何选择激活函数?[09:29]

吴恩达的建议:

  • 深度学习中存在大量选择(隐藏单元数、激活函数、权重初始化方式等)
  • 很难提前知道哪个最好
  • 实用做法:把所有候选激活函数都试一遍,在验证集(holdout validation set / development set) 上评估,选效果最好的

思考:这种"试错+验证集评估"的思路是深度学习工程化的核心方法论,比死记硬背"永远用 ReLU"更可靠,也能适应算法和问题的演进。

易错点:不要盲目套用别人的经验配置,应在自己的验证集上实验验证。


八、为什么需要非线性激活函数?[10:42]

视频结尾提出一个问题:

为什么神经网络需要激活函数?为什么不直接去掉它?

预告:下一视频将解释——如果去掉激活函数(或使用线性激活函数),无论网络有多少层,最终都等价于一个线性变换,神经网络将失去拟合复杂函数的能力。

理解:这是理解激活函数本质意义的关键——非线性是深度网络表达能力的来源。


关键标签 / 关键词

激活函数 Activation Function Sigmoid Tanh ReLU Leaky ReLU 梯度消失 梯度下降 二分类 隐藏层 输出层 验证集 深度学习 吴恩达 神经网络 非线性 数据中心化 PReLU


生成时间:2026-10-10 21:44:05 生成平台:VideoNote www.xygy.top