有许多的人想要进入机器学习领域进行工作和研究,却最终黯然退出。这些选择退出的人中有很大一部分是非常出色的程序员,他们精通各种数据结构和算法,在软件开发和系统级编程上有着十足的经验,但是当他们来到机器学习的领域后,却十分的不适应,并最终选择了退出。

对此,我想借用木匠和铁匠之间的差异,来试图说明为什么会有这种情况的发生,以及如何脱离这种情况。

木匠的特质

在我看来,过去的数十年间,大学和互联网慕课平台已经通过成熟的计算机教育体系造就了一大批非常优秀的软件开发者。而由于软件开发和编程这件事本身的特质,我可以说几乎所有的这些人都在某种程度上变成了木匠。

什么是木匠的特质?对于一个木匠来说,他们必须在开始之前计划好每块木头应该如何使用,包括应该使用什么材质、每根木头应该切割成多少厘米的长条等等。对于木匠来说,每一件作品必须从开始就计划好,尽管过程中可能出现差错,但是整个过程都是在严密的设计之下进行的。只要你清楚每件工具的使用方法,而且总是在开始前细心的计划,多加练习后,你就能够成为一名出色的木匠。严谨,细致,甚至有点瞻前顾后,这就是木匠的特质。

而对于程序员来说,编程这件事情几乎是木工的翻版。软件开发的过程中,总是需要处理各种细枝末节,防止边界情况的出现,整个程序需要在一开始就做好规划。你每写一行代码,都如同在执行一次木材的切割。这行代码不仅需要你考虑它出现在这里是否合适,更要你考虑它和其他代码之间的作用。如同木匠仔细的量好每次切割的地方,保证木板可以拼接在一起。

除了在工作性质上类似,这篇文章从这两类工作为人们带来快乐的方式进行了比较。这篇文章中提到,木工就和编程可以带给你近似的多巴胺刺激,它们都可以带给你建造的快乐。这也是为什么有很多的程序员有木工作为业余爱好。

铁匠的特质

那么铁匠呢?铁匠所从事的工作相较于木匠而言是完全不同的。他们需要在炎热的熔炉旁边反复敲打铁块,按照自己的经验把铁片弯曲成需要的形状,或者把滚烫的铁水倒进提前铸造好的模具里,等到它凝固之后再进行打磨和加工。

某种程度上来说,锻造一件铁制品和训练一个机器学习模型非常相似。对于机器学习研究人员来说,数据就是他们的铁,模型就是你的模具,GPU是你的熔炉,优化算法则是你的锤子。

在锻铁的过程中,铁匠当然也是有规划的,但是每次的敲打都有可能会产生预料之外的情况,最初锻造时的用料配比也可能在最后产生意想不到的结果。可以说锻造的过程是非常具有随机性的,而机器学习模型的训练过程也是如此。

在训练机器学习模型的过程中,你需要不断地调整参数,观察模型的表现,并根据结果进行进一步的调整。模型的初始化,数据的预处理,以及优化算法的选择都会对最终的结果产生影响。而大部分的影响其实都是来自于这个领域大量实验所积累的经验和直觉,因为你无法完全预测模型在未来的表现。尽管我们总是试图总结一些规律,但是却很难将这些规律重复的应用到机器学习的不同实践中。

但是总体来说,一个出色的铁匠可以借助他的经验培养如何锻造出色的铁器的直觉,而一个出色的机器学习工程师也可以借助他的经验培养如何训练出色的模型的直觉。这种直觉来自于对算法、数据和问题的深入理解,以及大量的实验和调整。这与依赖于测量和定量分析的木匠类工作有很大不同。而我认为,正在这种不同,导致了许多优秀的程序员在机器学习的领域水土不服。

系统性的学习的难题

抛开与木匠类工作在性质上的差异不谈,对于想要入门机器学习的程序员来说最为苦恼的事就是如何系统性的学习关于机器学习的知识。总的来说,市面上的机器学习相关的学习资料和论文都很散乱。大部分的论文都是针对某种特定情况的专门设计,教科书也大多是在罗列各类算法。你很难直接获得下一步应该做什么或者应该学习什么的指导。

尤其是深度学习的崛起,这使得更多的人认为把机器学习模型当作完全的黑盒就可以了。

但是这是非常不正确的做法,因为这将使得你在接触各类机器学习算法的过程中快速的消磨掉自己的热情和耐性。

对此,我十分建议在从传统的统计学习的方法出发来进行学习,尤其是学习理论相关的内容,可以帮助你初步建立机器学习的整个体系。在学习深度学习的过程中,除了了解相关的深度学习算法以外,我非常建阅读关于深度学习的机械可解释性的研究以及关于神经网络内部的归纳偏置如何导致泛化的研究,这将使得你对深度学习有更加深刻的理解,同时也可以使得你更加信任深度学习,最重要是,这可以帮助你建立深度学习为何有效的直觉。

木匠?铁匠?

对于一些接受了传统的计算机编程教育的程序员们来讲,学习机器学习领域的知识是对他们认知上的一次重大挑战。他们不得不从确定性的编程思维方式转变为概率的思维方式,从使用确定性的算法转变为使用随机性的算法,这是一次认知上的革命。很多人在这个过程中感到迷茫。而我认为,这种迷茫的思维产生的原因就是他们继续希望以木匠的思维去处理铁匠的问题。

这些人在到底是成为一个木匠还是成为一个铁匠之间挣扎,在两种不同的工作中纠缠。而他们需要的,也许仅仅只是一次心理上疏导。正是为了处理这种内在的不和谐,我提出了这个关于铁匠和木匠的比喻。也许你可以将这个比喻作为一种特殊的心理辅导,把它放在你心底的某处。当你感到内心的不和谐时,你可以想象自己是一个铁匠或者一个木匠,并且尝试着去适应这个角色。

希望这能够对你有所帮助。