- Python深度学习:基于PyTorch
- 吴茂贵
- 2701字
- 2023-07-10 16:45:26
前言
为什么写这本书
在人工智能时代,如何尽快掌握人工智能的核心——深度学习,是每个欲进入该领域的人都会面临的问题。目前,深度学习框架很多,如TensorFlow、PyTorch、Keras、FastAI、CNTK等,这些框架各有优缺点,应该如何选择?是否有一些标准?我认为,适合自己的就是最好的。
如果你是一位初学者,建议选择PyTorch,有了一定的基础之后,可以学习其他一些架构,如TensorFlow、CNTK等。建议初学者选择PyTorch的主要依据是:
1)PyTorch是动态计算图,其用法更贴近Python,并且,PyTorch与Python共用了许多Numpy的命令,可以降低学习的门槛,比TensorFlow更容易上手。
2)PyTorch需要定义网络层、参数更新等关键步骤,这非常有助于理解深度学习的核心;而Keras虽然也非常简单,且容易上手,但封装粒度很粗,隐藏了很多关键步骤。
3)PyTorch的动态图机制在调试方面非常方便,如果计算图运行出错,马上可以跟踪问题。PyTorch的调试与Python的调试一样,通过断点检查就可以高效解决问题。
4)PyTorch的流行度仅次于TensorFlow。而最近一年,在GitHub关注度和贡献者的增长方面,PyTorch跟TensorFlow基本持平。PyTorch的搜索热度持续上涨,加上FastAI的支持,PyTorch将受到越来越多机器学习从业者的青睐。
深度学习是人工智能的核心,随着大量相关项目的落地,人们对深度学习的兴趣也持续上升。不过掌握深度学习却不是一件轻松的事情,尤其是对机器学习或深度学习的初学者来说,挑战更多。为了广大人工智能初学者或爱好者能在较短时间内掌握深度学习基础及利用PyTorch解决深度学习问题,我们花了近一年时间打磨这本书,在内容选择、安排和组织等方面采用了如下方法。
(1)内容选择:广泛涉猎+精讲+注重实战
深度学习涉及面比较广,且有一定门槛。没有一定广度很难达到一定深度,所以本书内容基本包括了机器学习、深度学习的主要内容。书中各章一般先简单介绍相应的架构或原理,帮助读者理解深度学习的本质。当然,如果只有概念、框架、原理、数学公式的介绍,可能就显得有点抽象或乏味,所以,每章都配有大量实践案例,通过实例有利于加深对原理和公式的理解,同时有利于把相关内容融会贯通。
(2)内容安排:简单实例开始+循序渐进
深度学习是一块难啃的硬骨头,对有一定开发经验和数学基础的从业者是这样,对初学者更是如此。其中卷积神经网络、循环神经网络、对抗式神经网络是深度学习的基石,同时也是深度学习的3大硬骨头。为了让读者更好地理解掌握这些网络,我们采用循序渐进的方式,先从简单特例开始,然后逐步介绍更一般性的内容,最后通过一些PyTorch代码实例实现之,整本书的结构及各章节内容安排都遵循这个原则。此外,一些优化方法也采用这种方法,如对数据集Cifar10分类优化,先用一般卷积神经网络,然后使用集成方法、现代经典网络,最后采用数据增加和迁移方法,使得模型精度不断提升,由最初的68%,上升到74%和90%,最后达到95%左右。
(3)表达形式:让图说话,一张好图胜过千言万语
在机器学习、深度学习中有很多抽象的概念、复杂的算法、深奥的理论等,如Numpy的广播机制、梯度下降对学习率敏感、神经网络中的共享参数、动量优化法、梯度消失或爆炸等,这些内容如果只用文字来描述,可能很难达到使读者茅塞顿开的效果,但如果用一些图形来展现,再加上适当的文字说明,往往能取得非常好的效果,正所谓一张好图胜过千言万语。
除了以上谈到的3个方面,为了帮助大家更好理解、更快掌握机器学习、深度学习这些人工智能的核心内容,本书还包含了其他方法。我们希望通过这些方法方式带给你不一样的理解和体验,使抽象数学不抽象、深度学习不深奥、复杂算法不复杂、难学的深度学习也易学,这也是我们写这本书的主要目的。
至于人工智能(AI)的重要性,我想就不用多说了。如果说2016年前属于摆事实论证的阶段,2017年和2018年是事实胜于雄辩的阶段,那么2019年及以后就进入百舸争流、奋楫者先的阶段。目前各行各业都忙于“AI+”,大家都希望通过AI来改造传统流程、传统结构、传统业务、传统架构,其效果犹如历史上用电改造原有的各行各业一样。
本书特色
本书特色概括来说就是:把理论原理与代码实现相结合;找准切入点,从简单到一般,把复杂问题简单化;图文并茂使抽象问题直观化;实例说明使抽象问题具体化。希望通过阅读本书,能给你新的视角、新的理解,甚至更好的未来。
读者对象
·对机器学习、深度学习感兴趣的高校学生及在职人员。
·对Python、PyTorch、TensorFlow等感兴趣,并希望进一步提升的高校学生及在职人员。
如何阅读本书
本书分为三部分,共16章。
第一部分(第1~4章)为PyTorch基础,这也是本书的基础,为后续章节的学习打下一个坚实的基础。第1章介绍Python和PyTorch的基石Numpy;第2章介绍PyTorch基础;第3、4章分别介绍PyTorch构建神经网络工具箱和数据处理工具箱等内容。
第二部分(第5~8章)为深度学习基本原理,也是本书的核心部分,包括机器学习流程、常用算法和技巧等内容。第5章为机器学习基础,也是深度学习基础,其中包含很多机器学习经典理论、算法和方法等内容;第6章为视觉处理基础,介绍卷积神经网络的相关概念、原理及架构等内容,并用PyTorch实现多个视觉处理实例;第7章介绍自然语言处理基础,重点介绍循环神经网络的原理和架构,同时介绍了词嵌入等内容,然后用PyTorch实现多个自然语言处理、时间序列方面的实例。第8章介绍生成式深度学习相关内容,具体包括编码器-解码器模型、带注意力的编码器-解码器模型、对抗式生成器及多种衍生生成器,同时用PyTorch实现多个生成式对抗网络实例。
第三部分(第9~16章)为实战部分,也即前面两部分的具体应用部分,这部分在介绍相关原理、架构的基础上,用PyTorch具体实现了多个深度学习的典型实例,最后介绍了强化学习、深度强化学习等内容。具体各章节内容为:第9章用PyTorch实现人脸检测和识别;第10章用PyTorch实现迁移学习,并举出迁移学习结合数据增强等实例;第11章用PyTorch实现中英文互译;第12章多个生成式网络实例;第13章主要介绍如何进行模型迁移;第14章介绍对抗攻击原理及PyTorch实现对抗攻击实例;第15、16章介绍了强化学习、深度强化学习等基础及多个强化学习实例。
勘误和支持
在本书编写过程中得到张魁、刘未昕等的大力支持,他们负责整个环境的搭建和维护工作。由于水平有限,加之编写时间仓促,书中难免出现错误或不准确的地方。恳请读者批评指正,你可以通过访问http://www.feiguyunai.com下载代码和数据。也可以通过加入QQ交流群(871065752)给我们反馈,非常感谢你的支持和帮助。
致谢
在本书编写过程中,得到很多同事、朋友、老师和同学的支持!感谢博世的王冬、王红星的大力支持;感谢上海交大慧谷的程国旗老师,上海大学的白延琴老师、李常品老师,上海师范大学的田红炯老师、李昭祥老师,以及赣南师大的许景飞老师等的支持和帮助!
感谢机械出版社的杨福川老师、李艺老师给予本书的大力支持和帮助。
最后,感谢我的爱人赵成娟,在繁忙的教学之余帮助审稿,提出许多改进意见或建议。
吴茂贵