ITPub博客

首页 > 应用开发 > Python > 人工智能入门与实战 使用Raspberry Pi和Python演练

人工智能入门与实战 使用Raspberry Pi和Python演练

原创 Python 作者:qinghuawenkang 时间:2018-10-23 14:08:33 0 删除 编辑


人工智能入门与实战
使用 Raspberry Pi 和 Python 演练


[美] 唐纳德 • J. 诺利斯(Donald J. Norris)
沈益冉 潘海为 高琳琳


北 京
Donald J. Norris
Beginning Artificial Intelligence with the Raspberry Pi
EISBN: 978-1-4842-2742-8
Original English language edition published by Apress Media. Copyright © 2017 by Apress Media. Simplified
Chinese-Language edition copyright © 2018 by Tsinghua University Press. All rights reserved.
本书中文简体字版由 Apress 出版公司授权清华大学出版社出版。未经出版者书面许可,不得以任何方式复
制或抄袭本书内容。
北京市版权局著作权合同登记号 图字: 01-2018-2641
本书封面贴有清华大学出版社防伪标签,无标签者不得销售。
版权所有,侵权必究。侵权举报电话:
010-62782989 13701121933
图书在版编目 (CIP) 数据
人工智能入门与实战: 使用 Raspberry Pi 和 Python 演练 / (美)唐纳德•J.诺利斯(Donald J. Norris) 著; 沈益冉,
潘海为,高琳琳 译. —北京:清华大学出版社, 2018
书名原文: Beginning Artificial Intelligence with the Raspberry Pi
ISBN 978-7-302-50171-8
Ⅰ. ①人… Ⅱ. ①唐… ②沈… ③潘… ④高… Ⅲ.①人工智能 Ⅳ. ①TP18
中国版本图书馆 CIP 数据核字(2018)第 103225 号
责任编辑:王 军 李维杰
封面设计:牛艳敏
版式设计:思创景点
责任校对:孔祥峰
责任印制:刘海龙
出版发行: 清华大学出版社
网 址: ,
地 址: 北京清华大学学研大厦 A 座 邮 编: 100084
社 总 机: 010-62770175 邮 购: 010-62786544
投稿与读者服务: 010-62776969, c-service@tup.tsinghua.edu.cn
质 量 反 馈: 010-62772015, zhiliang@tup.tsinghua.edu.cn
印 装 者:北京鑫海金澳胶印有限公司
经 销:全国新华书店
开 本: 170mm×240mm 印 张: 20.25 字 数: 373 千字
版 次: 2018 年 7 月第 1 版 印 次: 2018 年 7 月第 1 次印刷
定 价: 59.80 元
————————————————————————————————————————————————————
产品编号: 077863-01

译者序
人工智能(Artificial Intelligence, AI)是计算机科学的一个重要分支,是研究、开
发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科
学,该领域的研究方向包括机器人、语言识别、图像识别、自然语言处理和专家系统
等。人工智能自诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,
未来人工智能带来的科技产品,将会是人类智慧的“容器”。人工智能可以对人的意
识、思维的信息过程进行模拟。人工智能不是人的智能,但能像人那样思考,也可能
超过人的智能。
人工智能是一门极富挑战性的科学,被认为是 21 世纪三大尖端技术之一。近 30
年来,人工智能发展极为迅速,被广泛应用于众多学科领域,并取得了丰硕的成果。
人工智能已逐步成为一个独立的分支,无论在理论还是实践上都已自成一个系统。
树莓派是由注册于英国的慈善组织“Raspberry Pi 基金会”开发的。 2012 年 3 月,
英国剑桥大学的埃本·阿普顿(Eben Epton)正式发售世界上最小的台式机,又称卡片
式电脑,它是一款基于 ARM 的微型电脑主板,以 SD/MicroSD 卡为内存硬盘,卡片
主板周围有 1/2/4 个 USB 接口和一个 10/100 兆以太网接口(A 型没有网口),可连接键
盘、鼠标和网线,同时拥有视频模拟信号的电视输出接口和 HDMI 高清视频输出接口,
以上部件全部整合在一张仅比信用卡稍大的主板上,具备所有 PC 的基本功能。只需
要接通电视机和键盘,就能执行电子表格和文字处理、玩游戏、播放高清视频等诸多
功能。树莓派的 B 款只提供电脑板,无内存、电源、键盘、机箱或连线。树莓派支持
目前主流的编程语言,例如 Python、 Java、 C 和 Perl 等。
对于读者来说, 将当前最尖端的人工智能方法和最具便携功能的树莓派如此完美
结合在一起的书籍并不多见,其中更是涉及 Prolog 和 Python 语言的实用编程。虽然
对人工智能方法和基于树莓派的编程的学习十分枯燥,过程也颇为艰辛,但是学成之
后所获得的成就感和实用性是不言而喻的。通过本书,作者呈现了对基于树莓派的机
器人和游戏等实际应用的丰富见解和实用解决方案, 突出了目前被广泛使用的人工智
能方法的优势,以帮助读者决定哪一个方法才最适合自己所面对的应用问题。通过逐
步的编码方法,以及循序渐进、深入浅出的描述,读者能够理解多种人工智能方法的

基本原理和不同编程语言的实现技巧。
本书配备了非常实用的示例和代码片段, 以确保读者能够很好地掌握用于解决实
际问题的人工智能方法。本书在介绍人工智能(AI)、专家知识系统、机器学习和模糊
逻辑等基本概念之后,详细描述在实际应用中使用最为普遍的多项技术的基本原理,
这些技术分别是模糊逻辑系统、浅层机器学习、人工神经网络(ANN)、深度学习和进
化计算。对每一项技术的讲解都是从一个基于树莓派的实际问题案例(例如游戏和机
器人)开始,通过 Prolog 或 Python 语言的编程实现,向读者展示了人工智能技术是如
何工作并实实在在地应用于现实问题中的。本书极具易读性、实用性和可操作性,将
理论和实践有机地结合在了一起。
在这里要感谢清华大学出版社的编辑, 他们为本书的翻译投入了巨大的热情并付
出了很多心血。没有你们的帮助和鼓励,本书不可能顺利付梓。
对于这本实用力作,由于涉及知识面广,内容丰富,术语量大,翻译难度可想而
知,译者本着“诚惶诚恐”的态度,在翻译过程中力求专业性、准确性和通俗性,但
是鉴于译者水平有限,错误和失误在所难免,如有任何意见和建议,请不吝指正。感
激不尽!本书全部章节由沈益冉和潘海为翻译,参与翻译的还有高琳琳、边晓菲、孙
明、李俭、任春友、李鹏、张春新等。
译者
2018 年 2 月于哈尔滨

作者简介
Donald J. Norris 拥有电子工程学士学位及生产管理 MBA
学位。他目前在南新罕布什尔大学任职,教授本科生和研究生计
算机科学相关课程。同时,他也开设了一些机器人技术的课程。
他拥有 33 年的教学经验,曾在多所大学担任副教授。
Donald 后来从美国海军的民间联合服务组织退休,在那里他
专注于核潜艇有关的声学和高级数字信号处理。自此,他作为一
位使用 C、 C#、 C++、 Python、 MicroPython、 Node.js 和 Java 等
语言的专业软件开发者已经拥有超过 23 年的编程经验,其中有
6 年担任 IT 安全顾问。
Donald 撰写并出版了 6 本书,主题内容涉及树莓派、如何组装和操作自己的无人
机、 MicroPython、物联网和 Edison 微处理器等方面。
Donald 创建了名为 Norris Embedded Software Solutions (dba NESS LLC)的咨询顾
问公司,专门开发基于微处理器和微控制器的应用解决方案。 Donald 认为自己是一个
充满激情的极客,总是去尝试新鲜事物。他也是私人飞行员、摄影爱好者、业余无线
电操作员和狂热的跑步健身者。

技术审校者简介
Massimo Nardone 在安全、 Web/移动开发、云和 IT
架构方面拥有超过 22 年的经验,但他真正关注的是安全防
护和 Android 开发。
20 多年来,他一直在教授学生如何使用 Android、Perl、
PHP、 Java、 VB、 Python、 C/C++和 MySQL 等进行编程。
他在意大利的萨莱诺大学获得计算机科学硕士学位。
Massimo 担任过项目经理、软件工程师、研究员、首
席安全架构师、信息安全经理、 PCI / SCADA 审核员和高
级 IT 安全/云/ SCADA 架构师职位。
Massimo 的技术能力卓越, 熟悉的技术领域包括安全防护、 Android、 云、 Java、
MySQL、Drupal、Cobol、Perl、Web 和移动开发、MongoDB、D3、Joomla、Couchbase、
C/C++、 WebGL、 Python、 Pro Rails、 Django CMS、 Jekyll、 Scratch 等。
目前他是 Cargotec Oyj 的首席信息安全官(CISO)。
Massimo 还曾在赫尔辛基理工大学(现名为阿尔托大学)的网络实验室担任客
座讲师和导师。他持有 4 个国际专利(PKI、 SIP、 SAML 和 Proxy 领域)。
Massimo 已经为不同的出版公司审校了 40 多部 IT 图书,他还是
Pro Android
Games
(Apress, 2015)一书的作者之一。
前 言
人工智能(Artificial Intelligence, AI)是一个飞速发展的领域,写这本书旨在向
你展示这一领域的“神奇”。在本书中将使用 Raspberry Pi(树莓派)作为主要工具,
可以通过它了解人工智能的工作原理,进一步将 AI 应用在未来的工作与项目中。
在最开始想声明一点:即使读完本书并完成书中所有的示例,你也不会成为
人工智能领域的专家。这个道理就好比一个人参加完急救课程后,也不可能立即
成为医生或护士一样。想要成为 AI 专家,需要学习不同领域的大学课程,其中包
括数学、计算机科学、逻辑学,甚至哲学。当然也有来自其他领域的人工智能专
家,包括音乐和联合艺术。做了上述声明后,希望你明白,通过阅读本书可以快
速了解 AI 的基本知识及原理,但想要成为人工智能专家,还需要更进一步的学习。
接下来,将讨论为什么 Raspberry Pi 是学习 AI 的一个良好平台。首先,虽然
没有现代 PC 或 Mac 的计算速度快,但它本身是一台功能完整的计算机。Raspberry
Pi 3 的时钟频率为 1 GHz, CPU 为 4 核, RAM 大小为 1GB,但让人惊喜的是,它
只需要 35 美元(USD)就可以买到。其次,我们推荐使用 Raspberry Pi 作为学习人
工智能的基本工具,主要原因就是它相当于一个微控制器。由于微控制器可以很
方便地连接各种传感器,因此可以实现 AI 与现实世界的简单且有效的交互。
虽然 PC 也可以控制传感器,但它通常需要昂贵、复杂的专用接口来实现这
些功能。 Raspberry Pi 最初的目的就是以最少的接口要求来感知和控制设备,更准
确地说,是以最小的软件成本。同时 PC 软件界面通常非常复杂,一般针对某项
功能定制而成——这意味着用户难以进行个性化的修改和设定。
本书中使用的 Raspberry Pi 搭载的操作系统是名为 Jessie 的 Linux 发行版。 它
是一款非常稳定的操作系统(Operating System, OS),并且完全开源,可以从
Raspberry Pi 基金会的网站免费下载。 Jessie 支持绝大部分的开源应用, 这也就是说,
本书中使用的所有软件都是免费提供的,可以下载并部署在你的 Raspberry Pi 上。
本书的各种演示程序和项目使用的语言主要是 Python、 Prolog 和 Wolfram。

这些语言中的每一种都有自身独有的特性,使得我们可以根据不同的应用场景,
快速高效地实现所需的功能。
我使用的主要应用是 Mathematica,它是一款科学计算软件,很好地结合了数
值和符号计算引擎、图形系统、编程语言、文本系统,以及与其他应用的高级连
接。这是一款商业软件,由 Wolfram 公司的 Stephen Wolfram 博士(CEO)赠予我免
费使用。
我按照逻辑顺序编排了本书的章节内容,第 1 章首先介绍人工智能(AI)。尽
管 AI 已经应用于我们的日常生活,但向没有听说过的人解释清楚 AI 也不是一件
容易的事情。第 1 章中给出了 AI 的定义并列举了一些 AI 用于日常生活中的具体
例子。你会发现无论喜欢与否,人工智能已经渗透到现代社会的很多领域,正以
越来越多的形式影响着我们的生活。另外,还会介绍一下商业智能(Business
Intelligence, BI),它与 AI 密切相关,主要应用于汽车领域。一些 AI 从业者通常
将 BI 简称为 AI 在商业环境中的应用。但这远不止于此。之所以介绍,是因为它
是一种合理的简化。
接下来,将在第 2 章中探讨 AI 的一些基本概念。首先讲解一些基本的逻辑结
构,了解基本逻辑推理是理解 AI 核心的重要基础。接着介绍专家知识系统,它是
知识管理系统(Knowledge Management System, KMS)的主要组成部分,同时也是
BI 的重要组成部分之一。然后介绍机器学习,这是一个前景广阔的 AI 研究方向。
最后,在该章的小结中简单介绍模糊逻辑(Fuzzy Logic),在后续的章节中还会着
重研究它。
第 3章主要介绍如何使用 Prolog语言编写一个实用的专家系统。将使用 Prolog
编写一个简单的控制台问答程序来阐述 Prolog 的一些关键特性,这种特殊语言在
实现人工智能的概念方面非常有用。与 Prolog 相比,实现相同的目的,使用 C、
C++、 Java 等语言则需要更多的代码和扩展程序。
第 4 章着重于介绍人工智能与游戏。虽然例子中的游戏很简单,但本章的主
要目的是演示 AI 如何应用于游戏逻辑。这些游戏 AI 概念可以很容易地延伸到更
复杂的游戏中。使用 Python 来实现通过传统文本控制台界面控制游戏的功能。不
要期望在本章中看到《魔兽世界》 (
World of Warcraft , WoW),但请放心, WoW 在
游戏中使用了 AI。
在第 5 章中,将再次使用 Prolog 来实现一些模糊的逻辑控制,在这个项目中
也有一个简化的专家规则系统。由一个使用温度和湿度传感器的 Raspberry Pi 系
统控制一个虚拟的加热和冷却系统。
第 6 章介绍浅层机器学习的概念。我们将编写一个 Python 程序,它的功能是
使计算机“学习”你最喜欢的颜色,并根据颜色选择做出“决定”。在该章的最后,

前 言
VII
将会介绍自适应学习,它在 BI 中起着重要的作用。
第 7 章通过人工神经网络(Artificial Neural Network, ANN)来继续机器学习的
话题。 ANN 是目前用于实现机器学习的最普遍的 AI 方法。该章将详细讲解 ANN
的构建方法,并演示一个使用 Python 创建的实际神经网络。
第 8 章继续讨论深度学习。在该章的项目中,将详细讨论多层次的 ANN 功
能,包括梯度搜索特性。
第 9 章包含两个使用多层 ANN 深度学习的案例。第一个是对手写数字的识
别,它使用 MNIST数据集进行训练和测试。 第二个使用带有相机功能的 Raspberry
Pi 对手写数字进行成像,然后使用先前训练过的 ANN 来确定最接近的数字。
第 10 章涉及进化计算(Evolutionary Computing, EC),包含进化规划、遗传算
法和遗传规划。将列举几个有趣的示例,突出了一些 EC 功能,提供了很好的入
门介绍。
第 11 章讨论包容,这是一个基于行为的机器人研究领域。它与 AI 密切相关。
该章使用第 7 章介绍的机器人汽车来进行演示。使用包容行为的机器人可以更好
地模仿人类的行为,从而实现人类思考和机械运动之间的 AI 循环。
通过阅读本书和动手复现书中的示例,相信你会对 AI 有更为深刻的理解,并
且对于如何将其融入未来的项目中有更进一步的规划。

目 录
1 章 人工智能简介 ····················1
1.1 AI 的历史起源······················1
1.2 智能 ······································6
1.3 强 AI 与弱 AI,广义 AI 与
狭义 AI·································7
1.4 推理 ······································8
1.5 人工智能的分类···················9
1.6 人工智能和大数据·············11
1.7 小结 ····································12
2 章 基础 AI 概念 ····················13
2.1 布尔代数·····························13
2.2 推论 ····································15
2.3 专家系统·····························16
2.3.1 冲突解决 ························ 16
2.3.2 反向链···························· 18
2.4 配置 Raspberry Pi ···············18
2.5 SWI Prolog 简介·················19
2.6 在 Raspberry Pi 上安装
Prolog ·································19
2.7 Prolog 初步演示 ·················20
2.8 模糊逻辑简介·····················22
2.8.1 FL 的例子 ······················ 23
2.8.2 去模糊化························ 24
2.9 问题解决 ···························· 25
2.9.1 广度优先搜索 ················ 25
2.9.2 深度优先搜索 ················ 25
2.9.3 深度有限搜索 ················ 26
2.9.4 双向搜索························ 26
2.9.5 问题解决的其他例子····· 26
2.10 机器学习 ·························· 27
2.10.1 预测 ··························· 27
2.10.2 分类 ··························· 28
2.10.3 进一步分类················ 31
2.11 神经网络··························· 32
2.12 浅层学习与深度学习······· 37
2.13 进化计算 ·························· 37
2.14 遗传算法 ·························· 38
2.15 小结 ·································· 39
3 章 专家系统演示 ··················41
3.1 例 3-1:办公室数据库······· 42
3.2 例 3-2:识别动物 ·············· 47
3.3 例 3-3:井字游戏 ·············· 51

人工智能入门与实战 使用 Raspberry Pi 和 Python 演练
X
3.4 例 3-4:感冒还是
流感? ································56
3.5 例 3-5:使用 Raspberry Pi
GPIO 控制输出的专家
系统 ····································58
3.5.1 安装 PySWIP 库············· 59
3.5.2 安装硬件 ························ 60
3.5.3 配置 Rpi.GPIO ··············· 61
3.5.4 带 LED 控制的专家
系统································
62
3.6 小结 ····································64
4 章 游戏 ·································65
4.1 例 4-1:剪刀石头布···········66
4.1.1 带开关和 LED 的剪刀
石头布游戏 ····················
69
4.1.2 中断································ 73
4.2 例 4-2: Nim ·······················75
4.2.1 带 LCD 和开关的
Nim` ·······························
81
4.2.2 LCD 显示屏 ··················· 84
4.2.3 加载 Adafruit LCD 库 ···· 85
4.2.4 LCD 测试 ······················· 86
4.2.5 automated_nim.py··········· 87
4.3 小结 ····································93
5 章 模糊逻辑系统 ··················95
5.1 部件清单·····························95
5.2 软件安装·····························96
5.3 基础 FLS·····························96
5.4 初始化:定义语言变量
和术语 ································97
5.5 例 5-1:使用 FL 计算
小费 ····································97
5.6 初始化:构建隶属函数 ·····98
5.7 初始化:构建规则集······· 101
5.8 推理:根据规则集评价
模糊集 ······························ 103
5.9 聚集:综合每个规则的
评估结果 ·························· 106
5.10 去模糊化:将模糊集
转换为清晰的输出值····· 106
5.11 例 5-2:修改 tipping.py
程序································ 113
5.12 例 5-3: FLS 加热和制冷
系统································ 114
5.12.1 模糊化 ····················· 116
5.12.2 推理························· 117
5.12.3 聚集························· 118
5.12.4 去模糊 ····················· 119
5.12.5 测试控制程序 ········· 121
5.13 例 5-4:修改 HVAC
程序································ 122
5.14 小结 ································ 124
6 章 机器学习 ·······················125
6.1 部件清单 ·························· 125
6.2 例 6-1:颜色选择 ············ 126
6.2.1 算法 ····························· 126
6.2.2 轮盘赌算法·················· 129
6.3 例 6-2:自主机器人········· 131
6.3.1 自主算法······················ 132
6.3.2 测试运行······················ 138
6.3.3 额外学习······················ 138
6.4 例 6-3:使用能源消耗
计算的自适应学习··········· 142
6.5 小结 ·································· 147

目 录
XI
7 章 机器学习:人工神经
网络
······························149
7.1 部件清单···························149
7.2 Hopfield 网络····················149
7.3 例 7-1:数字图像识别
示例 ··································155
7.4 例 7-2:使用 ANN 的
自主机器人小车 ···············161
7.5 例 7-3:用于避开障碍物的
机器人小车的 Python 控制
脚本 ··································164
7.6 例 7-4:寻光机器人·········169
7.6.1 未知情况 ······················ 172
7.6.2 大脑映射 ······················ 172
7.6.3 光强传感器 ·················· 173
7.6.4 用于寻求目标的机器人小
车的 Python 控制脚本···
175
7.6.5 测试运行 ······················ 180
7.6.6 障碍物回避和寻光······· 181
7.7 小结 ··································182
8 章 机器学习:深度学习 ······183
8.1 泛化的 ANN ·····················183
8.1.1 较大的 ANN················· 188
8.1.2 三层 ANN 中的后向
传播······························
191
8.1.3 更新加权矩阵 ·············· 193
8.2 梯度下降在 ANN 中的
运用 ··································199
8.3 工作范例···························203
8.3.1 ANN 学习的一些
问题······························
204
8.3.2 初始权重的选择··········· 204
8.4 例 8-1: ANN 的 Python
脚本·································· 205
8.4.1 初始化·························· 206
8.4.2 测试运行······················ 208
8.5 例 8-2:训练 ANN··········· 209
8.6 小结 ·································· 213
9 章 机器学习:实用的 ANN
示例 ······························215
9.1 部件清单 ·························· 215
9.2 例 9-1: MNIST 数据集 ··· 216
9.2.1 图像化一条 MNIST
记录 ·····························
219
9.2.2 调整输入和输出数
据集 ·····························
221
9.2.3 为手写数字检测配置
ANN·····························
224
9.2.4 测试运行······················ 226
9.3 例 9-2:使用 Pi Camera
识别手写数字 ·················· 231
9.3.1 更改的 trainANN.py
脚本 ·····························
236
9.3.2 使用 ANN 自动识别
数字 ·····························
237
9.3.3 测试运行······················ 239
9.4 小结 ·································· 240
10 章 进化计算 ·····················241
10.1 alife ································· 241
10.2 进化编程 ························ 242
10.3 例 10-1:手动计算········· 243
10.4 例 10-2: Conway 的生命
游戏 ································ 251
10.4.1 Sense HAT 硬件
安装·························
253
人工智能入门与实战 使用 Raspberry Pi 和 Python 演练
XII
10.4.2 Sense HAT 软件
安装·························
253
10.4.3 生命游戏: Python
版本·························
254
10.4.4 测试运行 ················· 262
10.4.5 单代生命游戏·········· 264
10.5 小结 ································267
11 章 基于行为的机器人 ········269
11.1 部件清单·························269
11.2 人类的大脑结构 ·············270
11.3 包容架构·························271
11.3.1 传统方法·················· 273
11.3.2 基于行为的机器人
方法·························
273
11.4 例 11-1: Breve 项目 ······ 276
11.5 例 11-2:构建使用包容架
构的机器人小车············· 284
11.6 例 11-3: Alfie 机器人
小车 ································ 288
11.6.1 添加另一个行为 ······ 296
11.6.2 测试运行·················· 297
11.7 小结 ································ 298
附录
Alfie 机器人小车搭建
指南
··································299
1
人工智能简介
本章简要介绍人工智能(Artificial Intelligence, AI),为理解 AI 是什么,以及
为什么 AI 是一个令人兴奋且快速演变的研究领域建立框架。下面让我们先从 AI
的历史起源讲起。
1.1 AI 的历史起源
在很早以前就已经出现类似于人工智能的原型。据记载,古希腊哲学家曾研
究过如何制造拥有智能的机器。在 1517 年,犹太教主教创造了 Prague Golem,如
图 1-1 所示。

图 1-1 Prague Golem
1637 年,法国著名的哲学家 René Descartes 在他的著作 Discourse on Method
中写提到:机器的智能化是不可能实现的。但这篇论文表明了他的态度。
接下来是一个更奇特的人工智能故事——或者更恰当地说,是一个“骗局”。
在 18 世纪末到 19 世纪中期的欧洲,人们创造出了一个自动化的国际象棋棋手,
它被称为 The Turk,如图 1-2 所示, The Turk 的形象被印刷在邮票上。

图 1-2 智能象棋棋手
The Turk 是一台智能机器,可以和人类对手相互对弈。实际上,有一个人类
棋手藏在机器的支撑箱中,由他来操作机器移动棋子。不妨想一下,一定有一个
微型的潜望镜或小孔,可以让这个隐藏的国际象棋“玩家”看见棋盘的情况。 The
Turk 这个名字很奇怪,它源自德语单词 Schachtürke,意思是“自动棋手”。这个
隐藏在盒子中的人通常都是下棋高手,可以在多场比赛中取得胜利,包括与拿破
仑·波拿巴(Napoleon Bonaparte)和本杰明·富兰克林(Benjamin Franklin)的对弈。
真正的“智能象棋棋手”在很多年以后才出现。
1943 年, McCulloch 和 Pitts 提出了一种名为“感知机”的数学模型,它是基
于生物脑细胞结构的抽象。他们在论文中详细描述了神经元细胞如何像电子电

路一样以二进制的方式传递神经信号。不仅如此,研究表明,神经元细胞能够
随着时间的变化动态地改变自身,也就是说,可以动态地对外部刺激做出响应。
这篇论文是神经网络领域的开山之作,后面的章节将更详细地讨论这个话题。
1947 年,艾伦·图灵(Alan M. Turing)写道:
在我看来,如何制造出更大容量的内存比实现更快的运算速度更为重要。出
于商业目的,机器的工作速度越快,其商业价值越高,但是如果进行复杂琐碎的
工作,则需要大容量的存储空间。因此,存储能力是更基本的要求。
第二次世界大战期间,图灵破译了德国的恩尼格玛密码机(Enigma),这加快
了第二次世界大战的结束。他认为与计算速率相比,存储容量将成为未来所有的
“智能”前提。关于图灵测试,在本章后面会有更多详细的说明。
1951 年,一位名为 Marvin Minsky 的年轻数学博士生和 Dean Edmonds,根
据 McCulloch 和 Pitts 的论文模型设计并建立了一台基于感知机的计算机,这台
计算机被称为随机神经模拟加固计算机(Stochastic Neural Analog Reinforcement
Computer, SNARC),由 40 个真空管“神经元”组成。这些“神经元”可以控制
外部的阀门、电机、齿轮、离合器和执行器。这个系统是一个随机连接的 Hebb
突触网络,构成了一台神经网络学习机。 SNARC 可能是第一台具备自我学习能力
的机器。 能成功地模拟老鼠穿越迷宫寻找食物的行为。 该系统具有一些基本的“学
习”能力,可以让老鼠最终走出迷宫。
人工智能发展的一个重大转折点发生在 1956 年的达特茅斯学院人工智能会
议上。这次会议由 Minsky、 John McCarthy 和 Claude Shannon 联合发起,会议的
主题是探讨人工智能方向的新研究领域。克劳德·香农(Claude Shannon)常被称为
“信息论之父”,这是对他在声名远扬的贝尔实验室(Holmdel, NJ)完成的杰出工作
表达的敬重之情。
约翰·麦卡锡(John McCarthy)也不是泛泛之辈,他第一个提出“人工智能”
的概念,同时也创建了 Lisp 编程语言
1
他对 ALGOL 语言编程设计和计算机分时系统的发展做出了重大贡献, 后者
奠定了现代计算机网络的基础。此外,明斯基(Minsky)和麦卡锡一起组建了世界
上第一个人工智能实验室,现在被称为麻省理工学院计算机科学和人工智能实
验室。
回到 1956 年的达特茅斯学院人工智能会议上,在这次会议上麦卡锡给出了
人工智能的经典定义。据我所知,这仍然是大多数人在定义 AI 时使用的“黄金
标准”:
1 译者注:麦卡锡在 1958 年发明了 LISP 语言,该语言至今仍在人工智能领域广泛使用,并于 1960
年将其设计发表在《美国计算机学会通讯》上。

人工智能是一门制造智能机器,特别是智能计算机程序的学科。它与使用计
算机来理解人类智能类似,但人工智能并不局限于生物学上可观察到的方法。
麦卡锡在这个定义中使用了“人类智能”这个短语,稍后会进一步探讨它。这
次会议还提出了人工智能的许多基本概念,虽然无法在本书中一一论述,但强烈
建议感兴趣的读者自行查阅相关资料以了解学习。
20 世纪 60 年代是人工智能研究发展迅速的十年。可以说, Newell 和 Simon
详细阐述了 General Problem Solver(一般问题的求解)算法。这种方法同时使用了计
算机和人类解决问题的技术。遗憾的是,当时的计算机技术还在发展,内存容量
和计算速度都无法满足这个算法的要求。最终这个项目被放弃,但并不是因为它
的理论不正确,而是因为实现它所需的硬件要求暂时无法满足。
20 世纪 60 年代, AI 领域内另一个重要的突破是 Lofti Zadeh 提出了模糊集合
和逻辑的概念,从而演变出名为模糊逻辑的人工智能分支。 Zadeh 认为计算机能
以一种更像人类的模糊逻辑方法来表现,而不是必须以一种精确的、离散的逻辑
模式来表现。在第 5 章将列举一个有趣的模糊逻辑示例。
20 世纪 60 年代的一项研究表明:计算机可以模拟人脑。当然,在那个时代
不存在模仿人类大脑的实际功能的计算能力,这使得很多人觉得人工智能无法继
续发展。
模仿或以某种方式复制人脑的工作过程,并将这种功能放入机器,被称为经
典人工智能方法。但也有许多研究者认为机器应该以自己的方式变得智能化,而
不是单纯地模仿人类,这种方法也被称为现代人工智能。这两种方法在人工智能
社区内部产生了严重分歧。
20 世纪 60 年代后期,研究人员对计算机如何通过使用自然语言而不是计算
机代码来与人交互做了很多工作。在此期间, Joseph Weisenbaum 创建了 ELIZA
计划。虽然按当今的标准来说,它还是很原始的,但它仍然能够愚弄一些用户,
让用户以为他们正在和“人”而不是机器交谈。 ELIZA 项目引发了一个非常有趣
的争论,即如何确定一台机器是否达到某种程度的“智能”。在 1950 年的
Journal
of Computing Machinery and Intelligence
杂志的一篇文章中, Alan Turing 阐述了机
器已经达到智能化的状态的充分条件。他认为,如果机器能够成功地欺骗一个知
识渊博的人类观察者,即让他无法分辨交谈对象是机器还是人,那么这台机器就
可以被认为是智能的。当然,谈话必须用中立的沟通渠道以避免声音或外表等明
显线索暴露测试主体。即使到了今天,图灵测试仍然是一个合理的基准。人们甚
至可以使用现代的高效语音识别、合成技术来进一步愚弄观察者。图灵测试在哲
学家和其他研究智力本质以及对此感兴趣的学者中仍然存在争议。
20 世纪 70 年代,由于计算技术发展缓慢, AI 没有太大的进展。虽然人们对
自然语言处理和图像识别及分析非常感兴趣,但遗憾的是,研究人员可用的计算

资源十分有限,不能胜任这些艰巨的任务。这使人们意识到,计算机科学的进步
是人工智能发展的先决条件。此外, 也出现了反对 AI 的哲学观点, 包括 John Searle
提出著名的“中文房间”
2 的说法。明斯基反对 Searle 的假设,同时,麦卡锡认为
人类的智慧与机器智能应以不同的方式处理。
20 世纪 80 年代,由于个人计算机的出现,许多研究者开始关注麦卡锡的方
法,人工智能也有了进一步的发展。在这个时间段诞生了专家系统,并在商业和
工业/制造部门得到了实际应用,在后面的章节中将会演示几个专家系统的应用。
经典的人工智能方法也得到了进一步研究;同时,人工智能正逐步被认可,也许
更重要的是因为它被用于许多实际场景中。巧合的是,机器人和仿真机器人的发
展在这一段时间也有了很大的进展。人工智能研究自然被这个领域所吸引,因为
两者之间看起来是完全互补的。随着现代计算技术的巨大进步,人工智能进入实
用时代。此时,摩尔定律的真正影响才显现出来。摩尔定律由英特尔公司的创始人
戈登·摩尔(Gordon Moore)于 1965 年提出,具体内容是,“当价格不变时,集成电
路每英寸可容纳的元器件的数目, 约每隔一年便会增加一倍, 性能也将提升一倍”。
电子元器件密度的指数增长与计算机性能的提高密切相关, 这对于 AI 的改进
和发展非常需要。
人工智能发展的重要里程碑是, 1997 年 IBM 的电脑“深蓝”在与世界冠军
国际象棋大师加里·卡斯帕罗夫(Garry Kasparov)的比赛中获得胜利。尽管这场胜
利令人印象深刻,但是我们也应认识到它并不能解决所有棋盘游戏的问题,例如
中国传统棋盘游戏——围棋。
中国和日本的围棋是同一种棋类游戏,游戏中由玩家轮流行动。围棋暴露了
目前在人类游戏中应用人工智能的局限。尽管付出了相当大的努力(不像国际象棋
那么多),但计算机在围棋游戏中的发挥与人类相比仍然相距甚远。问题是程序在
做出决策时需要将可能的情况划分为一系列的假设,首先这些假设被单独分析,
然后分析它们之间的相互作用。尽管人类棋手也会这么做,但是人类在决策时会
2 译者注:“中文房间”的实验过程可表述如下。
一个对汉语一窍不通,只说英语的人被关在一间只有一个开口的封闭房间中。房间里有一本用英文写
成的手册,指示该如何处理收到的汉语信息以及如何以汉语回复。房间外的人不断向房间内递进用中文写
成的问题。房间内的人便按照手册上的说明,查找到合适的指示,将相应的中文字符组合成对问题的解答,
并将答案递出房间。
约翰·希尔勒认为,尽管房间里的人可以以假乱真,让房间外的人以为他确确实实说汉语,而他却压
根不懂汉语。在上述过程中,房间外的人的角色相当于程序员,房间内的人相当于计算机,而手册则相当
于计算机程序:每当房间外的人给出输入,房间内的人便依照手册给出答复(输出)。而正如房间内的人不
可能通过手册理解中文一样,计算机也不可能通过程序获得理解能力。既然计算机没有理解能力,所谓“计
算机于是便有智能”便无从谈起了。
——来自维基百科中文

考虑到全局性的影响。因此,为了弥补这种智力机制的缺陷,象棋程序(如深蓝)
在决策时必须进行数百万倍的计算,以对比每种决策可能产生的后果。
这使得我们可以稍稍放心,暂时不会出现诸如许多科幻电影(包括《终结者》
系列、《2001:太空漫游》和《星球大战》系列)中描述的机器智力与人类相当的
情况。在计算系统变得真正智能之前,还有很长的路要走,还需要作更多的研究。
这也是下一节讨论的主题。
1.2 智 能
智能的本质是什么始终是 AI 入门课程的一个主题。学生们经常陷入如何定义
智能以及如何认识智能的问题中。通常情况下,探索智能的结果就是创造出一个
几乎无休止的问题黑洞,例如:
z 老鼠是智能的吗?
z 对于机器来说,智能意味着什么?
z 海豚是海洋中最聪明的哺乳动物吗?
z 外星人如何认知地球上的智慧体?
我们可以提出无数类似的问题,也许回想起来,刚刚创建这样的问题是智能
的一种明确表现,由此读者可以明白通过循环推理的意义。事实证明,给智能下
一个通俗的定义是很难的。智能在 Meriam-Webster 在线字典中的定义如下:
1) 学习、理解或应对新的或尝试的情况的能力——理性,以及理性地运用理
性;运用知识来操纵环境或以客观标准进行抽象思考的能力(如测试),基督教科
学——神圣心灵的基本永恒品质,心智敏锐——精明。
2) 聪明的实体,尤其是天使;聪明的头脑或头脑中的智慧。
3) 理解的行为——理解力。
4) 信息、新闻;关于敌人或可能的敌人或地区的信息;一家从事获取这类信
息行为的机构。
5) 执行计算机功能的能力。
根据上面的定义,你会发现字典编撰者试图从多个方面定义智能,包括人性、
精神、宗教等,尤其是最后第 5 点的定义:执行计算机功能的能力。
在线 Macmillan 字典提供了如下更简洁的定义:
智能是了解和思考事物,获取和使用知识的能力。
如果查看其他字典中关于智能的定义,就会发现,几乎每本字典都有自己的
定义范畴。这也客观说明智能的定义涉及多个方面,很难有一个公认的定义。
智能也与感性输入和输出有关。例如,人类具有功能强大的大脑以及五个感

官系统:视觉、听觉、味觉、触觉和嗅觉。这些感官系统使得我们“智能”。当然,
事实证明:
即使人类的某些感官系统有缺陷,但智力不会受到太大的影响。正如人的身
体可以针对某些器官受到伤害做出适应性的调整一样,人类智力也可以做出不同
的反应。失去说话的能力并没有让史蒂文·霍金(Steven Hawking)成为白痴。拥有
步行、跑步、开车或驾驶飞机的能力,让人类可以有更多机会探索和了解外部环
境,从而扩大获取知识和经验的来源,但不一定会使得人类更加智能——除非认
为知识和智能是同义词。
研究动物以及它们是否智能只是一个小小的飞跃。鸟类可以在天空中自由飞
翔,因此相比人类而言它们有更好的视野。这是否意味着鸟类的智力会比人类更
高呢?显然,这是不确定的,这也引出了我们接下来的话题。动物智能和机器智
能不应该与人类智能相比较,就像将橘子与苹果作比较,没有意义。
在前面的讨论中,目标是重申现代人工智能技术的前提:机器智能应该被单
独考虑,而不是与人类智能相比较。基于这个前提,我们探索人工智能的发展应
用,但不期望也不需要模仿或模拟人类的智慧。
1.3 AI 与弱 AI ,广义 AI 与狭义 AI
正如标题中所写的,通常根据 AI 的特点,对现有的 AI 进行分类,以达到人
类最高智力水平为目标的 AI 称为强人工智能。可以推测传统人工智能的支持者也
会赞同这一术语。强与弱形成鲜明的对比。弱 AI 是使实际的人工智能系统能够
有效运作,而不考虑模拟人类的行为,这种方法也称为现代方法。虽然不知道
这些强与弱的定性何时产生,但是它们应该得到同等的重视和认可。这里只介
绍这些术语,如果阅读了关于人工智能应用的文章,就会明白它们的重要性。
本书对这两种说法都不采用,相反,只关注人工智能的应用——无论它们强或弱。
章节标题中使用的另一对术语是广义 AI 和狭义 AI。 广义 AI 关心的是一般情
况,而不是特定的任务或应用。我认为广义的人工智能和强大的人工智能拥有一
种自然的联系,这两者都与人类的推理和思考相关。狭义 AI 专注于应用于具体的
任务,不具有鲁棒性。当然也有例外,谷歌已经开发出一套非常优秀的系统,能
够识别或描述“物体”。谷歌应用程序是广义和狭义 AI 的结合体。亚马逊同样开
发了一套智能推荐系统,这套系统可以根据已有的客户信息给予客户更好的商品
推荐信息。
下面用图 1-3 结束本节的内容,这是通过在 Raspberry Pi 3 上运行 Mathematica
创建的词云。

图 1-3 是一种简单的图形表示,包含许多常用的人工智能词汇。图 1-3 中显
示的所有单词都来自于维基百科。

图 1-3 人工智能词云
1.4 推 理
在之前的讨论中,提到了原因和推理。但是推理和人工智能有什么关系呢?
推理是对事物的探索延伸。原因指的是思考事物或思想是如何联系在一起的。下
面的一些例子可以帮助阐明我想表达的想法:
z 学习是基于检查或讨论现有知识集, 构建新知识集的过程。 这种情况下的
集合是任何数据集合,无论是否基于现实。
z 语言的使用是将词汇转换为无论书面还是口头上的想法和支持性的关
系。
z 基于逻辑的推论意味着基于逻辑关系决定某些事物是否为真。
z 基于证据的推论意味着根据所有支持性现有证据来确定某些事情是否
属实。
z 自然语言生成存在,以使用给定的语言满足沟通目的和目标。
z 解决问题是确定如何实现既定目标的过程。
任何这些活动都必须涉及推理才能取得令人满意的最终结果。请注意,在列

表中没有一项将推理仅限于人。其中一些活动是可以由机器实现的,在某些情况
下,甚至是动物。有很多实验已经令人满意地证明动物可以解决问题,特别是如
果涉及食物的话。
最近,声控互联网设备的数量激增,包括亚马逊的 Alexa、微软的 Cortana、
苹果的 Siri 和谷歌的 Home 等。这些都是在智能手机上安装的独立设备或应用程
序。在任何情况下,它们都能很好地识别声音,并转换为可操作的指令。最后,
以一种高度可理解的格式将结果传递给用户,通常是谈吐文雅的女性声音。这些
设备/应用程序必须使用某种推理逻辑来执行它们的预期功能,即使不理解用户的
请求也要做出相应的回答。
1.5 人工智能的分类
表 1-1 中列举了现代人工智能的大部分类别。当然,里面无法囊括所有分类,
可能有一些类别在无意中遗漏了。但确实忽略了一些类别,比如人工智能的历史
和哲学,因为它们与表 1-1 的意图关联不大。
1-1 现代人工智能分类

分类 简述
情感计算 研究和开发可识别、解释、处理和模拟人类影响的
系统和设备
人工免疫系统 基于规则的智能机器学习系统,主要基于脊椎动物
免疫系统中的固有原理和过程
聊天机器人 一种会话代理或计算机程序,用于模拟通过文本或
音频通道与一人或多人进行智能会话
认知架构 关于人的思维结构的理论。其中一个主要目标是将
认知心理学的概念纳入综合计算机模型
计算机视觉 涉及计算机如何从数字图像或视频获得高层次理解
的跨学科领域
进化计算(Evolutionary Computing) 进化算法是基于达尔文进化论延伸而来的。
进化算法是基于三元组的问题求解,并使用元启发
式或全局随机方法求得
游戏人工智能(Gaming AI) 人工智能在游戏中用于产生智能行为,主要是在非
玩家角色(Non-Player Character, NPC)的设计中模拟
人类智能
人机接口(Human-Computer-Interface,
HCI)
HCI 研究计算机技术的设计和使用,重点研究人(用
户)与计算机之间的接口


(续表)

分类 简述
智能助理(Intelligent Personal Assistant,
IPA)
一种可以为个人执行任务或服务的软件代理。这些任
务或服务通常基于用户的输入、位置信息以及从各种
在线来源访问信息的能力。这种代理的例子包括苹果
的 Siri、亚马逊的 Brainasoft、亚马逊的 Evi、谷歌的
Home、微软的 Cortana、 Lucida、 Braina(Brainasoft 为
Windows 系统开发的应用程序)、三星的 Voice 和 LG
G3 的 Voice Mate
知识工程(Knowledge Engineering) 指在构建、维护和使用以知识为基础的系统方面所
涉及的所有技术、科学
知识表示(Knowledge Representation,
KR)
致力于用计算机系统解决复杂任务的形式来表示世
界的信息,例如诊断医疗条件或用自然语言进行会话
逻辑编程(Logic Programming) 一种主要基于形式逻辑的编程。任何用逻辑编程语
言编写的程序都是一组逻辑形式的句子,表达了一
些问题域的事实和规则。主要的逻辑编程语言有
Prolog、 ASP(Answer Set Programming)和 Datalog
机器学习(Machine Learning, ML) 在人工智能环境中,机器学习提供了计算机在没有
明确编程的情况下学习的能力。浅度学习和深度学
习是两个主要的子领域
多代理系统(Multi-Agent System) 多代理系统是由多个相互作用的智能代理组成的计
算机系统
机器人技术(Robotics) 机器人技术是工程和科学的跨学科分支,包括机械
工程、电子工程、计算机科学、人工智能等
机器人(Robots) 机器人是一种机器,特别是指由计算机可编程的机
器,它能够自主地完成一系列复杂的动作
规则引擎\系统(Rule Engines、 Systems) 基于规则的系统用于存储和操作知识,以一种有用
的方式来解释信息
图灵测试(Turing Test) 图灵测试是由 Alan Turing 于 1950 年开发的一种判
断机器是否具有与人类相同智力的测试


表 1-1 并未涵盖所有的现代人工智能研究和活动,但它确实突出了大多数重
要的研究和活动。本书展示了这些类别中的一部分,但可以说明如何使用相对简
单的计算机资源实现人工智能。
上面简短的论述,希望能拓宽读者的知识范围,并且能够明白人工智能已对
我们的日常生活产生了深远的影响。

1.6 人工智能和大数据
大多数读者都听说过“大数据”这个词,但可能不知道它是什么,它是如何
影响现代社会的。有很多关于大数据的定义,就像人工智能有很多定义一样。本
人喜欢的定义相当简单:一个数据集合,其特征是数据量庞大、更新速度快且类
型丰富。
上述定义中提到的数据量庞大指的是数据通常是用 PB 来测量的,其中 1PB 等
于 100 万 GB。更新速度快指的是数据是如何生成或创建的。人们只需要看看
Facebook,就能欣赏到成千上万个在线用户不断创建新内容的速度。最后,定义
中的类型丰富指的是构成巨大数据流的各种数据类型,包括图片、视频、音频以
及普通文本。上传至 Facebook 的平均照片可能需要 4MB~5MB 兆字节的存储空
间。将这些照片乘以不断上传的数百万张照片,很快就会意识到大数据的本质。
那么人工智能是如何影响大数据的呢?答案是:应用于大数据集时,人工智能学
习系统可以让用户从巨大而嘈杂的输入中提取有用的信息。
能够处理大数据的典型计算机系统由数千个处理器组成,它们以一种并行的
方式协同工作,极大地加快了通常称为 MapReduce 的数据还原过程。 IBM 的沃森
(Watson)计算机就是这样一个系统的典型例子。它通过使用一个基于规则的引擎
来实现专家医疗系统,并处理成千上万条医疗记录。最终的结果是一个计算机系
统,它可以帮助医生诊断疾病和相关疾病,而这些疾病并没有明显可与已知疾病
相关的症状。
亚马逊的网站上集成了一个令人印象深刻的人工智能系统,该系统可以很容
易地对每一个潜在或实际的客户进行详细的描述, 这些用户可以反复访问其网站。
它将客户的搜索与其他搜索或询问类似产品的客户的搜索相匹配。它还会进一步
尝试根据过去的搜索和订单来预测一个网站的访问者可能会感兴趣的内容。亚马
逊系统所使用的所有数据都是事务性的,主要是识别潜在客户的利益。这种交易
数据,也被认为是大数据,是亚马逊人工智能计算机系统的主要输入。输出是前
面提到的配置文件,但也可能被认为是与潜在客户或实际客户关联的一组字符;
例如,一个网站的建议可能看起来如下:
你可能对 Robert Heinlein 的书 The Moon is a Harsh Mistress 感兴趣,因为你买
了以下书:
z Full Moon
z Star Wars: The Empire Strikes Back
z The Shawshank Redemption

这些看似无关的书籍可能表明,顾客对某些话题有兴趣,包括月球、外太空
的冲突、监狱里的不公正等,所有这些可能在某种程度上受到 Heinlein 的书的影
响(顺便说一下, Heinlein 的书在 1967 年获得了最佳科幻小说雨果奖)。如果想在
客户买过的图书和 Heinlein 的书籍之间建立一种模糊的联系,就需要做认真的计
算分析以及拥有丰富的数据来源。
全球最大的大数据分析用户是美国政府, 他们用来辅助反恐行动(Global War on
Terrorism, GWOT)。美国国家安全局(US National Security Agency, NSA)在发现可
能发生的恐怖袭击事件中处于领先地位。它每年的机密预算据估计超过150 亿美元,
其中绝大部分用于收集和分析各种大数据, 用于对抗 GWOT。 收集的信息以及如何
进行大数据分析是超机密的,但是我们可以很合理地假设美国国家安全局的专家们
使用多种人工智能技术,他们中的许多人也是从事秘密人工智能研究的专家。
本节结束了对人工智能的介绍,虽然有点简略。从第 2 章开始,我们着手对
特定的 AI 概念进行研究。
1.7 小 结
本章首先讲解了人工智能的历史起源,从古代开始直到现代,人类花了很长
时间思考智能机器的制造。直到最近,计算机才具备实现智能行为的能力。
然后本章对人工智能发展的经典方法和现代方法的区别进行了简短的讨论。
简而言之,经典的方法是尝试让计算机模仿或模拟人脑,而现代的方法只是利用
计算机固有的速度和处理能力来实现人工智能。本章还定义了其他术语,如广泛
的人工智能和狭义的人工智能,强人工智能和弱人工智能。
对智能本质作简要探索是为了激发你的好奇心,并思考如何判别一个机器或
生物具有智能。接下来是关于推理的简短分析,其中包括一些例子,帮助我们在
人工智能应用中体会推理的含义。
之后,本章介绍了人工智能的分类,以说明当前人工智能研究的主要应用领
域。在本书中,我们只讲解了其中的一部分。
本章末尾介绍了人工智能如何影响现代社会(尤其在处理大数据时)。

购买地址:

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26421423/viewspace-2217195/,如需转载,请注明出处,否则将追究法律责任。

上一篇: Java JDK 9学习笔记
请登录后发表评论 登录
全部评论
分享计算机前沿技术和国外计算机先进技术书籍。

注册时间:2011-11-08

  • 博文量
    73
  • 访问量
    119425