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。
关于代码下载