经过 15 节课的学习,我们对深度学习有了一定了解,本文是对课程的一个补充和总结,吴恩达老师总结了一些开展机器学习的经验,这里跟大家分享下。
更新历史
- 2019.11.20: 完成初稿
写在前面
本文中的大部分内容,其实都在前面的课程中有所体现,这里以要点和问答的形式的形式进行统一的总结,相信能够帮到大家!
正文
机器学习为什么需要策略?
因为改进效果可能的办法非常多,我们需要策略来尽可能加快效果的提升。
为什么要设置开发集与测试集?
这样可以以统一的标准引导团队对机器学习系统做出最重要的改变。这里开发集和测试集应该服从同一分布。
开发集和测试集应该有多大?
开发集的规模应该尽可能的大,至少要能够区分出不同算法间的性能差异。测试集的规模应该大到使你能够对整体系统的性能进行一个高度可信的评估。
评估指标如何设计
主要遵循下面几个原则
- 使用单值评估,比如准确率
- 分为优化指标和满意度指标
- 通过开发集合度量指标加速迭代
何时修改开发集、测试集和指标?
- 实际数据的分布和开发集/测试集数据的分布情况不同
- 算法在开发集过拟合
- 该指标不是项目应当优化的指标
为什么需要做误差分析?
手动检查约 100 个 bad case,可以根据不同的误差来源,快速确定下一阶段工作的重点。与此同时,清洗误标注的开发集和测试样本。
考虑将开发集分为人为检查的 Eyeball 开发集和非人为检查的 Blackbox 开发集。如果在 Eyeball 开发集上的性能比 Blackbox 好很多,说明过拟合 Eyeball,需要更多数据。
如何理解偏差与方差?
训练集的错误率我们认为是算法的偏差 bias,训练集与测试集相差的称为算法的方差 variance。
- 低偏差,高方差 = 过拟合
- 高偏差,低方差 = 欠拟合
- 高偏差,高方差 = 这个算法不行
- 低偏差,低方差 = 恭喜
注:了解最优错误率有助于我们判断偏差大小,一般来说用贝叶斯错误率就可以。
如何处理偏差与方差?
简单处理方法
- 高偏差 = 加大模型规模 or 减少或去除正则化 or 修改模型架构
- 高方差 = 增加训练集数量 or 加入正则化 or 加入提前终止 or 通过特征选择减少输入特征数量和种类 or 减小模型规模
权衡
- 加大模型规模 -> 减少偏差,增加方差
- 加入正则化 -> 增加偏差,减少方差
为什么要与人类表现水平进行对比?
- 易于从人为标签中获取数据
- 基于人类直觉进行误差分析
- 使用人类表现水平来估计最优错误率,并设置可达到的“期望错误率”
连人类都不擅长的任务,比如推荐、广告或预测股票,会有如下问题:
- 获取标签数据很难
- 人类的直觉难以依靠
- 最优错误率和合理的期望错误率难以确定
如何解决数据不匹配问题?
- 尝试理解数据属性在训练集和开发集分布之间的差异
- 尝试找到更多的训练数据
- 人工合成数据
端到端学习有哪些需要注意的地方
- 流水线的组件设计,需要考虑各个组件对应的训练数据是否能够轻松收集
- 一个复杂的任务尽可能分解成多个简单的子任务,让网络更容易进行学习
- 直接学习更为丰富的输出
- 以组件为维度进行误差分析,找到表现最差的组件
- 误差归因要具体到某个组件,方便后续进行改进
- 如果单独组件性能不错,但合并起来不行,需要重新设计流水线