前 言
作为20世纪80年代出生的孩子,我们几个接触个人计算机的情况,分别是Eli从Commodore VIC20系统开始,我从Sinclair Spectrum 48K系统开始,Thomas从Commodore C16系统开始。在那个时候我们看到了个人计算机的曙光,学会了在越来越快的机器上编写代码和研究算法,还经常幻想计算机会将我们带到哪里去。当某部谍战片中的主角说“计算机,改进一下”时,我们一起翻白眼,深切意识到现实中计算机的作用与电影中计算机的作用的差距。
后来,在我们的职业生涯中,Eli和我各自在医学图像分析方面挑战自我,在研究能够处理人体自然变化的算法时,面临着同样的困难。在选择最优的算法组合时,会涉及很多试探式方法,这些方法会让事情顺利进行,甚至会挽救局面。Thomas在世纪之交学习了神经网络和模式识别,后来还获得了数据建模的博士学位。
深度学习在21世纪初开始出现在计算机视觉领域,并被应用于医学图像分析任务,如识别医学图像的结构或病变。就在那个时候,也就是21世纪头5年,深度学习引起了我们的关注。我们花了一些时间才意识到,深度学习代表了一种全新的软件编写方式——一种新的多用途算法,可以通过观察数据来学习如何解决复杂的问题。
对于我们“80后”来说,关于计算机能做什么的视野一夜之间就扩展了,计算机能做什么不再受限于程序员的大脑,而受限于数据、神经网络结构和训练过程。在动手实践的过程中,我选择Torch,它是PyTorch的前身。Torch具有灵活、轻量级、运行速度快的特点,具有通过Lua和普通C语言编写的、易于理解的源代码,有一个支持它的社区,并且有着悠久的历史。我热衷于Torch,可能Torch7唯一的缺点是脱离了其他框架可以借鉴的、不断扩展的Python数据科学生态系统。Eli从大学开始就对人工智能感兴趣,但他的职业生涯为他指明了另一个方向,他发现其他早期的深度学习框架使用起来太过费力,以至于令人无法在业余项目中热情地使用它们。
因此当PyTorch的第1个版本在2017年1月18日发布时,我们都非常兴奋。我从那时开始成为PyTorch的核心贡献者。而Eli很早就成为其社区的一员,负责提交一些错误修复文档,实现新特性或对文档进行更新。Thomas为PyTorch贡献了大量的特性,修复了很多错误,并最终成为一名独立的核心贡献者。我们有一种感觉:有一些大型的东西正在起步,这些东西具有适当的复杂性,并且只需要很少的认知开销。PyTorch借鉴了Torch7的一些精益设计,但这次引入了一系列新特性,如自动微分、动态计算图和集成NumPy。
考虑到我们的参与度和热情,在组织了几次PyTorch研讨会之后,我们感觉下一步写一本书是很自然的事了。我们的目标是写一本能够吸引曾经的自己(刚开始学习PyTorch深度学习时的我们)的书。
可以预见的是,我们起初的想法很宏大:教授基础知识,完成一个端到端的项目,并演示PyTorch最新和最好的模型。 我们很快意识到这不是一本书就能完成的事情,因此我们决定专注于我们最初的任务:假设我们之前具备很少或根本没有深度学习的知识,我们将投入时间深入介绍PyTorch背后的关键概念,并最终达到带领读者完成一个完整项目的目的。对于后者,我们回到工作本身,选择演示医学图像分析相关的项目。
Luca Antiga
[1] 在那个时候,“深层”神经网络意味着3个隐藏层!