另一个用来分类机器学习系统的标准是,系统是否可以从输入的数据流中逐持续学习。

Batch learning:批量学习

在批量学习中,系统不能持续渐进学习:必须使用所有可用的数据进行培训。这通常需要大量的时间和计算资源,因此通常是离线完成的。首先培训系统,然后投入生产,不再学习;它只适用于它所学到的东西。这叫做脱机学习[offline learning]。

如果您想要一个批量学习系统来了解新数据(比如一种新型的垃圾邮件),那么您需要在完整的数据集上从头开始训练系统的新版本。 (不只是新数据,还有旧数据),然后停止旧的系统,用新的系统替换它。

幸运的是,训练、评估、部署一套机器学习的系统的整个过程可以自动进行(如图1-3所示),因此即使是一个批量学习系统也可以适应变化。只需简单地更新数据并在需要时从头开始训练系统的新版本。

这个解决方案很简单,而且通常很好用,但是使用完整的数据集进行训练可能需要花费很多时间,所以您通常只需要每24小时或每周训练一次新的系统。如果你的系统需要适应快速变化的数据(例如,预测股价),那么你需要一个响应更及时的解决方案。

此外,对完整数据集的训练需要大量的计算资源(CPU、内存空间、磁盘空间、磁盘I/O、网络I/O等)。如果你有大量的数据,并且你的系统每天都要自动的从头训练的话,那么开销就会很大。如果数据量很大,甚至不可能使用批量学习算法。

最后,如果你的系统需要自动学习,但是资源有限(比如,设备只是一台智能手机或火星车),那么携带大量训练数据、每天花费数小时的大量资源进行训练是不实际的。

幸运的是,在所有这些情况下,更好的选择是使用能够持续渐进学习的算法。

Online learning:在线学习

在在线学习中,你可以循序渐进地为系统提供数据实例,无论是单独的还是小批量的数据实例。每个学习步骤都是快速且廉价的,所以系统可以动态的学习新的数据(参见图1-13)。

图1-13 在线学习

在线学习对于那些接收数据作为连续流(例如股票价格)并需要快速或自主地适应变化的系统非常有用。如果您的计算资源有限,这也是一个不错的选择:一旦一个在线学习系统了解了新的数据实例,它就不再需要它们了,所以您可以丢弃它们(除非您希望能够回滚到以前的状态并“重播”数据)。这样可以节省大量的空间。

在线学习算法也可以用来训练大数据集上的系统,这些数据集太大以至于不能装入一台机器的主存中(这被称为外核心学习[out-of-core Learning])。该算法加载部分数据,用这些数据进行训练,重复这个过程,直到用所有数据都进行了训练(见图1-14)。

整个过程通常是离线完成的。在线学习可能是一个令人困惑的名字。把它看作是渐进式学习更合适。

图1 - 14 使用在线学习来处理庞大的数据集。

在线学习系统的一个重要参数是它们可以多快地适应数据的改变:这叫做学习速率[learning rate]。如果您设置了一个高的学习速率,那么您的系统将快速地适应新的数据,但是它也会很快地忘记旧的数据(你可不想让垃圾邮件过滤器只标记最新的垃圾邮件种类)。相反,如果你设定一个低的学习速率,系统会有更多的惯性;也就是说,它会学得更慢,但对新数据或非代表性数据点的噪声也不那么敏感。

在线学习面临的一个巨大挑战是,如果将糟糕的数据输入到系统中,系统的性能将会逐渐下降。如果我们谈论的是一个实时系统,你的客户会注意到。例如,糟糕的数据可能来自机器人的故障传感器,也可能来自发送搜索引擎试图在搜索结果中排名较高的搜索引擎。为了降低这种风险,您需要密切监视您的系统,如果您发现性能下降,立即将学习关闭(并可能恢复到以前的工作状态)。您可能还希望监视输入数据并对异常数据作出反应(例如:使用异常检测算法)。

results matching ""

    No results matching ""