深度学习笔记(20):结构化机器学习项目的一般策略总结(3)

手工分析的必要性:误差分析

比如我们在分类猫模型中,得到了error是10%。我们去查看了判断错误的测试集,尝试去优化,使得模型更加准确。我们发现,模型将一些长得像猫的狗的照片分类出来了。那么问题就来了,我们应不应该为此专门地去设计一下狗的分类器进而优化呢。
这里面我们就要考虑到,这个问题到底会不会显著影响到我们的准确度,考虑到新建一个分类器在实际过程中可能要耗时数天或者数月。

深度学习笔记(20):结构化机器学习项目的一般策略总结(3)
我们应该先去做的是,去花费几分钟或者几小时,人工干预一下,把每一个分类错误的数据地类型都填写到表格中汇总统计。然后根据占比决定我们是否值得对于某一个部分特殊考虑特殊优化。那些我们可以预料的没有显著影响的,就没有必要再去考虑了,我们也就不会在上面浪费时间。

深度学习笔记(20):结构化机器学习项目的一般策略总结(3)

对于那些标记错误的数据,我们该怎么办

我们很容易想到,在标记中可能会有一些疏忽,比如按错键等等,使得标记的y并不对,那我们应该怎么处理呢?

深度学习笔记(20):结构化机器学习项目的一般策略总结(3)

如果说这些错误是随机的没有规律的,那其实我们不用去专门将标记错误的数据修改掉,他们对于结果并不会有很大影响。值得考虑的地方是,你要去看,那些标记错误的数据集(当然标记错误和分类器无关,分类器判断正确和错误的数据集都要检查,当然,工作量很大)里面是不是有共性的标记倾向,比如把所有的白色狗都标记成猫,这些地方是会让我们的神经网络的判断产生偏颇的。
相比于其他地方的优化,因为这部分工作量比较大,所以我们把它放到清单的后半部分考虑。
深度学习笔记(20):结构化机器学习项目的一般策略总结(3)
比如该表中,我们就应该想到先去优化狗造成的影响。直到别的大的,同等级的,甚至占比低一些的都考虑完成后,我们再去考虑标记错误造成的影响这部分。

优化目标和训练集分布不同引发的思考

很多时候,我们其实无法在现实生活中收集我们所要优化的领域的足量数据,但是却可以收集到足量的近似领域的数据。比如在我们优化识别猫模型中,我们手里有大量高清的猫的图片(比如说200,000张照片),但是用户app端上传的都是比较模糊的图片,我们手里有数量较少的这部分照片(比如说10,000张),很显然,我们并不能说这两者来自同一分布。
深度学习笔记(20):结构化机器学习项目的一般策略总结(3)

这时候我们就要面临着抉择,一种想法是抛弃掉那些大量的高清图片,然后只用一个分布下的模糊图片进行训练和测试,当然这样的话,我们会由于数据量过少而造成并不准确的问题(训练集仅仅为千级别的),这种方案肯定不行。

那么我们把这两部分数据打乱掉,然后再去划分开呢?我们会发现,由于高清照片占主导,实际上我们的优化目标和训练集中近似于全部是高清图片,这时候我们就把靶子放错位置了。
却实实在在地解放了思想的方法横空出世了。就是将所有的高清图片(200,000)加上少部分模糊图片(5,000)作为train,而把dev和test都设置成模糊图片(各为2,500个)。
深度学习笔记(20):结构化机器学习项目的一般策略总结(3)
有同学可能就问了,这不离谱吗?这都不是同一个分布啊,怎么能优化出来呢?事实上,高清和模糊的数据集并不是完全没有关系,我们不想完全通过狭小的模糊图片数据集来训练,我们想要利用更多的知识,把高清的图片所具有的猫的知识为我所用,迁移过来。迁移学习的思想开始诞生了。我们后面再细说。

不同数据划分的偏差和方差应该如何衡量

我们在上述划分之后,由于开始耦合起来,我们不知道如果按照原来的划分各个集合上的错误率之间的关系代表什么。我们需要重新划分。

深度学习笔记(20):结构化机器学习项目的一般策略总结(3)
我们制造出两个dev,一个是和训练集同分布的train-dev,一个是用来作为优化目标的dev,这样的话,我们就可以对比train error和train-dev error看出来模型到底是具有偏差,对比train-dev和dev以及dev和test看是否具有过拟合的方差等等,决定我们下一步如何调优。
深度学习笔记(20):结构化机器学习项目的一般策略总结(3)

人工干预,定位数据不匹配

识别中,我们想利用正常语音的知识,(和具有汽车噪音下的语音信息当然有一定区别)去学习汽车行驶中人发出语音指令的识别。我们需要去人工查看一下,正常语音和汽车行驶状态下,人语音的区别,比如内容上的区别(汽车语音指令可能涉及到更多的地址),还有一些汽车噪音等。他们之间的距离越相近,模型的效果当然就会越好。

在我们人工查看并且定位到了之间的区别之后,我们就可以通过一些手段使其彼此靠近。比如说我们可以通过参加汽车噪音,将普通语音转化成汽车语音。(我们需要注意,虽然人耳无法听出来,但是如果我们使用一个小时的噪音反复加入合成数据,会导致对于汽车噪音的过拟合)
深度学习笔记(20):结构化机器学习项目的一般策略总结(3)
同样好玩的理论,为啥我们不能通过将游戏里面的车换不同视角截图,然后制造出大量数据集呢。其实每个游戏里面的车的种类也就几十种,产生再多的照片也就是会让机器拟合他们罢了,所以这个设想是没用滴。还得老老实实找各种车的照片,或者想别的办法。
深度学习笔记(20):结构化机器学习项目的一般策略总结(3)

迁移学习

其实之前我们一直都在渗透迁移学习的思想啦。

迁移学习其实就是通过将和B领域相近的A的数据也放到B模型的训练中,想把一个领域(A)的知识迁移到另一个领域(B)上来。因为有时候可能我们手里的A的数据更加的多,而B相对较少,那么这时迁移学习可以或多或少的将A的部分知识学到B的模型中,这样的话有了更多的知识就可以使得模型的各项能力,泛化准确度等等都增强。

深度学习笔记(20):结构化机器学习项目的一般策略总结(3)

多任务学习

和迁移学习思路类似,不过这次是想从类似领域的任务中获取知识,把可以在不同分类器中完成的任务放在一个分类器中完成,进而内部相互学习。
深度学习笔记(20):结构化机器学习项目的一般策略总结(3)
举例说明,当我们AA1 ,AA2,AA3…等若干分类任务,每个数据量都是1000个,一个直觉的就是我先分开考虑,对于这些分类任务分别构造自己的分类器,最后放在一起进行查看。但是这样的话其实数据量少这一缺陷就会很明显了。
一个合理的做法是使用多任务学习同时训练,这时候期望着他们可以彼此学到一些东西(即使是浅层的也好)。研究表明我们使用深层大型神经网络这么做的效果不会比单独分开效果差,只会更好。
深度学习笔记(20):结构化机器学习项目的一般策略总结(3)

端到端学习

在各个AI领域,机器学习过程被多年的经验拆分成了各个环节:
比如在语音识别中,一般是会按照,从语音(x)出发,特征提取,机器学习,拆分成词,得到结果这样的步骤进行(得到最后的y)。
端到端的学习就是指直接从x出发得到y,而不在中间加入任何环节。

深度学习笔记(20):结构化机器学习项目的一般策略总结(3)

端到端学习其实是是一把双刃剑,一方面这避免了人的固有假设和步骤造成的局限性,比如我们永远也不知道自己的设置的步骤可能看起来会使得模型优化,但是他也失去了自己的创造性和变化性。
另一方面,端到端学习,因为没有任何人类知识的干预,机器需要自己去走很多的弯路,他的训练成本,所需要喂养的数据,所需要优化的时间等都爆炸级增加,使得很多东西变得不切实际了起来。

举例说明,比如说工大的图书馆人脸识别装置,实际上如果是不加干预的端到端学习,是将摄像头拍到的整个画面,映射到人的信息上进行对应,是端到端的训练,端到端的识别。如果是我们来分步骤,可能会先去提取出人脸到底在哪里,然后把人脸放大,再作为训练集进行训练,这样很显然因为我们人的知识使其更进一步导致训练和识别变得简单起来。再比如说通过x光,看骨骼判断这个人多少岁,我们人可能会加知识,先判断出每个骨头多长,然后最去训练骨头长度和岁数的关系。但是如果是端到端,可能就需要自己去挖掘这一点(或者说它自己可以找到新的方法,不过如果真的有别的很显然的方法,那人类的智商真是受到侮辱了),进而效率急速下降了。

总结来看,如果我们有足够多的数据,我们可以尝试端到端学习;否则,按照一定的步骤去做往往会使得数据的训练和识别变得更简单,数据量需求更实际。