Keenan's Blog

Structuring Machine Learning Projects

2018-06-19

这篇文章是 DeepLearning.ai - Structuring Machine Learning Projects 的课程笔记

Orthogonalization正交法

  1. Fit training set well on cost function ( similar to human-level performance)
    1. Bigger network
    2. Adam
  2. Fit dev set well on cost function
    1. Regularization
    2. Bigger train set
  3. Fit test set well on cost function
    1. Bigger dev set
  4. Performs well in real world
    1. Change dev set or cost function

Single number evaluation metric 单一量化评估指标

  • Precision: 对于所有被识别为猫的图,有n%确实是猫
  • Recall: 对于所有是猫的图片,n%被识别出来了
  • F-1 Score: Precision和Recall的一种平均值(调和平均)

Satisficing and Optimizing metric 满足指标和优化指标

  • 满足指标只要满足条件就可以,要更关注优化指标
  • 如果同时关注多项指标,可以将其中的一项设为优化指标,使其表现尽可能地好;将另外的一项或多项设为满足指标,确保其表现满足要求

Train/dev/test distributions & Size of the dev and test sets

  • 开发集和测试集需要来自相同的分布
  • 传统的70/30划分已经不适用,应用更多的数据作为训练集,较少的数据作为测试

Human-level performance

  • Human-level error as a proxy for Bayes error
  • Avoidable bias: gap between human-level error and training error. (The gap between training error and dev error is called variance.)

Improving model performance

  1. 先看训练误差和贝叶斯估计误差值之间的差距,估计可避免误差,试着在训练集优化。
    • 训练更大的模型
    • 训练更长的时间
    • 用更好的优化算法,如Momentum、RMSProp、Adam等
    • 寻找更好的神经网络架构/超参数
  2. 再看开发集误差和训练集误差之间的差距,估计方差有多大,把训练集的结果推广到开发集。
    • 用更多的数据来训练
    • 正则化,如L2,dropout,数据集增强等
    • 寻找更好的神经网络架构/超参数

错误分析 Error Analysis

  • 快速建立机器学习应用并迭代
    • Set up dev/test set and metric
    • Build initial system quickly
    • Use Bias/Variance analysis & Error analysis to prioritize next steps

Mismatched training and dev/test data

Training and testing on different distributions

  1. 将训练集和测试数据混合在一起,按比例得到train/dev/test数据集(不太好,一般用第二种方案)
    • 优点:数据来自同一分布
    • 缺点:dev集中可能某一分布的数据特别多,另一分布的数据很少(设置开发集的目的是找到最适合当前问题的网络,不应该在不能帮助解决问题的分布上花太多时间)
  2. 开发集和测试集包含目的分布的数据,训练集包含其他分布的数据以及少量目的分布的数据

Bias and variances with mismatched data distribution

如果训练集/开发集/测试集来自不同的分布,不能通过比较训练误差、贝叶斯误差和开发集误差之间的差距来选择优化方法

  • Training-dev set: Same distribution as training set, but not used for training. 拿出一小部分训练数据作为训练-开发集,在训练-开发集上使用传播算法

    • 若训练误差是1%,训练-开发误差是9%,开发误差是10%,这是高方差问题,因为网络没能泛化来自同一分布的数据

    • 若训练误差是1%,训练-开发误差是1.5%,开发误差是10%,这是数据不匹配的问题(失配问题),因为学习算法没有直接在训练-开发集或开发集上训练,而两者来自不同分布,但是它在训练-开发集上性能很好,但在开发集上表现不好,某种程度上,算法并未在我们关心的分布上训练的很好

    • 若训练误差是10%,训练-开发误差是11%,开发误差是12%,这是高偏差问题。因为这里贝叶斯误差(human error)是0%,算法的表现比人类差太多

    • 若训练误差是10%,训练-开发误差是11%,开发误差是20%,存在高偏差问题(可避免偏差问题)和失配问题

  • 要关注的四个误差值(测试集的仅供参考):

    • Human Level
    • Training set error
    • Training-Dev set error
    • Dev error
    • ( Test error )
  • 两两之间的数据差可能体现的问题有:

    • 可避免误差
    • 高方差
    • 数据失配
    • 如果开发集和测试集性能差太多,可能存在对开发集数据的过拟合问题

Addressing data mismatch 解决数据失配问题

  • 人工误差分析,理解训练集与开发/训练集之间的差距
  • 当了解到开发集的难度时,收集更多与开发集类似的数据加入训练集
    • 人工数据合成:可能会存在对某个子集的过拟合问题

Learning from multiple tasks

Transfer Learning 转移学习

Transfer from A to B

  • Task A and B have the same input X
  • You have a lot more data for task A than task B
  • Low level features from A could be helpful for learning B

Multi-task learning 多任务学习

多个任务一起开始,一个神经网络同时完成多个任务

  • Training on a set of tasks that could benefit from having shared lower-level features
  • Usually: Amount of data you have for each task is quite similar
  • Can train a big enough neural network to do well on all the tasks

End-to-end learning 端对端深度学习

  • 优点:
    • 让数据发挥主导作用——只要有足够大的神经网络,都能够训练
    • 需要人类动手设计的组件(特征等)变少了
  • 缺点:
    • 需要大量数据
    • 排除了一些具有潜在用途的手工设计的组件
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏