最近被一个刚接触机器学习不久的同学问了一个问题:机器学习是不是调调包就行了,感觉门槛也没那么高。借着这个问题我谈谈我个人的看法,同时也给刚入门机器学习的同学提一些学习的建议。
搞机器学习是不是调调包就行了呢?非也。这个说法不仅不对,而且如果一直有“调包能解决机器学习大部分问题”这样一个观念,很难把机器学习学好。机器学习确实有很多封装的非常好的开源工具可以使用,比如深度学习中的Tensorflow、Pytorch,甚至是把很多常用模型结构都封装好的Keras;还有基础的机器学习包例如Sklearn、XGBoost、LightGBM等等。调这些包确实能比较快的把一个代码流程跑通。但是它并不能真正解决面临的算法问题。
机器学习的核心是对3个方面的深入理解:业务问题、数据、模型原理。而调包只是一个提升工程实现效率的工具。只会调包而不能深入理解上述3个方面,相当于空中楼阁。更重要的是,如果抱着调包解决一切的观念学机器学习,可能会形成“懒得思考背后的原理,只要会调包,模型跑通就行了”这样的学习习惯,导致学习和实践的过程中不思考原理,直接调包跑代码,很难真正入门机器学习,掌握这个学科的精髓。
如何才能避免成为调包侠呢?下面给大家提了4点建议,希望对机器学习新手有所帮助。
第一条建议是多看顶会论文的原文。定期跟进一些机器学习、人工智能的顶会最新论文,例如NIPS、ICLR、CVPR、ICML这种偏学术的会议,以及WWW、SIGIR、KDD、AAAI等偏应用、偏细分方向的会议。现在很多公众号、知乎的博主会为大家整理一些论文解析,也包括我,但是不要局限于这些二手资料。这些解析可以当做一个论文导读,想完全吸收论文的知识,还需要自己认真研读,并且把这篇论文的典型related work也读一遍,有助于对这类工作有一个全局的认识。
第二条建议是多根据开源代码进行实践。我们在实际工作中解决一个问题时,最应该参考的是之前已经成熟的、效果显著的业内工作的开源代码,并在开源代码的基础上增加自己的优化点。业内很多论文的代码,你如果认真读一下会发现,某个领域不同论文的代码很多部分是相同的。这是因为那些顶会工作,也是建立在前人工作的基础上,基于前人的代码进行修改,增加自己的优化点。通过阅读和实践前人顶会工作代码,一方面可以搭建权威的模型baseline,提升迭代效率;另一方面也能深入到经典模型的细节,掌握实现方法。
第三条建议是不断夯实自己的机器学习基础知识。这里的机器学习基础知识主要包括两大类。第一类是偏数学的基础知识,是机器学习优化算法的基础,包括数理统计、概率论、凸优化等等。第二类是机器学习和深度学习的基础知识,这里推荐看一些经典书籍,入门书籍包括周志华的西瓜书、李航的统计机器学习;更深入的可以看深度学习花书、PRML等。
第四条建议是锻炼自己对数据的理解。实际工作中,搭建模型可能只占不到20%的时间,更重要的是前期对具体问题和数据的理解,这就需要提升自己的数据分析能力。例如在Kaggle上有很多数据竞赛,都是一些实际问题,可以看看那些优胜方案是如何从数据开始深入分析,找到解决问题的方法甚至是一些trick的。同时在一些偏应用的顶会论文中,也有一些数据分析,以及作者是如何根据数据的分析结果进行思考,得到解决问题的方案的过程。通过学习这些问题解决思考过程,可以不断提升自己对数据和问题的认知。最后,要多实践,自己也去参加一些Kaggle比赛,在实践中掌握数据分析的方法。
总之,想成为一个真正的算法工程师,而不只是止步于调包仙人,就要不断强迫自己走出舒适圈,去更深入的学习相关知识。看顶会论文原文,可以帮助我们扩展视野,学习前辈们的思考方法。根据代码进行实践,可以帮助我们精通模型实现细节,扎实模型方面的工程开发能力。夯实基础知识,让我们可以知其然也知所以然,而不是浮于表面。提升对数据的理解,让我们在实际工作中更加游刃有余,提出解决问题的好想法。
END