推荐序一

认识力柯兄多年,一直认为他是一员虎将——能用代码说话,便绝不打无谓的嘴仗;能用技术与产品直接证明,便绝不空谈“形式”和“主义”。这次,通过力柯兄写的这本书,一如既往地看到他“心有猛虎”的一面:直截了当、大开大合。

在机器学习或者说工业界AI火起来的这几年,程序员这一受众群体一直缺少优秀的教程。有些教程过于浅显,很难称其为“入门教程”,只能称其为科普书;有些教程则过于贴近理论推导,对夯实读者的数理基础大有裨益,也能给研究生提供参考,但对程序员来说,则理论有余而实践不足,常常令注重工程实践的他们一头雾水:毕竟不是每个程序员都有耐心、有必要一门一门地捡回微积分、概率统计、偏微分方程、线性代数和数值计算等基础学科的知识,再真正实现一个属于自己的模型。如何在数学理论和工程实践之间找到一个平衡点,让具有工程背景的广大读者从中获得实际的价值,而非进行简单的脑力或数学训练,这一直是我评价机器学习教程时最为看重的要素。现在,我有幸从力柯兄的成书中找到了这些要素,实乃幸事!

这是一本写给程序员看的机器学习指南。它有针对性地从程序员的视角切入(而非像市面上的大多数机器学习教程一样,从数学的角度切入),介绍了工业界流行的若干模型及应用场景,同时涵盖了神经网络的原理和基础实现、Keras库的使用方法和TensorFlow的部署方案,可谓有的放矢。另外,本书章节不多,却简短有力。这不是一本科普读物,不存在浅尝辄止;也不是一本百科全书,不存在天书符号。这是一本有代码的书,是一本谈工程实现的书。我认为,这正是机器学习领域所缺少的那一类教程。

本书的上篇,让我不由得想起多年前力柯兄刚从硅谷回国高就时,与我围绕“怎样的面试题对于机器学习程序员是合适的”这一话题展开的讨论。那时AI正在升温,无数有着各种背景、能力和水平的人都在尝试接触AI方面的内容,但对于人才的选拔和录用,却似乎没有一个行业内的公认标准和规范。力柯兄的面试题十分简单粗暴,要求面试者仅使用一些基础的Python库去实现一个深度神经网络。这听起来有点让人匪夷所思,但事后细想,却是大道至简。这可以让人抛去繁杂的模型,回归神经网络最本质的前向传播和反向传播,将一切都落实在代码层面。虽然需要运用的数学知识不过是一点高等数学的皮毛,却可以同时从工程和数学两个角度考察候选人的基本功。这几年间,机器学习和深度学习教程及相关公开课越来越多,我阅课无数,竟发现很少有一门课能够沉下心来,仔仔细细地告诉读者和学员,搭建和实现这些神经网络的基础元素从何而来,又为何如此。而本书的上篇,尤其是在第2章中,一丝不苟地介绍了神经元、激活函数和损失函数,从偏微分方程层面严谨地推导反向传播,又从代码层面给出了那道面试题的答案。这都让我不由得敬佩力柯兄在工程上的执着。本书的下篇,则是标准的深度学习入门。

至此,我不再“剧透”,因为当你从实战角度阅读这些章节时,会有一种不断发现珍宝的惊喜感,而我更愿意把这些“珍宝”留给本书的读者。

周竟舸,Pinterest机器学习平台技术负责人

2019年12月