此分类用于记录吴恩达深度学习课程的学习笔记。
课程相关信息链接如下:
- 原课程视频链接:[双语字幕]吴恩达深度学习deeplearning.ai
- github课程资料,含课件与笔记:吴恩达深度学习教学资料
- 课程配套练习(中英)与答案:吴恩达深度学习课后习题与答案
本周为第二课的第一周内容,就像课题名称一样,本周更偏向于深度学习实践中出现的问题和概念,在有了第一课的机器学习和数学基础后,可以说,在理解上对本周的内容不会存在什么难度。
当然,我也会对一些新出现的概念补充一些基础内容来帮助理解,在有之前基础的情况下,按部就班即可对本周内容有较好的掌握。
本篇以及下篇的核心概念只有一个:正则化
1.正则化的出现原因
我们在上一篇里提到了模型的过拟合问题,即在训练集上表现很好,但在验证集或测试集上表现很差。就像一个非常复杂的神经网络,完美记住了训练数据的所有点(包括噪声),反而会对新数据泛化能力极差。
实际上,这是因为训练集的样本不够充分,用于训练的样本不能比较全面地反应出正确的拟合规律,于是在出现新样本的验证集或测试集上表现较差。
依旧以猫狗分类举例:假设我们的训练集的猫全部都是白猫 ,那么我们训练拟合到的模型就会认为所有的猫都是白色的,其他颜色的都不是猫,从而错判测试集里的黑猫,橘猫等。
因此,要解决过拟合问题,从最根本的思路出发得到的措施就是增加数据量 ,让训练集更全面,更具有泛化性。
但很多时候数据并不是那么容易获得。在一些高精尖领域,获取更多数据所需的成本非常大。
这时,前沿的人们就会思考,如何在不增加数据的情况下,尽可能地增加模型泛化性,缓解过拟合问题?
这就是正则化出现的背景。
2.什么是正则化?
依旧先摆一个定义:
正则化(Regularization)是机器学习和统计学中用于防止模型过拟合、提高泛化能力的一种技术。其核心思想是在模型的损失函数中引入一个额外的惩罚项,以限制模型的复杂度,从而避免模型对训练数据"过度学习"而失去对新数据的预测能力。
简单来说,正则化通过在训练过程中"惩罚"过大的模型参数 (如权重),促使模型变得更简单、更平滑,从而提升其在未知数据上的表现。
只看概念还是有些模糊,本周我们展开介绍一下课程中提到的两个常见的正则化:
L2正则化 和 dropout正则化
这里要提前说明的是:还是那句话,优化的本质都是数学 ,因此对于两种正则化都少不了公式的推导,这可能带来一定程度上的理解难度。
如果你只想知道这两种正则化的大致运行原理和优劣 ,我会在之后的介绍最后附上一个"人话版"的总结 来较直观的说明这部分内容。
虽然在实际应用中我们可以通过调包来直接使用正则化,但能够较为清晰地了解基本原理,一定会对调优的过程有所帮助。
3. L2 正则化
3.1数学原理
L2正则化从代价函数的角度出发,设模型的代价函数为:
\[J(w, b) = \frac{1}{m}\sum_{i=1}^m L(\hat{y}^{(i)}, y^{(i)}) \]
其中 \(L\) 是单个样本的损失。
在代价函数的基础上,L2 正则化的核心思想是------在这个损失函数中增加一个与权重有关的惩罚项,使得权重参数不至于太大。于是新的损失函数变为:
\[J_{L2}(w, b) = \frac{1}{m}\sum_{i=1}^m L(\hat{y}^{(i)}, y^{(i)}) + \frac{\lambda}{2m}\sum_{l=1}^L |W^{[l]}|_F^2 \]
其中:
- \(|W^{[l]}|_F^2\) 表示第 \(l\) 层权重矩阵所有元素的平方和(Frobenius 范数的平方);
- \(\lambda\) 是正则化系数(Regularization parameter),用于控制惩罚项的强度;
- \(m\) 是样本数量,用来保持尺度一致。
我们来展开介绍一下惩罚项里涉及的一些新概念和理解中可能出现的问题:
(1)什么叫Frobenius 范数?
不要被这个看起来高大上的名字吓到,来看定义:
Frobenius 范数是一种用于度量矩阵大小的"平方长度",定义如下:
\[|W^{[l]}|F^2 = \sum{i}\sum_{j}(W_{ij}^{[l]})^2 \]
翻译一下,它就是矩阵中所有元素平方后求和的结果 ,也叫是矩阵的"欧几里得长度平方"。
理解上来说,如果一个矩阵 \(W^{[l]}\) 被看作是一个"向量",Frobenius 范数就相当于这个向量离原点的距离。
因此,Frobenius 范数越大,说明整个权重矩阵的数值越大,也就意味着模型越复杂、越"激进",就越可能出现过拟合的情况。
(2)惩罚项的存在是如何缓解过拟合的?
在反向传播时,我们对\(W^{l}\)求偏导再代入权重更新公式,即可得到L2 正则化对权重的更新公式:
\[W^{[l]} := W^{[l]} - \alpha \left( dW^{[l]} + \frac{\lambda}{m}W^{[l]} \right) \]
可以看到,和普通的梯度下降相比,这里多了一个"\((+\frac{\lambda}{m}W^{[l]})\)" 项。
这一项会让权重在每次更新时略微"收缩",就像一股向 0 拉回的力 ,这种收缩效果也常被称为权重衰减(weight decay)。
这样做带来两个直接的效果:
- 防止权重过大。 当模型试图极端地记住训练样本(尤其是噪声点)时,相关权重往往会迅速增大,而这股"向 0 的力"会将其拉回。
- 让模型更平滑。 权重较小时,模型的决策边界变化更平缓,不会为了一些孤立样本而"硬拐弯",因此对新数据的适应性更好。
(3)正则化系数 \(\lambda\) 的设置和作用?
通过上面的损失计算公式和权重更新公式,我们知道:
\(\lambda\) 决定了惩罚项在总损失中的权重占比 ,同时也调节着参数更新 。
我们来看具体的几种情况:
- 当 \(\lambda\) 很小时,惩罚项几乎不起作用,模型仍可能过拟合;
- 当 \(\lambda\) 适中时,惩罚项会迫使模型收缩权重,减少复杂度,提高泛化性;
- 当 \(\lambda\) 太大时,惩罚项主导损失函数,权重被强制压得很小,模型将难以学习到有效特征,从而出现欠拟合。
打个比方:\(\lambda\) 就像是模型的平衡力度旋钮 。
旋钮拧得太小,模型胡乱记忆;
旋钮拧得太大,模型束手束脚。
只有调到合适的位置,模型才能既学习规律,又不会死记数据。
总的来说,L2 正则化让模型变得更"克制",不再依赖个别特征的极端取值,而是倾向于综合多种信息。
3.2 "人话版总结"
L2 正则化可以理解为:给权重系上"橡皮筋",当它们离 0 太远时,橡皮筋就会拉回来,让模型别太激动,别乱记噪声。
| 项目 | 说明 |
|---|---|
| 核心思想 | 在损失函数中加入与权重平方相关的惩罚项,使权重保持较小,防止模型过度复杂。 |
| 优点 | 有效防止过拟合;让模型更平滑、更稳健; 不影响训练方向,只让权重更"克制"。 |
| 缺点 | 惩罚过强(\(\lambda\) 太大)会导致欠拟合; 对高维噪声数据仍有限制。 |
| 形象比喻 | L2 正则化 = 给权重加橡皮筋 拧紧了,模型学不动;放松了,模型乱记。只有适度,效果最佳。 |
下篇会用相同格式介绍dropout正则化和一些其他帮助缓解过拟合的方式。
同时,也可以思考一个问题,应用正则化和直接调节学习率有什么不同呢?
我们完成正则化部分再来解答这个问题。