DeepLearning.ai学习笔记(三)结构化机器学习项目--week1 机器学习策略
一、为什么是ML策略
如上图示,假如我们在构建一个喵咪分类器,数据集就是上面几个图,训练之后准确率达到90%。虽然看起来挺高的,但是这显然并不具一般性,因为数据集太少了。那么此时可以想到的ML策略有哪些呢?总结如下:
- 收集更多的数据
- 收集更多不同的训练集
- 结合梯度下降训练算法更长时间
- 尝试Adam算法
- 尝试更大的网路
- 尝试小一点的网络
- 试着用一下dropout算法
- 加上\(L_2\)正则项
- 改善网络结构,如
- 激活函数
- 隐藏层节点数量
- and so on
二、正交化
正交这个词很好理解,即各个变量之间是相互独立的,以像我这样的小萌新学开车为例,主要起作用的是方向盘(控制方向)和油门&刹车(控制车速),为了拿到驾照我需要练习倒车入库等操作,在最开始学车时我可能就是在倒车时先减速停下来,然后转动方向盘,再踩个油门……慢慢的一步一步的挪进车库。而对于老司机来说可能就是一边加速一边转动方向盘,轻轻松松的就完成了入库操作,但是其操作难度却大大增加。
好了说了这么多可能听起来一头雾水,但是如果联系到实际的模型调参就好懂了。在调参数时我们也希望尽 可能的正交化,尤其是像我这样的刚入门的白菜,切勿将一大堆的优化方法不动脑的就堆在一起使用。
三、单一数字评估指标
本节大致的思想就是首先按照单一数字评估指标对模型进行评价和优化。以精确率和召回率为例,这二者一般来说是一个不可兼得的指标,所以为了更好的衡量模型的好坏,引入F1算法来综合精确率和召回率对模型进行评估。
更加具体的介绍可查看Andrew Ng机器学习课程笔记--week6(精度&召回率)
四、满足和优化指标
假如我们有A,B,C三个分类器,各个分类器的准确率和耗时情况如下:
分类器 | 准确率 | 耗时 |
---|---|---|
A | 90% | 80ms |
B | 92% | 95ms |
C | 95% | 1500ms |
此时该如何评价这三个分类器呢?
有如下可选择的方法:
- 1.线性组合
基于已知的指标构建一个新的指标:
cost = accuracy - β*time
- 基于满足指标来观察优化指标
很显然我们更关心的是最终的准确率,但是同时也希望耗时不要太长,所以我们可以将满足指标设定为耗时,假设是100ms,然后优化指标就是在100ms用时的情况下准确率的大小。
五、训练/开发/测试集划分
假设我们有一系列的数据分别来自上面各个国家和地区。现在我们需要将这些数据划分为开发集和测试集, 一般的方法是我们随机选择几个国家的作为开发集,剩下的作为测试集,就如上图所示。
看起来没毛病是不是?但是毛病大大的!!!因为开发集和测试集不服从同一分布,这就好像你在准备托福考试,你尽可能的得到了所有的考试技巧和其他资料,最后你的确得到了不错的成绩。但是后来因为工作需求需要你会说俄语,此时如果你用之前托福的资料来对付俄语考试则显得驴头不对马嘴了,这也就是为什么可能开发集准确率挺好的,但是应用的测试集就不行了。
所以为了实现服从同一分布,我们可以这样做,
- 首先将所有国家和地区的数据打散,混合
- 按照一定的比例将上面混合打散后的数据划分为开发集和测试集
六、开发集和测试集的大小
这一节的内容可参考我之前的笔记训练/测试集数据大小问题
七、什么时候该改变开发/测试集合指标
按照吴大大的惯例还是先举个栗子比较好理解:
假设现在一个公司在做一个喵咪图片推送服务(即给用户推送喵咪的照片),部署的有两个算法:
- 算法A: 喵咪图片识别误差是3%,但是可能会一不小心就给用户发了一些少儿不宜的图片
- 算法B:误差是5%,但是不会给用户推送不健康的图片
所以对于公司来说可能希望准确性高一些的算法A,而用户可能会非常在意你给他推送了某些不想看的东西,也许更喜欢算法B。所以总的来说就是根据实际需要来改变开发/测试集合指标。
八、什么是人的表现
如图示:
- 蓝色虚线:表示人类识别的准确率
- 紫色曲线:表示机器学习不断训练过程中准确率的变化
- 绿色虚线:表示最高的准确率,即100%
其中紫色曲线在末尾收敛后与绿色虚线之间的差距称为贝叶斯优化误差(Bayse Optima Error)
官网提供的更清晰的课件图示:
因此在实际操作过程中,我们可以以人类准确率为指标来评判我们训练的模型好坏程度,如果准确率不及人类,那么我们可以从以下几个方面进行调整:
- 获取更多的标签数据
- 分析为什么模型在这个数据上错误,而人类会正确判断,对模型进行修正
- 分析和运用偏差和方差
九、可避免偏差
看上面课件的截图可能比我自己重新复述一遍要更加容易理解一些,不过我还需要对上面的课件做一些补充,就是
- Humans error 与 Training Error之间的差距我们成为Avoidable bias
- Training Error 与 Dev Error之间的差距我们成为Variance
具体怎么运用看下面一小节内容~
十、理解人的表现
有了课件后我都懒得自己写了(捂脸(/ω\))
还是解释一下课件吧:
Example 1
假如一个医院需要对一个医学影像进行分类识别,普通人,普通医生,有经验的医生和一群有经验的医生识别错误率分别为3%,1%,0.7%,0.5%。上一节中提到过Human Error,那此时的该如何确定Human Error呢?你可能会说取平均值,只能说Too Naive!当然是取最好的结果啦,也就是由一群经验丰富的医生组成的团体得到的结果作为Human Error。另外贝叶斯误差一定小于0.5%。
Example 2
还是以医学影像分类识别为例,假如现在分成了三种情况:
-
Scenario A
让三类人群来划分后得到的误差分别为1%,0.7%,0.5%,而训练集和测试集误差分别为5%,6%。很显然此时的Avoidable Bias=4%~4.5%,Variance=1%,bias明显大于variance,所以此时应该将重心放到减小bias上去。 -
Scenario Bayse
同理此情况下的Avoidable Bias=0%~0.5%,Variance=4%,所以需要减小variance。 -
Scenario C
Avoidable Bias=0。2%,Variance=0.1%,二者相差无几,但是此时训练的模型准确率还是不及人类,所以没办法咱们还得继续优化,都说枪打出头鸟,所以继续优化bias~
十一、超过人的表现
-
Scenario A
Avoidable Bias=0.1%~0.4%,Variance=0.2%,所以此时应该将重心放到减小bias上去 -
Scenario B
Avoidable Bias=-0.2%~0.7%,Variance=0.1%.乍一看可能会有点不知所措,而且训练集准确度也超过了人的最好成绩,不知道应该选择优化哪一项了,或者说这是不是就说明可以不用再优化了呢?
聪明,你又猜对了。还是可以继续优化的。不可否认在图像识别方面人类的确其优于机器的方面,但是在其他方面,如在线广告推送,贷款申请评测等方面机器人要远远比人类优秀,所以如果是在上面课件中提到的一些领域,即使机器准确度超过了人类,也还有很大的优化空间。具体怎么优化。。。。老师没说。。。以后再深究逃