机器学习理论研究者要不要学编程和数据结构与算法

在我看来,是非常重要的!

去年有一个数学系的博士生找到我,她发明了一份离线数据流聚类的算法,我实现代码。拿到她的公式算法流程后,听她讲了一遍,有很多问题。

这个聚类算法是基于各种各样的聚类算法改的,可以看出,没什么特别的创新之处。这不用说,这是大多数算法研究的现状。

不出所料,我在帮她写代码的时候,每一步都会新产生各种各样的问题。


我在用C++给她实现算法,有很多细节的部分,包括是存数组的index,还是值,各种排序,怎么做。这些问题那些搞数学出身的根本考虑不到。

然后,整个算法开辟了大量的数组,空间复杂度非常大,可是我问她,她连空间复杂度时间复杂度都不会求。

想问问算法的并行异步IO读取文件,根本没有考虑的事儿。

事实上,我的编程水平能力,我的算法能力,才是她这个算法性能能提高多少的关键。我是用多层循环还是矩阵运算,她的程序速度能有天壤之别。

我也并不是ACM大神,只是一个大三的EE苦逼自学CS的弱渣。她事先只是想找个coder帮她写一下,我也没有参与到算法研发的过程。但是没想到,真的,一个好的算法=Coding+数学。

想想Xgboost这种算法,陈天奇以前也是ACM出身,算法基础杠杠的。人家才能基于GBDT,在并行处理、内存缓存这些地方出彩。人家才能在打kaggle的实战中总结经验,发明新算法。LightGBM也是微软非常出色的工程师根据实际经验改进的,才能降低内存消耗。所以算法不是为了发paper,脑袋瓜子一拍就想出来的,公式打出来就完事的,自己要懂编程,要懂数据结构与算法,要一步一步在工程中就实现,工程中的问题不比数学少!

你也不是大牛教授,没有那么ACM学生给你打杂,还是努力提高自身吧!

发布于 2018-06-10

你可能感兴趣的:(DeepLearning)