更多好玩的机器学习教程: 进入袋马学院领一份 ,全部免费?.
除了数据可用性以外,考虑流程中组件时,你还需要考虑一个因素:单个组件解决问题的简单程度。你应该试着选择那些容易构建和学习的组件。那什么叫做组件易于学习呢?
看看下面几个机器学习任务,按难度递增的顺序排列出来:
- 判断图片是否曝光过度
- 判断图片是在室内拍摄的还是在室外拍摄的
- 判断图片中是否含有猫
- 判断图片中的猫是否有黑色和白色的毛
- 判断图像是否包含暹罗猫(一种特殊的猫)
上面这些都是图形二分类任务:输入一幅图像,输出0或1。但是列表中前几个,对于神经网络来说相对容易学习。你可以通过很少的样本集就可以完成到前几个任务。机器学习中,还没有一个很好的正式定义,什么样的任务难,什么样的任务简单。随着机器学习和神经网络的兴起,我们说,如果训练的步数很少(或神经网络很浅),任务就可以完成,那么我们称任务简单。如果训练需要更多的步数(或更深的网络),则我们说任务很难。但是这些都是非正式的定义。
如果你能将一个复杂的任务,拆分成几个简单的子任务,然依据简单的子任务进行编码,通过给你的算法提供先验知识,可以帮助你的算法更有效的学习这个任务。
假如你正在构建一个暹罗猫检测器,下面是一个端到端的结构:
你也可以使用两步来完成这个任务:
第一步先检测图片中的所有猫。
第二步将每只猫裁剪出来,然后通过特殊猫咪检测器,检测每一只猫,如果有暹罗猫,则输出1.
相对于纯端到端系统,只是用0/1标签,使用两个组件:猫咪检测器和特殊猫咪分类器,似乎更容易学习且需要的数据量更少。
最后一个例子,让我们回到自动驾驶流程中:
通过使用这个流程,你告诉算法执行三个关键步骤来实现自动驾驶:
- 检测其他汽车
- 检测路上行人
- 行车路线规划
这三个步骤中,每一步都相对简单,相对纯端到端系统,所需的数据量也更少。
总的来说,当你决定流程采用哪些组件时,尽量选择相对简单的组件,这样可以使用更少的数据,就可以学习了。