正文
以上这三个场景都是我曾经经历过的。
它让一件事情非常明确——
虽然机器学习是非常吸引人的一个领域,但对一个软件开发者来说,机器学习只是另外一堆技巧,就像多线程编程或者3D图形编程。然而,机器学习是针对特定类别的问题进行设计的。
传统方法如何开启机器学习之路
找几本机器学习相关的书,你会发现这些书往往从基本的定义开始,然后是相关的数学公式阐述,最后是非常复杂的算法。
传统的解答是自下而上的
基本概念的定义和数学理论的表述都是非常清楚、简洁并且绝不模棱两可的。但是,它们非常枯、无聊,并且需要具备一定的数学背景来分析和理解。
这也是大学将机器学习放在研究生课程中的原因?因为教授机器学习的基本原理需要具备多年基础积累。
比如,它建议你具备如下基础:
如果你误入了某些奇怪的、有趣的算法,那你的机器学习之路将会更糟糕。
这个学习机器学习的自下而上和基于算法的方法无处不在。
MOOCs和YouTube上的在线课程也是仿效大学的方式来教授机器学习,如果你具备相关基础或者你已经投入了大量的时间来学习这些高级课程,这没什么问题。但是,这对于大多数的软件开发者并不管用。
如果你到Quora, StackExchange, Reddit这些网站求助如何开始机器学习,你大概会收到同样的答复。
难怪一些软件开发者会不断寻求正确的方法,但结果是不得不回到学校并获得研究生或者博士学历,只有这样他们才觉得可以开始学习机器学习了。
仔细思考一下这个自下而上的机器学习学习方法。它非常缜密、也更系统化,听起来没什么问题,但怎么可能出错呢?
为什么传统的学习方法是错的?
假设你是一个年轻的软件开发者。你已经或多或少学了一些编程语言。现在,你准备开始学习如何开发一个独立的软件。
你告诉你的朋友和家人,你希望以后你的工作是每天都在编程。但他们告诉你,在成为一名程序员之前,你需要一个计算机科学学位。
就这样,你开始了计算机学位的学习。一学期又一学期,你在学习着难解的线性代数,微积分和离散数学。你使用着过时的编程语言。这些都在消磨着你对编程和软件开发的热情。
传统的学习方法与成为一名实践者之间有一个鸿沟
或许你成功的完成了学业,但回过头才发现你并没有学习到任何一个关于现代软件开发的技能、语言、工具,或者其它任何你能够用来开发软件的知识。
看到过与教授机器学习类似的案例吗?
幸运的是,编程已经具有很长的历史了,我们已经找到了正确的方式来教授年轻程序员相关的技能。
对于一个正在学习的程序员,没有必要让他学习计算理论或者计算复杂度理论,或者算法和数据结构的细枝末节。这些知识(算法复杂度和数据结构的细节内容)可以晚点再学。或许应该关注一些特定组合的工具,站在一个从事编程工作且能够交付软件的工程师的角度来看这件事。
如果一个软件开发者想要进行机器学习,他们真的有必要花费多年的时间和大量的金钱去获得数学和更高的学位吗?
答案肯定是否定的!还有更好的方式。
以正确的姿势开始机器学习
像计算机科学课程从来没有关注实践中需要的开发和交付软件的技能一样,机器学习课程和书籍也同样有这样的缺点。
对于机器学习,你需要自上而下的学习方法。这个方法更关注结果:采用最佳的工具组合和平台,解决真实的机器学习问题。
自上而下学习机器学习
以下是我推崇的学习方法:
1.通过系统化流程迭代结果
一旦你会使用工具,那么通过机器学习算法解决问题就相对容易了,你称之为“完美”。
这就非常危险了。
你怎么知道你已经完美解决问题了呢?你怎么知道这个结果是最好的?你怎么就知道这个结果在这个数据集上面是可靠的?
使用机器学习解决相关问题时,你需要系统化。这是一个项目,和软件开发一样,通过良好的处理可以获得高质量的结果,通过不断地迭代得到进一步提升。