当前位置: 华文问答 > 数码

有没有必要把机器学习算法自己实现一遍?

2015-10-22数码

不少自学的朋友很容易陷入到焦虑当中,尤其是在学习理论受挫之后。 再加上不少人是码农出身,实现算法是就成了最容易缓解焦虑的途径。

然而要警惕掉到「用忙碌而逃避困难「的陷阱当中去,更好的缓解焦虑的方法是应用算法,去解决具体问题。 众所周知,机器学习最不友好的部分不是编程,而是背后的数学原理,以及如何使用它来解决问题。照我来看,只有两种情况值得动手造轮子:

  • 做研究,没现成的轮子可用。以我的个人经验和观察,大部分研究的demo质量都比较堪忧。侧面上反映了「科研工作者不等于好工程师」
  • 对自己的学习进度感到怀疑,可以试着实现一下算法。但这种实现最多是验证你学会了思路,而不能用于生产,因为效率和优化都比较差
  • 除此之外,对于研究者来说,复现前沿研究也有一定的价值,因为可能:

  • 作者并没有开源(必须自己造轮子)
  • 在复现过程中你可能会发现作者值得改进的方向,发掘了新的灌水方向
  • 在复现过程中你可能发现作者的思路其实根本就是错的,这也是为什么很多paper不会公开代码,那么避开这个陷阱
  • 对于大部分人而言,想要了解怎么调参、每个参数的含义,都不必重新实现算法。可以直接阅读文档,也可以在在各种场景中慢慢摸索。比如参加比赛的过程中,或者实际工作里,甚至看看博客、读读知乎都可以有些收获。 同时,如果能够通过解决实际问题来加深对模型的理解,还可以增强自己的信心,比实现算法可能要更为划算且有效。

    在不少公司,机器学习研究员和工程师是两个岗位,前者提出思路和理论,后者去高效的实现。从这点上也不难看出一个实践者不一定需要具备两方面技能,毕竟时间有限。 如果你对自己的定位是使用者(更接近工程师的话),多补补理论是当务之急。如果你想成为一个研究者,必要的编程能力要有,但不要花过多的时间在提高码力上,能做好理论已经很难,可以交给工程师实现、优化你的理论。

    所以,没什么特殊情况,实现算法可以当做玩票,多看看模型、了解一些理论、应用到具体案例上去才是正事。

    对于自学的朋友,也可以参考一下我的文章:如何用3个月零基础入门机器学习?