首页>参考读物>计算机科学与技术>人工智能

机器学习编程:从编码到深度学习
作者 : [意]保罗·佩罗塔(Paolo Perrotta) 著
译者 : 汪雄飞 汪荣贵 译
出版日期 : 2021-05-12
ISBN : 978-7-111-68091-8
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 291
开本 : 16
原书名 : Programming Machine Learning: From Coding to Deep Learning
原出版社: Pragmatic Bookshelf
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

使用监督学习从头构建一个图像识别应用程序。用线性回归预测未来。深入研究梯度下降,这是一种驱动大部分机器学习的基本算法。创建感知器来分类数据。建立神经网络来处理更复杂和复杂的数据集。通过反向传播和批处理来训练和细化这些网络。分层神经网络,消除过度拟合,并添加卷积将您的神经网络转换为一个真正的深度学习系统。

图书特色

图书前言

机器学习看上去就像魔法一样。计算机是如何识别图像中物体的呢?车辆又是如何自动驾驶的呢?
不论是对于普通人,还是对于你我这样的软件开发者来说,这些神奇的功能都令人感到沮丧。即使是我这种已经编写了很多年代码的程序员,也不知道机器学习的原理。当我在鼓捣最新的Web框架的时候就有人在编写酷炫的软件。这些软件看上去就像科幻片一样,我甚至都无法理解。
我想要从事这种软件的开发,想要亲自打造属于自己的机器学习软件。
我知道应该怎么去写程序,所以自以为很快就能上手机器学习程序的开发。我想,那能有多难呢?我带着自信满满的微笑开始学习。然后,我将之前的疑虑抛到脑后,保持着自信的微笑。
机器学习对于我们这种程序开发人员来说很陌生。这个领域充满了数学术语、研究惯例以及糟糕的代码。人们会把你引向各种讲座和研究论文,而非教程。对于我们中的大多数而言,机器学习既迷人又危险。
我刚开始学习机器学习时就没有这样一本书—用程序员习惯的语言编写出版的机器学习开发者入门指南。读完本书,你会熟悉机器学习的基本原理,并且能够编写一些机器学习程序。虽然你也许还不能编写出属于自己的自动驾驶程序,但是至少知道机器学习是怎么一回事了。
关于本书
这是一本写给想要从头开始学习机器学习的程序开发人员的入门指南。
机器学习涉及的范围十分广泛,没有哪本书能够涵盖机器学习的所有内容。本书内容将集中在机器学习最重要的三个方面:监督学习、神经网络和深度学习。随着本书内容的展开,我们将以逐渐深入的方式介绍这些术语,下图和下文中的简单定义能够帮助你入门。

监督学习是一种特殊的机器学习类型。机器学习有几种具有不同特点的类型,监督学习是其中最流行的一种。本书的第一部分就是监督学习的一个实践指南。在开始的几章里,我们将编写小型的机器学习程序。然后,我们将逐步提升程序的编写水平,直至完成一个名为感知机的机器学习系统。我们的感知机是一个真正的计算机视觉系统,功能强大到足以识别手写符号。我们完全依靠自己完成程序的编写,不使用程序库,你可以理解程序中的每一行代码。
实现监督学习系统有很多方法,其中最流行的一种是神经网络。神经网络是受人脑神经元连接方式启发而发明出来的一种美妙算法。本书第二部分专注于神经网络。我们将把第一部分构造出来的程序逐步转换为成熟的神经网络模型。我们会在研究过程中面临一些挑战,但获得的回报是巨大的:最后得到的神经网络模型要比初始程序强大得多。这里再次重申,我们会自己一行一行地编写代码。我们将公开代码内核以便读者自己进行尝试。
近年来,研究者发明了一些具有突破性的技术来设计并使用神经网络,神经网络也因此获得了巨大的发展。这种强化版的神经网络技术要比老式的简单神经网络技术强大得多,以致得到一个名为深度学习的新名称。本书第三部分就是深度学习。在这部分,我们将使用现代机器学习程序库重新编写神经网络模型,由此得到的代码将成为我们理解深度学习的起跑线。在第三部分的最后,我们将浏览先进的深度学习技术,为将来的发展打下基础。
严格地说,前面的示意图中表示的内容并不完全准确。例如,神经网络可用于机器学习的其他领域,而并不仅限于监督学习领域。然而,该示意图是顺利理解本书内容的精髓及其整合方式的起点。
开始之前
虽然本书没办法让你在一夜之间成为机器学习专家,但它能够让你从直觉和实践的角度理解机器学习的原理。我想要掀开机器学习的神秘面纱,展示机器学习的奥秘,阐明机器学习的魔法。一旦掌握了机器学习的基本原理,你就会发现深挖机器学习技术并将这些技术结合到日常工作中变得更加容易,甚至还有可能开启你的机器学习工程师职业生涯。
虽然不是只有职业程序开发者才能阅读本书,但你必须能享受编写程序的过程。如果你懂得Python语言,那么你的运气不错,本书自始至终使用的都是Python语言,你会像在自己家里一样自在。如果你不懂Python语言,那也不用担心。Python是一种非常友好的语言,本书的所有代码都不会过于复杂。你可以阅读附录A来快速入门,如果卡壳了就上网搜索更多的信息吧。
机器学习涉及不少数学内容。虽然我不会简化数学部分的内容,但会尽可能地让这些数学内容变得易于直观理解。你需要掌握部分高中数学知识,我默认大家都能看懂笛卡儿坐标系,知道什么是“坐标轴”和“原点”,也能够理解函数图像。除此之外,不需要其他更多的先修数学知识了。
数学探究
我们都喜欢直观的数学,但有时你可能需要更加形式化的表述。如果你在对公式进行分析的时候感到迷茫,或者你喜欢数学并且想要学得更深,那就阅读“数学探究”这个信息框吧。它们会将卓越的可汗学院的相关数学截图呈现给你。不论你现在的数学水平如何,这个网站总能给你提供帮助。
事先说明一下,这些额外的课程内容是选学的。学习本书的知识并不需要这些内容,只有在你想要彻底掌握机器学习的数学知识时才需要学习它们。
另外,如果你有扎实的线性代数和微积分基础,那就会觉得有些数学表达是显而易见的。此时,你就可以不假思索地跳过那些不必阅读的解释。
机器学习有着丰富而且特定的词汇库。你可能会偶尔看见新名词,或者旧词新意。请放轻松,你不用记住所有这些词汇。再次遇到这些词汇的时候,我会提醒你其中很多词汇的含义。每当你遇到不记得含义的术语,都可以查看附录B。
可以使用一句话概括我将在具体应用实例中使用的样本数据集:其中许多数据集是图像集合。但请放心,除了图像识别之外,机器学习还可以做更多其他方面的事情。它可以分析文本、生成音乐,甚至可以进行自动对话。然而,图像识别是一个非常直观的应用实例,所以我将它作为整本书首选的程序应用。
最后,别忘了浏览本书的网站并下载关于应用实例的源代码。你还能在本书的网站上找到关于勘误表的链接,拼写错误、bug和致命错误的勘误也都写在勘误表里。
本书还有一个名为ProgML的配套网站,其中包含一些无法放入书中的额外内容。有时你会在注释中找到对ProgML的引用,以链接到那些关于选学内容的介绍。如果你想要知道更多细节,那就去看看吧。
关于本书的简介就到这里。让我们从第一部分开始学习吧。

上架指导

计算机/机器学习

封底文字

本书是从零基础初学者的思维角度编写的,使用非常朴实、幽默的语言深入浅出地表达知识内容,着重突出机器学习方法的思想内涵、本质和基本的编程技术。本书主要由三部分组成:第一部分主要通过一些有趣的应用实例介绍机器学习的基本概念、梯度下降优化算法,以及线性回归模型、线性分类模型、感知机模型等最基本的机器学习模型;第二部分主要介绍神经网络模型及相关的训练算法,并结合代码的编写过程由浅入深地介绍神经网络模型的训练步骤和训练算法;第三部分介绍深度学习的基本原理和基本模型,帮助广大初学者打下良好的深度学习知识基础和编程基础。

主要特点包括:
语言幽默,举例生动,适合零基础读者学习机器学习。
广泛覆盖梯度下降、线性与非线性分类模型、感知机、神经网络、超参数调优、过度拟合和卷积神经网络等重要热门主题。
附带配套网站ProgML(www.progml.com),读者可自行参阅重要内容的额外解释与细节部分。
每章都附有可供读者完成的编程练习,练习还配备了参考答案。
附录中有Python简单入门教程与术语表。

译者序

人工智能系统主要使用机器学习技术解析外部环境数据,从数据中获取知识和模型参数,从而获得可用于决策或预测的数学模型。机器学习为人工智能系统提供了基础性的核心算法支撑。要想了解人工智能,首先必须牢固掌握机器学习的基础理论与应用技术。
机器学习主要是从经验数据等先验信息中产生或构造模型的训练学习算法,或者说机器学习是一门关于训练学习算法设计理论与应用技术的学问。我们知道,算法设计是一种思维的艺术,需要一定的抽象思维能力和数学知识。机器学习算法更是如此,不仅涉及微积分、数理统计、矩阵计算、图论等数学知识,还涉及众多最优化理论与方法,为广大初学者掌握机器学习知识带来一定的困难。
本书从一个完全不了解机器学习的程序员的视角出发,通过一系列生动有趣的具体应用实例,运用诙谐的语言以循序渐进的方式比较系统地介绍机器学习的本质思想、基本理论和重要算法,引导读者亲自动手从零开始打造和完善机器学习的底层代码,逐步消除对机器学习算法原理的认知盲点,使得广大初学者可以比较轻松地掌握机器学习和深度学习的基本理论和编程技术。
本节主要由三部分组成。第一部分主要通过一些有趣的应用实例介绍机器学习的基本概念、梯度下降优化算法,以及线性回归模型、线性分类模型、感知机模型等最基本的机器学习模型。第二部分主要介绍神经网络模型及相关的训练算法,首先使用一种非常易于理解的方式介绍感知机神经网络模型,使得读者能够很快认识到神经网络模型的本质,然后结合代码的编写过程由浅入深地介绍神经网络模型的训练步骤和训练算法,并以诙谐幽默的语言分析讨论超参数调优和模型测试的一般方法和基本技巧。第三部分介绍深度学习的基本原理和基本模型,着重讨论深度学习的过度拟合问题和正则化策略以及激活函数的设计思想,帮助广大初学者打下良好的深度学习知识基础和编程基础。
本书是从零基础初学者的思维角度编写的,使用非常朴实、幽默的语言深入浅出地表达知识内容,着重突出机器学习方法的思想内涵、本质和基本的编程技术,使得广大读者能够通过自己的努力较容易地掌握全书主要内容,适合作为智能科学与技术、数据科学与大数据技术、计算机科学与技术以及相关专业的本科生或研究生的机器学习入门教材,也可供工程技术人员和自学读者学习参考。
本书由汪雄飞、汪荣贵共同翻译完成。感谢研究生张前进、江丹、孙旭、尹凯健、王维、张珉、李婧宇、修辉、雷辉、张法正、付炳光、叶萌、朱正发、汤明空、韩梦雅、邓韬、王静、龚毓秀、李明熹、董博文、麻可可、李懂、刘兵等提供的帮助,感谢合肥工业大学和机械工业出版社的大力支持。
由于时间仓促,译文难免存在不妥之处,敬请读者批评指正!

译者
2021年3月

图书目录

译者序
前言
致谢
第一部分 从零开始的
图像识别
第1章 机器学习的原理 2
1.1 编程与机器学习 2
1.2 监督学习 4
1.3 魔法背后的数学原理 6
1.4 设置系统 8
第2章 首个机器学习程序 12
2.1 了解问题 12
2.1.1 监督比萨 13
2.1.2 理解数据 13
2.2 编写线性回归代码 15
2.2.1 定义模型 16
2.2.2 进行预测 18
2.2.3 进行训练 18
2.2.4 计算误差 19
2.2.5 越来越接近 20
2.2.6 运行代码 21
2.3 添加偏置 23
2.4 小结 25
2.5 动手研究:设置超参数 26
第3章 梯度 28
3.1 算法的缺陷 28
3.2 梯度下降法 30
3.2.1 少量数学知识 32
3.2.2 陡坡速降 33
3.2.3 脱离平面 34
3.2.4 偏导数 35
3.2.5 测试梯度下降法 37
3.2.6 何时梯度下降法不适用 38
3.3 小结 40
3.4 动手研究:露营地问题 40
第4章 超空间 41
4.1 添加更多维度 42
4.2 矩阵代数 44
4.2.1 矩阵乘法 45
4.2.2 矩阵转置 47
4.3 升级学习程序 47
4.3.1 数据准备 48
4.3.2 升级预测函数 50
4.3.3 升级损失函数 51
4.3.4 升级梯度公式 52
4.3.5 整合函数 53
4.4 告别偏置 54
4.5 最后一次试运行 55
4.6 小结 56
4.7 动手研究:统计学家 56
第5章 能辨识的机器 58
5.1 线性回归的不足 58
5.2 S型函数 61
5.2.1 信心与疑虑 62
5.2.2 平滑过程 63
5.2.3 升级梯度 65
5.2.4 模型函数受到的影响 66
5.3 操作中的分类函数 67
5.4 小结 69
5.5 动手研究:权重的影响 70
第6章 计算机视觉初探 71
6.1 处理数据 72
6.1.1 MNIST入门 72
6.1.2 训练与测试 73
6.2 我们自己的MNIST库 74
6.2.1 准备输入矩阵 74
6.2.2 处理数据 76
6.3 实际运行 79
6.4 小结 80
6.5 动手研究:难以识别的数字 80
第7章 最后的挑战 81
7.1 多元分类 81
7.1.1 独热编码 83
7.1.2 独热编码实践 84
7.1.3 解码分类器的答案 85
7.1.4 需要更多的权重 85
7.1.5 回顾矩阵维数 86
7.2 验证与结果 87
7.3 小结 89
7.4 动手研究:扫雷舰 89
第8章 感知机 91
8.1 认识感知机 91
8.2 组装感知机 92
8.3 感知机的不足 93
8.3.1 线性可分数据 94
8.3.2 线性不可分数据 95
8.4 感知机史话 97
8.4.1 终极之战 98
8.4.2 论战余波 98
第二部分 神经网络
第9章 设计神经网络 100
9.1 用感知机组装神经网络 101
9.1.1 链式感知机 102
9.1.2 节点数量 103
9.2 加入softmax函数 105
9.3 构建方案 106
9.4 小结 106
9.5 动手研究:网络冒险 107
第10章 构建神经网络 108
10.1 编写正向传播代码 108
10.1.1 编写softmax函数 110
10.1.2 编写分类函数 112
10.2 交叉熵 112
10.3 小结 114
10.4 动手研究:时间旅行的测试 115
第11章 训练神经网络 116
11.1 反向传播的使用场合 116
11.2 从链式法则到反向传播 118
11.2.1 简单网络结构的链式法则 118
11.2.2 复杂网络的链式法则 119
11.3 使用反向传播算法 121
11.3.1 开始之前 123
11.3.2 计算w2的梯度 123
11.3.3 计算w1的梯度 124
11.3.4 提炼反向函数 125
11.4 初始化权重 126
11.4.1 可怕的对称性 126
11.4.2 死亡神经元 127
11.4.3 正确的权重初始化 129
11.5 完成网络模型 130
11.6 小结 132
11.7 动手研究:错误的开始 133
第12章 分类器的工作原理 134
12.1 寻找边界 134
12.1.1 感知机的主场 135
12.1.2 理解分类 136
12.1.3 线性不可分 138
12.2 弯曲的边界 139
12.3 小结 141
12.4 动手研究:高难数据 141
第13章 小批量处理 142
13.1 训练过程的可视化 143
13.2 分批处理 145
13.2.1 小批量样本集的构造 145
13.2.2 批量样本的训练 147
13.3 理解小批量 148
13.3.1 扭曲的路径 148
13.3.2 大型和小型批处理 150
13.3.3 批处理的优缺点 151
13.4 小结 152
13.5 动手研究:最小的批量 153
第14章 测试的禅意 154
14.1 过度拟合的威胁 154
14.2 测试的难题 156
14.3 小结 158
14.4 动手研究:思考测试 159
第15章 来做开发吧 160
15.1 准备样本数据 161
15.1.1 检查输入变量的范围 161
15.1.2 标准化输入变量 162
15.1.3 标准化的实践 163
15.2 调优超参数 164
15.2.1 选择历元的数量 164
15.2.2 调优隐藏节点数量 165
15.2.3 调优学习率 168
15.2.4 调优批量大小 170
15.3 最终测试 171
15.4 动手研究:实现99% 173
15.5 小结与展望 174
第三部分 深度学习
第16章 深度神经网络 178
16.1 针鼹数据集 179
16.2 使用Keras构建神经网络 180
16.2.1 计划与代码 181
16.2.2 加载数据 182
16.2.3 创建模型 183
16.2.4 编译模型 184
16.2.5 训练网络 184
16.2.6 描绘边界 185
16.2.7 实践中的Keras 185
16.3 更深一层 187
16.4 小结 188
16.5 动手研究:Keras游乐场 188
第17章 战胜过度拟合 190
17.1 详解过度拟合 190
17.1.1 过度拟合的成因 191
17.1.2 过度拟合与低度拟合 194
17.2 模型正则化 195
17.2.1 回顾深度网络 195
17.2.2 L1和L2 正则化法 198
17.3 正则化工具箱 202
17.4 小结 203
17.5 动手研究:保持简单 204
第18章 驯服深度网络 205
18.1 理解激活函数 205
18.1.1 激活函数存在的意义 206
18.1.2 S型函数及其运算结果 207
18.2 超越S型函数 211
18.2.1 初识ReLU 211
18.2.2 选择正确的函数 213
18.3 掌握更多的技巧 215
18.3.1 更好的权重初始化 215
18.3.2 加速梯度下降 216
18.3.3 高级正则化 217
18.3.4 最后一招:批处理标准化 219
18.4 小结 220
18.5 动手研究:10历元的挑战 220
第19章 超越香草神经网络 222
19.1 CIFAR-10数据集 223
19.1.1 初识CIFAR-10 223
19.1.2 难以分类的CIFAR数据 224
19.2 CNN的基本结构 225
19.2.1 图像就是图像 226
19.2.2 卷积 226
19.2.3 卷积层 229
19.3 运行卷积 230
19.4 小结 233
19.5 动手研究:大量的超参数 233
第20章 深度学习 235
20.1 深度学习的崛起 235
20.1.1 一场完美的革新风暴 236
20.1.2 临界点 237
20.1.3 未完待续 237
20.2 离谱的效率 238
20.3 路在何方 240
20.3.1 视觉之路 241
20.3.2 语言之路 241
20.3.3 图像生成之路 242
20.3.4 通天大道宽又阔 245
20.3.5 动手研究之路 246
20.4 你的旅程开始了 246
附录A Python语言入门 247
A.1 Python是什么样的 249
A.1.1 Python 是动态类型 250
A.1.2 Python中重要的缩进 250
A.2 Python语言的基本组成 251
A.2.1 数据类型和运算符 251
A.2.2 集合 252
A.2.3 字符串 253
A.2.4 循环 254
A.3 定义和调用函数 255
A.3.1 命名参数 256
A.3.2 默认参数 257
A.4 模块与包 257
A.4.1 定义与导入模块 257
A.4.2 主要习语 259
A.4.3 管理包 260
A.5 创建和使用对象 262
A.6 就这么多了 263
附录B 机器学习术语 264

教学资源推荐
作者: Wesley E.Snyder, Hairong Qi
作者: [法]阿尔伯特·比费特(Albert Bifet)[西班牙]理查德·戈华达 (Richard Gavaldà)[新西兰] 杰弗里·福尔摩斯(Geoffrey Holmes)[新西兰]伯恩哈德·普法林格(Bernhard Pfahringer) 著
作者: 李新德 朱博 谈英姿 编著
参考读物推荐
作者: [美]道格·罗斯(Doug Rose) 著
作者: [葡]路易斯·佩德罗·科埃略(Luis Pedro Coelho) [德]威力·里克特(Willi Richert)[法]马蒂厄·布鲁切尔(Matthieu Brucher) 著