1.开篇
1.1 为什么我开始写这个系列博客
说五年前我还在某A云公司的时候,身在一个机器学习算法组,对机器学习怀有浓厚的兴趣。花了好多的时间来试图搞清楚各种流行的机器学习算法,经常周末也跟同事探讨公式的推倒和背后的意义。写博客的主要动力是让自己能够更好的理解机器学习。
后来坚持了没有太久的时间就换到大数据方向了,最主要的原因是觉得自己数学天赋太差,尤其是数学。当初学习的时候主要参考的PRML,Andrew Moore的PPT,Andrew Ng的公开课,plukids博客,另外加上淘宝斌强哥的各种悉心指导。但是学了好久,公式能大概看懂是怎么回事,不过自己徒手推出来实在是太艰难了。PRML的习题,甚至是具体数学的习题,都很难做得出来。
后面的发生的事情就理所当然了,既然很难在这个领域做到核心(我的理解是具有及其好的数学天赋作为后盾才能做到机器学习的核心),那么为什么不换一个更适合自己的方向呢?恩好吧,基础数据架构(Infra)看起来是个不错的方向,不需要理解太多的数学(除了真的需要去实现Paxos)。做Infra如果有架构设计的基础,另外加上勤奋,多多少少还是能做出一些东西的。
为什么我又要重新开始写机器学习相关的文章了?最主要的原因是现在的机器学习和五年前、十年前区别很大。最大的不同是,自从深度学习成为了机器学习舞台上最重要的一个角色起,机器学习变得更加真实了,利用深度学习可以做出很多很有意思的真实世界的应用,而这些东西在几年前的门槛要高得多。我在本文之后会更详细的展开此点。
此外这几年的工具发展神速,利用TensorFlow、MXNet或者其他类似的工具可以很容易的开始自己的pet project,也不用理解太多背后的细节。而在几年前能用的现成工具寥寥无几,而且十分的碎片化,比如说如果想要做分类器吧,需要用libsvm,需要搞跨语言调用。如果要换个算法的话,那可是要命的事情了。当然这些东西对于大公司来说都不是事儿,但是对于个人学习者来说需要投入的经历太多了,远不是业余时间可以承担的。