做底层 AI 框架和做上层 AI 应用,哪个对自己的学术水平(或综合能力)促进更大?

做底层 AI 框架和做上层 AI 应用,哪个对自己的学术水平(或综合能力)促进更大?

上周开会时遇到了TAMU的胡侠老师,他介绍了他们组最近开发的一个自动机器学习开源框架Auto Keras(Home - Auto-Keras)。胡老师原话是这么说的:“做开源框架是非常有意义的事情,尤其是你的工作在短时间内被很多人关注并使用是非常有成就感的。”

确实如此,很多业内人士正在逐渐把目光投向到更底层更接近“基础设施”的方向上,比如自动调参、大规模机器学习、并行式机器学习。毕竟好的算法想要被更多人使用,就需要降低使用门槛,提供通用的框架。假设如果没有Sklearn,估计做机器学习的人最起码要少一半。如果没有TF或者Torch,做深度学习的人估计也要少一半。

其实严格意义上来说,从提出算法,封装算法,到应用在现实数据集上是一个流水线作业,是从上游到下游的工作。我的一个观察是,做算法研究的很多人代码写的很糙,运行效率可能非常低。举个简单例子,当你展示一个简单的K近邻算法时,你可以写成每次都进行重新搜索,也可以先构造一棵K-D树来降低时间复杂度。仅从逻辑角度来看,前者和后者都是正确的,但效率可能相差不少。这种现象造成了大部分前沿研究的结果不容易落地,因为代码未经优化或者在实现时存在各种各样的bug。我觉得一个非常好的突破角度就是研究如何高效实现各种传统及前沿算法,从最简单的向量化、并行运算,到更复杂的结构设计甚至到大规模的并行计算。如果能把底层框架做好,那么对于工业界和科研界都有很大的意义:

我从去年起开始尝试造一些小轮子,也做了一些小框架。这个过程中有不少全新的感受:

以上观点主要在讨论要不要尝试学习开发框架,尝试造出一些新的轮子。回到正题,「底层框架」哪个「上层应用」更好?我的观点是这取决于你所拥有的技能:

一般来说,大部分人不适合写底层。毕竟优秀的框架已经很多,而且对于系统架构以及代码优化的要求很高,大部分人并不具备所需的知识。而上层应用就显得更接地气,可以加深我们对于数据的敏感度,擅长做上层应用的同学也会是职场offer收割机。其实能够做好上层应用并不容易,这需要对于问题的深入理解。换句话说,底层框架和上层应用分的是不同的蛋糕,侧重点各不相同。

从做研究的角度来看,发明一个算法其实不该是终点。作为算法的提出者更应该自己动手实现自己的模型,毕竟酒香也怕巷子深。