Data vs hand-engineering
你可以把大部分的机器学习问题看成是在你的数据相对较少的地方,应用到你拥有大量数据的地方。
我们今天有相当数量的语音识别数据,至少相对于这个问题的复杂性而言。
虽然今天有合理的大型数据集用于图像识别和图像分类,但由于图像识别是一个复杂的问题,我们仍希望有更多的数据。
还有一些问题,比如物体检测,我们拥有的数据更少(它要告诉我们一张图片中的物体的位置)。
当我们有很多数据的时候,我们就可以倾向于更简单的算法(simpler algorithm)、更少的手工工程(less hand-engineering)。
相反的,当我们没有那么多的数据的时候,就会有更多的手工工程(more hand-engineering),在数据不足的情况下手工工程实际上是获得良好表现的最佳方式。
机器学习的知识来源
- labeled data
- hand engineering features / network architecture / other components
所以吴恩达老师认为(“我”为吴恩达老师):
计算机视觉是在试图学习一个非常复杂的函数,我们经常感觉没有足够的数据来满足我们的需要。这就是为什么计算机视觉从历史甚至到现在都更多地依赖手工工程。
我认为这也是计算机视觉领域发展相当复杂的网络架构的原因。因为在缺乏更多数据的情况下,获得良好表现的方式还是花更多的时间进行架构设计(或者在网络架构上闲逛)。
如果你认为我是对手工工程的贬低,那并不是我的本意。当你没有足够的数据,手工工程是一项非常困难、非常有技巧的任务,它需要很多的洞察力insight。那些对于手工工程有深刻间接的人将会获得更好的表现。
在过去的几年里,计算机视觉任务的数据量急剧增加,我认为这导致了手工工程量的大幅减少。但在计算机视觉上仍然有很多的网络架构的手工工程,这就是为什么你会在计算机视觉中看到非常复杂的超参数选择,比你在其他许多学科中要复杂得多。
实际上,因为你通常有比图像图像识别数据集更小的对象检测数据集,当我们谈论对象检测时,你会看到算法变得非常复杂,而且有更多特殊的组件。
(结束)
幸运的是,当拥有少量的数据时,迁移学习会对你很有帮助。
计算机视觉的研究者在标准化的基准测试集和竞赛中表现出色。对于计算机视觉研究者来说,如果你在基准上做的很好,那就容易发表论文了,所以有很多人致力于在这些基准上,把它做得更好。
积极的一面是,它有助于整个社区找到最有效的算法,但是这个基准并不会真正部署在一个实际应用程序、生产或一个系统。
下面都没看懂:
由于计算机视觉问题建立在小数据系统,其他人已经完成了大量的网络架构的手工工程。
一个神经网络在一个视觉问题上很有效,令人惊讶的是它通常也会解决其他视觉问题。
所以,要建立一个实用的系统,你最好先从其他人的神经网络入手。
如果可能的话,你可以使用开源的一些应用。因为开源代码已经找到了所有繁琐的细节(比如学习率衰减或超参数)。