推荐序一
认识力柯兄多年,一直认为他是一员虎将——能用代码说话,便绝不打无谓的嘴仗;能用技术与产品直接证明,便绝不空谈“形式”和“主义”。这次,通过力柯兄写的这本书,一如既往地看到他“心有猛虎”的一面:直截了当、大开大合。
在机器学习或者说工业界AI火起来的这几年,程序员这一受众群体一直缺少优秀的教程。有些教程过于浅显,很难称其为“入门教程”,只能称其为科普书;有些教程则过于贴近理论推导,对夯实读者的数理基础大有裨益,也能给研究生提供参考,但对程序员来说,则理论有余而实践不足,常常令注重工程实践的他们一头雾水:毕竟不是每个程序员都有耐心、有必要一门一门地捡回微积分、概率统计、偏微分方程、线性代数和数值计算等基础学科的知识,再真正实现一个属于自己的模型。如何在数学理论和工程实践之间找到一个平衡点,让具有工程背景的广大读者从中获得实际的价值,而非进行简单的脑力或数学训练,这一直是我评价机器学习教程时最为看重的要素。现在,我有幸从力柯兄的成书中找到了这些要素,实乃幸事!
这是一本写给程序员看的机器学习指南。它有针对性地从程序员的视角切入(而非像市面上的大多数机器学习教程一样,从数学的角度切入),介绍了工业界流行的若干模型及应用场景,同时涵盖了神经网络的原理和基础实现、Keras库的使用方法和TensorFlow的部署方案,可谓有的放矢。另外,本书章节不多,却简短有力。这不是一本科普读物,不存在浅尝辄止;也不是一本百科全书,不存在天书符号。这是一本有代码的书,是一本谈工程实现的书。我认为,这正是机器学习领域所缺少的那一类教程。
本书的上篇,让我不由得想起多年前力柯兄刚从硅谷回国高就时,与我围绕“怎样的面试题对于机器学习程序员是合适的”这一话题展开的讨论。那时AI正在升温,无数有着各种背景、能力和水平的人都在尝试接触AI方面的内容,但对于人才的选拔和录用,却似乎没有一个行业内的公认标准和规范。力柯兄的面试题十分简单粗暴,要求面试者仅使用一些基础的Python库去实现一个深度神经网络。这听起来有点让人匪夷所思,但事后细想,却是大道至简。这可以让人抛去繁杂的模型,回归神经网络最本质的前向传播和反向传播,将一切都落实在代码层面。虽然需要运用的数学知识不过是一点高等数学的皮毛,却可以同时从工程和数学两个角度考察候选人的基本功。这几年间,机器学习和深度学习教程及相关公开课越来越多,我阅课无数,竟发现很少有一门课能够沉下心来,仔仔细细地告诉读者和学员,搭建和实现这些神经网络的基础元素从何而来,又为何如此。而本书的上篇,尤其是在第2章中,一丝不苟地介绍了神经元、激活函数和损失函数,从偏微分方程层面严谨地推导反向传播,又从代码层面给出了那道面试题的答案。这都让我不由得敬佩力柯兄在工程上的执着。本书的下篇,则是标准的实战深度学习入门。
至此,我不再“剧透”,因为当你从实战角度阅读这些章节时,会有一种不断发现珍宝的惊喜感,而我更愿意把这些“珍宝”留给本书的读者。
周竟舸,Pinterest机器学习平台技术负责人
2019年12月
推荐序二
近十余年,计算机领域中令人瞩目的亮点就是以深度学习为代表的一系列突破。无论是人脸检测还是图像识别,抑或文本翻译或无人驾驶,这些在过去几十年里让计算机科学家苦苦思索却不能解的种种难题,在深度学习的帮助下,竟被一一攻克,这不能不说是人类科技史上一颗耀眼的明星。
AI技术的突飞猛进,却使传统程序员产生不少困惑:过去常用的数据结构、排序搜索、链表数组等,现在变成了模型、卷积、权重和激活函数……无论是要开发AI应用,还是和算法研究人员共同工作,他们都存在同一个问题:如何学习AI技术?如何理解AI算法人员常用的名词和概念?更重要的是,如何把AI相关的代码和自己的软件开发经验联系起来?
现在市面上已经有很多深度学习和机器学习教程了,其中也不乏从实例入手、以代码实现为重点的书籍,但并没有一本书真正地从程序员的视角来看待深度学习技术。或者,我们也可以这么说,大部分相关书籍的重点是讲解深度学习理论,所用的实例是解释深度学习理论的实际应用。尽管有不少书籍在讲解理论和代码时详尽而深入,却没有涉及核心问题:要解决这个问题,为什么非用深度学习或机器学习不可?没有这些方法就不能做吗?用深度学习处理该问题的优势是什么?是十全十美,还是存在问题?
打开本书,我惊喜地发现它并非像市面上的其他书籍那样,直接把各种新鲜概念放到读者面前并强迫他们接受。它一开始就没有在机器学习概念上过多纠缠,而是先快速展示了简短的AI实现代码的结构和流程,然后带出一些常常让初学者疑惑的问题,针对这些问题再带出新的内容。我们可以看到,本书每一章都用到了类似的形式:阐述一个领域中的实际问题,提出不同的解决方法,简要探讨不同的方法,找到人们难以解决的问题,然后解释机器学习或深度学习处理这些问题的原理。读者了解到的并非单纯的机器学习理论,而是不同领域的具体技术挑战和相关算法的解决方案,从而真正理解机器学习的真正意义。
必须要说的是,作者在美国工作多年,养成了求真务实和独立思考的习惯,我们从书中能感受到他独特的风格,并有愉悦的阅读体验。本书在理论讲解方面也没有概念堆砌的枯燥无味,作者常常加入一些对技术的调侃和个人见解,以供读者思考。在代码解析阶段,作者着眼于整体框架与流程,把重点放在理论中的网络结构如何在实际代码中实现,而不会浪费篇幅在代码的语言细节上。
阅读本书,不但是对不同领域AI开发的学习,也是一次以资深程序员的视角去审视相关代码实现的体验。本书无论是对于应用开发程序员,还是对于算法研究人员,都相当有价值,非常值得阅读。
喻杰博士,华为智能车云首席技术官
2019年12月
推荐序三
随着AlphaGo在人机大战中一举成名,关于机器学习的研究开始备受人们关注。机器学习和神经网络已经被广泛应用于互联网的各个方面,例如搜索、广告、无人驾驶、智能家居,等等。AI井喷式发展的主要动力如下。
其一,数据的积累。各大IT公司都拥有了自己的数据平台,数据积累的速度越来越快。各大高校针对不同的机器学习任务,积累了多样化的数据集。
其二,计算机性能指数级的增长。从当初的CPU到GPU,再从GPU到专门为AI设计的芯片,都提供了强大而高效的并行计算能力,大大推动了AI算法的进步。
其三,AI理论及模型的突破,例如卷积网络、长短期记忆等。
其四,深度学习开源框架日趋完善。TensorFlow是当前领先的深度学习开源框架,越来越多的人在使用它从事计算机视觉、自然语言处理、语音识别和一般性的预测分析工作。TensorFlow集成的Keras是为人类而非机器设计的API,易于学习和使用。
这是一本非常适合程序员入门和实践深度学习的书,理论和实践并重,使用Keras作为机器学习框架,侧重于AI 算法实现。
本书以从代码出发,再回归AI相关原理为宗旨,深入浅出、循序渐进地讲解了Keras及常见的深度学习网络,还讲解了深度学习在不同领域的应用及模型的部署与服务。读者在一步步探索AI算法奥秘的同时,也在享受解决问题的喜悦和成就感,并开启深度学习之旅。
衷心地希望有志于AI学习的读者抓住机会,早做准备,成为AI时代的弄潮儿。
王昀绩,Google AI高级研究员
2019年12月