PyTorch是一个开源的深度学习框架,以出色的灵活性和易用性而闻名。这部分是因为它与Python兼容,Python是一种受机器学习开发者和数据科学家青睐的流行高级编程语言。
PyTorch是什么?
PyTorch是一个用于构建深度学习模型的全功能框架,是图像识别和语言处理等应用中常用的一种机器学习。用Python写的,所以对于大多数机器学习开发者来说,学习和使用起来相对简单。PyTorch的独特之处在于,它完全支持GPU,并使用逆向模式自动微分技术,因此可以动态修改计算图形。这使得它成为快速实验和原型设计的常见选择。
为什么是PyTorch?
PyTorch是脸书人工智能研究所和其他几个实验室的开发者的作品。该框架结合了Torch中高效灵活的GPU加速后端库和直观的Python前端,后者专注于快速原型制作、可读代码,并支持尽可能广泛的深度学习模型。Pytorch支持开发人员使用熟悉的命令式编程方法,但仍然可以输出到图形。它于2017年作为开源发布,其Python根源使其在机器学习开发者中广受欢迎。
值得注意的是PyTorch采用了Chainer 的创新技术,这就是所谓的反向模式自动微分。本质上,它就像一个录音机,把完成的操作录下来,然后回放,计算梯度。这使得PyTorch的调试相对简单,并且它可以很好地适应一些应用,例如动态神经网络。因为每次迭代可能都不一样,所以非常适合做原型设计。
PyTorch在Python开发人员中特别受欢迎,因为它是用Python编写的,并使用该语言的命令式运行时定义来定义立即执行模式,在这种模式下,当从Python中调用操作时,就会执行这些操作。随着Python编程语言的广泛采用,一项调查显示,AI和机器学习任务受到越来越多的关注,相关PyTorch的采用也得到推动。这使得PyTorch成为初涉深度学习的Python开发者的不错选择,越来越多的深度学习课程基于PyTorch。自早期版本以来,API一直是一致的,这意味着代码对于有经验的Python开发人员来说相对容易理解。
PyTorch 的独特优势是快速原型和小项目。其易用性和灵活性也使其深受学术界和研究界的喜爱。
脸书开发者一直在努力提高PyTorch的应用效率。新版本提供了增强功能,比如支持Google 的TensorBoard可视化工具和实时编译。此外,还扩展了对ONNX(开放式神经网络交换)的支持,使开发者能够匹配适合其应用的深度学习框架或运行时。
PyTorch的主要优势
PyTorch的一些重要特性包括:
PyTorch.org社区有一个大型的动态社区,提供优秀的文档和教程。论坛非常活跃,可以给予帮助和支持。
用Python编写,并集成到流行的Python库,如NumPy、用于科学计算的SciPy和用于将Python编译成C以提高性能的Cython。由于PyTorch的语法和用法与Python相似,因此Python开发人员学习起来相对容易。
各大云平台的大力支持。
脚本语言(称为TorchScript)易于使用,在即时模式下很灵活。这是一种快速启动的执行模式,从Python调用时立即执行操作,但也可以在C运行时环境下转换成图形模型,提高速度,实现优化。
它支持CPU、GPU、并行处理和分布式训练。这意味着计算工作可以分布在多个CPU和GPU核上,可以在多台机器上的多个GPU上进行训练。
PyTorch支持动态计算图形,可以在运行时改变网络行为。与大多数机器学习框架相比,它提供了更大的灵活性优势,因为大多数机器学习框架要求在运行时之前将神经网络定义为静态对象。
PyTorch Hub是一个预训练模型库,在某些情况下只需要一行代码就可以调用。
可以创建新的自定义组件作为标准Python类的子类,可以通过TensorBoard等外部工具包轻松共享参数,并且可以轻松导入和内联使用库。
PyTorch有一组广受欢迎的API,可用于扩展核心功能。
两个即时模式"用于实验和图形模式支持高性能执行。
拥有从计算机视觉到增强学习等领域的大量工具和库。
支持Python程序员熟悉的纯C前端接口,可用于构建高性能C应用。
PyTorch如何工作
PyTorch和TensorFlow的相似之处在于两者的核心成分都是tensorFlow和tensor。
张量
Tensor是核心PyTorch数据类型,类似于多维数组,用于存储和操作模型及其参数的输入输出。张量类似于NumPy的ndarray,只不过张量可以在GPU上运行以加快计算速度。
图表
神经网络将一系列嵌套函数应用于输入参数,以转换输入数据。深度学习的目标是通过计算相对损失指标的偏导数(梯度)来优化这些参数(包括权重和偏差,在PyTorch中存储为张量)。在前向传播中,神经网络接受输入参数,并将置信度得分输出到下一层的节点,直到它到达计算得分误差的输出层。在一个叫梯度下降的过程中,通过反向传播,将误差再次通过网络发回,并调整权重来改进模型。
图是由连接的节点(称为顶点)和边组成的数据结构。每个现代深度学习框架都是基于图的概念,其中神经网络被表示为计算的图结构。PyTorch将张量和操作记录保存在由函数对象组成的有向无环图(DAG)中。在下面的DAG中,叶子是输入张量,根是输出张量。
在很多流行的框架(包括TensorFlow)中,计算图是一个静态对象。PyTorch基于动态计算图形,即它在运行时构建和重构计算图形,并使用与用于执行前向传播相同的代码,同时还创建后向传播所需的数据结构。PyTorch是第一个运行时定义深度学习框架,匹配TensorFlow等静态图形框架的功能和性能,非常适合从标准卷积网络到时间递归神经网络的所有网络。
PyTorch用例
众所周知,PyTorch框架非常方便灵活,强化学习、图像分类、自然语言处理等例子都是常见的用例。
商业、研究和教育的例子
自然语言处理(NLP):从Siri到Google Translate,深度神经网络在机器理解自然语言方面取得了突破。这些模型大多将语言视为单词或字符的平面序列,并使用一种称为时间递归神经网络(RNN)的模型来处理这一序列。然而,许多语言学家认为,语言可以很容易地理解为由短语组成的层次树。因此,大量的研究进入了一种叫做递归神经网络的深度学习模型,这种模型考虑到了这种结构。尽管这些模型难以实现且效率低下,但PyTorch使这些模型和其他复杂的自然语言处理变得容易得多。Salesforce正在使用PyTorch进行NLP和多任务学习。
研究:PyTorch是研究的首选,因为它的易用性、灵活性和快速原型设计。斯坦福大学正在利用PyTorch的灵活性高效地研究新算法。
教育:Udacity正在使用PyTorch培养AI创新者。
PyTorch的意义
数据科学家
对于熟悉Python的程序员来说,PyTorch相对容易学习。它提供了简单的调试、简单的API,并且兼容内置Python的各种扩展。它的动态执行模型也非常适合原型设计,尽管会产生一些性能开销。
软件开发人员
PyTorch支持各种功能,可以快速方便地部署AI模型。它还有一个丰富的库生态系统,如Captum(用于模型可解释性)和skorch(scikit-learn兼容性)来支持开发。PyTorch拥有优秀的加速器生态系统,比如Glow(用于训练)和NVIDIA TensorRT(用于推理)。
GPU:深度学习的关键
在架构上,CPU只是由几个大缓存的内核组成,一次只能处理几个软件线程。相比之下,GPU由数百个内核组成,可以同时处理数千个线程。
先进的深度学习神经网络可能有数百万甚至数十亿个参数需要通过反向传播进行调整。因为神经网络是由大量相同的神经元构建而成,所以本质上是高度并行的。这种并行性将自然映射到NGC (NVIDIA GPU Cloud),用户可以提取具有预训练模型的容器,这些模型可用于各种任务(例如,计算机视觉、自然语言处理等)。),所有依赖项和框架都位于一个容器中。借助英伟达的TensorRT,在使用英伟达GPU时,推理性能可以在PyTorch上得到显著提升。
面向开发者的NVIDIA深度学习
GPU加速深度学习框架可以为定制深度神经网络的设计和训练带来灵活性,为Python、C/C等常用编程语言提供编程接口,MXNet、PyTorch、TensorFlow等广泛使用的深度学习框架依托英伟达GPU加速库,可以提供高性能的多GPU加速训练。
NVIDIA加速端到端数据科学
基于CUDA-X AI创建的NVIDIA RAPIDS开源软件库套件使您能够在GPU上执行端到端的数据科学和分析过程。该套件依靠NVIDIA CUDA原语进行底层计算优化,但通过用户友好的Python接口实现GPU并行和高带宽内存速度。
使用RAPIDS GPU DataFrame,可以通过类似熊猫的接口将数据加载到GPU上,然后在不离开GPU的情况下用于各种连接的机器学习和图形分析算法。这种级别的互操作性是通过像Apache Arrow这样的库实现的。这样可以加快端到端的过程(从数据准备到机器学习再到深度学习)。
RAPIDS支持在许多流行的数据科学库中共享设备内存。这将数据保留在GPU上,并节省了来回复制主机内存的高成本。
审计唐子红
标签:PyTorch深度模型