第1章:面向深度学习
只要存在计算机,程序员就对人工智能(AI)感兴趣:在计算机上实现类似人的行为。长期以来,游戏一直是AI研究人员的热门话题。在个人计算机时代,人工智能在跳棋,西洋双陆棋,国际象棋以及几乎所有经典棋盘游戏方面都已经超过了人类。但是,数十年来,古老的战略游戏围棋仍然无法被攻克。然后到了2016年,Google DeepMind的AlphaGo 向14届世界围棋冠军李世石挑战,并在五场比赛中赢得四场。AlphaGo的下一个修订版完全是人类玩家无法企及的:它赢得了60连胜,战胜了此过程中所有著名的围棋玩家。
AlphaGo的突破在于通过机器学习增强了经典的AI算法。更具体地说,AlphaGo使用了称为深度学习的现代技术,这些算法可以将原始数据组织到有用的抽象层中。这些技术不限于游戏,您还将在用于识别图像,理解语音,翻译自然语言和引导机器人的应用程序中找到深度学习。掌握深度学习的基础将使您了解所有这些应用程序的工作方式。
为什么要写一整本有关计算机围棋的书?您可能会怀疑作者是疯了。但是,与国际象棋或西洋双陆棋相反,学习围棋的真正原因是强大的围棋AI需要深度学习。诸如Stockfish之类的顶级国际象棋引擎充满了国际象棋特定的逻辑。您需要一定程度的游戏知识才能编写类似的内容。通过深度学习,即使您不了解他们在做什么,您也可以教他们一台计算机来模仿强大的围棋选手。这是一项强大的技术,可在游戏和现实世界中应用到各种应用程序。
国际象棋和跳棋的AI的设计旨在比人类更长远和更准确地搜索盘面。将此技术应用于围棋有两个问题。首先,您无法搜索得太远,因为围棋中有太多落子位置需要考虑。其次,即使您可以搜索完全,您也不知道如何评估结果是否良好。事实证明,深度学习是解决这两个问题的关键。
本书通过介绍AlphaGo的使用技术,为深度学习提供了实用的介绍。您无需深入研究围棋游戏就可以做到这一点。相反,您将学习到机器学习方式的一般原理。本章将介绍了机器学习以及它可以解决与不能解决的各种问题。同时您将通过示例来学习到机器学习的主要分支,并了解深度学习如何将机器学习带入新的领域。
考虑一个识别朋友照片的任务。对于大多数人来说,即使照片的光线很暗,或者您的朋友理发或穿着新衬衫,这也毫不费力。但是假设您要通过编程让计算机执行相同的操作,你会从哪里开始?这是一种机器学习可以解决的问题。
传统上,计算机编程是将清晰的规则应用于结构化的数据。开发人员对计算机进行编程是对数据执行一组指令,然后得出所需的结果,如图1.1所示。试想一种税收形式:每个方框都有明确的定义,详细的规则可以指示如何进行各种计算。但是由于这些规则取决于您居住的地方,因此可能会极度复杂。人们在这个地方很容易犯错,但这恰恰是计算机程序擅长的任务。

图1.1 大多数软件开发人员都熟悉的标准编程范例。开发人员确定算法并执行代码;用户提供数据。
与传统编程范例相反,机器学习是用于从示例数据中推断程序或算法,而不是直接实现它的一系列技术。因此,通过机器学习,您仍然可以输入计算机数据,但是您不必提供指令和期望输出,而只需要提供期望输出,就能让机器自己找到算法。
要构建可以识别照片中是谁的计算机程序,可以应用一种算法,该算法可以分析朋友的大量图像并生成与之匹配的函数。如果正确执行此操作,则生成的功能还将匹配以前从未见过的新照片。当然,该程序将不了解其目的;它所能做的就是识别与您输入的原始图像相似的事物。
在这种情况下,您将调用提供机器训练数据的图像以及图像标签上的人名。在针对目的训练了算法之后,可以使用它来预测新数据上的标签以对其进行测试。图1.2在机器学习范例的架构旁边显示了此示例。

图1.2 机器学习范例:在开发过程中,您从数据集生成算法,然后将其合并到最终应用程序中。
当规则不明确时,机器学习就会使用。它可以解决“看到就能知道是谁”的问题。您无需提供直接指示功能的数据,只需提供指示功能应执行操作的数据,然后有条不紊地生成与数据相匹配的功能。
在实践中,通常将机器学习与传统编程结合起来来构建有用的应用程序。对于我们的面部检测应用程序,您必须先指导计算机如何查找,加载和转换示例图像,然后才能应用机器学习算法。除此之外,您