Machine Learning Yearning 要点笔记

Andrew Ng. 的新书终于出完了。薄薄一百多页的小册子,翻下来其实是一堆实操经验集合。感觉还是有一定借鉴意义的,按照我自己的理解简单地整理如下,也不展开说了。有过实际经验的肯定心里有数。

  1. 新成果的驱动因素:数据,算力
  2. 数据集的划分:val & test
  3. val & test 应当来自相同的分布
  4. how large? 足够区分算法之间的(精度)差异
  5. 建立单一的评估指标,并通过不断迭代以优化和满足之
  6. 初始化 val & test 数据并建立 metrics,但要逐渐完善它
  7. 快速建立系统并迭代而不是一开始精心准备“完美”的东西
  1. 错误分析:查看 val 集中的错误样例,评估提升性能的所需,并行地尝试所有 ideas(节省时间,评估改进的作用)

  2. val 集纠错——随系统改善决定是否纠错

  3. val 集较大时,分成两部分:一部分用来查错(较小的)(eyeball),一部分用来调参(blackbox),二者不能重合(防止对后者过拟合。eyeball
    集应该大到让你了解主要的错误类别(所以必须随机)

  4. 偏差和方差:对训练集的拟合程度和在测试集上的表现

  5. 过拟合和欠拟合

  6. 对比最优错误率(贝叶斯错误率,如以人为基准的系统)/进行偏差&方差分解,找到当前需要侧重解决的问题

  7. 可避免偏差较大,则增加模型的容量;方差大则增加训练数据集规模

  8. 偏差-方差权衡通常是困难的

  9. 减小偏差的方法:增加模型规模,基于错误分析改进输入(特征),减少正则化,修改模型架构

  10. 对训练集的错误分析:如何提升模型的表现/拟合能力(通过改进输入)

  11. 减小方差的方法:增加数据,正则化,早停,特征选择,减少模型规模(慎用),基于错误分析改善输入(同上),修改模型架构(同上)

  12. 方差&偏差诊断:观察 learning curve(局限:新增数据难以用于评估)

  13. learning curve 使用:对比 dev error,train error 和期望 error

  1. 对小样本数据需要极其谨慎
  2. 与人类水平的表现比较的意义:人类标签容易获取数据,可以利用人类的直觉/知识,以人类的性能去评估最优错误率和设置期望
  3. 计算机超过人类的任务的特点:难以获得标签,人类的直觉/知识不管用,难以获得最佳错误率和合理的期望错误率
  4. 如何定义人类的表现:设定专家级别的错误率为期望错误率。理由参考22:获得专家标注的数据;获取专家的直觉和知识;作为最优准确率是合理的。也可根据系统的提升进度逐步设置更高的人类参考基准(使用标注数据的成本不同)
  5. 超越人类的表现:算法不如人类时提升较快,超过人类后提升变慢。算法超过人类后仍可继续发展,如从人类处获得比算法转换质量更高的数据、利用人的知识和直觉加强对处理方法的理解、将人的最佳表现作为研发的期望,以及,“智能”系统的开发是没有止境的,输入变化任务随之变化,人能适应这些变化而机器不能。因此仍需将人作为开发中重要的参考基准
  6. 何时需在不同分布的数据上进行训练和测试:将额外获得的大量数据加入训练集作为辅助训练样本(但不要期待过高的提升)
  7. 是否使用全部数据?根据使用的模型做出决定,以及“外部”数据是否与任务相关、是否与基础训练集“高度”一致
  8. 加权数据:为不同数据设置不同的训练权重
  9. 训练集到验证集的泛化问题:欠拟合(通常可避免),过拟合,数据不匹配(train vs. val/test)。可设定四个数据集用于评估:训练集,训练子集,开发集,验证集。后两者应来自相同分布,用于评估泛化能力。训练子集用于跟踪训练进度
  10. 确定偏差、方差和不匹配错误:根据29中不同子集上的表现做出判断
  11. 人工合成数据:叠加(混音),剪接,加噪等
  12. 优化验证:判断问题出在优化过程还是目标函数上
  1. 强化学习的通常模式(略)
  2. 端到端学习的缺点:小数据上表现差,无法应对过于复杂的系统(应分模块)
  3. 构建管道:按功能,按特性,按效率。从简单到复杂,从底层到高层
  4. 分模块的错误检查
  5. 定位错误所在:逐个环节检查输入输出。设定“完美”的输入/输出以检查某环节上的错误
  6. 每个环节的表现与人类水平比较,逐步提升
  7. 有时每个环节工作良好,但整体表现差:跟管道的设计有关。整合模块/环节的方式也可能有问题。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页