工业界水平的机器学习系统

拜读了林智仁老师昨天在KDD 2012上的talk:Experiences and Lessons in DevelopingIndustry-Strength Machine Learning andData Mining Software,深有感触。印象最深刻的两点是:

  1. 软件质量要高。林老师举了一个数值计算精度的例子。之前林老师在Google中国做访问研究的时候,举过更多例子。
  2. 功能不可过于繁杂。要了解用户需求,帮助用户做选择;不要为追求accuracy的少量提高,而付出系统稳定性下降的代价。

林老师是做数值计算出身的,对代码质量的要求天然高。在工作中不断分析和响应用户需求,把libsvm和liblinear打造得很稳定很强大。同时不断研究新的方法,并着力推进新方法在工业界的应用,为此经常在业界公司做访问研究。这些工作方法都是非常值得我们在公司里做算法研究的人学习的。

在我的实际工作中,也碰到一些学界不大注意的问题,和林老师指出的类似。一个例子是在做广告的点击率预估时,大量训练和测试的时间是消耗在feature construction上,而不是数值算法部分。为此,在并行(或者并发)的时候,这部分计算应该是要尽量分布(distribute)的。

另一个例子是很多研究为了得到更高质量的latent topics,而在LDA之类的模型里增加random variables。而很多这样的模型是不容易有高效的并行训练算法的。另一方面,也有很多改进方式是不影响训练过程的并行化的,并且改进方式更“根本”。我们工作中发现了这些情况,应该向学界反馈。

我想我们有两个方向的努力要做:

  1. 重视基础理论知识的积累。这样在遇到实际工程问题的时候,才能找到尽量”完备”和“美”的解法。
  2. 用工业化的标准要求自己开发的系统。积极总结业内经验,向学术界反馈。

在公司里做算法的人,应该像林老师学习,成为跨越学界和业界的桥梁。