阅读Andrew Ng的《机器学习训练秘籍》笔记

原文链接

1. Setting up development and test sets

  • 训练集:用于运行学习算法
  • 开发集:用于调整参数、特征选择等
  • 测试集:用于测试性能,不据此改变算法或参数
单值评估指标(single-number evaluation metric)
  • 查准率(Precision,又译作精度)
  • 查全率(Recall,又译作召回率)
  • F1 score = 2 / ((1/Precision) + (1/Recall))
优化指标和满意度指标
  • 优化指标:需要尽力去优化性能的指标,如准确率
  • 满意度指标:需要满足门槛值的指标,如运行速度
小结
  • 开发集和测试集的数据,应当与应用要处理的数据有着相同的分布,而不一定和训练集的数据分布一致;
  • 开发集和测试集的分布应当尽可能一致;
  • 选择一个单值评估指标进行优化,当需要考虑多项目标时,不妨整合到一个表达式里,或者设定满意度指标和优化指标;
  • 开发全新的应用时,尽可能在一周内建立开发集、测试集和评估指标;
  • 传统的 70% / 30% 训练集/测试集划分对于大规模数据并不适用,实际上,开发集和测试集的比例会远低于30%;
  • 当开发集和评估指标对于团队已经不能提供一个正确的导向时,尽快修改它们:
  1. 如果算法在开发集上过拟合,则需要获取更多的开发集数据;
  2. 如果开发集与测试集的数据分布和实际数据分布不同,则需要获取新的开发集和测试集;
  3. 如果评估指标无法对最重要的任务目标进行度量,则需要修改评估指标。

2. Basic Error Analysis

误差分析

检查被算法误分类的开发集样本的过程,以便帮助找到造成这些误差的原因。
对误差进行分类,评判每种误差类型的影响,制定对应的改进策略和优先级。

开发集拆分
  • Eyeball开发集:可手动观测误差,大约可观测到100个误差样本;
  • Blackbox开发集 :通过测量错误率来自动评估分类器。

如果发现Eyeball开发集的性能比Blackbox开发集提升得更快,说明已经过拟合到Eyeball开发集了;
需要扩充或寻找新的Eyeball开发集。

3. Bias and Variance

  • 偏差:算法在大型训练集上的错误率;
  • 方差:算法在测试集上的表现低于训练集的程度。
举例
  • 训练错误率低,开发错误率高:过拟合;
  • 训练错误率和开发错误率都很高,但表现接近:欠拟合;
  • 训练错误率和开发错误率都较低:模型表现优。
处理偏差和方差
  • 如果具有较高的可避免偏差:加大模型的规模,更换其他的网络结构等;
  • 如果具有较高的方差:增加训练集的数据量。
减少可避免偏差的技术
  • 加大模型规模
  • 根据误差分析结果修改输入特征
  • 减少或者去除正则化
  • 修改模型架构
  • 添加更多的训练数据(训练数据达到一定量后,没有明显的作用)
减少方差的技术
  • 添加更多的训练数据
  • 加入正则化
  • 加入提前终止
  • 通过特征选择减少输入特征的数量和种类
  • 减小模型规模
  • 根据误差分析结果修改输入特征
  • 修改模型架构

4. Comparing to human-level performance

处理人类擅长的任务时:

  • 易于从人为标签中获取数据;
  • 基于人类直觉进行误差分析;
  • 使用人类表现水平来估计最优错误率,并设置可达到的“期望错误率”。

5. Training and testing on different distributions

在不同的分布上训练和测试

如有多方来源的数据集,非采取平均划分训练/开发/测试的数据集,选择开发集和测试集以反映该任务在将来想要正确处理的数据。

6. End-to-end deep learning

要求学习算法直接从输入得到期望的输出,即学习算法将系统的 “输入端” 连接到 “输出端” 。

  • 优点:当训练集很大时,不会受到人工设计规则的限制,充分挖掘数据内部规律;

当数据足够丰富时,可以学习比对象类别更丰富的输出,如对一幅图像的描述。

  • 缺点:当训练集不大时,人工设计的规则是很好的补充。

一个复杂的任务,将其分解为更简单的子任务,然后显式编写子任务步骤代码,那么你就会给算法一些先验知识,从而帮助它更有效地学习任务。

7. Error analysis by parts

按组件进行误差分析

对于具有流水线结构的学习算法,将误差归因于具体的组件,来确定优化工作的优先级。
对于边界模糊的情况,通过人为控制中间节点的输出,来判断组件性能。

组件误差分析与人类水平对比

将每个组件性能与人类水平进行对比,即控制人类只能获取中间组件输出,并做出下一步的判断。
如果每个单独的组件都获得了与人类相当的水准,但整体流水线的水平有较大差距,则说明流水线的架构出现问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值