1. 为什么是ML策略
需求
建了一个模型,但是离目标还差点,需要改进该模型,有如下一些思路:
- 收集更多的数据
- 收集一些反例
- 用梯度下降训练更长的时间
- 用Adam优化算法
- 尝试更大的网络
- 尝试小点的网络
- 尝试dropout
- 添加
L2 正则项 - 网络结构方面的优化
- 激活函数
- 隐藏层节点
- …
但是尝试一个idea可能要花费几个月的时间,因此选择就成了一个问题。
定义
分析机器学习问题的方法,通过这些方法可以朝着最有希望的方向走
2. 正交化
两个例子
- 对于电视机来说,有很多按钮来控制画面,比如说旋转、拉伸、平移等,如果电视只有混合的按钮,旋转一个这样的按钮,会同时进行不同比例的旋转、拉伸、平移操作,那么就很难把只是偏移的画面调整到一个合适的位置
- 对于车来说,油门、刹车和方向盘,如果只有混合的装置,操作它会同时改变车速和方向,那么很难控制车的行为
- 所以需要把动作剥离开来,车速和方向单独控制,就可以很容易控制车的行为,称之为正交化
假设链
假设 | 如果不好采取的方法 |
---|---|
训练集的成本函数(
|
更大的网络,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)
- 计算公式
- 课后笔记里Recall的公式错误
4. 满足和优化指标
已知2个评价指标准确度和运行速度,如何综合得到一个指标?
- 线性加权组合:cost = accuracy-0.5*running_time
- 把指标分为2类:满足指标(satisfing metric),只需要满足一定的条件就可以,例如运行速度小于100ms;优化指标(optimistizing metric),需要优化的指标,越大越好,例如准确度,即挑选一个作为优化指标,其他的作为满足指标,也就满足了3中的只有一个指标来评价模型的原则。按照这类方法得到的指标如下:
maximize subject to accuracyrunningTime≤100ms
举个例子
语音设备唤醒,比如说你好百度。
对于这种情况,我们更加关注准确度,也就是在要唤醒的时候能够很大程度地唤醒设备。相对来说错误唤醒就不那么重要了。所以我们的指标如下:
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,这时候就需要改变指标。
- 如果模型算法的验证集测试集的评价指标都不错,但是应用的时候不好,就要考虑更换评价指标和验证集、测试集
比如说猫图片分类问题,如果我们用的图片数据都是高质量的图片,而用户用的是低质量模糊奇怪的图片,效果就不好,这种情况就需要更换验证集和测试集。
8. 为什么是人的表现
和人比较的两个原因:
- 机器学习领域的快速发展有了近似或者超过人的效果
- 机器学习在很多领域都可以替代人的作用,所以不可避免的要和人做比较
举个例子
在算法模型数据的驱动下,效果越来越好,最终会超过人的表现,但是同时也有一个上限,叫做贝叶斯最优误差(Bayes optimal error,Bayes error,best possible error),即理论上可能达到的最优误差。
比如说在语音识别领域,有些音频就是这么嘈杂,以至于根本就不可能知道说的是什么。
性能超过人的表现以后性能提升少的原因:
- 有些人的表现十分接近贝叶斯最优误差,比如说十分擅长辨认图像,听声音等
- 性能比人的表现差的时候,有很多工具可以提升,但是比人的表现好了以后,很多工具就不怎么有效了
如果性能比人的表现要差,提升的工具有:
- 请专家标注数据,从而有更多的数据训练模型
- 从人工误差分析中,也就是把做错的例子给专家看,找出分错的原因,为什么人能做对,算法出错
分析偏差和方差(bias/variance),偏差和方差在前面的视频中有提到,分别指训练集的性能和开发集的性能
- 如果你的算法性能比人的表现要好,以上3种工具就很难见效了。
9. 可避免偏差
对于猫图片分类问题,有如下两个模型:
A情况 | B情况 | |
---|---|---|
Human Performance | 1% | 7.5% |
Training error | 8% | 8% |
Dev error | 10% | 10% |
- 对于A来说,训练集的误差和人的表现相比测试集和开发集的表现来说差很多,因此偏差(bias)很大,即训练集的误差很大,所以更关注于减少偏差的策略,比如训练一个更大的网络
- 如果猫的图片模糊辨识不清,就会出现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 情况,超过了专家团队的误差,因此不能估计贝叶斯最优误差是多少,所以不好判断是优化偏差还是优化方差
机器学习好过人类的领域
- 网络广告,估计某个用户点击广告的可能性
- 产品推荐,推荐电影或数据之类的任务
- 物流预测,预测从A到B开车的时间
- 借贷证明,预测某人会不会偿还贷款
深度学习,比如说自然语言处理、计算机视觉等自然感知方面,因为人类比较擅长这些,所以超越人类比较困难,但是也有好过人类表现的
1. 语音识别
2. 图像识别
3. 医学方面,比如ECG、癌症判断、放射科等
12. 改善模型的性能
目标
- 训练集和人类水平表现接近或者超过,即可避免偏差低
- 开发集和和测试集的误差低,方差要低
正交化方法
- 对于偏差,可以训练更大的网络或者训练更久
- 对于方差,可以使用正则化或者手机更多的训练数据
如何减少可避免偏差和方差
- 改善可避免偏差,即人类水平和训练集误差
- 训练更大的网络
- 训练更久,使用优化方法,比如动量momuntom,RMProp,Adam
- 改变神经网络结构或者超参数
- 改善方差,即开发集测试集和训练集之间的差别
- 更多的数据
- 正则化方法,L2、Dropout,数据增强
- 改变神经网络结构或者超参数