第3次课结构化机器学习 - week1 机器学习策略(1)

1. 为什么是ML策略

需求

建了一个模型,但是离目标还差点,需要改进该模型,有如下一些思路:

  1. 收集更多的数据
  2. 收集一些反例
  3. 用梯度下降训练更长的时间
  4. 用Adam优化算法
  5. 尝试更大的网络
  6. 尝试小点的网络
  7. 尝试dropout
  8. 添加 L2 正则项
  9. 网络结构方面的优化
    1. 激活函数
    2. 隐藏层节点

但是尝试一个idea可能要花费几个月的时间,因此选择就成了一个问题。

定义

分析机器学习问题的方法,通过这些方法可以朝着最有希望的方向走

2. 正交化

两个例子

  1. 对于电视机来说,有很多按钮来控制画面,比如说旋转、拉伸、平移等,如果电视只有混合的按钮,旋转一个这样的按钮,会同时进行不同比例的旋转、拉伸、平移操作,那么就很难把只是偏移的画面调整到一个合适的位置
  2. 对于车来说,油门、刹车和方向盘,如果只有混合的装置,操作它会同时改变车速和方向,那么很难控制车的行为
    • 所以需要把动作剥离开来,车速和方向单独控制,就可以很容易控制车的行为,称之为正交化

假设链

假设 如果不好采取的方法
训练集的成本函数( human performance) 更大的网络,Adam优化算法…
验证集的成本函数 正则化,增大训练集…
测试集的成本函数 可能过拟合,因此更大的验证集
在真实环境中的表现 意味着验证集分布设置不正确,要么成本函数测量的指标不对,因此改变验证集或成本函数
  • early stoping,早期停止会影响对训练集的训练、同时改善验证集的表现,类似于一个混合按钮,同时改变多个表现

3. 单一数字评估指标

只用一个评价指标来衡量模型的好坏。

Presicion & Recall

  • Presicion:判断是猫的图片中真的是猫的比例
  • Recall:实际是猫的图片中被检测出来的比例

这两个指标需要权衡折中(trade-off),因为这两个指标是相对的,两个极端:把所有图片都判定为猫,那么Recall为100%,但是Presicion很低;只选择可能性最大那张图片是猫,那么Presicion就很可能是100%,但是Recall就很低。

这就导致了有的模型Presicion好Recall不好,有的模型Presicion不好Recall好,有两个指标的时候就不好比较哪个模型比较好。所以单个指标有利于量化模型的好坏,快速挑选好的模型。

F1 score

综合考虑Presicion和Recall的指标,是Presicion和Recall的调和平均数(harmonic mean)
- 计算公式

F1=21P+1R

  • 课后笔记里Recall的公式错误

4. 满足和优化指标

已知2个评价指标准确度和运行速度,如何综合得到一个指标?

  1. 线性加权组合:cost = accuracy-0.5*running_time
  2. 把指标分为2类:满足指标(satisfing metric),只需要满足一定的条件就可以,例如运行速度小于100ms;优化指标(optimistizing metric),需要优化的指标,越大越好,例如准确度,即挑选一个作为优化指标,其他的作为满足指标,也就满足了3中的只有一个指标来评价模型的原则。按照这类方法得到的指标如下:
    maximize subject to accuracyrunningTime100ms

举个例子

语音设备唤醒,比如说你好百度。

对于这种情况,我们更加关注准确度,也就是在要唤醒的时候能够很大程度地唤醒设备。相对来说错误唤醒就不那么重要了。所以我们的指标如下:

maximize subject toaccuracyfalse positive1 per day

5. 训练、开发、测试集的划分

训练、开发、测试集的概念

  • 开发集(development set)有时也成为保留交叉验证集(hold out cross validation set,验证集)。

有很多想法,用训练集训练不同的模型,再用开发集来评估不同的思路,然后选择一个不断迭代去改善开发集的性能,直到最后得到一个令人满意的成本,最后再用测试集去评估。

确定了开发集和评价指标,就相当于确立了一个目标。训练不同的模型去逼近这个目标。

训练集用来训练模型,开发集用来选择模型种类结构和调试模型参数,测试集用来评估模型。

  • 开发集和测试集划分的原则:分布要一致

举个例子

有不同国家的猫的图片,例如美国、英国、其他欧洲国家、南美、印度、中国、其他亚洲国家、澳大利亚,选择前4个或者随机选4个作为开发集,剩下4个作为测试集。

  • 当然上面的做法不好,缺点就是开发集和测试集的分布不一致,很容易导致调好的模型的测试集上表现不好。因此通常的做法是把8个国家的猫图片混在一起,随机选择作为开发集和测试集。

6. 开发集和测试集的大小

  • 传统机器学习中,样本数据少,比如100条或者1000条或者10000条,有这样的经验划分
train set test set
70% 30%
train set development set test set
60% 20% 20%
  • 数据集变大了,如果有一百万条样本数据,那么如下划分
train set development set test set
98% 1% 1%

深度学习算法需要很多的数据才能训练完成,而对于测试集来说,只需要能够得到足够置信度的评价指标就可以了,所占比例可以小于30%。对于开发集来说,需要足够大,来评估不同模型。

7. 什么时候该改变开发集/测试集和指标

对于猫图片的分类问题,算法A的误差为3%,算法B的误差为5%,但是算法A误分的图片中有很多色情图片(porn),而算法B中没有。从开发集和评价指标的角度来说选择算法A,但是从客户应用的角度来说选择算法B,这时候就需要改变指标。

Error=1iw(i)i=1mdevw(i)I(y(i)predy(i))

w(i)={110if x(i) is nonpronif x(i) is porn

  • 如果模型算法的验证集测试集的评价指标都不错,但是应用的时候不好,就要考虑更换评价指标和验证集、测试集

比如说猫图片分类问题,如果我们用的图片数据都是高质量的图片,而用户用的是低质量模糊奇怪的图片,效果就不好,这种情况就需要更换验证集和测试集。

8. 为什么是人的表现

和人比较的两个原因:

  1. 机器学习领域的快速发展有了近似或者超过人的效果
  2. 机器学习在很多领域都可以替代人的作用,所以不可避免的要和人做比较

举个例子

在算法模型数据的驱动下,效果越来越好,最终会超过人的表现,但是同时也有一个上限,叫做贝叶斯最优误差(Bayes optimal error,Bayes error,best possible error),即理论上可能达到的最优误差。

比如说在语音识别领域,有些音频就是这么嘈杂,以至于根本就不可能知道说的是什么。

性能超过人的表现以后性能提升少的原因:

  1. 有些人的表现十分接近贝叶斯最优误差,比如说十分擅长辨认图像,听声音等
  2. 性能比人的表现差的时候,有很多工具可以提升,但是比人的表现好了以后,很多工具就不怎么有效了

如果性能比人的表现要差,提升的工具有:

  1. 请专家标注数据,从而有更多的数据训练模型
  2. 从人工误差分析中,也就是把做错的例子给专家看,找出分错的原因,为什么人能做对,算法出错
  3. 分析偏差和方差(bias/variance),偏差和方差在前面的视频中有提到,分别指训练集的性能和开发集的性能

    • 如果你的算法性能比人的表现要好,以上3种工具就很难见效了。

9. 可避免偏差

对于猫图片分类问题,有如下两个模型:

A情况 B情况
Human Performance 1% 7.5%
Training error 8% 8%
Dev error 10% 10%
  1. 对于A来说,训练集的误差和人的表现相比测试集和开发集的表现来说差很多,因此偏差(bias)很大,即训练集的误差很大,所以更关注于减少偏差的策略,比如训练一个更大的网络
  2. 如果猫的图片模糊辨识不清,就会出现B的情况,测试集和开发集的表现相比训练集和人的表现来说差很多,因此方差(variance)很大,即测试集的误差很大,所以更关注于减少方差的策略,比如正则化,更多的训练数据等

在猫图片分类的问题中,可以假设人的表现就是贝叶斯最优误差。

可避免偏差(avoidable bias)的定义

贝叶斯最优误差和训练集误差的差值称为可避免偏差。

10. 理解人的表现

人类水平表现(human-level performance)的定义

举个例子

通过医学图片判断骨折
假设如下:

误差
普通人 3%
普通医生 1%
有经验的医生 0.7%
专家团队 0.5%

这个例子中,0.5%就可以认为是贝叶斯最优估计,而误差一般达到1%就有应用的价值了。所以人类水平表现是一个目标,看你的应用需求。

11. 超过人的表现

举个例子

A情况 B情况
Team of humans 0.5% 0.5%
One human 1% 1%
Training error 0.6% 0.3%
Dev error 0.8% 0.4%
  • 对于A情况,选择专家团队的误差作为人类水平表现,则可避免偏差为0.1%,而方差为0.25,因此选择优化方差,比如正则化或者增加训练数据
  • 对于B 情况,超过了专家团队的误差,因此不能估计贝叶斯最优误差是多少,所以不好判断是优化偏差还是优化方差

机器学习好过人类的领域

  1. 网络广告,估计某个用户点击广告的可能性
  2. 产品推荐,推荐电影或数据之类的任务
  3. 物流预测,预测从A到B开车的时间
  4. 借贷证明,预测某人会不会偿还贷款

深度学习,比如说自然语言处理、计算机视觉等自然感知方面,因为人类比较擅长这些,所以超越人类比较困难,但是也有好过人类表现的
1. 语音识别
2. 图像识别
3. 医学方面,比如ECG、癌症判断、放射科等

12. 改善模型的性能

目标

  1. 训练集和人类水平表现接近或者超过,即可避免偏差低
  2. 开发集和和测试集的误差低,方差要低

正交化方法

  1. 对于偏差,可以训练更大的网络或者训练更久
  2. 对于方差,可以使用正则化或者手机更多的训练数据

如何减少可避免偏差和方差

  1. 改善可避免偏差,即人类水平和训练集误差
    1. 训练更大的网络
    2. 训练更久,使用优化方法,比如动量momuntom,RMProp,Adam
    3. 改变神经网络结构或者超参数
  2. 改善方差,即开发集测试集和训练集之间的差别
    1. 更多的数据
    2. 正则化方法,L2、Dropout,数据增强
    3. 改变神经网络结构或者超参数

猜你喜欢

转载自blog.csdn.net/Asun0204/article/details/78152314