新書推薦:
《
泰山:一种中国信仰专论(法国汉学经典译丛)
》
售價:NT$
380.0
《
花外集斠箋
》
售價:NT$
704.0
《
有兽焉.8
》
售價:NT$
305.0
《
大学问·明清经济史讲稿
》
售價:NT$
330.0
《
中国国际法年刊(2023)
》
售價:NT$
539.0
《
西班牙内战:秩序崩溃与激荡的世界格局:1936-1939
》
售價:NT$
990.0
《
基于鲲鹏的分布式图分析算法实战
》
售價:NT$
495.0
《
夺回大脑 如何靠自己走出强迫
》
售價:NT$
299.0
編輯推薦:
掌握深度学习存在一定的门槛。首先要求有一定的数理统计基础,其次需要很强的编程能力。对于应用领域的研究人员而言,除了要具备这两个条件,还必须拥有扎实的专业领域知识,这些要求提高了深度学习的学习门槛和成本,很多人不得已止步于该领域的学习和应用深度学习解决实际问题。毕竟,仅深度学习涉及的理论和改进模型便多如牛毛,要在短时间内掌握绝非易事。
总而言之,学习深度学习存在以下3个方面的困难:①深度学习涉及的理论难度大,让很多人望而生畏;②深度学习框架繁多,上手难度较大;③理论与代码实践结合困难,理论和实践脱节严重。尽管深度学习存在重重壁垒,但是它前进的步伐并未因此而放缓,各种新的机器学习方法(元学习、迁移学习和集成学习等)骈兴错出,让人应接不暇,不少人对此深感焦虑和恐慌。
那么,有没有克服这些困难的方法呢?当然有。《深度学习精粹与PyTorch实践》正是医治这些焦虑的“良方”,《深度学习精粹与PyTorch实践》不但将深度学习理论、工具和实战相结合,还深入介绍了深度学习基本理论和高级神经网络,包括最常见的卷积神经网络、循环神经网络和对抗神经网络,以及近几年流行的Transformer和迁移学习
內容簡介:
深度学习绝非不可窥探的黑箱!深入理解其模型和算法的实际运作机制,是驾驭并优化结果的关键。你无需成为数学专家或资深数据科学家,同样能够掌握深度学习系统内部的工作原理。本书旨在通过深入浅出的方式,为你揭示这些原理,让你在理解和解释自己的工作时更加自信与从容。
《深度学习精粹与PyTorch实践》以浅显易懂的方式揭示了深度学习算法的内部运作机制,即使是机器学习初学者也能轻松理解。本书通过平实的语言解析、详尽的代码注释,以及数十个基于PyTorch框架的实战示例,逐步引导你探索深度学习的核心概念与实用工具。本书避免了复杂的数学公式堆砌,而是采用直观易懂的方式阐述每种神经网络类型的运作逻辑。更令人兴奋的是,书中提供的所有解决方案均可在现有的GPU硬件上顺畅运行!
主要内容
● 选择正确的深度学习组件
● 训练和评估深度学习模型
● 微调深度学习模型以实现性能最大化了解深度学习术语
關於作者:
Edward Raff博士是Booz Allen Hamilton公司的首席科学家,也是战略创新集团机器学习研究团队的共同负责人。他的工作涉及监督内部研究、招聘和培养技术人才、与高校合作伙伴合作以及专门从事高端机器学习的业务开发。Raff博士还协助几位客户开展高级研究。
他对机器学习的写作、开发和教学的热情源于他渴望分享自己对机器学习所有领域的热爱。他是Java统计分析工具(Java Statistical Analysis Tool,JSAT)的创建者,JSAT是一个用于在Java中进行快速机器学习的库。他目前带有5名博士生,编写了60多种出版物,并获得了3项最佳论文奖。
目錄 :
第1章 学习的机制 3
1.1 Colab入门 7
1.2 张量 7
1.3 自动微分 15
1.3.1 使用导数将损失降至最低 17
1.3.2 使用自动微分计算导数 18
1.3.3 知识整合:使用导数最小化函数 19
1.4 优化参数 21
1.5 加载数据集对象 23
1.6 练习 26
1.7 小结 27
第2章 全连接网络 29
2.1 优化神经网络 30
2.1.1 训练神经网络的符号 30
2.1.2 建立线性回归模型 32
2.1.3 训练循环 32
2.1.4 定义数据集 34
2.1.5 定义模型 36
2.1.6 定义损失函数 37
2.1.7 知识整合:在数据上训练线性回归模型 38
2.2 构建第一个神经网络 40
2.2.1 全连接网络的符号 40
2.2.2 PyTorch中的全连接网络 41
2.2.3 增加非线性 43
2.3 分类问题 46
2.3.1 分类简单问题 46
2.3.2 分类损失函数 48
2.3.3 训练分类网络 51
2.4 更好地训练代码 53
2.4.1 自定义指标 53
2.4.2 训练和测试阶段 54
2.4.3 保存检查点 55
2.4.4 知识整合:更好的模型训练函数 56
2.5 批量训练 61
2.6 练习 64
2.7 小结 65
第3章 卷积神经网络 67
3.1 空间结构先验信念 68
3.2 什么是卷积 74
3.2.1 一维卷积 75
3.2.2 二维卷积 76
3.2.3 填充 77
3.2.4 权重共享 78
3.3 卷积如何有益于图像处理 79
3.4 付诸实践:我们的第一个CNN 82
3.4.1 使用多个过滤器生成卷积层 83
3.4.2 每层使用多个过滤器 84
3.4.3 通过展平将卷积层与线性层混合 84
3.4.4 第一个CNN的PyTorch代码 86
3.5 添加池化以减少对象移动 88
3.6 数据增强 93
3.7 练习 97
3.8 小结 97
第4章 循环神经网络 99
4.1 作为权重共享的循环神经网络 100
4.1.1 全连接网络的权重共享 101
4.1.2 随时间共享权重 105
4.2 在PyTorch中实现RNN 107
4.2.1 一个简单的序列分类问题 108
4.2.2 嵌入层 112
4.2.3 使用最后一个时间步长进行预测 114
4.3 通过打包减短训练时间 119
4.3.1 填充和打包 120
4.3.2 可打包嵌入层 122
4.3.3 训练批量RNN 122
4.3.4 同时打包和解包输入 124
4.4 更为复杂的RNN 125
4.4.1 多层 126
4.4.2 双向RNN 127
4.5 练习 129
4.6 小结 130
第5章 现代训练技术 131
5.1 梯度下降分两部分进行 132
5.1.1 添加学习率调度器 133
5.1.2 添加优化器 134
5.1.3 实现优化器和调度器 135
5.2 学习率调度器 139
5.2.1 指数衰减:平滑不稳定训练 140
5.2.2 步长下降调整:更平滑 143
5.2.3 余弦退火:准确率更高但稳定性较差 144
5.2.4 验证平台:基于数据的调整 147
5.2.5 比较调度器 151
5.3 更好地利用梯度 152
5.3.1 SGD与动量:适应梯度一致性 153
5.3.2 Adam:增加动量变化 159
5.3.3 梯度修剪:避免梯度爆炸 162
5.4 使用Optuna进行超参数优化 164
5.4.1 Optuna 164
5.4.2 使用PyTorch的Optuna 167
5.4.3 使用Optuna修剪试验 171
5.5 练习 173
5.6 小结 174
第6章 通用设计构建块 175
6.1 更好的激活函数 179
6.1.1 梯度消失 179
6.1.2 校正线性单位(ReLU):避免梯度消失 181
6.1.3 使用LeakyReLU激活训练 184
6.2 归一化层:神奇地促进收敛 186
6.2.1 归一化层用于何处 187
6.2.2 批量归一化 188
6.2.3 使用批量归一化进行训练 190
6.2.4 层归一化 192
6.2.5 使用层归一化进行训练 192
6.2.6 使用哪个归一化层 195
6.2.7 层归一化的特点 195
6.3 跳跃连接:网络设计模式 198
6.3.1 实施全连接的跳跃 200
6.3.2 实现卷积跳跃 203
6.4 1×1卷积:在通道中共享和重塑信息 206
6.5 残差连接 208
6.5.1 残差块 208
6.5.2 实现残差块 210
6.5.3 残差瓶颈 210
6.5.4 实现残差瓶颈 212
6.6 长短期记忆网络RNN 214
6.6.1 RNN:快速回顾 214
6.6.2 LSTM和门控机制 215
6.6.3 LSTM训练 217
6.7 练习 220
6.8 小结 220
第Ⅱ部分 构建高级网络
第7章 自动编码和自监督 225
7.1 自动编码的工作原理 227
7.1.1 主成分分析是自动编码器的瓶颈 228
7.1.2 实现PCA 229
7.1.3 使用PyTorch实现PCA 232
7.1.4 可视化PCA结果 233
7.1.5 简单的非线性PCA 235
7.2 设计自动编码神经网络 238
7.2.1 实现自动编码器 239
7.2.2 可视化自动编码器结果 240
7.3 更大的自动编码器 242
7.4 自动编码器去噪 247
7.5 时间序列和序列的自回归模型 252
7.5.1 实现char-RNN自回归文本模型 254
7.5.2 自回归模型是生成模型 261
7.5.3 随着温度调整采样 263
7.5.4 更快地采样 266
7.6 练习 268
7.7 小结 269
第8章 目标检测 271
8.1 图像分割 272
8.1.1 核检测:加载数据 273
8.1.2 在PyTorch中表示图像分割问题 275
8.1.3 建立第一个图像分割网络 277
8.2 用于扩展图像大小的转置卷积 279
8.3 U-Net:查看精细和粗糙的细节 284
8.4 带边界框的目标检测 289
8.4.1 Faster R-CNN 290
8.4.2 在PyTorch中实现Faster R-CNN 295
8.4.3 抑制重叠框 303
8.5 使用预训练的Faster R-CNN 305
8.6 练习 307
8.7 小结 308
第9章 生成对抗网络 309
9.1 理解生成对抗网络 310
9.1.1 损失计算 312
9.1.2 GAN博弈 314
9.1.3 实现第一个GAN 316
9.2 模式崩溃 324
9.3 Wasserstein GAN:缓解模式崩溃 327
9.3.1 WGAN判别器损失 327
9.3.2 WGAN生成器损失 328
9.3.3 实现WGAN 329
9.4 卷积GAN 334
9.4.1 设计卷积生成器 334
9.4.2 设计卷积判别器 336
9.5 条件GAN 339
9.5.1 实现条件GAN 340
9.5.2 训练条件GAN 341
9.5.3 使用条件GAN控制生成 342
9.6 GAN潜在空间概览 343
9.6.1 从Hub获取模型 343
9.6.2 对GAN输出进行插值 344
9.6.3 标记潜在维度 346
9.7 深度学习中的伦理问题 349
9.8 练习 350
9.9 小结 351
第10章 注意力机制 353
10.1 注意力机制学习相对输入重要性 354
10.1.1 训练基线模型 355
10.1.2 注意力机制 357
10.1.3 实现简单的注意力机制 359
10.2 添加上下文 363
10.2.1 点分数 365
10.2.2 总分数 366
10.2.3 附加注意力 367
10.2.4 计算注意力权重 369
10.3 知识整合:一种有上下文的完整注意力机制 371
10.4 练习 375
10.5 小结 376
第11章 序列到序列 377
11.1 序列到序列作为一种去噪自动编码器 378
11.2 机器翻译和数据加载器 380
11.3 序列到序列的输入 385
11.3.1 自回归法 386
11.3.2 教师强制法 386
11.3.3 教师强制法与自回归法的比较 387
11.4 序列到序列注意力 387
11.4.1 实现序列到序列 389
11.4.2 训练和评估 394
11.5 练习 400
11.6 小结 400
第12章 RNN的网络设计替代方案 401
12.1 TorchText:处理文本问题的工具 402
12.1.1 安装TorchText 402
12.1.2 在TorchText中加载数据集 402
12.1.3 定义基线模型 405
12.2 随时间平均嵌入 406
12.3 随时间池化和一维CNN 413
12.4 位置嵌入为任何模型添加序列信息 417
12.4.1 实现位置编码模块 421
12.4.2 定义位置编码模型 422
12.5 Transformer:大数据的大模型 425
12.5.1 多头注意力 425
12.5.2 transformer模块 430
12.6 练习 433
12.7 小结 434
第13章 迁移学习 435
13.1 迁移模型参数 436
13.2 迁移学习和使用CNN进行训练 440
13.2.1 调整预训练网络 442
13.2.2 预处理预训练的ResNet 446
13.2.3 热启动训练 447
13.2.4 使用冻结权重进行训练 449
13.3 用较少的标签学习 451
13.4 文本预训练 454
13.4.1 带有Hugging Face库的transformer 455
13.4.2 无梯度的冻结权重 457
13.5 练习 459
13.6 小结 460
第14章 高级构件 461
14.1 池化问题 462
14.1.1 锯齿损害了平移不变性 464
14.1.2 通过模糊实现抗锯齿 469
14.1.3 应用抗锯齿池化 473
14.2 改进后的残差块 476
14.2.1 有效深度 477
14.2.2 实现ReZero 478
14.3 混合训练减少过拟合 481
14.3.1 选择混合率 483
14.3.2 实现MixUp 484
14.4 练习 489
14.5 小结 489
附录A 设置Colab 491
內容試閱 :
X
深度学习精粹与PyTorch实践
以及逻辑回归和线性回归、k-means聚类、最近邻搜索和主成分分析(Principal Compoment Analysis,PCA)等简单算法。在阅读本书前,最好已使用过scikit-learn提供的这些工具,并了解生态系统中的其他工具,如NumPy、pandas和通用的面向对象开发。但不需要了解PyTorch,因为本书会讲解,但我鼓励读者在阅读各章时查阅PyTorch文档,以获取相关细节知识。
如果你想了解深度学习背后的奥秘,并开始了解它是如何工作的、何时使用它以及如何自信地使用它,你就应该阅读本书!我试图在展示代码、实际细节和相关知识之间找到一个平衡点,同时融入所需的数学、统计学和理论理解,而这正是你从这个快速发展的领域中脱颖而出并与时俱进所需要的。如果你能坚持下去,会发现每一章都充满挑战,但又收获颇丰。本书的内容应该可以帮助任何初级到中级的ML工程师、数据科学家或研究人员打下坚实的基础。即使是与我共事的资深研究人员也会发现这些内容非常有用,而且我已经在生产中使用了其中的许多代码。我的几位博士生也发现,这些代码有助于在“可用”和“可定制”之间取得平衡,可以节省时间,帮助更快地完成研究。
本书结构安排
本书内容分为两部分,共14章。第Ⅰ部分(第1~6章)侧重于介绍深度学习的基础:编码框架、基本架构类型、不同组件的术语以及构建和训练神经网络的技术。这些基本工具可用于构建更大、更复杂的系统。第Ⅱ部分(第7~14章)讲解了一些新的设计选择或策略。每一章都有助于将深度学习的实用性扩展到一种新的任务或问题,拓宽读者的深度学习能力范围,并提供新的杠杆来调整不同的设计权衡(例如,速度与准确率)。
虽然跳读到听起来与你日常工作特别相关的章节可能很诱人,但这不是一本可以跳读章节的书!本书是按照线性顺序精心编排的。每一章都建立在前一章所介绍的概念或技术的基础上,以帮助读者慢慢加深对这些概念或技术的理解,从而掌握各种技能。
第Ⅰ部分“基础方法”共包含6章内容。
● 第1章讨论PyTorch及其工作原理,并展示如何使用这个框架。
● 第2章介绍最基本的神经网络类型——全连接网络,以及如何在PyTorch中编写代码来训练任意类型的网络。这包括演示全连接网络如何与线性模型相关联。
● 第3章介绍卷积,以及卷积神经网络如何在基于图像的深度学习中占据主导地位。
● 第4章介绍循环神经网络,以及循环神经网络如何编码序列信息、如何用于解决文本分类问题。
● 第5章介绍可应用于任何神经网络的新的训练技术,以在更短的时间内获得更高的准确率,并解释如何实现这一目标。
● 第6章介绍当今常用的现代设计模式,以将神经网络设计知识带入现代。
第Ⅱ部分“构建高级网络”共包含8章内容。
● 第7章介绍自动编码技术,这是一种在没有标签数据的情况下训练神经网络的技
前 言XI
术,可以实现无监督学习。
● 第8章介绍图像分割和目标检测,这两种技术可用于在图像中查找多个目标。
● 第9章介绍生成对抗网络,这是一种可以生成合成数据的无监督方法,也是许多现代图像篡改和深度伪造技术的基础。
● 第10章教授如何实现注意力机制,这是网络先验的最新重要进展之一。注意力机制支持深度网络选择性地忽略输入中不相关或不重要的部分。
● 第11章利用注意力构建了开创性的序列到序列模型,并展示了如何利用在生产系统中部署的相同方法来构建English-to-French转换器。
● 第12章通过重新思考网络的设计方式,介绍了一种避免循环网络(源于其缺点)的新策略。其中包括使用transformer架构这一当前最佳自然语言处理工具的基础。
● 第13章介绍迁移学习,这是一种利用在一个数据集上训练的网络来提高另一个数据集性能的方法。它允许使用较少的标签数据,使其成为实际工作中最有用的技巧之一。
● 第14章是本书的最后一章,重温了现代神经网络的一些最基本的组成部分,并力图传授最近发表的、大多数从业人员一无所知的三种技术,以构建更好的模型。
数学符号说明
以下是书中最常用的符号和符号样式,以及它们的对应代码,可以作为快速参考和入门。
符号
含义
代码
x或x∈?
小写字母用于表示单浮点值,∈?明确表示该值为“实数”
x=3.14或x= np.array(3.14)
x或x∈?d
粗体小写表示d值的向量
x = np.zeros(d)
X或x∈?rc,
大写表示矩阵或更高阶张量;“,”分隔的数字/字母的数量使轴的数量明确
X = np.zeros((r,c))
XT或xT
表示转置矩阵或向量
np.transpose(x) 或
np.transpose(X)
i=结束Σ
开始 fi()
表达式或函数f()的求和
result = 0
for i in range(start, end 1):
result = f(i)
i=Π结束开始fi()
表达式或函数f()的乘积
result = 1
for i in range(start, end 1):
result *= f(i)
x2
矩阵或张量的2-范数,表示其值的“大小”
result = 0
for val in x:
result = val**2
result = np.sqrt(result)
XII 深度学习精粹与 PyTorch 实践
练习
每章都以一组练习结束,以帮助读者实践所学内容。为了鼓励读者自行解决问题,书中没有提供答案。相反,作者和出版商意在邀请读者在Manning在线平台与其他读者分享和讨论各自的解决方案(https://liveproject.manning.com/project/945)。一旦读者提交了自己的解决方案,就可以看到其他读者提交的解决方案以及作者对哪一个方案是最优解决方案的解读。
关于Google Colab
虽然深度学习确实需要使用GPU才能工作,但是我设计的每一章内容都可以在 Google Colab上运行:这是一个可以支持用户根据个人需要选择免费或便宜使用GPU算力的平台。一个不错的GPU至少要花费600美元,而你完全可以选择借助Google Colab先自学,之后再投资。如果你以前没有使用过Colab,不妨参照附录完成设置,说白了,它就是一个云端的Jupyter notebook。
关于代码下载
书中的源代码可在GitHub上找到,网址为https://github.com/EdwardRaff/Inside-Deep-Learing,也可通过扫描本书封底的二维码进行下载。