吴恩达机器学习策略——模型调试
1. 正交化 (Orthogonalization)
- Fit training set well on cost function ,优化训练集成本函数可以通过使用更复杂NN,使用Adam等优化算法来实现
- Fit dev set well on cost function,优化验证集成本函数可以通过正则化,采用更多训练样本来实现
- Fit test set well on cost function,优化测试集成本函数可以通过使用更多的验证集样本来实现
- Performs well in real world,提升实际应用模型可以通过更换验证集,使用新的cost function来实现
- 每一种“功能”对应不同的调节方法,是正交的;early stopping在模型功能调试中并不推荐使用。因为early stopping在提升验证集性能的同时降低了训练集的性能,不具有独立性、正交性
2. 评估指标和优化指标



3. 数据集划分
一般将数据集分为训练集、验证集、测试集。构建机器学习系统时,我们采用不同的学习方法,在训练集上训练出不同的模型,然后使用验证集对模型的好坏进行评估,确信其中某个模型足够好时再用测试集对其进行测试。
验证集和测试集的数据来源应该相同(来自同一分布)、和机器学习系统将要在实际应用中面对的数据一致,且必须从所有数据中随机抽取。这样,系统才能做到尽可能不偏离目标。
数据量较小(小于 1 万)时,通常将数据集按照以下比例进行划分:
- 无验证集的情况:70% / 30%;
- 有验证集的情况:60% / 20% / 20%;
- 大于100万数据量: 98% / 1% / 1% 或 99% / 1%,0.1%都可以
测试集的大小应该设置得足够提高系统整体性能的可信度,使其能够在过拟合的系统中给出高方差的结果就可以,也许10000左右的数目足够;验证集的大小也要设置得足够用于评估几个不同的模型,足够使其能够检测不同算法、不同模型之间的优劣差异就可以,百万大数据中1%的大小就足够;都要根据实际情况对数据集灵活地进行划分。
实际应用中,可能只有train/dev sets,而没有test sets。这种情况也是允许的,只要算法模型没有对dev sets过拟合。但条件允许的话,最好有test sets,实现无偏估计
4. 误差
贝叶斯最优误差一般认为是理论上可能达到的最优误差,我们一般用人类水平误差(Human-level Error)来代表贝叶斯最优误差(或者简称贝叶斯误差)。对于不同领域的例子,不同人群由于其经验水平不一,错误率也不同。一般来说,我们将表现最好的作为人类水平误差。但是实际应用中,不同人选择人类水平误差的基准是不同的,这会带来一定的影响。
模型在训练集上的误差与人类表现水平的差值被称作可避免偏差(Avoidable Bias)。可避免偏差低便意味着模型在训练集上的表现很好,而训练集与验证集之间错误率的差值越小,意味着模型在验证集与测试集上的表现和训练集同样好。理论上没有误差可以能超过贝叶斯错误率的,除非过拟合。训练错误率和开发错误率之前的差值,说明算法在方差问题上还有多少改善空间。
提高机器学习模型性能主要要解决两个问题:avoidable bias和variance。training error与human-level error之间的差值反映的是avoidable bias,dev error与training error之间的差值反映的是variance。如果可避免偏差大于训练集与验证集之间错误率的差值,之后的工作就应该专注于减小偏差;反之,就应该专注于减小方差。
- 训练集错误率和训练-验证集错误率的差值反映了方差
- 训练-验证集错误率和验证集错误率的差值反映了样本分布不一致的问题,从而说明模型擅长处理的数据和我们关心的数据来自不同的分布,我们称之为数据不匹配(Data Mismatch)问题
5.模型误差与方法
- 对于训练集:深度学习对于训练集中的随机错误是相当健壮的(robust)。只要这些错误样本离随机错误不太远,有时可能做标记的人没有注意或者不小心,按错键了,如果错误足够随机,放着这些错误不管可能也没问题,而不要花太多时间修复它们,只要总数据集足够大,实际错误率可能不会太高
- 对于验证集或者测试集:可以在进行误差分析时,通过统计人为标记错误所占的百分比,看看假阳性(false positives)和假阴性(false negatives)来大致分析这种情况对模型的识别准确率的影响,并比较该比例的大小和其他错误类型的比例,以此判断是否值得去将错误的标记一一进行修正,还是可以忽略
- 验证集和测试集标签数据修正注意事项:
- 在验证集和测试集上同时使用同样的修正手段,以保证验证集和测试集来自相同的分布;
- 同时检查判断正确和判断错误的例子(通常不用这么做);
- 在修正验证集和测试集时,鉴于训练集的分布不必和验证/测试集完全相同,可以不去修正训练集
- 如何解决数据不匹配问题的建议:
- 做错误分析,尝试了解训练集和验证/测试集的具体差异(主要是人工查看训练集和验证集的样本);
- 尝试将训练数据调整得更像验证集(人工合成数据,加噪音,图像增强等),或者收集更多类似于验证/测试集的数据
6. 模型学习方式
- 迁移学习:将已经训练好的模型的一部分知识(网络结构)直接应用到另一个类似模型中去。
-
- 两个任务有同样的输入(比如都是图像或者都是音频);
- 拥有更多数据的任务迁移到数据较少的任务;
- 某一任务的低层次特征(底层神经网络的某些功能)对另一个任务的学习有帮助。
- 多任务学习:使用单个神经网络模型,利用共享表示采用并行训练同时学习多个任务,例如无人驾驶需要同时检测行人、车辆、停车标志,还有交通灯各种其他东西
-
- 多个任务之间具有相关性,并且任务之间可以利用相关性相互促进
- 多任务学习和 Softmax 回归看上去有些类似,容易混淆。它们的区别是,Softmax 回归的输出向量 y 中只有一个元素为 1;而多任务学习的输出向量 y 中可以有多个元素为 1
- 应用要求:
- 训练的一组任务可以共用低层次特征,低层次信息的共享有助于减少计算量,同时共享表示层可以使得几个有共性的任务更好的结合相关性信息,任务特定层则可以单独建模任务特定的信息,实现共享信息和任务特定信息的统一
- 每个任务的数据量接近;
- 能够训练一个足够大的神经网络,以同时做好所有的工作。多任务学习会降低性能的唯一情况(即和为每个任务训练单个神经网络相比性能更低的情况)是神经网络还不够大
- 端到端学习:训练一个巨大的神经网络,输入一段音频,输出直接是听写文本。只需要把训练集拿过来,直接学到了x和y之间的函数映射,绕过了其中很多步骤,直接功能对接,只关心输入和输出。

-
- 优点:所需手工设计的组件更少,简化设计工作流程;数据足够多的情况下直接端对端实现
- 缺点:需要大量数据;派出了可能有用的人工设计组件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!