1.正交化
正交化(Orthogonalization) 的核心在于每次调整只会影响模型某一方面的性能,而对其他功能没有影响。这种方法有助于更快更有效地进行机器学习模型的调试和优化。
比如电视条件:有调节高度的按钮,宽度的按钮,旋转的按钮,
色彩的按钮,亮度的按钮,每个按钮负责一件事情,不会影响其他按钮调节的维度,使分析更为简单。
在机器学习(监督学习)系统中,可以划分四个“功能”:
1)系统在训练集上表现的好。否则,使用更大的神经网络、更好的优化算法;
2)系统在开发集上表现的好。否则,使用正则化、更大的训练集;
3)系统在测试集上表现的好 。否则,使用更大的开发集;
4)在真实的系统环境中表现的好 。否则,修改开发测试集、修改代价函数。
2.单一数字评估指标
如果用多个指标去评估各个系统的表现,很难抉择,因为各有利弊。应该尝试去设置一个合理的单一实数评估指标,所有系统都通过这一个指标来评估好坏,问题就会简单的多,迭代速度也会加快。
查准率(Precision):计算结果中 true 的个数除以计算结果的个数
查全率(Recall): 计算结果中true的个数除以全集中真实true的个数
F1 Score:查准率和查全率的调和平均数
3.满足和优化指标
对于某一问题,如要求模型准确率尽可能的高,运行时间在100 ms以内。这里以Accuracy为优化指标,以Running time为满足指标,我们可以从中选出B是满足条件的最好的分类器。
一般的,如果要考虑N个指标,则选择一个指标为优化指标,其他N-1个指标都是满足指标。
4.训练/开发/测试集划分
1)所选择的开发集和测试集中的数据,要与未来想要或者能够得到的数据类似,即模型数据和未来数据要具有相似性
2)在选择开发集和测试集时要使二者来自同一分布,且从所有数据中随机选取
5.开发集合测试集的大小
开发验证集dev 和 单一评估指标一起确定了模型的训练目标。
传统划分:数据量小,100-10000
70/30
60/20/20
大数据划分:数据量大,>1000000
98/1/1
99/0.5/0.5
测试集: 评测性能指标,10000或100000 足够了
如果不需要评估性能指标,甚至可以没有测试集(不推荐)。在没有测试集时,只有train/dev 但是人们习惯说成train/test, 我们应该知道这里的test其实指的是dev。
6.什么时候该改变开发/测试集和指标
如果评估指标无法正确评估算法的排名(排名与真实场景不符),则需要重新定义一个新的评估指标。
如果在训练开发测试的过程中得到的模型效果比较好,但是在实际应用中自己所真正关心的问题效果却不好的时候(数据与真实场景不符),就需要改变开发、测试集或者评估指标。
7.为什么是人的表现
造成这种现象的原因可能有以下几种:当比人类表现差时
1)让人们帮忙标记数据
2)错误分析,比人差到哪里了
3)分析偏差和方差
8.可避免偏差
一般我们不用贝叶斯误差去衡量偏差,而是用人类的表现去衡量。
偏差:训练集的错误
可避免偏差:训练集的错误与人类的错误的差
方差: 开发验证集的错误与训练集错误的差
比较可避免偏差和方差,看改进哪个对模型进步更有意义。
- 理解人的表现
对人类水平误差有一个大概的估计,可以让我们去估计贝叶斯误差,这样可以让我们更快的做出决定:减少偏差还是减少方差。
而这个决策技巧通常都很有效果,直到系统的性能开始超越人类,那么我们对贝叶斯误差的估计就不再准确了,再从减少偏差和减少方差方面提升系统性能就会比较困难了。
10.超过人的表现
在架构化数据的模型中,机器学习系统的表现很容易超过人类。
1)点击率预估
2)推荐算法
3)物流预测
4)银行贷款审批
在自然感知的模型中,人类比较擅长,机器学习想要超过人类就比较困难,不过也有一些机器学习系统的表现已经超过了人类。
- 改善你的模型的表现
基本假设:
模型在训练集上有很好的表现
模型推广到开发和测试集啥会给你也有很好的表现
减少可避免偏差
训练更大的模型:
训练更长时间、训练更好的优化算法(Momentum、RMSprop、Adam)
寻找更好的网络架构(RNN、CNN)、寻找更好的超参数
减少方差:
收集更多的数据
正则化(L2、dropout、数据增强)
寻找更好的网络架构(RNN、CNN)、寻找更好的超参数