◆译者序◆
从几年前的“人工智能距离我们有多远”,到现在的言必称深度学习,人工智能在过去的几年间获得了突飞猛进的发展。大量先进的生产力工具层出不穷,TensorFlow、PyTorch、MXNet等各种深度学习框架让人目不暇接,人工智能看起来唾手可得。似乎只要掌握了框架的使用,我们就可以成为一个人工智能专家了。在概念上,机器学习替代了人工智能,深度学习替代了机器学习,深度学习好像成了人工智能的主流。在应用领域,大部分的成功案例都集中在机器视觉和自然语言处理上。当前流行的狭义的人工智能离实际工程渐行渐远。
实际上,人工智能距离工程应用就是一墙之隔。周志华在“西瓜书”中总结机器学习为“致力于研究如何通过计算的手段,利用经验来改善系统自身的性能”,从这个意义上来说,人工智能应该有更加广泛的意义和应用方向。我们希望能够从更加广泛的工程应用的角度来看待人工智能的应用和影响。人工智能首先应该是一种工程应用手段。
市场上已经有大量的书籍讨论如何掌握具体的机器学习框架,也有很多专门讨论机器学习和深度学习原理的书籍,它们大都探讨机器学习和深度学习本身,涉及如何将人工智能技术和工程应用相结合的书籍却如凤毛麟角。如何让人工智能成为现代工业的生产动力?我们之前和很多客户讨论机器学习和深度学习的时候,感兴趣者甚多,知道如何入手者甚少;知其然者多,不知其所以然者众。大家都认识到这是工业 4.0 的驱动力,却苦于不知如何跟传统工程问题结合到一起。这也是我想要翻译这本书的一个主要动机,希望对大家的工作有所帮助。
本书作者具有近20年MATLAB大型工程项目开发的实践经历和丰富的教学经验。书中全面涵盖了机器学习领域的关键技术内容,原理阐释简洁清晰,兼顾理论和实践。应用实例则以独特的“问题—方法—步骤”的形式呈现给读者,具有极强的针对性与实用性,非常便于读者以问题驱动的方式快速有效地展开学习。
本书的目的是利用MATLAB的强大功能来帮助用户从原理上学习机器学习,并用于解决具体工程问题,适用于每个对机器学习感兴趣的工程人员。
陈建平
2019年10月
◆ 前言◆
机器学习在每个工程学科中正变得越来越重要,比如:
1. 自动驾驶。机器学习几乎用于汽车控制系统的各个方面。
2. 等离子体物理学家借助机器学习的帮助来指导聚变反应堆的实验。实际上,TAE Systems在指导聚变实验方面取得了巨大成功。普林斯顿等离子体物理实验室已将其用于国家球形环实验,以研究核聚变发电厂的可能的候选技术。
3. 在金融领域,它应用于预测股票市场。
4. 医疗专业人员将机器学习用于医疗诊断。
5. 执法部门将其用于面部识别,并在面部识别的辅助下解决了若干犯罪行为的定罪问题!
6. 美国太空总署的深空1号航天器使用了专家系统。
7. 用自适应控制系统操纵油轮。
还有许许多多其他的例子证明了机器学习的广泛应用。
虽然可以很方便地从商业来源和开源库获得许多优秀的机器学习软件包,但是去了解一下这些算法的工作原理依然很有价值。有机会编写自己的算法是非常值得的,它可以让你有机会深入体会和了解商业与开源软件包背后的原理。
MATLAB的起源就是出于这个原因。当时,需要对矩阵进行操作的科学家使用FORTRAN来编写数值软件,要学会用计算机语言来完成编写—编译—链接—执行过程,耗时且容易出错。MATLAB向用户提供了一种脚本语言,允许用户通过几行即时执行的脚本来解决许多问题。MATLAB具有内置的可视化工具,可帮助用户更好地理解结果。显然编写MATLAB比编写FORTRAN更有效率和乐趣。
本书的目的是帮助所有用户利用MATLAB的强大功能来解决各种机器学习的问题,适用于每个对机器学习感兴趣的人。另外,本书还涵盖一些内容,可以让那些对其他技术领域感兴趣的人看到机器学习和MATLAB如何帮助他们解决专业领域的问题。
如何使用随书软件
随书软件附带一个MATLAB的工具箱,实现了本书涉及的所有例子。工具箱包含
1. MATLAB函数
2. MATLAB脚本
3. html帮助
MATLAB脚本实现了本书中的所有示例,而函数则封装了各种算法。许多函数都有内置的演示,只需在命令窗口中键入函数名称,它就会执行演示。该演示通常封装在子函数中。你可以为自己的演示复制此代码并将其粘贴到脚本中。例如,在命令窗口中键入函数名称PlotSet,将出现图1。
图1 基于函数PlotSet.m的作图示例
打开函数源代码,你可以看到内置的演示子函数:
你可以基于这些演示开始构建你自己的脚本。某些函数,比如用于数值积分的右侧函数(函数句柄作为参数),则不带演示子函数。如果键入函数名,会报错:
该工具箱根据本书的章节进行组织,文件夹名称是Chapter_01、Chapter_02等。此外,还有一个general文件夹,其中包含支持工具箱其余部分的基础函数。你还需要开源包GLPK(GNU Linear Programming Kit)来运行一些代码。Nicolo Giorgetti为GLPK编写了一个MATLAB MEX接口,该接口可在SourceForge上获得,并包含在此工具箱中。接口包括:
1. glpk.m
2. glpkcc.mexmaci64或glpkcc.mexw64等
3. GLPKTest.m
该软件包可从https://sourceforge.net/projects/glpkmex/获取。第二项是为机器编译的glpkcc.cpp的MEX文件,分别对应Mac或Windows操作系统下的文件。请到https://www.gnu.org/software/glpk/获取GLPK库并将其安装在你的系统上。如果需要,也可以下载GLPKMEX源代码,并自行基于你的操作系统进行编译。
作者简介 About the Authors
Michael Paluszek是普林斯顿卫星系统公司(PSS)总裁,该公司位于美国新泽西州Plainsboro。Paluszek先生于1992年创建了PSS公司,主要业务是提供航空航天咨询服务。他使用MATLAB开发了Indostar-1地球同步通信卫星的控制系统和仿真系统,并于1995年推出了普林斯顿卫星系统公司的第一个商业MATLAB工具箱:航天器控制工具箱。从那时起,他已经先后为飞行器、潜水艇、机器人和核聚变推进系统等开发了工具箱和软件包,并且形成了覆盖范围广泛的公司产品线。他目前正在与普林斯顿等离子体物理实验室合作开发一个用于发电和太空推进的紧凑型核聚变反应堆。
在成立普林斯顿卫星系统公司之前,Paluszek先生是位于新泽西州East Windsor的通用电气公司(GE)宇航部门的工程师。在通用电气公司,他设计了全球地球科学极地消旋平台控制系统,并主导设计了GPS IIR姿态控制系统、Inmarsat-3姿态控制系统和火星观测器delta-V控制系统,这些系统的控制设计都使用了MATLAB。Paluszek先生还致力于DMSP气象卫星姿态确定系统的研发。Paluszek先生参与了超过12颗通信卫星的发射任务,其中包括GSTAR III恢复任务,第一次使用电推进器将卫星转移到作业轨道。在Draper实验室工作期间,Paluszek先生负责航天飞机、空间站和海底导航等工作。他的空间站工作包括基于控制力矩陀螺仪系统的姿态控制设计。
Paluszek先生获得了麻省理工学院的电气工程学士学位、航空航天学硕士和工程学位。他发表了很多论文,拥有十多项美国专利。Paluszek先生是Apress出版社出版的图书MATLAB Recipes和MATLAB Machine Learning的合著者。
Stephanie Thomas是位于美国新泽西州Plainsboro的普林斯顿卫星系统公司的副总裁。她于1999年和2001年分别从麻省理工学院获得航空航天学士学位和硕士学位。Thomas女士于1996年在暑期实习期间加入普林斯顿卫星系统公司的MATLAB航天器控制工具箱开发项目,自那以后就一直使用MATLAB进行航空航天分析。在近20年的MATLAB实践经历中,她开发了许多软件工具:用于航天器控制工具箱的太阳能帆板模块,美国空军的近地轨道卫星操控工具箱,用于Prisma卫星任务的碰撞监测Simulink模块,用MATLAB和Java编写的运载火箭分析工具。她开发了空间状态评估的新方法,例如用MATLAB和C++两种语言实现的数值算法,用来评估任意两颗卫星之间的一般会合问题。Thomas女士还为普林斯顿卫星系统公司的《姿态和轨道控制》教材编写做出了贡献,其中介绍了使用航天器控制工具箱(SCT)的案例,并编写了许多软件用户指南。她为来自澳大利亚、加拿大、巴西和泰国等不同国家的工程师进行了航天器控制工具箱培训,并为美国太空总署、美国空军和欧洲航天局等提供MATLAB咨询服务。Thomas女士是Apress出版的图书MATLAB Recipes和MATLAB Machine Learning的合著者。2016年,Thomas女士因“核聚动力冥王星轨道探测和登陆器”项目,被任命为美国太空总署NIAC研究员。