当前位置:   金科网 > 人工智能 > 正文

桃花源记手游神兽礼包,倩女幽魂手游甲士拓本,梦想手游战士,剑侠情缘手游桃花酿酒,神武手游2魔王坐骑

近期在googlesearch blog上发布了一篇题为《Lessons learned developing a pracTIcal large scale machine learning system》的博客,作者应该是google机器学习团队的成员,列举了他们在开发一个可伸缩的大型机器学习系统SeTI时所积累的一些经验教训。虽然所列出的三点教训看起来都很简单,似乎显而易见,但在现实操作中我们往往会受到种种的“诱惑”而走向另一个极端。特别典型的情景是,这些道理对于工作在一线的有过一定的项目经验积累的工程师来说,是有一定的直观感受的,但由于没有很好地概括描述或通过一个有权威性的嘴巴说出来,而可能被一些只存在于设计纸上的美妙构想而引向错误的方向,导致劳民伤财,积重难返。最简单的道理,却最容易被人们一遍又一遍地触犯着,所以想把它们写下来,一方面提醒自己以后少受这样的诱惑而犯错,另一方面也希望给类似应用场景与想法的朋友有一个权威性的归纳与佐证。

以下大都属于充分尊重原博客基础上的意译,穿插部分自己的看法。

google机器学习团队开发机器学习系统Seti的一些经验教训

这里说的机器学习系统其实是指一个分类系统(或者说模式识别系统),大部分情况下,这两者可以等同而视之,但在回复里也有人指出机器学习的范畴应该比较模式识别更大,这里不再执着于谁大谁小的问题,只需要知道,下面提到的机器学习系统或SeTI主要是一个分类器,它具有如下的一些特点:

对于一个预测或分类问题,如果你没有足够的数据量,你得关注于如何在少量的数据样本下充分利用统计知识构建一个精巧的分类器,反之,如果你的数据量爆棚,你就得关注你的系统如何才能适应如此庞大的样本量,并从中挖掘中有用的信息来。SeTI所解决的问题规模大体上是像下表所描述的那样的:

Training set size Unique features

Mean 100 Billion 1 Billion

Median 1 Billion 10 Million

通常来说,一个好的机器学习系统需要更多地强调精度,但面对一个大型的系统时作这样的片面强调容易犯下很多错误,以下是我们在开发Seti过程中积累的几个经验教训,当然有一些是事后我们才总结出来的,当时我们并没有意识到。(注:作者应该是想说,有些因素跟精度一样不能忽视,甚至更重要)

1、保持系统的简单,即使这意味着会损失一定的精度。(Keep it simple, even at the expense of a little accuracy)

诱惑:让你的分类器在不同领域的应用中都具有高精度是非常重要的,所以我们应该专注于算法的精度上。

但是,实际中的算法有其它几个方面具有同等重要的地位:

容易使用:如果这个系统还有其它人或其它团队在使用,他们必定希望这个系统在配置与使用上都是简单的,他们可能不是机器学习的专家,所以他们也不希望把时间浪费在系统的启动与运作上。

系统的可靠性:大家更注重在实际环境中部署一个可靠的机器学习系统,它必需是稳定的并且不需要总是去关注它是否崩溃的。早期的Seti虽然在精度上更好,但它的复杂性、对网络与GFS文件系统的压力、需要持续关注等缺点导致了很多人都不愿意去部署它。

(很多情况下,我们都可以认为以上两点是等价的,即:系统的简单易用约等于稳定可靠)

Seti通常应用于对原有系统有极大提升效果的场景(参看教训3),因此大家都不太会关注Seti所使用的不同算法所造成的在精度上的细微差别。另一方面,这些精度上的小差别经常可以通过其它的手段来抹平,比如更好的数据过滤、添加其它更合适的特征、调整参数等等,如果这个系统是稳定的、可扩展的、简单易用的,以上的这些额外的步骤也更容易实现,而这些系统特点往往决定了它会被团队接受或抛弃。

对于学术界来说,设计一个精度稍差但更稳定与简单易用的算法并不是一个有吸引力的事情,但依据我们的经验,这个在实际当中具有非凡的价值。

2、从当前的一些具体的应用开始。(Start with a few specific applications in mind)

诱惑:构建一个不限定于任何特定应用的系统,不单能囊括当前的各类应用,还能适用于未来的各种分类任务。

但是,我们决定聚焦于一小撮的初始的应用上,这个决定基于如下几个原因:

3、知道什么时候说“不”。(Know when to say “no”)

诱惑:我们有了锤子,所以我们眼中什么都是钉子,任何的问题都可以用机器学习系统来解决。