吴恩达深度学习(神经网络)【下1,模型评估】:模型评估(训练集、测试集、交叉验证集);偏差和方差【寻找正则化λ,建立性能基线,学习曲线(在样本量增加时,高方差需要增加训练数据,高偏差增加数据没用)】
2026/7/14 19:15:45 网站建设 项目流程

视频:

70.决定下一步尝试什_哔哩哔哩_bilibili

笔记:

吴恩达机器学习笔记 - Sanzo Blog

本章实验《实践材料:运用机器学习的建议》(对照着jupyter上的英文看,中文翻译版内容更全):

王者归来,全新升级!吴恩达《机器学习2022》 C2-W3 - Heywhale.com

下述所有一、...都有实验!即上述链接

  • 评估神经网络的实验必看(juypter和汉化版的实验都要看!)

一、本周课程目的

1、核心痛点:盲目试错的代价

在实际的机器学习项目中,当模型表现不佳(例如预测误差过大)时,通常有多种改进方向。以正则化线性回归预测房价为例,你可能面临以下选择:

  • 增加训练样本(获取更多数据)。
  • 减少特征数量(防止过拟合)。
  • 增加新特征(引入更多房屋属性)。
  • 增加多项式特征(如​ 等,增加模型复杂度)。
  • 调整正则化参数 λ(增大或减小)。

在这些选项中,有些可能会带来显著的提升,而有些则完全是浪费时间。讲师提到,有些团队可能会花费几个月的时间去收集数据,最后却发现毫无帮助;而经验丰富的团队可能只需几周就能找到正确的优化方向。

2、核心解法:引入“诊断”

为了高效地分配时间和资源,我们需要一套科学的评估方法。本周课程的核心就是教大家如何进行诊断

  • 什么是诊断?诊断是一种你可以运行的测试,旨在深入了解学习算法的哪些部分起作用、哪些不起作用,从而为改进性能提供明确的指导。
  • 诊断的价值:虽然实施诊断本身需要花费时间,但它能帮你避免在无效的方向上浪费数周甚至数月的时间。例如,通过诊断,你可以明确知道“花几周时间去收集更多训练数据”是否真的值得。

二、训练集与测试集【需要再看三、】:模型评估

通过将数据划分为训练集和测试集,我们可以系统地评估模型。但这还不足以让我们自动选择最佳模型(例如:在1次、2次、3次、4次多项式之间做选择)。下三、将引入进一步的改进(验证集),让算法能够自动做出这类决策。

1、为什么需要系统性的评估?

  • 可视化的局限性:对于只有1-2个特征的简单模型(如预测房价),我们可以通过画图直观地看出模型是否过拟合(曲线过于扭曲)。但当特征维度很高(如4个以上的特征)时,画图变得不可能。
  • 解决方案:我们需要一种不依赖可视化的、系统化的方法来评估模型泛化到新数据的能力。

2、划分训练集与测试集

  • 数据划分:将原始数据分为两部分,常见的比例是 70% 训练集(Training Set)和 30% 测试集(Test Set),或者 80/20。
  • 符号约定
    • 训练集样本数记为,测试集样本数记为​ 。
    • 测试集的特征和标签分别记为​ 和​ 。

3、回归问题(线性回归)的评估

1>正则化项的“双重身份”训练时出现,评估时不能出现在误差公式中

  • 在训练时:正则化项是成本函数 J(w,b) 的一部分,它扮演的是“教练/裁判”的角色,用来惩罚过大的权重,引导模型找到更平滑、泛化能力更强的参数。
  • 在评估时:正则化项绝对不能出现在误差公式中。因为误差公式扮演的是“体检报告”的角色,它必须客观反映模型在数据上的真实表现。如果评估时把正则化项加进去,你评估的就不是“模型预测得有多准”,而是“模型的权重有多小”,这在业务上是毫无意义的。

2>评估公式

  • 训练阶段:在训练集上最小化成本函数 J(w,b) (包含平方误差和正则化项)来拟合参数。
    • 在训练模型时,我们的目标是找到最优参数 w 和 b 。为了防止模型过拟合,我们会在原始的平方误差基础上加入正则化项。
  • 测试误差:在测试集上计算平均平方误差。注意,测试误差公式中不包含正则化项
    • 当模型训练完毕,我们在未见过的测试集上评估它的真实表现。此时,我们只关心模型“预测得准不准”,而不再关心模型的参数是否“足够小或简单”。
    • 因此,测试误差的计算公式严格剔除了正则化项。
  • 训练误差:同样在训练集上计算平均平方误差,也不包含正则化项
    • 与测试误差完全一致,只是代入的数据变成了训练集。
  • 诊断意义:如果很低,但​ 很高,说明模型在训练数据上表现完美,但在未见过的数据上表现糟糕,即发生了过拟合,无法泛化。

4、分类问题(逻辑回归)的评估

1>使用逻辑损失函数:计算测试误差和训练误差

2>使用误分类率【更常见】:计算测试误差和训练误差

对于分类问题,除了可以使用逻辑损失函数来计算测试误差和训练误差外,还有一种更常用的评估指标:误分类率

  • 计算方式:对测试集中的每个样本进行预测(当时预测为1,否则预测为0),然后统计预测错误()的样本占总测试样本的比例。
  • 应用:这个误分类率可以直接作为分类模型的​ 和​ 。

三、交叉验证集/开发集/开发集误差:模型选择与训练

1、问题背景:仅用测试集选择模型的缺陷

1>错误流程

  • 在多个候选模型(如 1 到 10 阶多项式)中,分别用训练集拟合参数,然后计算每个模型在测试集上的误差(J_test)。
  • 选择测试集误差最低的模型作为最终模型,并直接报告该误差作为泛化误差的估计。

2>核心缺陷

  • 评估过于乐观:由于测试集被用于选择模型(即选择了参数 d),测试集实际上已经参与了模型的训练过程。
    • 测试集到底在什么时候被用于“选择模型”了?:

  • 有偏估计:最终报告的测试误差(J_test)会低于模型在真正新数据上的实际泛化误差,导致评估结果不可靠。

2、解决方案:引入交叉验证集/开发集/开发集误差

交叉验证集(Cross Validation Set)也被称为验证集(Validation Set)开发集(Dev Set)开发集误差(Dev Error)

解决方案:将数据集划分为三个独立的子集:

  • 训练集(Training Set):用于拟合模型参数(w, b)。
  • 交叉验证集(CrossValidation Set):用于模型选择(如选择多项式阶数 d 或神经网络架构)。
  • 测试集(Test Set):仅用于最终评估选定模型的泛化能力。
  • 划分比例示例:60% 训练集、20% 交叉验证集、20% 测试集。

3、【总结】正确的模型选择流程

1>训练阶段

  • 对每个候选模型(如 d=1 到 d=10 的多项式),使用训练集拟合参数(w, b)。

2>选择阶段

  • 使用交叉验证集计算每个模型的误差(J_cv)。
  • 选择交叉验证误差最低的模型(如 d=4 的多项式)。

3>评估阶段

  • 使用测试集计算最终选定模型的误差(J_test),作为泛化误差的无偏估计。
  • 关键原则:测试集在整个模型选择过程中完全未被使用,确保评估结果的客观性。

4、应用场景与最佳实践

1>多项式回归

  • 通过交叉验证集选择最优的多项式阶数 d,避免过拟合或欠拟合。

2>神经网络架构选择

如下图,选择1.2.3.哪个神经网络架构更好:

  • 对多个不同架构的神经网络(如层数、每层单元数不同),使用交叉验证集选择性能最优的架构。
  • 分类问题中,交叉验证误差通常用误分类率衡量。

3>最佳实践【总结】

  • 决策隔离:所有模型相关的决策(如超参数选择、架构设计)仅基于训练集和交叉验证集。
  • 测试集纯净性:测试集仅在最终模型确定后使用一次,确保其作为泛化能力的“公平裁判”。

四、偏差方差:诊断模型欠拟合还是过拟合

1、为什么需要诊断偏差与方差?

  • 现实情况:在实际开发中,模型第一次训练就表现完美的概率极低。
  • 核心痛点:当模型特征很多时,我们无法像单特征那样通过画图直观判断模型是欠拟合还是过拟合。
  • 解决方案:通过对比模型在训练集(Training Set)交叉验证集(Cross Validation Set)上的表现(即​ 和),可以系统性地诊断问题。

2、核心诊断指标:偏差方差

在机器学习中,我们训练模型是为了找到数据背后的真实规律。

1>偏差(Bias):代表模型的“假设太强”或“能力太弱”

  • 它衡量的是:模型的平均预测值与真实值之间的差距
  • 高偏差(欠拟合):模型太简单了(比如用一条直线去拟合一堆抛物线形状的数据)。不管你怎么换训练数据,它都学不会,误差一直很高。

2>方差(Variance):代表模型的“对训练数据的敏感程度”

  • 它衡量的是:如果换一批训练数据,模型预测结果的波动有多大
  • 高方差(过拟合):模型太复杂了(比如用100阶多项式去拟合)。它把训练集里的“噪声”和“特例”都当成了规律死死记住。只要稍微换一点训练数据,它的预测结果就会发生剧烈变化。

3>高偏差 / 欠拟合;高方差 / 过拟合

  • 高偏差 / 欠拟合(High Bias / Underfitting)
    • 特征:模型连训练集都拟合得很差。
    • 指标很高,且​ 通常也很高(两者接近)。
  • 高方差 / 过拟合(High Variance / Overfitting)
    • 特征:模型对见过的数据表现极好,但对没见过的新数据表现很差。
    • 指标很低,但远大于​ (​ )。
  • 恰到好处(Just Right)
    • 指标​ 较低,且​ 与​ 接近,两者都处于较低水平。

3、多项式阶数d与误差的关系图【区别五、2、中 λ 与误差的关系图

图像对比多项式阶数d与误差的关系图,和下述五、2、中 λ 与误差的关系图,看起来像是镜像关系。因为 d 从小到大对应着从欠拟合到过拟合,而 λ 从小到大则对应着从过拟合到欠拟合。

随着模型复杂度(如多项式阶数 d )的增加,误差曲线呈现以下规律:

  • 曲线:随着 d 的增加,模型越来越复杂,对训练数据的拟合越来越好,因此​ 会持续下降
  • ​ 曲线:呈现U型(先降后升)。当 d 过小(欠拟合)或过大(过拟合)时,都会很高;只有在中间某个适中的复杂度时,​ 达到最低点。
  • 最佳模型选择:我们应该选择使最小的那个模型复杂度。

4、极端情况:同时存在高偏差和高方差

  • 表现​ 很高(连训练集都拟合不好),且​ 还要高得多。
  • 发生场景:在简单的线性回归中较少见,但在复杂的神经网络中有可能发生(例如模型在部分输入空间过拟合,而在另一部分输入空间严重欠拟合)。
  • 应对:大多数情况下模型主要面临其中一种问题,但如果同时存在,则需要综合调整。

下一步预告:既然我们掌握了诊断方法,下一节视频将探讨正则化(Regularization)是如何影响偏差和方差的,这将帮助你更好地理解在什么情况下应该使用正则化。

五、如何使用交叉验证选择正则化参数λλ如何影响偏差和方差?

讲解了正则化参数 λ (lambda)如何影响模型的偏差与方差,并介绍了如何使用交叉验证集来选择最优的 λ 值。

1、正则化参数 λ 对模型的影响

正则化参数 λ 控制着模型在“拟合训练数据”和“保持参数 w 较小”之间的权衡。

  • λ 过大 (High Bias / Underfitting)

    • 现象:算法会极力压缩参数 w,使其趋近于零。模型会变得非常简单(例如,近似为一条水平线f(x) ≈ b)。
    • 表现:模型无法拟合训练数据,导致​ 很高。这属于高偏差问题。
  • λ 过小或为零 (High Variance / Overfitting)

    • 现象:几乎没有正则化效果,模型会过度拟合训练数据,变得非常复杂和扭曲。
    • 表现:模型在训练集上表现极好(​ 很低),但在交叉验证集上表现很差(​ 远高于)。这属于高方差问题。
  • λ 适中 (Just Right)

    • 现象:在偏差和方差之间取得了良好平衡。
    • 表现:模型能很好地拟合数据,​ 和​ 都比较低,且两者差距不大。

2、λ 与误差的关系图【区别四、3、多项式阶数d与误差的关系图

图像对比:λ 与误差的关系图,和上述四、3、中多项式阶数 d 与误差的关系图,看起来像是镜像关系。因为 d 从小到大对应着从欠拟合到过拟合,而 λ 从小到大则对应着从过拟合到欠拟合。

随着 λ 值从零开始逐渐增大,训练误差和交叉验证误差会呈现以下规律:

  • ​ 曲线单调递增

    • 因为 λ 越大,优化算法越关注于缩小参数 w,而不是最小化训练误差,导致在训练集上的表现越来越差。
  • ​ 曲线呈 U 型(先降后升)

    • 当 λ 过小(左侧),模型过拟合,很高。
    • 当 λ 过大(右侧),模型欠拟合,​ 也很高。
    • 只有在中间某个适中的 λ 值,​ 才会达到最低点。

3、如何使用交叉验证选择 λ

选择最优 λ 的流程与选择多项式阶数 d 的流程非常相似:

  1. 尝试一系列 λ 值:例如,从 0 开始,以 2 倍递增(0, 0.01, 0.02, ..., 10),尝试大约 12 个不同的值。
  2. 训练模型:对每一个 λ 值,最小化带正则化的成本函数,得到一组对应的模型参数 (w, b)。
  3. 评估性能:使用交叉验证集计算每个模型的误差​ 。
  4. 选择最优 λ:选择那个使​ 最小的 λ 值。
  5. 最终评估:使用选定的模型和 λ,在测试集上计算,以报告模型的泛化误差。

下一步预告:目前我们知道了如何通过​ 和​ 的相对大小来判断问题,但“高”和“低”的具体标准是什么?下一节视频将介绍如何建立一个性能基线(Baseline),来更准确地判断误差是否真的过高。

六、建立性能基线:如何判断算法存在高偏差还是高方差问题

通过一个具体的语音识别案例,讲解了如何更科学、客观地判断一个机器学习算法究竟是存在高偏差(High Bias)还是高方差(High Variance)问题。

1、案例背景:语音识别中的误差

  • 任务:将带有背景噪音的手机语音(如“今天天气如何”)转换为文本。
  • 初步数据:模型在训练集上的误差为 10.8%,在交叉验证集上的误差为 14.8%。
  • 传统判断的误区:如果仅看绝对数值,10.8% 的训练误差似乎很高,容易让人误以为模型存在高偏差(欠拟合)。

2、核心概念:建立性能基线

  • 为什么需要基线:在现实应用中(尤其是处理音频、图像、文本等非结构化数据时),数据往往存在噪音,模型达到 0% 误差是不现实的。因此,我们需要一个“合理期望达到的误差水平”作为参照物。
  • 如何确定基线
    • 人类水平表现(Human-level performance):例如,在这个语音识别任务中,人类听音转录的误差率是 10.6%(因为部分音频噪音太大,连人也听不清)。
    • 其他基线:旧版算法的表现、竞争对手的算法表现,或基于过往经验的预估值。

3、基于基线后 诊断高偏差和高方差

引入基线后,我们通过比较三个误差(基线误差、训练误差、交叉验证误差)之间的两个差距(Gaps)来诊断问题:

1>诊断高偏差

  • 看差距 1训练误差基线误差之间的差距。
  • 判断标准:如果这个差距很大,说明模型连训练集都拟合不好,远远落后于人类水平,即存在高偏差

2>诊断高方差

  • 看差距 2交叉验证误差训练误差之间的差距。
  • 判断标准:如果这个差距很大,说明模型在训练集上表现尚可,但在未见过的数据上表现大幅下降,即存在高方差

3>案例举例

  • 场景一(高方差)
    • 基线误差 = 10.6%,训练误差 = 10.8%,交叉验证误差 = 14.8%。
    • 差距 1 = 0.2%(模型表现接近人类,没有高偏差)。
    • 差距 2 = 4.0%(模型在验证集上表现大幅下滑)。
    • 结论:该模型主要存在高方差问题。
  • 场景二(高偏差)
    • 基线误差 = 10.6%,训练误差 = 15.0%,交叉验证误差 = 16.0%。
    • 差距 1 = 4.4%(模型表现远落后于人类)。
    • 差距 2 = 1.0%(验证集误差仅略高于训练集)。
    • 结论:该模型主要存在高偏差问题。
  • 极端情况(同时存在高偏差和高方差)
    • 如果差距 1 很大(例如 4.4%),且差距 2 也很大(例如 4.7%),则说明模型同时存在高偏差和高方差。

下一步预告
除了通过上述的误差差距来直观判断模型表现外,还有一种非常有用的工具可以进一步分析算法的学习状态,那就是学习曲线(Learning Curves)。下一节视频将为你详细讲解学习曲线。

七、学习曲线:在样本量增加时,高偏差(增加训练数据没有帮助),高方差(增加训练数据非常有帮助

学习曲线是诊断模型偏差与方差问题的重要工具。它通过绘制模型在训练集和验证集上的误差随训练样本量( m )增加的变化趋势,帮助我们判断模型是处于高偏差(欠拟合)还是高方差(过拟合)状态,从而决定“增加数据量”是否有效。

1、学习曲线的基本形态

学习曲线以训练集大小 (​ )为横轴,误差 ( Error )为纵轴,展示了训练误差 (​ ) 和交叉验证误差 () 随数据量变化的趋势:

  • 交叉验证误差 (​ ):随着训练集增大,模型泛化能力增强,误差通常会下降
  • 训练误差 ():随着训练集增大,拟合所有样本的难度增加,误差通常会上升
    • 原因:当样本很少(如1-2个)时,模型容易完美拟合(误差接近0);当样本很多时,模型很难完美拟合每一个点,导致平均误差上升。

2、高偏差的学习曲线:增加训练数据没有帮助,应优先解决偏差问题(如使用更复杂的模型)

当模型过于简单(如用线性函数拟合复杂曲线)导致欠拟合时:

  • 曲线特征
    • ​ 会上升并趋于平稳(Plateau)。
    • ​ 会下降并趋于平稳。
    • 两条曲线最终会靠得很近,且都维持在一个较高的误差水平
  • 与基线对比:最终平稳的误差水平远高于人类水平(Baseline)。
  • 关键结论增加训练数据没有帮助。无论数据量增加多少,曲线都会保持平稳,无法达到理想的低误差。此时应优先解决偏差问题(如使用更复杂的模型),而不是盲目收集数据。

3、高方差的学习曲线:增加训练数据非常有帮助

当模型过于复杂(如高阶多项式)导致过拟合时:

  • 曲线特征
    • ​ 很低(甚至低于人类水平,因为模型“死记硬背”了数据)。
    • ​ 很高,且远高于​ 。
    • 两者之间存在巨大的差距
  • 关键结论增加训练数据非常有帮助。随着数据量继续增加(向右 extrapolate),​ 有持续下降的趋势,且​ 会上升,两者逐渐收敛。这意味着只要收集更多数据,就能显著提升模型性能。

4、总结

  • 诊断方法:通过绘制不同训练集大小下的误差曲线,观察其形态是趋于平稳(高偏差)还是存在巨大差距(高方差)。
  • 实际应用:虽然绘制完整的学习曲线计算成本较高,但在脑海中建立这种“视觉图像”有助于判断下一步行动:
    • 如果是高偏差→→ 不要浪费时间收集更多数据,应尝试更复杂的模型或更多特征。
    • 如果是高方差→→ 收集更多训练数据是有效的解决方案。

八、【总结,必看】解决高偏差、高方差问题

这部分的核心在于,一旦你通过训练误差 () 和交叉验证误差 () 判断出模型存在高偏差(High Bias)或高方差(High Variance)问题后,应该如何对症下药,选择正确的改进策略。

视频以一个房价预测模型为例,提出了六种常见的改进方法,并清晰地阐述了它们各自适用于解决哪种问题。

1、针对高方差的解决方案

高方差意味着模型过拟合,在训练集上表现很好,但在新数据上表现不佳。解决思路是简化模型提供更多数据

1>获取更多训练样本

  • 原理:更多的数据可以帮助模型学习到更普适的规律,而不是死记硬背少量样本的噪声,从而有效降低过拟合。

2>减少特征数量

  • 原理:过多的特征会赋予模型过高的灵活性,使其能够拟合出非常复杂的函数。移除一些不相关或冗余的特征,可以限制模型的复杂度,降低其过拟合的能力。

3>增大正则化参数 λ

  • 原理:正则化通过惩罚模型参数的复杂度来防止过拟合。增大 λ 意味着对复杂模型的惩罚力度加大,会迫使算法拟合一个更平滑、更简单的函数,从而解决高方差问题。

2、针对高偏差的解决方案

高偏差意味着模型欠拟合,即使在训练集上也无法取得好的表现。解决思路是增强模型的能力,使其能够拟合更复杂的数据。

1>增加更多特征

  • 原理:如果现有特征不足以描述目标变量(例如,仅用房屋面积预测房价,而忽略了卧室数量、楼层等关键信息),模型的上限就会很低。增加有信息量的新特征,可以为模型提供更多学习依据,从而提升其在训练集上的表现。

2>增加多项式特征

  • 原理:如果数据本身是非线性的,而你却用线性模型去拟合,就会导致高偏差。通过增加如等多项式特征,可以让模型具备拟合非线性关系的能力,从而解决欠拟合问题。

3>减小正则化参数 λ

  • 原理:过强的正则化( λ 过大)会过度限制模型的复杂度,导致欠拟合。减小 λ 可以降低对模型复杂度的惩罚,给予模型更大的自由度去拟合训练数据,从而解决高偏差问题。

3、关键要点与提醒

  • 核心思想
    • 解决高方差:简化模型或增加数据。
    • 解决高偏差:增强模型能力。
  • 一个常见的误区:不要试图通过减少训练集大小来解决高偏差问题。虽然这样做可能会让模型在更少的数据上拟合得更好(降低​ ),但这通常会损害模型的泛化能力,导致交叉验证误差 () 变差,最终使模型性能下降。

九、【项目必看】深度学习/神经网络:完美解决高偏差和高方差,改变上述对偏差和方差的思考方式

  • 评估神经网络的实验必看(juypter和汉化版的实验都要看!)
  • 王者归来,全新升级!吴恩达《机器学习2022》 C2-W3 - Heywhale.com

1、传统机器学习(评估多项式回归)vs.神经网络时代(评估神经网络)

  • 传统机器学习(评估多项式回归):过去,工程师们经常谈论“偏差-方差权衡”。如果模型太简单,会导致高偏差(欠拟合);如果模型太复杂,会导致高方差(过拟合)。我们被迫在两者之间寻找一个折中方案,以最小化交叉验证误差。
  • 神经网络时代(评估神经网络):大型神经网络提供了一种打破这种权衡的新方法,让我们可以分别解决偏差和方差问题,而不必在两者之间妥协。

2、如何评估优化神经网络?

1>大型神经网络是“低偏差机器”

  • 核心特性:只要神经网络足够大(拥有更多的隐藏层或每层更多的隐藏单元),它几乎总是能够很好地拟合训练集,从而实现低偏差
  • 解决高方差的方案:在模型已经能够很好地拟合训练集的前提下,如果存在高方差问题(即交叉验证误差远高于训练误差),可以通过收集更多数据来解决。

2>优化神经网络的实用策略

基于上述特性,提供了一个强大的迭代优化流程:

  1. 评估训练集:模型在训练集上表现好吗?(如果不好,说明是高偏差,此时需要扩大神经网络,然后重新评估)。
  2. 评估交叉验证集:如果训练集表现好,那么模型在交叉验证集上表现好吗?(如果不好,说明是高方差,此时需要获取更多数据,然后重新训练)。
  3. 循环迭代:不断重复上述过程,直到模型在交叉验证集上也表现良好为止。

3>该策略的局限性与代价

  • 计算成本:扩大神经网络会消耗更多的计算资源,训练时间变长。这也是为什么深度学习的崛起离不开 GPU 等硬件加速器的支持。
  • 数据瓶颈:获取更多数据并不总是可行的,现实中数据量往往存在上限。

3、【必看,总结】大神经网络+正则化, TensorFlow 中如何实现?

关于正则化与网络规模的重要洞察:

  • 大网络的优势:只要正则化参数( λ )选择得当,使用大型神经网络几乎永远不会损害模型性能,它通常能做到至少和小型网络一样好,甚至更好。
  • 唯一代价:大网络唯一的负面影响是拖慢训练和推理的速度,而不是降低准确率。
  • 正则化实现:在神经网络中,正则化项通常是对所有权重 w 的平方和进行惩罚(不惩罚偏置 b )。在 TensorFlow 中,可以通过添加kernel_regularizer=L2(lambda_value)来轻松实现。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询