acm-header
登录

ACM通信

BLOG@CACM

过去人们是如何编写机器学习代码的?


菲利普·郭

来源:pgbovine.net

机器学习似乎无处不在!这张图片显示了人们对谷歌搜索的兴趣不断上升2008-2018年的“机器学习”。

在过去的十年中,云计算能力和开源框架的不断增长使得实现机器学习系统比过去容易得多。例如,流行的框架,如TensorFlowKerasPyTorch咖啡,Theano大大降低了用Python等语言编写机器学习代码的障碍。甚至在最近,基于javascript的框架,如TensorFlow.jsConvNet.js,Brain.js使得直接在网络浏览器中进行机器学习(ML)实验成为可能。

然而,程序员并不总是这么容易使用ML。大约十年前,开始尝试使用ML要困难得多,因为这些方便的软件框架还不存在。我模糊地记得,我的研究生院的同事们努力用手工编写健壮的、可重用的ML脚本,经常从他们以前的实验室伙伴那里借用神秘的代码。这让我好奇过去人们是怎么写ML代码的,所以我在推特上发布了以下问题

10年前就开始编写机器学习代码的朋友们,即使它还是在学校(2008年或更早):那时你们使用什么语言/库/框架?

我惊喜地收到了大约200个对我的推文的直接回复,还有更多的转发,我再也不容易找到它们的线程了。在这篇博文中,我将总结其中最显著的发现非常非正式和不科学调查。感谢每个人的回应!

2000年代末

让我们从十年前开始。Python在2000年代中后期开始在ML程序员中崭露头角scikit-learn,以及其他成熟的科学库(例如numpy、scipy)。

尽管Matlab仍然很流行,但由于Python的开源生态系统不断发展,一些前Matlab程序员在这个时代转向了Python。@christiankothe写道他做大多数[ML]在MATLAB中从头开始,也重用别人的求解器。梦想着有一天用Python取代它(好吧,这发生了)。”

在这个时代,Java仍然相当流行,而且非常流行Weka图形环境用于ML算法的原型。

2000年代早期

在21世纪初,Matlab和Java是最著名的ML研究者。一些Matlab程序员从零开始编写他们的模型,而另一些则购买定制的工具箱。几位还提到了使用凯文·墨菲和他的学生提供的免费图书馆

相比之下,没有人提到Java框架,许多人报告说他们自己编写定制的代码:“我从头开始用Java写东西。没有什么比真正理解你的代码更好的了。”从@togelius)更普遍地说,我发现在那些日子里,事情变得更加困难,但同时也更加透明,因为每个人都被迫理解自己的代码,而不是依赖于框架或库。

一些人还提到了这个时代的C和c++,特别是在生产环境或嵌入式设备上运行的性能敏感代码。

1990年代

C和c++在这个时代被引用的频率最高,而框架/库几乎没有。@carmenfontana写道“1999 c++没有库或框架……很老的学校”而且@eigenhector补充道“我使用了c++、STL和一些手工编码的SSE intrinsic。框架?没有——我们只是从零开始写的。”

谷歌AI领导者JeffDean (@JeffDean),联合创造者TensorFlow提到的从C语言开始学习ML1990年用C语言编写神经网络并行训练代码(本科毕业论文项目)

在这个时代,也有一些人提到了Lisp和Prolog,尽管当时还不清楚他们是专门研究ML还是其他更具象征性的AI形式。有些人在这个时代也使用Matlab,但它远没有21世纪初那么流行。

20世纪80年代及更早的年代

我没有得到很多明确提到20世纪80年代或更早的回复,但少数附和的人列出了Lisp(在20世纪80年代早期AI繁荣时期非常流行)、C、Prolog和Fortran。@chrisbogart提到C,代表神经网络和遗传算法,1989-1990年。我不记得使用过任何图书馆。”

但迄今为止,它是最古老的ML编程内存的获胜者→@wgl8“用于心电图识别和分析的Fortran II。那是1969年。这种服务还是第一次。没有图书馆,都是手写的。我们放弃的一种方法是使用XPL,但又回到了Fortran。”

分开的想法

仅此而已!在这个非正式的调查中提到的其他不太常见的语言包括Perl、R、Stata、Scala、Lua和Haskell。我想用两句话来结束我的演讲,这两句话很好地捕捉了“过去的好/坏”和现代框架驱动的ML时代之间的对比:

第一个是从@greglinden“1990年底在亚马逊使用C语言(系统管理员使用+ Perl), 1990年初才使用C语言进行研究。那时候没有框架,都是从零开始。同样重要的是,计算量和数据比x100-1000小。不仅是现在可用的工具,还有工具所支持的数据和计算。”我喜欢他提到的工具的进步和我们现代工具可以处理的计算量和数据量的并行增加之间的共同进化。

@pbloemesquire写道“我们今天所拥有的那些设计精良、维护良好的框架在当时还不存在。我们有太多不同的方向可以选择。”我认为这是一个有趣的观点因为我认为我们有更多的但我可以看到,围绕少数最流行的框架进行标准化将使现在开始变得更容易。框架实际上限制了选择,如果它们根据用户的需求设计得很好,这可能是一件好事。


评论


阿图罗Alatriste

伟大的文章菲利普。我想说的是,现在有一种来自开源的“共享文化”。在过去的日子里,许多人和公司都试图将代码作为一个秘密公式。的问候!:)


显示1评论

Baidu
map