视频封面

视频元信息

  • 所属课程:吴恩达深度学习专项课程 - 改善深层神经网络:超参数调试、正则化以及优化(第二课 第一周)
  • 本讲主题:3.11 随机初始化(Random Initialization)
  • 课程阶段:第二课第一周收尾视频,讲完初始化后进入测验与编程作业

内容摘要(TL;DR)

本讲解决神经网络参数初始化问题:如果把权重 W 全部初始化为 0,同一隐藏层的所有神经元会完全对称,永远计算相同的函数,网络退化为单一神经元,梯度下降再多轮也无法打破对称。解决方案是随机初始化 W(np.random.randn 乘以一个很小的常数如 0.01),而偏置 b 初始化为 0 是安全的。乘小常数的原因是避免激活值过大导致 tanh/sigmoid 饱和、梯度消失、学习变慢。


一、问题引入:权重初始化为 0 的陷阱 [00:26]

以一个 2×2 的权重矩阵 W1 为例:

  • 假设 W1 初始化为全 0 矩阵 [[0,0],[0,0]]
  • b1 也初始化为 [0,0]
  • W2 同样初始化为全 0

关键结论:

  • 偏置项 b 初始化为 0 是可以接受的
  • 但权重 W 初始化为全 0 会带来严重问题

易错点:很多人以为"初始化全 0 最干净、最安全",实际上这是神经网络初始化中最典型的错误之一。b 可以全 0,W 绝对不行。

理解:这里要区分两类参数。b 是加性偏置,不参与输入特征的乘法组合;而 W 决定了每个神经元"看"输入的方式,是神经元之间产生差异的根本来源。


二、对称性问题(Symmetry Problem)的机理 [00:54]

2.1 前向传播中的对称

对于任意输入样本 x:

  • 第一个隐藏单元计算 a1[1] = g(W1[1]·x + b1[1])
  • 第二个隐藏单元计算 a1[2] = g(W1[2]·x + b1[2])

由于 W1 的两行完全相同(都是 0),b1 也相同,所以:

a1[1] = a1[2]

即两个隐藏单元在计算完全相同的函数,它们是完全"对称"的。

2.2 反向传播中的对称

计算反向传播时,由于两个隐藏单元的输出相同、对输出的影响路径也相同:

dZ1[1] = dZ1[2]

梯度也完全一样。

2.3 权重更新后对称性依然保持

权重更新公式:

W1 := W1 - α · dW

由于 dW 的每一行取值相同(因为 dZ 相同、输入相同),更新后:

W1 的第一行仍然等于第二行

2.4 归纳法证明

推导:可以用数学归纳法证明——

  1. 初始时(第 0 轮),两个隐藏单元计算相同函数(基例成立)
  2. 假设第 k 轮时两个隐藏单元仍对称
  3. 则第 k+1 轮反向传播得到的梯度相同,更新后 W1 两行仍相同
  4. 因此第 k+1 轮两个隐藏单元依然对称

结论:无论训练多少轮,两个隐藏单元永远计算完全相同的函数。

考点:对称性无法被打破。这意味着多隐藏单元完全失去意义——网络表达能力等价于只有 1 个隐藏单元,无论你设多少隐藏单元,都只是在做重复劳动。

2.5 推广到更大网络

对于有 3 个特征、大量隐藏单元的网络,同样的论证成立:

  • 如果所有权重初始化为 0,所有隐藏单元都对称
  • 无论运行梯度下降多久,它们都持续计算相同函数
  • 网络无法学习到多样化的特征表示

思考:这解释了为什么"深度"网络的价值依赖于"每个神经元学到不同特征"。如果神经元都相同,深度的优势就荡然无存。


三、解决方案:随机初始化 [03:49]

3.1 具体做法

# W1 随机初始化
W1 = np.random.randn(2, 2) * 0.01

# b1 初始化为 0
b1 = np.zeros((2, 1))

# W2 随机初始化
W2 = np.random.randn(1, 2) * 0.01

# b2 初始化为 0
b2 = np.zeros((1, 1))

要点:

  • np.random.randn 生成高斯(标准正态)分布的随机数
  • 乘以一个很小的常数(如 0.01),得到"很小的随机值"
  • b 可以初始化为 0,因为 b 不存在对称性问题

3.2 为什么 b 可以是 0?

只要 W 是随机初始化的,各隐藏单元就会开始计算不同的东西,对称性被打破,此后 b 即使是 0 也不影响。

理解:对称性的根源在于"同一层内不同神经元的参数完全相同"。W 随机化后,每个神经元的 W 不同,即使 b 都为 0,输出也不同,对称性被打破。


四、为什么乘 0.01?——小常数的作用 [04:50]

4.1 核心原因:避免激活函数饱和

回忆前向传播:

z1 = W1·x + b1 a1 = g(z1)

如果 W 的值很大:

  • z 的值会很大(或很小)
  • 对于 tanh 或 sigmoid 激活函数,大 |z| 落在函数的平坦区域(饱和区)
  • 这些区域的斜率(梯度)非常小

易错点/考点:梯度很小 → 梯度下降更新极慢 → 学习速度非常慢。这就是大权重初始化的直接危害。

4.2 饱和现象详解

| 激活函数 | 大 |z| 时的行为 | |---------|--------------| | tanh | 输出趋近 +1 或 -1,导数趋近 0 | | sigmoid | 输出趋近 1 或 0,导数趋近 0 |

梯度趋近 0 意味着参数几乎不更新,网络"学不动"。

4.3 特殊情况说明

  • 如果网络中没有 tanh/sigmoid(例如全用 ReLU),这个问题影响较小
  • 但如果做二分类,输出层是 sigmoid,就不希望初始参数太大
  • 因此乘以 0.01(或其他小常数)是合理选择

理解:ReLU 在正区间导数恒为 1,不会饱和,所以对初始化尺度不那么敏感。但 sigmoid/tanh 在深层网络中极易饱和,初始化尺度就至关重要。


五、常数选择与深度网络 [06:53]

5.1 浅层网络

  • 只有一个隐藏层的相对浅层网络
  • 设置常数为 0.01 通常效果不错

5.2 深层网络

  • 训练非常深的网络时
  • 可能想选择不同于 0.01 的常数
  • 具体如何选择将在下周材料中讨论

通用原则:无论选什么,通常都是一个相对较小的数。

考点提示:本讲只是给出"小随机数"的通用原则,更精细的初始化策略(如 Xavier 初始化、He 初始化)将在后续课程展开。这也是为什么 0.01 被称为"合理的起点"而非"最优解"。


六、本周内容总结与本讲定位 [07:32]

本讲是第二课第一周的收尾,回顾本周已掌握的能力:

  1. 搭建神经网络(含隐藏层)
  2. 初始化参数(本讲重点:随机初始化)
  3. 使用前向传播做预测
  4. 计算导数
  5. 使用反向传播实现梯度下降

掌握这些后,即可完成本周的测验(quiz)和编程作业(programming exercises)。

思考:随机初始化虽然是一个"小技巧",但它是神经网络能正常训练的前提条件之一。没有它,再好的网络结构、再多的数据都无法让深度网络发挥作用。


【拓展】相关背景与延伸

拓展 1:对称性破缺(Symmetry Breaking)的通用思想

"对称性破缺"不仅出现在初始化中,也是深度学习的核心概念之一:

  • 如果模型存在某种对称性(如神经元排列可互换),训练可能无法区分它们
  • 随机初始化是主动引入随机性来打破这种对称
  • 类似思想也出现在集成学习(不同随机种子训练多个模型)中

拓展 2:后续初始化方法预告

本讲只讲了"小随机数"原则,实际工程中更常用:

  • Xavier/Glorot 初始化:适合 tanh/sigmoid,方差与输入输出维度相关
  • He 初始化:适合 ReLU,方差为 2/n
  • Batch Normalization:从另一角度缓解初始化敏感性问题

理解:这些方法的核心都是让每层输出的方差保持稳定,避免逐层放大或缩小。0.01 是"手动挡",Xavier/He 是"自动挡"。

拓展 3:常见踩坑清单

易错点汇总:

  1. 把 W 初始化为全 0(最严重错误)
  2. 把 W 初始化得太大(导致饱和、学习慢)
  3. 忘记给 W 乘小常数
  4. 误以为 b 也必须随机初始化(b 用 0 即可)
  5. 在深层网络中盲目沿用 0.01 而不做调优

拓展 4:为什么随机初始化能"碰巧"打破对称?

分析:np.random.randn 生成的值几乎不可能两两相同(连续分布下概率为 0),因此每个神经元的初始 W 都不同,前向输出不同,反向梯度不同,更新后依然不同。对称性从第一次更新起就被永久打破。


关键标签 / 关键词

随机初始化 #对称性问题 #SymmetryBreaking #权重初始化 #np.random.randn #梯度消失 #激活函数饱和 #tanh #sigmoid #偏置初始化 #吴恩达深度学习 #改善深层神经网络 #参数初始化 #深度学习基础


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