|
更新一段话,Quora上对于Yoshua Bengio的最新访谈,关于一个问题:
对于进入机器学习领域的年轻研究人员,你有什么建议?(What advise do you have for young researchers entering the field of Machine Learning?)
他回答到:
Make sure you have a strong training in math and computer science (including the practical part, i.e., programming). Read books and (lots of) papers but that is not enough: you need to develop your intuitions by (a) programming a bunch of learning algorithms yourself, e.g., trying to reproduce existing papers, and (b) by learning to tune hyper-parameters and explore variants (in architecture, objective function, etc.), e.g., by participating in competitions or trying to improve on published results once you have been able to reproduce them. Then, find collaborators with whom you can brainstorm about ideas and share the workload involved in exploring and testing new ideas. Working with an existing group is ideal, of course, or recruit your own students to work on this with you, if you are a faculty.
---------------------------------------原答案-------------------------------------------
实现很有必要,甚至一定要。都实现一遍倒是不必。
1. 在掌握基本的算法流程、加深对算法的理解之外,实现机器学习算法能够帮助我们建立起一种直觉:数据--模型之间的关系。这一点可能有点玄学的味道...稍微往黑了点说,就是调参的直觉、模型选择的直觉、特征选择/设计的直觉等...经验有的时候是事半功倍的效果。
2. 在实际应用场景中,其实经常会遇到需要实现一些特殊设计的算法。比如要实现某篇paper中的算法/或者自己跑实验,一般情况下这些算法并不是(甚至肯定不是)通用算法包提供的算法,一定要自己实现。这样的时候,如果以前有实现过基础的算法的经验,会有很大帮助。
3. 实现基本的算法,帮助掌握算法流程。这样会更容易应对新的编程框架。
4. 其实很多模型也有很多种解法。拿LR来说,常见的一阶的Gradient Descent、二阶的BFGS/L-BFGS之外(这些是好多库的默认方法),一阶的Back-tracking Line Search方法、Nesterov's Line Search等方法,实现起来(特别是分布式实现)比较复杂,让没有自己实现过任何机器学习算法的人来写。。。还是算了吧。。。
5. 算法的细节:优化、高效计算等(矩阵乘法的加速等)在实际工作中是蛮重要的。因为机器学习在大规模数据下最大的挑战就是如何『算』得更快:收敛速度/计算时间、计算资源/机器开销等。所以得要知道在哪里有优化的空间才行。
6. 但是全部实现一遍确实没必要,不过常用的算法的基本版还是要尽量都写一写的。
。。。
其实第一条是最重要的。。。
说了这么多有没有觉得不写一遍简直有罪?
*随时修正答案,欢迎指出任何不足的地方! |
|