资讯 人工智能
此为临时链接,仅用于文章预览,将在时失效

论机器学习的可重复性危机

作者:陈隽仪 编辑:杨晓凡
2018/03/30 11:10

雷锋网 AI 科技评论按:机器学习研究者、Jetpac 的 CTO、《The Public Data Handbook》和《The Big Data Glossary for O’Reilly》两本书的作者 Pete Warden 最近在自己的个人博客上发表了一篇文章,讨论了机器学习领域令人头疼的模型的可重复性问题,广大研究人员们想必深有同感。雷锋网 AI 科技评论把文章编译如下。

论机器学习的可重复性危机

我最近和朋友聊到,他的初创企业的机器学习模型组织得太糟糕了,在他的团队成员间基于互相的成果做进一步开发,以及提交给客户时都出现了严重的问题。即便是原作者训练同一个模型有时也无法得到相似的结果。他希望我能推荐一个解决方案,但我必须承认,我自己的工作也在和类似的问题作斗争。这很难向那些非机器学习领域的人解释,但事实上,当我们尝试追踪变化、从零开始重建模型的时候仍然是摸着黑前进的。这种状况太糟糕了,有时候就好像回到了那个编程的时候没有源代码控制的年代。

当我在90年代中期开始正式编程时,源代码的变更追踪和合并的标准是Microsoft’s Visual SourceSafe。简单说一下它的使用体验,它没有原子登入,所以不能支持多个人编辑同一个文件;网络副本要连夜扫描以避免奇怪的崩溃现象,甚至这还不能保证数据库在早上还保持完好无损。尽管如此,我仍感觉幸运,有一次面试的地方,我注意到有一面墙,上面贴满了便利贴,每张对应文件树中的一个文件。程序员要修改哪个文件的时候就把对应的便利贴摘下来,然后修改完成以后再把它粘回去!

说了这么多都是为了说明,当提到版本控制,我从来不是一个羞怯的人。我曾经经历过一些糟糕的系统,如果有需要的话,我现在都还能用 rsync 和铁丝网去捣鼓出一个解决方案。即便我已经经历了这么多风风雨雨,凭良心说,机器学习还是我遇到过的在代码合并和变更追踪方面最糟糕的系统。

为了解释清楚这是为什么,下面我列举一个典型的机器学习模型开发周期

这已经是发生在一位认真负责的研究人员身上的比较乐观的景象了,同时你想必也已经看出来了,让另一个人接手把所有这些步骤重复一遍,最终还要得到同样的结果会有多难。每一个关键的地方都是不和谐的点能偷溜进来的机会。事情更诡异的是,ML 框架会为了运行速度牺牲一部分数值计算的精度,所以,如果一个人能奇迹般地把每一步准确地复制过去,最终结果依然会有细微的差别!

在许多现实例子中,研究人员不会记笔记或者准确记住她做过什么,所以就算是她本人也不能再现模型。就算她能,模型框架的代码也会随着时间变化,有时甚至是很彻底的,所以为了让一切正常工作,她还需要给整个系统做快照。当我接触那些 ML 研究人员,希望他们帮我重现模型结果时,他们对于需要花费的时间都相当大方,但即便在这些原作者的帮助下,我也还是常常需要花费数月的时间。

为什么这些很重要?有几个朋友联系我说,为了在自己的论文里复现别人发表的模型,他们花费了很多精力。如果他们不能得到和原作者相同的准确性,那他们怎么能说自己得到了新的结果是进步?同时很显然地,在依赖模型的产品系统中,如果你不能重建这些模型来适应改变的需求设计和平台要求,这也会令人担心。从这个角度上看,你的模型就从技术债务上的高利率信用卡变得更像某种高利贷放贷人了。同时这对于研究实验也是令人窒息的,因为既然改代码和训练数据都是很难撤回的操作,那么要试更多的变量似乎是一个困境,就像在没有源代码控制的时候修改代码一样会增加实验中改变变量花费的精力。

也不全是沮丧和厄运的消息,这个圈子里也有一些关于复现的值得注意的努力。其中一个我最喜欢的是 Toby Boyd 团队领导 the TensorFlow Benchmarks 的项目。他们团队的使命是,不仅要准确展现出如何在各种不同的平台上以很高的训练速度训练出一些顶级的模型,同时还要保证这些模型训练完毕之后可以达到预期的准确率。我曾见过他为了让模型达到那种精度付出了很多心血,由于我上面列出的任何一个步骤中发生一点变化都会影响到结果,而且也没有什么简单的方法可以发现背后的原因是什么,即便有原作者参与帮忙。所以他仍在努力。这也是一个没有止境的工作,因为来自 TensorFlow 的,GPU 驱动的,甚至数据集上的变化,都能对准确性产生微妙的影响。通过这项工作,Toby 的团队帮我们找到并且修好了由于模型上的 TensorFlow 的改变而产生的 bug 和追踪到由外部依赖项造成的问题,但这仍然只能覆盖到相对很少的一部分平台和模型。

我还知道一些其他的团队在认真考虑把模型用在生产上,花了和复现别人的模型差不多的时间精力保证他们的训练结果能被别人复现,但问题在于这仍旧是一个非常手动的过程。没有什么东西可以等同于源代码控制,甚至为了未来能成功再次运行模型应该采用什么样的训练流程都没有公认的最佳做法。。对此我也没有解决方案,但为了方便讨论,在这里列举了一些我觉得可能有用的原则:

我已经在开源社区和初创公司里看到了一些尝试解决这些问题的有趣尝试,对我个人而言,我巴不得马上就能减少自己花在处理这些相关问题上的时间,但我也不期待短期能完全解决这个问题。无论我们想出什么都会对我们处理模型的方法产生变化,同样的,源代码控制意味着对我们个人编程过程也是一个大的改变。将来我们的训练的一致性和教育这个圈子的后辈的效果一定会和我们想出来的工具一样繁荣,我都等不及看到这些了。

via Pete Warden's blog,雷锋网 AI 科技评论编译

长按图片保存图片,分享给好友或朋友圈

论机器学习的可重复性危机

扫码查看文章

正在生成分享图...

取消
相关文章