图书前言

前  言

本教科书并未包含新的科研成果,我所做的工作仅仅是整理、编辑已有的知识,然后通过一些示例和我自己的认识对其进行解释说明。我将努力通过广泛的引用、例证来涵盖所有相关内容,同时流畅地为大家讲解。但是,现在的世界充满了“电子设备和开关”,想要罗列并准确汇总所有观点或理念是非常困难的,因为网上存在大量的优秀资料(社交媒体的发展壮大让网络世界变得异常活跃)。我会努力在第2版中更正所有错误和疏忽之处,也欢迎大家不吝指正并提出宝贵意见或建议。

在《深入浅出深度学习》中,我给出了一些历史背景注释,指出给定观点首次披露的时间。之所以这样做,不仅是为了佐证相应观点的真实性,也是为了让读者有一个明确的时间线。但需要注意的是,这个时间线可能会产生一定的误导,因为某个观点或技术首次被提出或发明的时间并不一定就是其作为一项机器学习技术被采用的时间。这种情况比较常见,当然,也并不全是这种情况。

《深入浅出深度学习》是对深度学习的初级介绍。深度学习是采用深度人工神经网络进行的一种特殊的学习类型,不过,现在深度学习和人工神经网络被认为是同一个专题领域。人工神经网络是机器学习的一个子领域,而机器学习又是统计学和人工智能(AI)的一个子领域。相比于统计学,人工神经网络在人工智能领域要更为流行。现在,深度学习已经不满足于仅仅解决一个子领域下的又一个子领域内的问题,而是尝试解决整个人工智能领域的问题。现在,深度学习已成功进入越来越多的人工智能领域,如推理和计划,而这两者曾经是逻辑人工智能(也称为“有效的老式人工智能”,简称GOFAI)的重要研究领域。从这种意义上讲,我们可以说深度学习是人工智能领域的一种方法,而不只是人工智能的一个子领域下的一个子领域。

有一种来自剑道 的古老观点,非常适合探索全新的先进技术。这种观点就是,学习武术分为四个阶段:大、强、快、轻。“大”阶段指的是所有动作都必须很大并且正确。在这一阶段,人们需要确保技术、方法准确无误,使肌肉逐渐适应新的动作。在做大动作的过程中,人们在不知不觉中开始变得强壮。“强”是下一个阶段,在这一阶段,人们需要完成高强度的运动。我们已经学会了如何正确完成动作,现在需要增加力量,提高强度,从而本能地变得越来越快。在学习“快”的过程中,我们开始“投机取巧”,采用一定的“简约”方法。这种简约就促成了“轻”,也就是“刚刚好”。在这一阶段,习练者已经成为大师,不仅所有动作都准确无误,而且动作从强转为快,再转回强。重要的是,做动作时似乎并不费太大的力气,给人一种举重若轻的感觉。这就是掌握某种武术的方法,并且可以推广到其他技术。从隐喻的意义上来说,深度学习也可以被认为是一种技术,因为它在一定程度上也包含持续的改进。《深入浅出深度学习》并不是包罗万象的综合性参考资料,而只是作为教科书来介绍深度学习的“大”阶段。如果想要详细了解“强”阶段,建议大家阅读参考文献[1],对于“快”阶段,建议大家阅读参考文献[2],而对于“轻”阶段,则建议大家阅读参考文献[3]。这些都是深度学习中非常重要的文献,有能力的研究人士应该认真阅读所有这些参考资料。

此后,“习练者”成为“大师”(成为大师并不是最终目的,而是真正的开始),他应该准备好撰写研究论文,相关内容可在arxiv.com上的“Learning”下找到。绝大多数深度学习研究人员都在arxiv.com上非常活跃,并且会定期发布他们的研究成果预印本。根据你的专业研究方向,还可以查看“Computation and Language”“Sound”和“Computer Vision”等类别。你可以将感兴趣的类别设为所用Web浏览器的主页,然后每天进行检查,这是一种非常好的做法。令人感到意外的是,arxiv.com上的“Neural and Evolutionary Computation”并不是查找深度学习论文的最佳位置,因为这是一个相当新的类别,一些深度学习研究人员不会将其作品标记在这一类别下面,不过,随着这一类别发展得越来越成熟,其重要性可能也会变得越来越高。

《深入浅出深度学习》中的代码都是使用Python 3编写的,绝大多数使用Keras库的代码都是参考文献[2]中的代码的修改版本。他们的书 中提供了大量的代码,并附带了一些相关的解释说明,而我们提供的代码数量相对要少一些,而且进行了重新编写,使其更加直观,并添加了丰富的注释。我们提供的代码全都经过广泛、严格的测试,希望这些代码都能正常运行。但是,由于《深入浅出深度学习》只是初级的介绍,我们不能认为读者对深度架构编码非常熟悉,因此,会帮助读者解决《深入浅出深度学习》中所有代码可能包含的问题。如果想要获取错误修复和更新的代码的完整列表,以及用于提交新错误的详细联系信息,可以访问《深入浅出深度学习》的代码库github.com/skansi/dl_book,而在提交新的错误修复请求之前,请一定要先检查该列表和代码的更新版本。

作为一门学科,人工智能可被看成一种“哲学工程”。我之所以这么说,是因为人工智能就是提取哲学观点并生成实现它们的算法的过程。术语“哲学”被广泛认为是包含众多科学的一个术语,其中包含最近 成为独立科学的一些科学(心理学、认知科学和结构主义语言学)以及有望成为独立科学的一些科学(逻辑学和本体论 )。

为什么要热衷于复制这种广义上的哲学呢?如果你考虑人工智能中的哪些主题比较有趣或有意义,就会发现,在最基本的层面上,人工智能会复制很多哲学概念来完成一系列操作,例如构建可以思考的机器、了解业务、明确意义、理性操作、处理不确定性问题、协作实现目标、处理和讨论相关对象等。很少会看到使用非哲学术语的人工智能智能体的定义,例如“可以路由互联网流量的机器”“可以预测机械手臂最优载荷的程序”“用于识别计算机恶意软件的程序”“用于生成某个命题的形式化证明的应用程序”“可以在国际象棋对弈中获胜的机器”以及“可以从扫描页面中识别字母的子例程”。奇怪的是,所有这些都是过去实际的人工智能应用,此类机器总是会登上新闻头条。

然而,问题在于,当我们将其应用到工作以后,它不再被认为是“智能的”,而仅仅是精细的计算。人工智能的发展历史上充满了这种示例。 特定问题的系统化解决方案需要给定问题的完整形式化规约,给出完整的规约后,对其应用某种已知的工具, 此时,不再将其认为是一种神秘的类人机器,而开始将其认为是“单纯的计算”。哲学用于处理一些难以处理的概念,以定义诸如知识、内涵、参考、推理等内容,并且所有这些内容都被认为是智能行为必不可少的。这就是为什么在广义上来说,人工智能属于哲学概念工程处理的范畴。

但是,不要低估工程处理部分。哲学倾向于重新检验观点,工程处理则是渐进式的,某个问题得到解决后,即认为其已完成。人工智能具有重新访问旧任务和旧问题的倾向(这使其与哲学非常类似),但它也需要可测量的进展,在这种意义上来说,新技术需要带来某些新的成果(这就是其具备工程处理特性的一面)。这种追求新奇的特性可以带来比问题上次的结果更好的结果 、新问题的公式表示 或位于基准以下但可以推广到其他问题的结果。

工程处理是渐进式的,完成某项工作后,会利用它并在其基础上进行构建。这意味着,我们不需要再次实现所有内容,无谓地重复是没有意义的。但是,了解轮子发明背后的理念并尝试自己制作轮子却有很大的价值。从这个意义上来说,你应该尝试重新创建我们将要探索的代码,看看它们的工作方式,还可以尝试使用纯Python语言来重新实现已经完成的Keras层。如果你这样做了,那么求解的过程很可能会变得比较慢,却可以获得一些宝贵的见解。当你感觉自己有了足够的了解之后,应该使用Keras或其他任何框架来构建更为复杂精美的对象。

在当今世界,团队协作非常重要,每一项工作都会拆分为多个不同的部分。比如,对于《深入浅出深度学习》的编写工作,我负责的部分就是让读者对深度学习有一个初步的了解。如果读者能够很好地消化吸收这些内容,把它变成自己的知识,成为一个活跃的深度学习研究人员并且不再需要参考《深入浅出深度学习》,那么我会感到非常自豪。对我来说,这就意味着读者已经学会了《深入浅出深度学习》中介绍的所有内容,而我负责的让读者初步了解 深度学习的工作部分顺利完成。在哲学中,这种观点被称为“维特根斯坦的梯子”(Wittgenstein’s ladder),它是一种非常重要的实践观念,我们认为它可以帮助你实现个人探索——利用平衡。

此外,我还在《深入浅出深度学习》中放置了一些复活节彩蛋,主要是以示例中不常见的名称的形式。我希望它们能够使示例更加生动形象,便于读者阅读。为了让大家明确了解,第3章中狗的名字叫Gabi,在《深入浅出深度学习》发布时,它4岁。《深入浅出深度学习》采用复数形式编写,遵循旧的学术习俗,即使用适度复数,也就是使用“我们”来做观点的主语,因此,在此序言之后,我将不再使用单数人称代词,一直持续到《深入浅出深度学习》的结尾部分。

我想对参与《深入浅出深度学习》编写,为其成书出版做出贡献的所有人表示衷心的感谢。特别地,我要感谢Siniša Urošev,他对《深入浅出深度学习》中的数学概念提供了很多有价值的批注和修改建议;此外,还要感谢Antonio Šajatović,他对基于记忆的模型提供了很多重要的建议。在《深入浅出深度学习》的编写过程中,我的妻子Ivana给了我巨大的支持,在此,我要向她表示深深的谢意。《深入浅出深度学习》中的任何疏忽或错误都由我一个人负责,欢迎广大读者批评指正并提出宝贵的意见。

请扫描封底二维码获取《深入浅出深度学习》的参考文献。

Sandro Skansi作于克罗地亚萨格勒布