吴恩达深度学习(神经网络)【下1,模型评估】:模型评估(训练集、测试集、交叉验证集);偏差和方差【寻找正则化λ,建立性能基线,学习曲线(在样本量增加时,高方差需要增加训练数据,高偏差增加数据没用)】
视频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训练阶段对每个候选模型如 d1 到 d10 的多项式使用训练集拟合参数w, b。2选择阶段使用交叉验证集计算每个模型的误差J_cv。选择交叉验证误差最低的模型如 d4 的多项式。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 的流程非常相似尝试一系列 λ 值例如从 0 开始以 2 倍递增0, 0.01, 0.02, ..., 10尝试大约 12 个不同的值。训练模型对每一个 λ 值最小化带正则化的成本函数得到一组对应的模型参数 (w, b)。评估性能使用交叉验证集计算每个模型的误差 。选择最优 λ选择那个使 最小的 λ 值。最终评估使用选定的模型和 λ在测试集上计算以报告模型的泛化误差。下一步预告目前我们知道了如何通过 和 的相对大小来判断问题但“高”和“低”的具体标准是什么下一节视频将介绍如何建立一个性能基线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.com1、传统机器学习评估多项式回归vs.神经网络时代评估神经网络传统机器学习评估多项式回归过去工程师们经常谈论“偏差-方差权衡”。如果模型太简单会导致高偏差欠拟合如果模型太复杂会导致高方差过拟合。我们被迫在两者之间寻找一个折中方案以最小化交叉验证误差。神经网络时代评估神经网络大型神经网络提供了一种打破这种权衡的新方法让我们可以分别解决偏差和方差问题而不必在两者之间妥协。2、如何评估优化神经网络1大型神经网络是“低偏差机器”核心特性只要神经网络足够大拥有更多的隐藏层或每层更多的隐藏单元它几乎总是能够很好地拟合训练集从而实现低偏差。解决高方差的方案在模型已经能够很好地拟合训练集的前提下如果存在高方差问题即交叉验证误差远高于训练误差可以通过收集更多数据来解决。2优化神经网络的实用策略基于上述特性提供了一个强大的迭代优化流程评估训练集模型在训练集上表现好吗如果不好说明是高偏差此时需要扩大神经网络然后重新评估。评估交叉验证集如果训练集表现好那么模型在交叉验证集上表现好吗如果不好说明是高方差此时需要获取更多数据然后重新训练。循环迭代不断重复上述过程直到模型在交叉验证集上也表现良好为止。3该策略的局限性与代价计算成本扩大神经网络会消耗更多的计算资源训练时间变长。这也是为什么深度学习的崛起离不开 GPU 等硬件加速器的支持。数据瓶颈获取更多数据并不总是可行的现实中数据量往往存在上限。3、【必看总结】大神经网络正则化 TensorFlow 中如何实现关于正则化与网络规模的重要洞察大网络的优势只要正则化参数 λ 选择得当使用大型神经网络几乎永远不会损害模型性能它通常能做到至少和小型网络一样好甚至更好。唯一代价大网络唯一的负面影响是拖慢训练和推理的速度而不是降低准确率。正则化实现在神经网络中正则化项通常是对所有权重 w 的平方和进行惩罚不惩罚偏置 b 。在 TensorFlow 中可以通过添加kernel_regularizerL2(lambda_value)来轻松实现。