李亚洲 思源报道

来势汹汹PyTorch!ICLR论文提及频率直追TensorFlow(附对比)

昨日,Facebook 在首届 PyTorch 开发者大会发布了 PyTorch1.0 预览版,标志着这一框架更为稳定可用。从去年年初发布以来,PyTorch 已经成为明星框架,发展速度甚至有力压 TensorFlow 的趋势。据网友统计,在最新的 ICLR 2019 提交论文中,提及 TensorFlow 的论文数量从 228 升到了 266,而提及 PyTorch 的论文数量从 2018 年的 87 激增到了 252,这是否也是 PyTorch 即将赶超 TensorFlow 的又一证明?

ICLR 提交论文提及频率

今日,Reddit 上的一条帖子吸引了大家的关注:有网友统计,相比于 2018 年,在 ICLR 2019 提交论文中,提及不同框架的论文数量发生了极大变化。

首先,说下 2018 年和 2019 年论文提交数量。ICLR 2019 将于明年 5 月 6 日-9 日在美国新奥尔良举行,今年 9 月 27 日下午 18 时,大会论文提交截止。据统计,ICLR 2019 共收到 1591 篇论文投稿,相比去年的 1000 余篇增长了 60%。

其次,介绍下统计方法,相当简单。在 Frankensteinian search 搜索框下分别搜索提及不同框架的论文结果,如下:

网友发现,提及 TensorFlow 的论文数量从 2018 年的 228 篇略微提升到了 266 篇,Keras 从 42 升到 56,但 Pytorch 的数量从 87 篇提升到了 252 篇。从数据上可以明显看出,采用 PyTorch 的 ICLR 论文在这一年内几乎要超越 TensorFlow。

  • TensorFlow:228→266

  • Keras: 42→56

  • Pytorch:87→252

在 PyTorch 1.0 推出之际,这样的数据统计让我们不得不联想到:TensorFlow 的深度学习框架霸主地位是否还保得住?既然 PyTorch 1.0 预览版已经发布,那么让我们再把两个框架放在一起对比下,看哪一款才是适合你的深度学习框架。

TensorFlow VS PyTorch

自 2015 年开源以来,深度学习框架的天下就属于 TensorFlow。不论是 GitHub 的收藏量或 Fork 量,还是业界使用量都无可比拟地位列第一。

TensorFlow 的版本迭代

但是 TensorFlow 有一个令人诟病的劣势,即它和 Theano 一样采用的是静态计算图,这令神经网络的搭建和入门学习都变得更加困难。因此在 2017 年 1 月,Torch7 团队开源了 PyTorch,它的宗旨是尽可能令深度学习建模更加简单。

PyTorch 的版本迭代

其实机器之心在很多对比文章中都发现 TensorFlow 的使用在目前来说还是最为广泛的,但是 PyTorch 的发展势头非常迅猛,尤其是在学术研究领域的应用上。那么为什么新近开源的 PyTorch 会那么受欢迎呢,首先我们需要了解深度学习框架的关键点:

  • 易于构建大型计算图

  • 易于在计算图中进行梯度运算

  • 能在 GPU 上高效运行(cuDNN、cuBLA 等)

在后两项中,基本上 TensorFlow 和 PyTorch 都能实现高效的自动微分机制和并行运算机制。但是在第一项中,PyTorch 的哲学是解决当务之急,也就是说即时构建和运行计算图,这与 TensorFLow 先建立静态计算图再发生实际运算相比要简单地多。因此在第一项上,PyTorch 具备很大优势,但是 TensorFlow 的静态计算图更有利于部署模型,且现在同样也非常关注动态计算图。

工业化的缺陷

PyTorch 最开始发布以来,大家都偏向于使用它做学术研究,而不是用于实际生产。主要的原因可能有两点:首先它比较新,还不太成熟,因此很多 API 接口和结构也都不太稳定;其次是动态计算图在部署上不太方便,而像 TensorFlow 这样的静态图可以在不同的环境下调用计算图和对应参数,因此很容易部署到各种产品中。

由于 PyTorch 与 Python 有着紧密的结合,因此将这种动态计算图部署到其它产品会比较困难。不论是训练脚本还是预训练模型,我们经常需要将研究代码转换为 Caffe2 中的计算图表征,从而实现生产规模上的高效使用。其中 Caffe2 项目是两年前提出的,其目的是标准化 AI 模型的生产工具,目前该框架在 Facebook 服务器以及超过 10 亿台手机上运行,横跨了八代 iPhone 和六代安卓 CPU 架构。

之前,从 PyTorch 到 Caffe2 的迁移过程是手动的,耗时间且容易出错。为了解决这个问题,Facebook 与主要的硬件和软件公司合作创建了 ONNX(开放神经网络交换格式),这是一种用于表示深度学习模型的开放格式。通过 ONNX,开发者能在不同的框架间共享模型,例如我们可以导出由 PyTorch 构建的模型,并将它们导入到 Caffe2。

通过 ONNX 和 Caffe2,使用 PyTorch 构建的研究结果可以快速地转化到生产中。而且昨日发布的 PyTorch 1.0 预览版也标志着 PyTorch 开始走向成熟,很多 API 接口和框架结构也都会变得更加稳定,这些都非常有利于将 PyTorch 应用于实际生产中。

性能对比

这两种深度学习框架都有各自的特点,那么它们在相同硬件(GPU)上运行相同神经网络的性能又怎么样?Ilia Karmanov 在 GitHub 上开源了一项测试,他在相同的环境下测试由不同框架编写的相同模型,并借此讨论不同框架的性能。从这些数据中,我们可以了解到在性能上,TensorFlow 和 PyTorch 并不会有显著的差别,不过在特定的任务上还是有一些不同。

项目地址:https://github.com/ilkarman/DeepLearningFrameworks

以下展示了使用 VGG 在 CIFAR-10 上实现图像分类的速度:

以下展示了 DenseNet-121 在 ChestXRay 数据集上的训练速度,在这个图像识别任务中,PyTorch 要比 TensorFlow 表现得更好一些:

如下展示了在 IMDB 数据集上训练门控循环单元(GRU)的速度,它们实现的是情感分析任务。对于循环神经网络,PyTorch 和 TensorFlow 的性能差不多,不过 PyTorch 在 P100 芯片上普遍表现得比 TensorFlow 好。

该项目还有更多的对比与分析,感兴趣的读者可查看原 GitHub 项目。

产业ICLR 2019TensorFlowPyTorch
1
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

门控循环单元技术

门控循环单元(GRU)是循环神经网络(RNN)中的一种门控机制,与其他门控机制相似,其旨在解决标准RNN中的梯度消失/爆炸问题并同时保留序列的长期信息。GRU在许多诸如语音识别的序列任务上与LSTM同样出色,不过它的参数比LSTM少,仅包含一个重置门(reset gate)和一个更新门(update gate)。

推荐文章
暂无评论
暂无评论~