5

Structuring Machine Learning Projects

 3 years ago
source link: https://www.guofei.site/2019/05/12/structuring_ml_projects.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Structuring Machine Learning Projects

2019年05月12日

Author: Guofei

文章归类: 2-3-神经网络与TF ,文章编号: 453


版权声明:本文作者是郭飞。转载随意,但需要标明原文链接,并通知本人
原文链接:https://www.guofei.site/2019/05/12/structuring_ml_projects.html

Edit

吴恩达的课程笔记

Why ML Strategy

Ideas

  • Collect more data
  • Collect more diverse training set
  • Train algorithm longer with gradient descent
  • Try Adam instead of gradient descent
  • Try bigger network
  • Try smaller network
  • Try dropout
  • Add L2 regularization
  • Network architecture
    • Activation functions
    • num of hidden units

每一项都很耗时,如果你不知道怎样选择,就可能浪费六个月时间在错误的方向上。

Orthogonalization

举例来说,汽车操纵有2个维度:方向和速度。
如果汽车的控制系统是这样的:按钮1=0.8angel+1.2speed,按钮2=-0.2angel+2speed。这样的汽车人类几乎没法去调整和控制。

Chain of assumptions in ML

  • Fit training set well
    • bigger network
  • Fit dev set well
    • Regularization
    • Biger train set
  • Fit test set well
    • Bigger dev set
  • Perform well in real world
    • change dev/test set or cost function

所以不太喜欢 early stopping,因为会同时影响1,2 (想想那个奇怪的汽车按钮)

Single number evaluation metric

你选择模型时,同时看 precision 和 recall ,这两个往往需要 trade-off , 这是奇怪的汽车按钮,可以用 F1 Score 来代替。

又例如,你选择选择图片识别模型时,来自不同国家的图片,其误差不一样。你可以用一个平均误差来衡量。

Satisficing and Optimizing metric

例如,选择模型时,有2个维度:Accuracy,RunningTime,有两种方法处理这个

  • cost=accuracy-0.05RunningTime (缺点是看起来太过主观)
  • max(accuracy), subject to RunningTime<100ms

进一步,如果你有N个 metric 可以衡量,你可以用:

  • 1 optimizing metric
  • N-1 satisfying metric

Train/dev/test

dev/test 要来自 same distribution
真实案例:贷款违约预测项目,dev在中等收入,test在低收入群体上。浪费了3个月。

传统小数据下,Train/dev/test 划分可以是 70/30, 60/20/20
海量数据下,

  • 可以是98/1/1, 只要test set数量足够你评估模型就行了.
  • 可以不要 test,只做train/dev

change dev/test sets and metrics
举例来说,你要建立一个算法,来识别并为用户推荐猫咪照片。
你按照正确率来评估一个图像识别算法,但是如果算法把一张色情图片错误地识别为猫咪,这个后果就很严重了。
你可以在计算正确率时,给这种错误增加一个大权重:
error=1∑iw(i)∑iw(i)I(y^(i)≠y(i))error=1∑iw(i)∑iw(i)I(y^(i)≠y(i))

超越人类

算法在超越人类后,往往进步速度变慢,有两个原因

  • bayes optimal error(任何算法、人类所能达到的最佳表现),很可能本身与人类表现就很接近
  • 有一些改进工具,在算法超越人类后就不能用了
    • 雇人打标签
    • 分析哪些案例人类做对了,算法做错了。得到一些insight
    • better analysis of bias/variance (下面讨论的内容)

Avoidable bias

在 bias/variance 的 trade-off 过程中,我们经常与人类表现比照,然后决定改进哪一项。
这么做本质上是假设人类表现约等于 Bayes error. bias 远不如人类,差别叫做 avoidable bias.

what is human-level performance

因为我们用 human-level performance 时,实际上在用 bayes error,因此,我们可以把 human-level performance 定义为 “一群专家讨论后得到的最佳结果”

当然,你发文章或者建立系统时,可以把 human-level performance 定义为“一个典型中等水平人的表现”

(学习这一部分之前,我们默认把 bayes error 当成0,仔细想想,这是不对劲的。)

当你的算法超越人类最好表现后,你就没办法知道 bayes error 了,上面提过超越人类后,进步速度变慢。

error analysis

列出 dev set 中,识别错误的案例,一一列出原因,然后统计原因的比例。这样就可以确定优先解决哪些问题。
例如,识别猫咪的算法中,发现分错类的大多是狗,就可以特别地去训练模型去识别狗。如果分错类的极少比例是大猫(狮子老虎等),就不需要浪费太多时间去处理这个。

原始数据标注错误

  • DL algorithms are quite robust to random errors in the training set. 所以不用管就行了
  • 但如果错误是 systematic errors ,就需要处理了,例如数据倾向于把某类狗标注成猫,这会造成算法偏差。

Training and testing on different distributions

你要做图像识别,从网页上获取了海量质量较好的数据,从你的app中获得一定量的质量较差数据。你的训练目标是app上获取的数据,要在这个数据上表现良好。

  • 做法1:放到一起,shuffle后作为 train/dev/test. 缺点:dev 集合大多来自网页数据。
  • 做法2:让 dev/test set 数据全部来自app的数据。剩余的app数据,和web获得的数据一起,放到train set。

Bias and Variance with mismatched data distributions

一般使用做法2.

新问题是,你不知道 dev error与training error的差别来自算法,还是来自 distribution.
解决:把training set 随机分割为两份:training set/training-dev error. 如果 training set 和 training-dev set 上的 error 差别很大,就是模型泛化性有问题。否则就是 data mismatch problem.

  • human error
  • training error
  • training-dev error
  • dev error
  • test error

上面5个数字的差值分别表示:

  • avoidable error
  • variance error
  • data mismatch error
  • degree of overfitting to dev set

Addressing data mismatch

  • 手动分析train error 与 dev/test set
  • make training data more similar. 例如,你的算法是识别车内语音,dev数据有很多街道杂音,可以在 train data 上加入相同的杂音。

Transfer learning

识别猫咪的算法,有助于识别 x射线 图片
把最后一层换掉,然后训练即可。

两个过程叫做 pre-training, fine-tuning

  • 最后一层的参数随机初始化
  • 最后一层后面可以新加入多层

Multi-task learning

与 multi-class learning 很像,不同的是,

  • label可以是multiple labels
  • label可以是undefined,这种情况下,计算 cost 时,按照0来算

Why

  • having shared lower-level features
  • data for each task is similar
  • can train a big neural network to do well on all the tasks

end-to-end deep learning

不分几步建立多个模型,而是直接从X到Y

  • Pros
    • Let the data speak (pipline 模型中,可能会有人的偏见)
    • 不用太多人工设计
  • cons
    • need large amount of data
    • 有些人工设计还是有用的,可是被排除出去了。

您的支持将鼓励我继续创作!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK