前言 / PREFACE
人工智能(Artificial Intelligence,AI)是一个覆盖许多下级学科的宽泛领域,本系列图书涵盖了当中的部分特定主题,而本书则是系列书的第1卷。接下来几小节将会对本系列图书和本卷一一进行介绍。
系列图书介绍
本系列图书将向读者介绍人工智能领域的各种热门主题。由于人工智能是一个庞大而繁杂的领域,并且其涵盖的内容与日俱增,任何一本书都只可能专注于特定领域,因此本书也无意成为一本巨细靡遗的人工智能教程。
本系列图书以一种数学上易于理解的方式讲授人工智能相关概念,这也是本系列图书英文书名中“for Human”的含义。此外:
● 本系列图书假定读者精通至少一门编程语言;
● 本系列图书假定读者对大学代数课程有基本的了解;
● 本系列图书将使用微积分、线性代数、微分方程与统计学中的相关概念和公式;
● 但是在解释上述第3点的相关内容时,本系列图书并不会假定读者对相关内容十分熟练;
● 所有概念都不仅有数学公式,还附有编程实例和伪代码。
本系列图书的目标读者是精通至少一门编程语言的程序员,且书中示例均已改写为多种编程语言的形式。
编程语言
本书中只是给出了伪代码,而具体示例代码则以Java、C#、R、C/C++和Python等语言形式提供,此外还有社区支持维护的Scala语言版本。社区成员们正在努力将示例代码转换为更多其他的编程语言,说不定当你拿到本书的时候,你喜欢的编程语言也有了相应的示例代码。访问本书的GitHub开源仓库可以获取更多信息,同时我们也鼓励社区协作来帮我们完成代码改写和移植工作。如果你也希望加入协作,我们将不胜感激。更多相关流程信息可以参见本书附录A。
在线实验环境
所有的线上实验环境资料均可在以下网址中找到:
http://www.aifh.org
这些在线环境使你就算是在移动设备上阅读电子书时也能尝试各种示例。
代码仓库
本系列图书中的所有代码均基于开源许可证Apache 2.0发布,相关内容可以在以下GitHub开源库中获取:
https://github.com/jeffheaton/aifh
附带JavaScript实验环境示例的在线实验环境则保存在以下GitHub开源库中:
https://github.com/jeffheaton/aifh-html[1]
如果你发现有任何疏漏抑或不妥之处,欢迎在GitHub上分叉项目并推送提交来进行修订,你也将可以成为日益壮大的贡献者群体之一。更多关于贡献代码的信息请参见本书附录A。
系列图书出版计划
本系列图书的写作计划:
● 卷0:AI数学入门;
● 卷1:基础算法;
● 卷2:自然启发算法;
● 卷3:深度学习和神经网络;
● 卷4:支持向量机;
● 卷5:概率学习。
卷1~卷5将会依次出版;而卷0则会作为“提前计划好的前传”,在本系列图书的出版接近尾声之际完成。卷1~卷5会讲解必要的数学概念,卷0则会专注于对这些概念进行回顾,并在此基础上进行一定的拓展。
卷0既可以是阅读本系列图书的开端,也可以作为本系列图书的总结;卷1的阅读顺序最好在后续几卷之前;卷2的部分内容对读者理解卷3的内容又有所助益。图1展示了我们建议的合理的阅读顺序。
本系列图书的每一卷均可独立阅读,也可作为本系列图书整体阅读。但需要注意的是,卷1中列出了后续各卷所使用的各种基本算法,并且这些算法本身既是基础,也不失实用性。
图1 卷目阅读流程
其他资源
当你在阅读本书的时候,互联网上还有很多别的资源可以帮助到你。
首先是可汗学院,上面收集整理了许多讲授各种数学概念的YouTube视频。你要是需要复习某个概念,可汗学院上很可能就有你需要的视频讲解,读者可以自行查找。
其次是网站“神经网络常见问答”。作为一个纯文本资源,上面拥有大量神经网络和其他人工智能领域的相关信息:
http://www.faqs.org/faqs/ai-faq/neural-nets/
此外,Encog项目的wiki页面也有许多机器学习方面的内容,并且这些内容并不局限于Encog项目:
http://www.heatonresearch.com/wiki/Main_Page
最后,Encog的论坛上也可以讨论人工智能和神经网络相关话题,这些论坛都非常活跃,你的问题很可能会得到某个社区成员甚至是我本人的回复:
http://www.heatonresearch.com/forum
基本算法介绍
欲建高楼,必重基础。本书会讲授诸如维度法、距离度量算法、聚类算法、误差计算、爬山算法、线性回归和离散学习这样的人工智能算法。这些算法对应于数据中特定模式的处理和识别,同时也是亚马逊(Amazon)和网飞(Netflix)这类网站中,各种推荐系统背后的逻辑。
这些算法不仅是后续各卷所介绍的算法的基础,其本身也大有用处。在本书中,这些算法的讲解均附以可操作性强的数值计算示例。
本书内容结构
第1章“AI入门”,介绍了本书或本系列图书其他各卷中会用到的部分人工智能相关的基本概念。大多数人工智能算法是接受一个输入数组,从而产生一个输出数组—人工智能所能解决的问题通常被归化为此类模型。而在算法模型内部,还需要有额外的数组来存储长短期记忆。算法的训练实际上就是通过调整长期记忆的值来产生对应于给定输入的预期输出的一个过程。
第2章“数据归一化”,描述了大多数人工智能算法对原始数据的预处理流程。数据需要以一个输入数组的形式传递给算法,但实践中获取到的数据并不一定都是数值型的,也有一些是类别信息,比如颜色、形状、性别、物种抑或其他一些非数值型的描述性特征。此外,就算是现成的数值型数据,也必须在一定范围内归一化,并且通常是归一化到 (-1, 1) 区间。
第3章“距离度量”,展示了我们比较数据的方法,说起来这种比较方法其实跟在地图上标识出两点间的距离十分相像。人工智能通常以数值数组的形式处理数据,包括输入数据、输出数据、长期记忆、短期记忆和其他很多数据都是如此,这些数组很多时候也被称作“向量”。我们可以像计算两点间距离一样,计算出两个数据之间的差异(二维和三维的点可以分别看作长度为二和三的向量)。当然,在人工智能领域,我们经常要处理的是更高维空间中的数据。
第4章“随机数生成”,讲解了人工智能算法中随机数的生成和使用。本章由关于均匀随机数和正态随机数的讨论切入——出现这种不同的根源在于有的时候算法要求随机数具有等可能性,而有的时候又需要它们服从某种既定的分布。此外本章还讨论了生成随机数的方法。
第5章“K均值聚类算法”,详述了将数据按相似度分类的方法。K均值算法本身可以用来将数据按共性分组,同时也可以被用于组成更复杂的算法—比如遗传算法就利用K均值算法对种群按特征归类,各路网商也利用聚类算法划分顾客,依照同类型顾客的消费习惯调整销售策略。
第6章“误差计算”,演示了评估人工智能算法效果的方法。误差计算的过程由一个用以评估算法最终效果的评分函数执行,其结果决定了算法的效果。一类常用的评分函数只需要给定输入向量和预期输出向量,也就是所谓的“训练数据”;算法的效果则由实际输出与预期输出间的差异决定。
第7章“迈向机器学习”,概述了可以从数据中学习特征来优化结果的简单机器学习算法。大多数人工智能算法是用权值向量将输入向量转化为期望的输出向量,这些权值向量构成了算法的长期记忆,“训练”就是一个调整长期记忆以产生预期输出的过程。本章会演示几个具有学习能力的简单模型的构建方法,也会介绍一些简单但却行之有效的训练算法,能够调整这种长期记忆(权重向量)并优化输出结果—简单随机漫步和爬山算法正是其中之二。
第8章“优化训练”,在前面章节的基础上进行了一定的拓展,介绍了像模拟退火算法和Nelder-Mead法[2]这样用来快速优化人工智能模型权重的算法。本章还说明了如何通过一定的调整,将这些优化算法应用于之前提到过的部分模型。
第9章“离散优化”,解释了如何优化非数值型的类别型数据。并非所有优化问题都是数值型的,还有离散型和类别型问题,比如背包问题和旅行商问题。本章将说明模拟退火算法可以用于处理这两个问题,并且该算法既适用于连续的数值型问题,也适用于离散的类别型问题。
第10章“线性回归”,讲解了如何用线性和非线性方程来学习趋势并做出预测。本章将介绍简单线性回归,并演示如何用它来拟合数据为线性模型。此外还将介绍可以拟合非线性数据的广义线性模型(General Linear Model,GLM)。
致谢
作为一次成功的众筹产物,本系列图书才得以在2013年面世。
我衷心地感谢该项目的所有支持者,没有你们的支持就没有这套丛书。我还要特别感谢那些赞助超过100美元的支持者。这些支持者们按赞助顺序排列的名单如下。
此外还要特别感谢Rick Cardarelle,他赞助的358美元一举使项目金额达到了要求的最低数额2500美元。也特别感谢Rory Graves和Matic Potocnik将示例代码转换为Scala代码。
谢谢大家,你们都是最友善的人!
[1] 定向内容已失效,读者可考虑访问另一个网址:https://www.heatonresearch.com/aifh/——译者注。
[2] 也称“下坡单纯形法”“变形虫法”或“多胞形法”,是一种在多维空间中求目标函数最大/最小值的常用数值方法。由John Nelder和Roger Mead于1965年提出。——译者注