产品特色
编辑推荐
适读人群 :本书将理论和代码相结合,帮助读者更好地进入深度学习领域,适合任何对深度学习感兴趣的人。 1 作者本身也是从小白开始入门深度学习的,无论从书中内容,还是讲解思路,以及语言风格,均适合你从零开始进入深度学习这个充满魔力的世界。
2 实例简单而不简约,用到了生成对抗网络和注意力机制等目前相对前沿的深度学习技术。
3 虽然是一本入门教程,但是对原理的讲述也不含糊,清晰易懂,让读者能知其然且知其所以然。
内容简介
深度学习如今已经成为了科技领域*炙手可热的技术,在本书中,我们将帮助你入门深度学习的领域。本书将从人工智能的介绍入手,了解机器学习和深度学习的基础理论,并学习如何用PyTorch框架对模型进行搭建。通过阅读本书,你将会学习到机器学习中的线性回归和logistic回归,深度学习的优化方法,多层全连接神经网络,卷积神经网络,循环神经网络以及生成对抗网络,同时从零开始对PyTorch进行学习,了解PyTorch基础及如何用其进行模型的搭建,*后通过实战了解*前沿的研究成果和PyTorch在实际项目中的应用。
作者简介
廖星宇,目前就读于中国科学技术大学应用数学系,获得国家一等奖学金。在个人博客、知乎等平台上发布多篇关于深度学习的文章,具有一定的阅读量和人气。
目录
第1 章深度学习介绍1
1.1 人工智能. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 数据挖掘、机器学习与深度学习. . . . . . . . . . . . . . . . . . . . . . . 2
1.2.1 数据挖掘. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.2 机器学习. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.3 深度学习. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 学习资源与建议. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
第2 章深度学习框架11
2.1 深度学习框架介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 PyTorch 介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.1 什么是PyTorch . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.2 为何要使用PyTorch . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3 配置PyTorch 深度学习环境. . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.1 操作系统的选择. . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.2 Python 开发环境的安装. . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.3 PyTorch 的安装. . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
第3 章多层全连接神经网络24
3.1 热身:PyTorch 基础. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.1 Tensor(张量) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.2 Variable(变量) . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.1.3 Dataset(数据集) . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.1.4 nn.Module(模组) . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.5 torch.optim(优化) . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.1.6 模型的保存和加载. . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2 线性模型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2.1 问题介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.2.2 一维线性回归. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.3 多维线性回归. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2.4 一维线性回归的代码实现. . . . . . . . . . . . . . . . . . . . . . 35
3.2.5 多项式回归. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.3 分类问题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.3.1 问题介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.3.2 Logistic 起源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.3.3 Logistic 分布. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.3.4 二分类的Logistic 回归. . . . . . . . . . . . . . . . . . . . . . . . 43
3.3.5 模型的参数估计. . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.3.6 Logistic 回归的代码实现. . . . . . . . . . . . . . . . . . . . . . . 45
3.4 简单的多层全连接前向网络. . . . . . . . . . . . . . . . . . . . . . . . . 49
3.4.1 模拟神经元. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.4.2 单层神经网络的分类器. . . . . . . . . . . . . . . . . . . . . . . . 50
3.4.3 激活函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.4.4 神经网络的结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.4.5 模型的表示能力与容量. . . . . . . . . . . . . . . . . . . . . . . . 55
3.5 深度学习的基石:反向传播算法. . . . . . . . . . . . . . . . . . . . . . . 57
3.5.1 链式法则. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.5.2 反向传播算法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.5.3 Sigmoid 函数举例. . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.6 各种优化算法的变式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.6.1 梯度下降法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.6.2 梯度下降法的变式. . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.7 处理数据和训练模型的技巧. . . . . . . . . . . . . . . . . . . . . . . . . 64
3.7.1 数据预处理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.7.2 权重初始化. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.7.3 防止过拟合. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.8 多层全连接神经网络实现MNIST 手写数字分类. . . . . . . . . . . . . . 69
3.8.1 简单的三层全连接神经网络. . . . . . . . . . . . . . . . . . . . . 70
3.8.2 添加激活函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3.8.3 添加批标准化. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3.8.4 训练网络. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
第4 章卷积神经网络76
4.1 主要任务及起源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.2 卷积神经网络的原理和结构. . . . . . . . . . . . . . . . . . . . . . . . . 77
4.2.1 卷积层. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.2.2 池化层. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.2.3 全连接层. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
4.2.4 卷积神经网络的基本形式. . . . . . . . . . . . . . . . . . . . . . 85
4.3 PyTorch 卷积模块. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.3.1 卷积层. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.3.2 池化层. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.3.3 提取层结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.3.4 如何提取参数及自定义初始化. . . . . . . . . . . . . . . . . . . . 91
4.4 卷积神经网络案例分析. . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
4.4.1 LeNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
4.4.2 AlexNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
4.4.3 VGGNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.4.4 GoogLeNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
4.4.5 ResNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
4.5 再实现MNIST 手写数字分类. . . . . . . . . . . . . . . . . . . . . . . . . 103
4.6 图像增强的方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
4.7 实现cifar10 分类. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
第5 章循环神经网络111
5.1 循环神经网络. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
5.1.1 问题介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
5.1.2 循环神经网络的基本结构. . . . . . . . . . . . . . . . . . . . . . 112
5.1.3 存在的问题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
5.2 循环神经网络的变式:LSTM 与GRU . . . . . . . . . . . . . . . . . . . . 116
5.2.1 LSTM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
5.2.2 GRU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
5.2.3 收敛性问题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
5.3 循环神经网络的PyTorch 实现. . . . . . . . . . . . . . . . . . . . . . . . 122
5.3.1 PyTorch 的循环网络模块. . . . . . . . . . . . . . . . . . . . . . . 122
5.3.2 实例介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
5.4 自然语言处理的应用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
5.4.1 词嵌入. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
5.4.2 词嵌入的PyTorch 实现. . . . . . . . . . . . . . . . . . . . . . . . 133
5.4.3 N Gram 模型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
5.4.4 单词预测的PyTorch 实现. . . . . . . . . . . . . . . . . . . . . . . 134
5.4.5 词性判断. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
5.4.6 词性判断的PyTorch 实现. . . . . . . . . . . . . . . . . . . . . . . 137
5.5 循环神经网络的更多应用. . . . . . . . . . . . . . . . . . . . . . . . . . . 140
5.5.1 Many to one . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
5.5.2 Many to Many(shorter) . . . . . . . . . . . . . . . . . . . . . . . 141
5.5.3 Seq2seq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
5.5.4 CNN+RNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
第6 章生成对抗网络144
6.1 生成模型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
6.1.1 自动编码器. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
6.1.2 变分自动编码器. . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
6.2 生成对抗网络. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
6.2.1 何为生成对抗网络. . . . . . . . . . . . . . . . . . . . . . . . . . 153
6.2.2 生成对抗网络的数学原理. . . . . . . . . . . . . . . . . . . . . . 160
6.3 Improving GAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
6.3.1 Wasserstein GAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
6.3.2 Improving WGAN . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
6.4 应用介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
6.4.1 Conditional GAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
6.4.2 Cycle GAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
第7 章深度学习实战173
7.1 实例一――猫狗大战:运用预训练卷积神经网络进行特征提取与预测. 173
7.1.1 背景介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
7.1.2 原理分析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
7.1.3 代码实现. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
7.1.4 总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
7.2 实例二――Deep Dream:探索卷积神经网络眼中的世界. . . . . . . . . 183
7.2.1 原理介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
7.2.2 预备知识:backward . . . . . . . . . . . . . . . . . . . . . . . . . 185
7.2.3 代码实现. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
7.2.4 总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
7.3 实例三――Neural-Style:使用PyTorch 进行风格迁移. . . . . . . . . . . 196
7.3.1 背景介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
7.3.2 原理分析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
7.3.3 代码实现. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
7.3.4 总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
7.4 实例四――Seq2seq:通过RNN 实现简单的Neural Machine Translation . 205
7.4.1 背景介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
7.4.2 原理分析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
7.4.3 代码实现. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
7.4.4 总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
算法的脉络,智能的呼吸:开启你的数据科学探索之旅 在这场席卷全球的科技浪潮中,数据科学以其颠覆性的力量,重塑着我们认知世界、改造世界的方式。它不再是实验室里的抽象理论,而是渗透进我们生活的方方面面,从精准的医疗诊断到智能的交通系统,从个性化的推荐算法到前沿的科学研究,无处不闪耀着数据科学的光芒。如果你也渴望在这股浪潮中,找到属于自己的位置,理解那些驱动智能运行的深层逻辑,那么,一本能够为你铺就坚实基石的读物,将是你最得力的伙伴。 本书并非直接教授你某个特定框架的精巧运用,而是将目光投向那些更为根本、更为普适的原理。我们将深入探索数据科学的核心驱动力——算法。算法,是计算机解决问题的步骤和指令的集合,是逻辑思维的具象化,是智慧的火种。理解算法,就像掌握了打开数字世界宝藏的金钥匙,让你能够从海量数据中提炼出有价值的信息,构建出能够学习、推理、甚至创造的智能系统。 第一章:逻辑的基石——算法思维的孕育 我们将从算法最纯粹的形态开始,剥离技术的表象,直击思维的核心。你将学习如何将一个复杂的问题分解为一系列可执行的步骤,如何用清晰、严谨的逻辑来描述解决问题的过程。这不仅仅是编程的准备,更是培养一种系统性、条理性解决问题的能力。我们将通过一些经典的算法问题,例如排序、查找等,来让你体会算法设计的乐趣与挑战。通过分析不同算法的优劣,你将初步建立起对效率、复杂度的初步认知,为后续更深入的学习打下坚实的基础。这一章,将是培养你成为一名优秀算法工程师的起点,让你在面对任何问题时,都能以一种“算法化”的思维去审视和解决。 第二章:数据的语言——变量、结构与转换的艺术 数据是算法的原材料,而数据的组织和处理,则是算法得以施展的舞台。本章将带你走进数据的世界,学习如何有效地表示和存储数据。你将深入理解变量的本质,掌握不同数据类型的特性及其应用场景。我们将探讨如何设计合理的数据结构,以便算法能够高效地访问和操作数据。从最基础的数组、链表,到更复杂的树、图,我们将一一剖析它们的设计理念和适用范围。更重要的是,我们将学习数据转换的艺术:如何对原始数据进行清洗、规范化、特征提取等预处理操作,使其更适合算法的分析。这个过程,就像一位雕塑家,将粗糙的石料精心打磨,最终呈现出完美的艺术品。你将学会如何用代码优雅地完成这些数据魔法,为算法的“盛宴”准备好最丰盛的“食材”。 第三章:数学的韵律——线性代数与概率论的交响 在数据科学的殿堂里,数学是不可或缺的语言。特别是线性代数和概率论,它们如同两根支柱,支撑起无数高级算法的大厦。本章将以一种直观易懂的方式,为你揭示这些数学概念在数据科学中的实际应用。你将理解向量和矩阵如何成为描述数据和模型参数的强大工具,学习矩阵运算在数据变换、降维等任务中的核心作用。同时,概率论的魔力也将展现在你眼前:你将学习如何量化不确定性,理解随机变量、概率分布的意义,以及它们如何帮助我们理解数据的生成过程,评估模型的置信度。我们不会仅仅停留在公式的推导,而是强调这些数学工具如何帮助我们理解数据模式、建立模型、做出预测。通过本章的学习,你将能够更深刻地理解那些看似神秘的算法背后的数学原理,为更高级的学习做好充足的准备。 第四章:优化的力量——从梯度下降到模型训练的精进之路 模型的构建离不开优化,而优化则离不开对数学原理的深入理解。本章将聚焦于“优化”这一核心概念,它是让模型“学习”的关键。我们将从最基础的优化算法——梯度下降开始,详细解析其工作原理,理解如何通过迭代的方式,一步步逼近最优解。你将了解到不同类型的梯度下降算法,如批量梯度下降、随机梯度下降及其变种,以及它们各自的优缺点和适用场景。同时,我们还会探讨损失函数的设计,它定义了我们衡量模型“好坏”的标准,以及如何通过选择合适的损失函数来指导模型的训练方向。这一章,将让你明白,训练一个强大的模型,并非一蹴而就,而是需要精妙的优化策略和对数学原理的精准运用。你将掌握如何调整参数、选择算法,让你的模型在海量数据中不断“成长”,达到预期的性能。 第五章:决策的艺术——分类与回归的策略 数据科学的应用场景千姿百态,而其中最为常见的任务便是分类与回归。本章将深入探讨这两大类问题的解决之道。你将学习如何构建模型来区分不同的类别,例如识别邮件是垃圾邮件还是正常邮件,或者预测一张图片是猫还是狗。我们将介绍多种经典的分类算法,如逻辑回归、支持向量机、决策树等,并分析它们的工作原理、优缺点以及适用范围。同样,对于预测连续数值的任务,如预测房价、股票价格等,我们也将提供深入的讲解。你将学习线性回归、多项式回归等方法,理解如何从数据中捕捉趋势并进行精准预测。通过本章的学习,你将掌握构建和评估分类与回归模型的关键技术,为解决实际问题提供强大的工具集。 第六章:模式的挖掘——聚类与降维的洞察力 在海量数据中隐藏着无数有趣的模式和关联,而聚类与降维技术,正是帮助我们发现这些隐藏宝藏的利器。本章将带你探索无监督学习的奥秘。你将学习如何将相似的数据点自动归类,发现数据内在的群体结构,例如将用户划分为不同的消费群体,或者将新闻文章按照主题进行分组。我们将介绍K-Means、层次聚类等经典聚类算法,并分析它们的适用场景。同时,你还将学习如何通过降维技术,将高维度的复杂数据“压缩”到较低的维度,同时尽可能保留原始数据的重要信息。这有助于我们可视化数据、去除冗余特征、加速模型训练。我们将深入讲解主成分分析(PCA)、t-SNE等常用的降维方法,让你能够从纷繁复杂的数据中,提炼出最本质的洞察。 第七章:模型的评估与改进——通往卓越的迭代之路 构建模型只是第一步,如何判断模型的优劣,并不断对其进行改进,才是通往卓越的关键。本章将聚焦于模型评估与改进的策略。你将学习各种评估指标,如准确率、精确率、召回率、F1分数、均方根误差等,理解它们各自的含义以及如何根据具体任务选择合适的指标。我们还将深入探讨过拟合与欠拟合的挑战,并介绍交叉验证、正则化等技术来解决这些问题。你将学会如何系统地分析模型的表现,找出性能瓶颈,并采取有效的措施进行调优。这个过程,是一个不断尝试、反馈、优化的迭代过程,最终让你能够构建出鲁棒、泛化能力强的模型。 第八章:数据的可视化——让数字“说话” 再精妙的算法,再深刻的洞察,如果不能清晰地传达给他人,其价值将大打折扣。数据可视化,就是将抽象的数字转化为直观的图表,让数据“说话”,让信息一目了然。本章将带你掌握数据可视化的基本原则和常用工具。你将学习如何选择合适的图表类型来展示不同的数据关系,如折线图、柱状图、散点图、热力图等。我们将探讨如何设计清晰、美观的图表,突出关键信息,避免误导。通过可视化,你不仅能够更好地理解数据,也能够更有效地与他人沟通你的发现和见解。 第九章:从理论到实践——案例解析与思考 理论的海洋最终需要实践的航船来抵达彼岸。本章将通过一系列精心设计的案例,将前面所学的知识融会贯通。我们将分析真实世界中的数据科学问题,从数据收集、预处理,到模型选择、训练、评估,全程贯穿我们所探讨的算法和技术。这些案例将覆盖不同的应用领域,例如推荐系统、图像识别、自然语言处理的初步探索等。通过对这些案例的深入解析,你将看到算法如何在实际场景中发挥作用,并学会如何将理论知识转化为解决实际问题的能力。这不仅仅是简单的代码堆砌,而是对整个数据科学流程的全面体验,培养你独立解决问题的信心和能力。 本书旨在为你提供一个全面、系统的算法思维和数据科学基础。我们相信,理解算法的内在逻辑,掌握数学的严谨表达,并具备用代码实现和优化的能力,将是你在这场数据驱动的变革中,走得更远、更稳的关键。拿起这本书,跟随我们一起,揭开智能的奥秘,感受数据流动的脉络,开启属于你自己的数据科学探索之旅!