先给个准确定义:PyTorch到底是什么?
PyTorch,一个开源的深度学习框架,由Facebook(现在的Meta)在2017年1月正式发布。这玩意儿能干两件大事:一是GPU加速的张量计算(你可以理解成“带涡轮增压的NumPy”),二是自动构建和训练神经网络,后者靠一个叫自动微分(Autograd)的引擎来实现。

但光说定义没啥意思。你真正要懂的是——PyTorch为什么会冒出来,以及它凭啥在短短几年内把谷歌的TensorFlow从王座上拉下来。

为什么会出现?得从深度学习框架的“黑暗时代”讲起
在PyTorch出现之前,学术界和工业界其实已经被几个框架“折磨”得不轻。

最早出名的是Theano,2008年从蒙特利尔大学出来的Python库,算是Python深度学习框架的“老祖宗”。然后是2013年的Caffe,专注于计算机视觉,速度快但不够灵活。再然后是2015年谷歌推出的TensorFlow,背靠大树,迅速成为霸主。

这些框架有个共同的毛病:静态计算图。

什么意思?你用这些框架搭神经网络,得先把整个“施工图纸”画好,定义好每一层、每一个运算,然后才能把数据扔进去跑。想中途改个结构?抱歉,得重新画图纸、重新编译。对做研究的人来说,这简直是噩梦——你改一行代码,可能得等好几分钟才能看到效果。

更烦人的是,Theano用的是声明式编程风格,你得先定义“我要算什么”,然后框架再去执行,中间出错了很难调试。TensorFlow虽然功能强大,但它的API(应用程序接口)早期被吐槽“混乱、难用”,文档也让人头大。

学术界的人想要的是:我写一行代码,马上能看到结果;我想调试,能像普通Python一样设断点;我想改模型结构,不用重新编译整个图。

但当时的主流框架,没一个能满足这个需求。

转折点:Torch的“Python版”横空出世
PyTorch其实有个亲爹,叫Torch。Torch早在2002年就诞生了,是一个科学计算框架,后来发展出Torch7版本,在深度学习圈子里小有名气。但Torch有个致命伤——它用Lua语言作为接口。Lua虽然简洁高效,但用的人少。深度学习研究者大多是用Python的,你让他们为了用Torch去学一门新语言,门槛太高。

Facebook AI研究院(FAIR)看到了这个机会。2016年9月,Adam Paszke、Sam Gross和Soumith Chintala等人开始开发PyTorch的初始版本。2017年1月,他们正式向全世界发布了PyTorch。

本质上,PyTorch就是把Torch的核心能力“翻译”成了Python语言,同时引入了一套全新的设计理念:动态计算图。

动态vs静态:PyTorch制胜的关键一招
这是PyTorch和TensorFlow最核心的区别,你得搞明白。

静态图(TensorFlow 1.x的方式):你先画好一张“运算流程图”,定义好每个节点做什么,然后编译成可执行代码,最后才能把数据塞进去跑。优点是可以做全局优化、跑得快;缺点是不灵活、调试难。

动态图(PyTorch的方式):你写代码的过程,就是构建计算图的过程。每执行一行,图就实时生成。你可以随时打印中间结果、随时修改网络结构、随时打断点调试。

打个比方:静态图像预制菜——你得先把所有食材切好、调料配好、包装好,然后才能下锅。动态图像现点现炒——厨师看到订单才开始切菜、开火,你想加个葱花,他马上就能加。

对做研究的人来说,动态图就是救星。你想验证一个新想法,改一行代码,马上跑起来看效果;模型中间某层输出不对,print出来看一眼,瞬间定位问题。这大大加快了迭代速度。

TensorFlow后来也学乖了,在1.5版本引入了Eager Execution机制实现了动态图,但已经慢了PyTorch一步。

更“Pythonic”的体验:不用再写“非Python代码”
PyTorch的另一个杀手锏是:它用起来就像原生Python。

你写PyTorch代码,不需要学习什么特殊语法,不需要写字符串来定义运算图,不需要用框架自带的调试工具。直接用Python的print、用pdb断点调试、用任何你熟悉的Python库配合使用。

这让从NumPy转过来的用户几乎零学习成本——PyTorch的张量操作和NumPy数组操作几乎一模一样,只不过PyTorch的张量能自动扔到GPU上跑。

市场份额:从“小透明”到“学术圈一哥”
PyTorch刚出来的时候,没几个人看好它能挑战TensorFlow的地位。但结果呢?

短短几年,PyTorch成了学术界事实上的标准。到2022年,AI顶会论文中使用PyTorch的比例已经达到80%。TensorFlow虽然还在工业界有广泛使用,但在研究领域,PyTorch已经把谷歌拉下了马。

为什么学术界这么偏爱PyTorch?因为搞研究的人需要的是灵活、快、好调试,而不是“能跑多快”。PyTorch的动态图正好匹配了研究者的工作方式。

更多推荐