1.为什么是ML策略
当你训练你的网络,你可能觉得它不够好而换算法、改架构、加数据等。
但如果你方向不对,很可能会浪费几个月的时间,这一代价在有的时候是不可承受的。
因此我们需要一些经验和指引。
2.正交化
以控制小车为例,一个控制器控制旋转角,一个控制器控制加速,他们互不相干(夹角90度),使得你可以调整一个功能的时候不影响另一个功能。
体现在学习中,你或许发现你的模型在训练/开发/测试集上表现不好,对应每一个集合上的情况,你希望找到一种方式调整,而不影响其他集合上模型的表现,这就是一组正交化的调整方法。
3.单一数字评估指标
当我们有一个单实数评估指标,我们的训练进展会快很多,因为他明确告诉你新模型、新手段的好坏。
查准率P(以猫分类器为例,后同):
分类为猫的多少真的是猫
查全率R:
真的是猫的有多少被分类为猫
两者往往需要折中,而不会都很好。而一高一低时怎么判断呢:
这称为F1分数。
有的例子中,我们也使用平均错误率来评估模型。当然,重点是要有一个单实数指标。
4.满足和优化指标
当你有多个需要顾及的因素,把他们组合成一个指标并不容易。而直接线性组合可能太刻意,效果不见得好。
实用法则:只针对一个因素优化,其他因素达到门槛即可。比如只比较准确率,而检测时间小于某个值即可。
5.训练/开发/测试集划分
保证开发和测试集来自同一个分布,为此建议将数据洗牌(随机化)。
并且,为了适应需要,建议让开发和测试集能反映未来会得到的数据、认为很重要的数据、必须得到好结果的数据。
6.开发集和测试集的大小
数据量小:7:3 (没有开发集)或 6:2:2
数据量大:或许98:1:1,后两者不需要那么多,绝对数量达标就可以了。
有时候你不需要置信度很高(无偏)的评估,就不需要测试集。但有的人口中的测试集其实是开发集,他们在这个集合上迭代。
不建议省略测试集,但如果开发集很大,过拟合就不会很严重,也不是完全不可以。
7.什么时候该改变开发/测试集和指标?
例子:猫分类器A和B
A错误率比B低,但A会把一些色情图像分成猫,这是你不可接受的,这时候你就需要改变指标。
假设这是你原来的错误衡量函数:
你可以给他加上一个权重,y^(i)为色情图片时,权重设置得非常大:
(但是问题又来了,你需要自己标记图片是不是色情图片)
我们可以看出,当你的指标无法评估好算法的时候,你就需要改变它了。
注意正交化的思想:
把机器学习问题切割成几个独立的步骤,如:找指标——定函数——优化
另一个例子:
你的模型在当前开发/测试集上表现很好,但在实际应用中表现不好。你就需要换指标或者开发/测试集了。
总体方针就是,如果你当前的指标和当前用来评估的数据和你真正关心必须做好的事情关系不大,那就应该更改你的指标或者你的开发测试集。
建议:
即使你无法定义出一个很完美的评估指标和开发集,你直接快速设立出来,然后使用它们来驱动你们团队的迭代速度。发现不好完全可以马上改。
最好不要在没有评估指标和开发集时跑太久,因为那样可能会减慢你的团队迭代和改善算法的速度
8.为什么是人的表现?
模型性能靠近人类水平努力时,进展是很快的,此时你可以用一些工具来提高性能,比如找人标记数据再喂给模型。
但表现比人类更好时,这些工具没那么有效了,进展和精确度的提升变得越来越慢。
贝叶斯最优错误率:理论上的最优错误率,受制于实际条件。比如一段很嘈杂的声音你就是无法分辨得很好。
9.可避免偏差
可避免偏差:人类错误率(用来替代贝叶斯错误率)-训练错误率
当他小于开发错误率-训练错误率时,你应该专注减少方差,否则专注于减少偏差
10.理解人的表现
如何定义人类错误率:
弄清楚你的目标,如果要表明你可以超越单个人类,那么就取普通人的错误率。
但是如果您的目标是替代贝叶斯错误率,那么可以取最专业的人的错误率。
而有的时候你不应该关注取哪一个,有时无论取哪一个,你都应该先关注方差。
11.超过人的表现
当算法的表现超过了人,就难以定义可避免偏差,贝叶斯偏差是多少也很难说,你该优化方差还是偏差就不清楚。
同时,模型已经比最强的人类还强了,靠人的直觉去判断优化方向就很难了。
但这并不意味着你没法取得进展,比如你可以加入更大量的数据。
12.改善你模型的表现
组合之前的课程内容