新書推薦:
《
伟大民族:从路易十五到拿破仑的法国史(方尖碑)
》
售價:HK$
188.2
《
古今“书画同源”论辨——中国书法与中国绘画的关系问题兼中国画笔墨研究
》
售價:HK$
132.2
《
《日本文学史序说》讲演录
》
售價:HK$
72.8
《
无尽的海洋:美国海事探险与大众文化(1815—1860)
》
售價:HK$
99.7
《
治盗之道:清代盗律的古今之辨
》
售價:HK$
122.1
《
甲骨文丛书·剑桥世界暴力史(第一卷):史前和古代世界(套装全2册)
》
售價:HK$
210.6
《
甲骨文丛书·中华早期帝国:秦汉史的重估
》
售價:HK$
300.2
《
欲望与家庭小说
》
售價:HK$
98.6
|
編輯推薦: |
语言幽默,举例生动,适合零基础读者学习机器学习。广泛覆盖梯度下降、线性与非线性分类模型、感知机、神经网络、超参数调优、过度拟合和卷积神经网络等重要热门主题。附带配套网站ProgML(www.progml.com),读者可自行参阅重要内容的额外解释与细节部分。每章都附有可供读者完成的编程练习,练习还配备了参考答案。附录中有Python简单入门教程与术语表。
|
內容簡介: |
本书从一个完全不了解机器学习的程序员的视角出发,通过一系列生动有趣的具体应用实例,运用诙谐的语言以循序渐进的方式比较系统地介绍机器学习的本质思想、基本理论和重要算法,比较细致地剖析线性模型、感知机模型、浅层神经网络、深度神经网络的设计原理与编程方法,引导读者亲自动手从零开始打造和完善机器学习的底层代码,逐步消除对机器学习算法原理的认知盲点,让广大初学者能够较为轻松地掌握机器学习和深度学习的基本理论和编程技术。本书是从零基础初学者的思维角度编写的,适合作为智能科学与技术、数据科学与大数据技术、计算机科学与技术以及相关专业的本科生或研究生的机器学习入门教材,也可供工程技术人员和自学读者学习参考。
|
關於作者: |
◆译者简介◆
汪荣贵
合肥工业大学计算机与信息学院(人工智能学院)教授、博士生导师,中国人工智能学会离散智能计算专委会委员,安徽省人工智能学会理事,主要研究方向为多媒体技术与深度学习、视频大数据与计算机视觉,已承担完成或正在承担国家重点研发计划项目、国家自然基金企业联合基金重点项目、国家自然基金面上项目、工信部电子产业基金项目、安徽省科技攻关重点项目(科技强警),以及企业委托研发项目等多个课题的研究,已发表高水平学术论文八十余篇,近期研究成果获中电集团科技进步一等奖、安徽省科技进步二等奖、合肥市科技进步一等奖,长期从事《离散数学》、《算法设计与分析》、《机器学习》、《计算机视觉》、《优化计算方法》等本科生或研究生课程的教学工作,编著出版的教材《离散数学及其应用》、《算法设计与应用》、《机器学习及其应用》、《机器学习简明教程》,以及近期出版的译著《优美的教学思维——问题求解与证明》、《机器学习编程——从编码到深度学习》深受广大读者的欢迎和好评。
|
目錄:
|
译者序
前言
致谢
部分 从零开始的
图像识别
第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
|
內容試閱:
|
◆译者序◆
人工智能系统主要使用机器学习技术解析外部环境数据,从数据中获取知识和模型参数,从而获得可用于决策或预测的数学模型。机器学习为人工智能系统提供了基础性的核心算法支撑。要想了解人工智能,首先必须牢固掌握机器学习的基础理论与应用技术。
机器学习主要是从经验数据等先验信息中产生或构造模型的训练学习算法,或者说机器学习是一门关于训练学习算法设计理论与应用技术的学问。我们知道,算法设计是一种思维的艺术,需要一定的抽象思维能力和数学知识。机器学习算法更是如此,不仅涉及微积分、数理统计、矩阵计算、图论等数学知识,还涉及众多化理论与方法,为广大初学者掌握机器学习知识带来一定的困难。
本书从一个完全不了解机器学习的程序员的视角出发,通过一系列生动有趣的具体应用实例,运用诙谐的语言以循序渐进的方式比较系统地介绍机器学习的本质思想、基本理论和重要算法,引导读者亲自动手从零开始打造和完善机器学习的底层代码,逐步消除对机器学习算法原理的认知盲点,使得广大初学者可以比较轻松地掌握机器学习和深度学习的基本理论和编程技术。
本节主要由三部分组成。部分主要通过一些有趣的应用实例介绍机器学习的基本概念、梯度下降优化算法,以及线性回归模型、线性分类模型、感知机模型等基本的机器学习模型。第二部分主要介绍神经网络模型及相关的训练算法,首先使用一种非常易于理解的方式介绍感知机神经网络模型,使得读者能够很快认识到神经网络模型的本质,然后结合代码的编写过程由浅入深地介绍神经网络模型的训练步骤和训练算法,并以诙谐幽默的语言分析讨论超参数调优和模型测试的一般方法和基本技巧。第三部分介绍深度学习的基本原理和基本模型,着重讨论深度学习的过度拟合问题和正则化策略以及激活函数的设计思想,帮助广大初学者打下良好的深度学习知识基础和编程基础。
本书是从零基础初学者的思维角度编写的,使用非常朴实、幽默的语言深入浅出地表达知识内容,着重突出机器学习方法的思想内涵、本质和基本的编程技术,使得广大读者能够通过自己的努力较容易地掌握全书主要内容,适合作为智能科学与技术、数据科学与大数据技术、计算机科学与技术以及相关专业的本科生或研究生的机器学习入门教材,也可供工程技术人员和自学读者学习参考。
本书由汪雄飞、汪荣贵共同翻译完成。感谢研究生张前进、江丹、孙旭、尹凯健、王维、张珉、李婧宇、修辉、雷辉、张法正、付炳光、叶萌、朱正发、汤明空、韩梦雅、邓韬、王静、龚毓秀、李明熹、董博文、麻可可、李懂、刘兵等提供的帮助,感谢合肥工业大学和机械工业出版社的大力支持。
由于时间仓促,译文难免存在不妥之处,敬请读者批评指正!
译者
2021年3月
机器学习看上去就像魔法一样。计算机是如何识别图像中物体的呢?车辆又是如何自动驾驶的呢?
不论是对于普通人,还是对于你我这样的软件开发者来说,这些神奇的功能都令人感到沮丧。即使是我这种已经编写了很多年代码的程序员,也不知道机器学习的原理。当我在鼓捣的Web框架的时候就有人在编写酷炫的软件。这些软件看上去就像科幻片一样,我甚至都无法理解。
我想要从事这种软件的开发,想要亲自打造属于自己的机器学习软件。
我知道应该怎么去写程序,所以自以为很快就能上手机器学习程序的开发。我想,那能有多难呢?我带着自信满满的微笑开始学习。然后,我将之前的疑虑抛到脑后,保持着自信的微笑。
机器学习对于我们这种程序开发人员来说很陌生。这个领域充满了数学术语、研究惯例以及糟糕的代码。人们会把你引向各种讲座和研究论文,而非教程。对于我们中的大多数而言,机器学习既迷人又危险。
我刚开始学习机器学习时就没有这样一本书—用程序员习惯的语言编写出版的机器学习开发者入门指南。读完本书,你会熟悉机器学习的基本原理,并且能够编写一些机器学习程序。虽然你也许还不能编写出属于自己的自动驾驶程序,但是至少知道机器学习是怎么一回事了。
关于本书
这是一本写给想要从头开始学习机器学习的程序开发人员的入门指南。
机器学习涉及的范围十分广泛,没有哪本书能够涵盖机器学习的所有内容。本书内容将集中在机器学习重要的三个方面:监督学习、神经网络和深度学习。随着本书内容的展开,我们将以逐渐深入的方式介绍这些术语,下图和下文中的简单定义能够帮助你入门。
监督学习是一种特殊的机器学习类型。机器学习有几种具有不同特点的类型,监督学习是其中流行的一种。本书的部分就是监督学习的一个实践指南。在开始的几章里,我们将编写小型的机器学习程序。然后,我们将逐步提升程序的编写水平,直至完成一个名为感知机的机器学习系统。我们的感知机是一个真正的计算机视觉系统,功能强大到足以识别手写符号。我们完全依靠自己完成程序的编写,不使用程序库,你可以理解程序中的每一行代码。
实现监督学习系统有很多方法,其中流行的一种是神经网络。神经网络是受人脑神经元连接方式启发而发明出来的一种美妙算法。本书第二部分专注于神经网络。我们将把部分构造出来的程序逐步转换为成熟的神经网络模型。我们会在研究过程中面临一些挑战,但获得的回报是巨大的:后得到的神经网络模型要比初始程序强大得多。这里再次重申,我们会自己一行一行地编写代码。我们将公开代码内核以便读者自己进行尝试。
近年来,研究者发明了一些具有突破性的技术来设计并使用神经网络,神经网络也因此获得了巨大的发展。这种强化版的神经网络技术要比老式的简单神经网络技术强大得多,以致得到一个名为深度学习的新名称。本书第三部分就是深度学习。在这部分,我们将使用现代机器学习程序库重新编写神经网络模型,由此得到的代码将成为我们理解深度学习的起跑线。在第三部分的后,我们将浏览先进的深度学习技术,为将来的发展打下基础。
严格地说,前面的示意图中表示的内容并不完全准确。例如,神经网络可用于机器学习的其他领域,而并不仅限于监督学习领域。然而,该示意图是顺利理解本书内容的精髓及其整合方式的起点。
开始之前
虽然本书没办法让你在一夜之间成为机器学习专家,但它能够让你从直觉和实践的角度理解机器学习的原理。我想要掀开机器学习的神秘面纱,展示机器学习的奥秘,阐明机器学习的魔法。一旦掌握了机器学习的基本原理,你就会发现深挖机器学习技术并将这些技术结合到日常工作中变得更加容易,甚至还有可能开启你的机器学习工程师职业生涯。
虽然不是只有职业程序开发者才能阅读本书,但你必须能享受编写程序的过程。如果你懂得Python语言,那么你的运气不错,本书自始至终使用的都是Python语言,你会像在自己家里一样自在。如果你不懂Python语言,那也不用担心。Python是一种非常友好的语言,本书的所有代码都不会过于复杂。你可以阅读附录A来快速入门,如果卡壳了就上网搜索更多的信息吧。
机器学习涉及不少数学内容。虽然我不会简化数学部分的内容,但会尽可能地让这些数学内容变得易于直观理解。你需要掌握部分高中数学知识,我默认大家都能看懂笛卡儿坐标系,知道什么是“坐标轴”和“原点”,也能够理解函数图像。除此之外,不需要其他更多的先修数学知识了。
数学探究
我们都喜欢直观的数学,但有时你可能需要更加形式化的表述。如果你在对公式进行分析的时候感到迷茫,或者你喜欢数学并且想要学得更深,那就阅读“数学探究”这个信息框吧。它们会将卓越的可汗学院的相关数学截图呈现给你。不论你现在的数学水平如何,这个网站总能给你提供帮助。
事先说明一下,这些额外的课程内容是选学的。学习本书的知识并不需要这些内容,只有在你想要彻底掌握机器学习的数学知识时才需要学习它们。
另外,如果你有扎实的线性代数和微积分基础,那就会觉得有些数学表达是显而易见的。此时,你就可以不假思索地跳过那些不必阅读的解释。
机器学习有着丰富而且特定的词汇库。你可能会偶尔看见新名词,或者旧词新意。请放轻松,你不用记住所有这些词汇。再次遇到这些词汇的时候,我会提醒你其中很多词汇的含义。每当你遇到不记得含义的术语,都可以查看附录B。
可以使用一句话概括我将在具体应用实例中使用的样本数据集:其中许多数据集是图像集合。但请放心,除了图像识别之外,机器学习还可以做更多其他方面的事情。它可以分析文本、生成音乐,甚至可以进行自动对话。然而,图像识别是一个非常直观的应用实例,所以我将它作为整本书的程序应用。
后,别忘了浏览本书的网站并下载关于应用实例的源代码。你还能在本书的网站上找到关于勘误表的链接,拼写错误、bug和致命错误的勘误也都写在勘误表里。
本书还有一个名为ProgML的配套网站,其中包含一些无法放入书中的额外内容。有时你会在注释中找到对ProgML的引用,以链接到那些关于选学内容的介绍。如果你想要知道更多细节,那就去看看吧。
关于本书的简介就到这里。让我们从部分开始学习吧。
致 谢
首先,我要大声地感谢我的技术评审员们:Alessandro Bahgat、Arno Bastenhof、Roberto Bettazzoni、Guido“Zen”Bolognesi、Juan de Bravo、Simone Busoli、Pieter Buteneers、Andrea Cisternino、Sebastian Hennebrüder、Alberto Lumbreras、Russ Olsen、Luca Ongaro、Pierpaolo Pantone、Karol Przystalski、Dan Sheikh、Leonie Sieger、Gal Tsubery、l’ùmarèin pugnàtta di Casalecchio和Giancarlo Valente。谢谢你们提出富有见地的意见,不断地优化本书。Roberto Bettazzoni我就不客气了,他就像我的好朋友一样,得为本书出现的任何错误背锅。
我要感谢我的读者们:Marco Arena、Glen Aultman-Bettridge、Juanjo Bazan、Zbynek Bazanowski、Jamis Buck、Charles de Bueger、Leonardo Carotti、Amir Ebrahimi、Helge Eichhorn、George Ellis、Bruno Girin、Elton Goci、Dave Halliday、Darren Hunt、Peter Lin、Karen Mauney、Bradley Mirly、Vasileios Ntarlagiannis、Volkmar Petschnig、David Pinto、Conlan Rios、Roman Romanchuk、Ionut Simion、Drew Thomas和Jeroen Wenting。谢谢你们在本书的预出版阶段提出意见并参与勘误工作。
谢谢我的朋友Annamaria Di Sebastiano,感谢你和我分享了第1章开头的故事。
感谢Marc Schnierle,谢谢你那无与伦比的LaTeX4technics网络App,我用它来生成公式;感谢Kimberly Geswein,谢谢你设计的独立花体字,我在图中使用了这种字体;感谢设计了DejaVu Sans和DejaVu Sans Mono的团队,我在本书中广泛地使用了它们;还要感谢布里斯班市议会发布了美丽的针鼹图片,它出现在本书的末尾几章之中。
本书历经三位编辑之手。三位编辑都很优秀,我真的很幸运。感谢Meghan Blanchette和Susan Conant,谢谢你们帮助我从草稿开始到完成半成品。如果我在这里表现对你们的偏爱,你们应该会原谅我吧。我还要特别感谢Katharine Dvorak,谢谢你对本书做出的巨大努力,也谢谢你坚定不移但又充满耐心的指引。Katharine,你真的是一名令人称奇的编辑。
我要感谢我的大家庭:爸、妈、Anna、Susanna以及我遍布全球的亲朋好友们。有你们在我身边真是一年四季欢乐无比。
后,我要感谢我的妻子Irene,当我开始撰写本书的时候,你在我身边支持我度过苦苦挣扎的炎炎夏日。现在本书即将付梓,你一如既往,始终不渝。我无比感激,将本书献给你。
|
|