
视频元信息
- 课程:吴恩达深度学习专项课程 · 第二课《改善深层神经网络:超参数调试、正则化以及优化》· 第一周《深度学习的实用层面》· 1.1 训练/开发/测试集
- 时长:约 12 分钟
- 语言:英文讲解(官方中英字幕)
内容摘要(TL;DR)
本视频是第二课的开篇,介绍深度学习实践层面的核心内容。重点讲解训练集、开发集(dev set)、测试集的划分原则:小数据时代用 70/30 或 60/20/20 的比例,大数据时代 dev/test 占比应大幅缩小(如 98/1/1)。同时强调 dev 与 test 集应来自同一分布,而训练集可以采用不同分布以获取更多数据。
课程引入:深度学习的实践层面 [00:00]
- 本课聚焦于让神经网络真正"好用"的实践技巧,而不仅仅是实现网络。
- 本周将涉及的主题:
- 超参数调优(hyperparameter tuning)
- 数据集的划分方式
- 确保优化算法快速运行,使学习算法在合理时间内完成训练
- 第一周具体内容预告:机器学习问题的设置方式、正则化(regularization)、以及确保神经网络实现正确的技巧。
本课是"专业化的深度学习"(Professionalization of Deep Learning)的开始,从"能实现"走向"能做好"。
为什么实践是高度迭代的过程 [00:34]
- 训练神经网络需要做大量决策:
- 网络有多少层?
- 每层有多少隐藏单元?
- 学习率是多少?
- 各层使用什么激活函数?
- 重点:几乎不可能在第一次尝试时就正确猜出所有这些超参数的值。
- 因此应用机器学习是一个高度迭代的过程:
- 产生一个想法(如构建特定层数、特定单元数的网络)
- 编写代码并运行实验
- 得到结果,评估该配置的表现
- 根据结果修正想法、改变选择
- 反复迭代,找到更好的网络
理解:这个"想法→编码→实验→反馈→修正"的循环,正是深度学习工程的核心工作流。迭代速度决定了进展速度。
深度学习应用领域与领域直觉的局限 [01:49]
- 深度学习已在众多领域取得成功:
- 自然语言处理(NLP)
- 计算机视觉
- 语音识别
- 结构化数据应用:广告、网页搜索(含购物网站搜索框)、计算机安全、物流(如司机调度)等
- 易错点:一个领域的直觉往往不能迁移到其他应用领域。
- NLP 研究者转做计算机视觉、语音识别研究者转做广告、安全领域转做物流,都可能遇到直觉失效的问题。
- 最佳选择取决于:数据量、输入特征数量、计算机配置(GPU 还是 CPU 训练)等。
- 结论:即使是非常有经验的深度学习专家,也几乎无法第一次就猜对最佳超参数。
不要盲目套用其他领域的经验。超参数和架构的最佳选择高度依赖于具体任务、数据规模与算力条件。
训练/开发/测试集的基本划分 [03:59]
- 传统做法:把全部数据切成三部分:
- 训练集(training set):用于训练算法
- 开发集/验证集(dev set / hold-out cross validation set):用于在多个模型中挑选表现最好的
- 测试集(test set):用于对最终选定模型做无偏估计
- 工作流:
- 在训练集上不断训练算法
- 用 dev 集比较不同模型,选出最佳
- 训练足够久、确定最终模型后,用测试集评估,得到无偏的性能估计
理解:dev 集是"调参和选型"的依据,测试集是"最终成绩单"。二者角色不同,不能混用。
小数据时代的传统比例 [05:13]
- 早期机器学习常见划分:
- 70% 训练 / 30% 测试(无显式 dev 集)
- 60% 训练 / 20% dev / 20% 测试
- 适用场景:数据量在 100、1000 到 10000 级别时,这些比例是合理的经验法则。
大数据时代的比例变化 [05:50]
- 考点:当数据量达到百万级别时,dev 和 test 集占总数据的比例应大幅缩小。
- 原因:
- dev 集的目的只是评估几个(如 2 个或 10 个)算法选择哪个更好,不需要 20% 的数据。
- test 集的目的只是对单个最终分类器给出置信的性能估计,同样不需要 20%。
- 举例(100 万样本):
- dev 集 10000 条、test 集 10000 条即可
- 比例变为 98% 训练 / 1% dev / 1% 测试
- 更大数据量(超过百万)时甚至可以是:
- 99.5% 训练 / 0.25% dev / 0.25% 测试
- 或 0.4% dev / 0.1% 测试
小结:小数据集可用传统比例;大数据集时 dev/test 可以远小于 20% 甚至 10%。
思考:这里的关键洞察是——dev/test 集需要的是"统计上足够给出可靠判断的样本量",而不是"占总数据的固定百分比"。样本量绝对值比比例更重要。
训练与测试分布不匹配的趋势 [08:11]
- 现代深度学习的一个趋势:越来越多人在训练集与测试集分布不一致的情况下训练。
- 案例:构建一个猫图片识别 App
- 训练集:从互联网爬取的猫图片(高分辨率、专业、构图精美)
- dev/test 集:用户上传的猫图片(模糊、低分辨率、手机随手拍)
- 两个数据分布明显不同
- 经验法则:确保 dev 集和 test 集来自同一分布。
- 因为你会用 dev 集评估大量模型并努力提升其表现,dev 与 test 同分布更合理。
易错点:dev 集和 test 集必须同分布,但训练集可以与它们不同分布。 深度学习算法极度"渴求"数据,因此可以用爬取网页等创造性手段获取更大的训练集,即使代价是训练集分布与 dev/test 不一致。只要遵循"dev 与 test 同分布"这一法则,算法进展通常会更快。
理解:这样做的逻辑是——你真正关心的是模型在 dev/test 分布(即真实应用场景)上的表现。用大量不同分布的廉价数据做训练,是在"数据量"和"分布一致性"之间做的权衡。
可以没有测试集的情况 [10:18]
- 测试集的目的:对最终选定的网络给出无偏的性能估计。
- 如果你不需要这个无偏估计,那么没有测试集也是可以的。
- 只有 dev 集时的做法:
- 在训练集上训练
- 尝试不同模型架构,在 dev 集上评估
- 据此迭代,得到好模型
- 注意:因为你把数据"拟合"到了 dev 集上,dev 集就不再是无偏估计了。但如果你不需要无偏估计,这完全可以接受。
易错点:命名陷阱。 在机器学习界,当只有训练集和 dev 集而没有独立测试集时,很多人会把 dev 集叫做"测试集"。但实际上他们是在把测试集当作 hold-out 验证集使用——这会导致对测试集的过拟合。 当有团队说他们"只有训练集和测试集"时,要谨慎判断:他们是否其实只有训练集和 dev 集?因为他们正在对测试集过拟合。
- 文化上,让团队改口叫"训练集和 dev 集"可能很难,但从术语准确性看,"训练集和开发集"更正确。
- 如果你不需要完全无偏的性能估计,这种实践是可以接受的。
思考:术语的混乱背后是方法论的混乱。理解每个集合的"职责"比记住名字更重要。
总结与展望 [11:42]
- 设置好训练集、dev 集、测试集可以让你:
- 更快地迭代
- 更高效地衡量算法的偏差(bias)和方差(variance)
- 更高效地选择改进算法的方向
- 下一视频将开始讨论偏差与方差的问题。
考点回顾:
- 小数据用 70/30 或 60/20/20;大数据用 98/1/1 甚至更极端。
- dev 集与 test 集必须同分布;训练集可以不同分布。
- 不需要无偏估计时可以没有 test 集,但要注意术语陷阱(dev 被误称为 test)。
- 划分数据集的最终目的是加速迭代、便于诊断偏差与方差。
关键标签 / 关键词
深度学习 #吴恩达 #训练集 #开发集 #测试集 #dev集 #验证集 #超参数调优 #数据划分 #分布不匹配 #偏差与方差 #机器学习实践 #迭代开发 #大数据时代 #DeepLearning #TrainDevTest
生成时间:2026-10-10 21:57:11 生成平台:VideoNote www.xygy.top