书籍推荐《深度学习入门2:自制框架》

原文链接: https://zhuanlan.zhihu.com/p/22879442357

作者使用纯Python实现了一个名为DeZero的深度学习框架,其编程风格与PyTorch类似。通过结合代码实现,由浅入深地拆解了深度学习框架的前端功能,包括自动微分、Layer、Optimizer、DataLoader等模块。

深度学习入门2book.douban.com/subject/36303408/这本书在国内比较冷门,但是我读过的最好的关于深度学习框架的书籍。这里所说的“好”,并不是指内容面面俱到,而是因为它的逻辑非常清晰,对入门十分友好。同时又不算很粗浅,像高阶微分这样的深度话题也有探讨。

本书的作者是Chainer的核心开发者Koki Saitoh。Chainer可能是最早在Python实现的define by run的深度学习框架(更常见的叫法是动态图),非常具有前瞻性,可惜在2019年的时候母公司(Preferred Networks)转投了PyTorch,项目停止了维护[1]

这个母公司Preferred Networks也值得聊一聊。从主页来看啥都搞,AI外包公司,像是日本的商汤科技。

Projects - Preferred Networks, Inc.www.preferred.jp/en/projects/创始人兼CEO叫Toru Nishikawa,代表东京大学参加了2006年ACM ICPC世界总决赛,荣获第19名。

比较有意思的一点是前一年(2005)的ACM ICPC世界总决赛冠军是戴文渊大神,后来创建了第四范式,也是个AI外包公司。大神们的水平都不需要质疑,但最后都成为了AI外包公司,可能这就是这代人的宿命吧。。。

Preferred Networks还有个很出名的项目叫CuPy[2],相当于numpy在cuda上的实现,也为书里的DeZero框架提供了GPU能力(不过这个前后端解耦设计其实不怎么合理,后端能拿到的前端信息太少了)。这个项目现在还活着,而且还在发版本。从产出来看,Preferred Networks确实聚集了一批日本AI仙人,做出了一些很有前瞻性的且很有影响力的软件,希望该公司业务蒸蒸日上。

再说一下书的内容,有几点我觉得是写的非常出色的:

  1. 每一章都基于代码讲解,接着上一章的代码一步步从简单到复杂,阅读体验很流畅。而且看DeZero的代码实现能学到很多技巧(对于我这种没怎么写过Python的人来说),例如Layer这一节通过重写__setattr__的魔术方法实现了每个深度学习层的Parameter自动统计。
  2. 概念的逐步引入。DeZero不是一股脑给一堆概念,对着概念一顿实现就完事了,而是一步步的基于功能的需要引入这些概念。比如实现自动微分的时候为什么需要引入Variable和Function;为什么要进行运算符重载、Layer/Module/Optimizer/DataLoader的封装,通过这些方式能把代码优化到什么程度。这种写作方式类似OSTEP,围绕着虚拟化、并发和持久性,一层一层的展示每个功能为什么要做,做完的好处是什么。一个好教材甚至于说一个好项目都应该是这样的,不应该有太多无用的概念,每一层的抽象都得有明确的目的。
  3. 组合的力量。看高阶微分这一章的时候让我想起了SICP,SICP的很多细节我早就忘得一干二净了,唯一剩下的就是对组合力量的深刻印象。
高阶微分

组合其实就是通过简单的、模块化的组件组合,构建出复杂且强大的系统。这里的高阶微分就是一个例子。从一阶微分到高阶微分,通过完善的抽象设计,核心改动只需要将反向实现从调用numpy接口变成调用DeZero的运算符重载。后面的Layer设计其实也是组合的力量,从一个玩具框架最后组合出了rnn、cnn等网络,到真正的加载vgg的预训练模型,这些组合的力量让人印象深刻。

从这几点来看,我觉得这本书不仅是一个深度学习框架入门书籍,还是个极好的第二本Python书籍,适合学习完基本语法之后来看。他实现的是一个实打实的项目,肯定比实现什么算法之类的有意思多了,并且在实现该项目的同时,触及了一些计算机科学的本质。

最后说一下Chainer为什么消亡。其实我在网上没搜到太多对于Chainer缺点的评论,在reddit上有一些关于Chainer为什么打不过PyTorch的讨论[3] [4] [5]

从讨论来看,基本输给了生态。从易用性上Chainer没理由比PyTorch要差,只是日本的计算机圈子还是太小了,Preferred Networks比不上FB财大气粗。而且有人说大量的资料都是日语,导致Chainer更像是日本计算机小圈子的自娱自乐。Chainer的失败对国内的基础软件走向世界还是有很大启发的,虽然国内公司的深度学习基础软件看起来还没有Chainer成功。。。

参考

  1. ^Chainer/CuPy v7 release and Future of Chainer https://chainer.org/announcement/2019/12/05/released-v7.html
  2. ^https://cupy.dev/
  3. ^https://www.reddit.com/r/MachineLearning/comments/e0pir2/dwhy_isnt_chainer_more_useddiscussed/
  4. ^https://www.reddit.com/r/MachineLearning/comments/e6dd7x/d_preferred_networks_creators_of_chainer/
  5. ^https://www.reddit.com/r/MachineLearning/comments/7lb5n1/d_chainer_vs_pytorch/