《PyTorch深度学习建模与应用(参考用书)》(零)——深度学习综述
《PyTorch深度学习建模与应用(参考用书)》(零)——深度学习综述
- 1. 深度学习概述
- 1.1深度学习发展历史
- 1.2深度学习框架比较
- 1.2.1 TensorFlow简介
- 1.2.2 PyTorch简介
- 1.2.3 两种框架的比较
- 1.3深度学习应用领域
- 1.3.1 推荐算法
- 1.3.2 语言识别
- 1.3.3 模式识别
- 1.3.4 目标检测
- 1.3.5 智慧城市
- 2. PyTorch应用场景
深度学习(Deep Learning)是人工智能的一种,相比于传统的机器学习,它在某些领域展现出了接近人类的智能分析效果,开始逐渐走进我们的生活,例如刷脸只复、语音识别、智能驾驶等。
1. 深度学习概述
深度学习可以让计算机从经验种进行学习,并根据层次化的概念来理解世界,让计算机从经验中获取知识,可以避免由人类来给计算机形式化地制定它所需要地所有知识。
1.1深度学习发展历史
深度学习地出现主要是为了解决那些对于人类来说很容易执行,但却很难形式化描述的任务。对于这些任务,我们可以凭借直觉轻易解决,但对于人工智能来说却很难解决。
2006年时深度学习的元年,Hinton教授在《科学》杂志上发表论文,提出了深层网络训练中梯度消失问题的解决方案,其主要思想是先通过自学习的方法学习到训练数据的结构(自动解码器),再在该结构上进行有监督训练微调。
2011年,ReLu激活函数被提出,该激活函数能够有效地抑制梯度消失问题,并且微软首次将深度学习应用在语言识别上,取得了重大突破。
2012年,深度神经网络(Deep Neural Network,DNN)技术在图像识别领域取得惊人的效果,Hinton教授地团队利用卷积神经网络(Convolutional Neural Network,CNN)设计了AlexNet,使之在ImageNet图像识别大赛上打败了所有团队。
2015年,深度残差网络(Deep Residual Network,ResNet)被提出,它是由微软研究院的何凯明小组提出来的一种极度深层的网络,当时提出来的时候已经达到了152层,并获得了全球权威的计算机视觉竞赛的冠军。
1.2深度学习框架比较
深度学习框架通过将深度学习算法模块化封装能够实现模型的快速训练、测试与调优,为技术应用的预测与决策提供有力支持,当前人工智能生态的朝气蓬勃与深度学习框架的百家齐放可谓相辅相成,相互成就。
以Python为代表的深度学习框架主要由谷歌的TensorFlow、Facebook的PyTorch、Theano、MXNET、微软的CNTK等,如何选择和搭建适合的开发环境对今后的学习与提高十分重要。从GitHub查看框架的讨论热度、各大顶级会议的选择而言,TensorFlow和PyTorch无疑是当前受众广、热度高的两种深度学习框架。
1.2.1 TensorFlow简介
TensorFlow的前身是2011年Google Brain内部孵化项目DistBelief,它是一个为深度神经网络构建的机器学习系统。经过Google 内部的锤炼后,在2015年11月9日,对外发布了TensorFlow,并于2017年2月发布了1.0.0版本,这标志着TensorFlow稳定版本的诞生。2018年9月,TensorFlow1.2版本发布,并将Keras融入TensorFlow,作为TensorFlow的高级API,这也标志着TensorFlow在面向数百万新用户开源的道路上迈出了最重要的一步。2021年5月发布了TensorFlow 2.5.0的正式版,包括对于分布式训练和混合精度新功能的支持、对NumPy API子集的试验性支持以及一些用于监测性能瓶颈的新工具,使得TensorFlow的功能空前强大。
1.2.2 PyTorch简介
相比TensorFlow而言,PyTorch则比较年轻。2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch,并于2018年5月正式发布PyTorch 1.0版本,这个新的框架将PyTorch 0.4与贾扬洋的Caffe2合并,并整合ONNX格式,让开发者可以无缝地将AI模型从研究转到生产,而无须处理迁移。新的稳定版是PyTorch 1.9.1,2021年9月对外发布,包含很多新的API,如支持NumPy兼容地FFT操作、性能分析工具,以及对基于分布式数据并行(Distributed Data Paralle,DDP)和基于远程过程调用(Remote Procedure Call,RPC)的分布式训练,PyTorch官方还开源了很多新工具和库,使得PyTorch的众多功能向TensorFlow趋同,同时保有自身原有的特性,竞争力得到极大增强。
1.2.3 两种框架的比较
在2019年,研究领域PyTorch的使用率飞速提升,69%的CVPR论文、75%以上的NAACL和ACL论文以及50%以上的ICLR和ICML论文都选择使用PyTorch,可谓迅速获得研究人员的青睐,而TensorFlow则没有如此耀眼的数据。
一个良好的深度学习框架应该具备优化的性能、易于理解的框架与编码、良好的社区支持、并行化的进程以及自动计算梯度等特征,TensorFlow和PyTorch在这些方面都有良好的表现,为了更为细致地比较两者之间地差异优势,下面将对新版TensorFlow 2.5版本和PyTorch 1.9版本先从运行机制、训练模式、可视化情况、生产部署等方面进行差异比较,再通过细化特征进行定性比较,最后归类对应适用场景的建议。
- 运行机制
两个框架都是在张量上进行运算,并将任意一个模型看成是有向无环图(Direct Acyclic Graph,DAG),但TensorFlow遵循“数据即代码,代码即数据”的理念,当在TensorFlow中运行代码时,DAG是以静态方式定义的,若需要实现动态DAG,则需要借助TensorFlow Fold库;而PyTorch属于更Python化的框架,动态DAG是内置的,可以随时定义、随时更改、随时执行节点,并且没有特殊的会话接口或占位符,相当灵活。 - 训练模式
在分布式训练中,TensorFlow和PyTorch的一个主要差异特点是数据并行化,使用TensorFlow时,使用者必须手动编写代码,并微调在特定设备上运行的每个操作,以实现分布式训练;而PyTorch则是利用异步执行的本地支持来实现的,其自身在分布式中的训练是比较欠缺的。 - 可视化情况
在可视化方面,TensorFlow内置的TensorBoard非常强大,能够显示模型图,绘制标量变量,实现图像,嵌入可视化,甚至是播放音频等功能;反观PyTorch的可视化情况,则显得有点差强人意,开发者可以使用Visdom,但是Visdom提供的功能很简单且有限,可视化效果远远比不上TensorBoard - 生产部署
对于生产部署而言,TensorFlow具有绝对的优势,它可以直接使用TensorFlow Serving在TensorFlow中部署模型;而PyTorch没有提供任何用于在网络上直接部署模型的框架,需要使用Flask或者另一种替代方法来基于模型编写一个RESTAPI; - 适用场景建议
当需要拥有丰富的入门资源、开发大型生产模型、可视化要求较高、大规模分布式模型训练时,TensorFlow或许是当前最好的选择;而如果想要快速上手、对于功能性需求不苛刻、追求良好的开发和调试体验、擅长Python化的工具时,PyTorch或许是值得尝试的框架
总之,TensorFlow在保持原有优势的同时进一步融合包括Keras在内的优质资源,极大地增强了易用性与可调试性;而PyTorch虽然年轻,但增长的势头猛烈,并通过融合Caffe2来进一步强化自身优势,两者都在保留原有优势的同时,努力补齐自身短板,这使得在某种程度上两者有融合的趋势,未来哪一种框架更具优势,现在定论必定过早。因此,在选择框架时,可参照上述内容,并结合项目的时效、成本、维护等多方面综合考虑后决定。
1.3深度学习应用领域
通过模型多层的“学习”,计算机能够用简单形象的形式来表达复杂抽象的概念,解决了深度学习的核心问题。如今,深度学习的研究成果已成功应用于推荐算法、语音识别、模型识别、目标检测、智慧城市等领域。
1.3.1 推荐算法
随着互联网技术的快速发展,在满足用户需求的同时,也带来了信息过载问题。如何从庞大的信息中快速找到感兴趣的信息变得极其重要,个性化推荐也因此变得比较热门,电商平台通过利用用户平时购买商品的记录,门户网站通过根据用户浏览新闻的类别,娱乐行业通过分析用户观看电影的类型等历史行为数据来挖掘用户的兴趣,并对其推荐相关的信息。
1.3.2 语言识别
语言信号的特征提取与使用是语音识别系统的重要步骤,其主要的目的是量化语言信号所携带的众多相关信息,得到可以代表语言信号区域的特征点,显示出了其比传统方法具有更大的优势。利用深度学习对原始数据进行逐层映射,能够提取出能较好地代表原始数据的深层次的本质特点,从而提高了传统语言识别系统的工作性能。
1.3.3 模式识别
传统的模式识别就可以获得许多传统特征,然而传统的模式识别方法依赖专家知识选取有效特征,过程繁杂,费时费力且成本高昂,很难利用大数据的优势。与传统的模式识别方法最大的不同在于,基于深度学习的模式识别方法能够从数据中自动学习刻画数据本质的特征表示,摒弃了复杂的人工特征提取过程。
1.3.4 目标检测
目标检测是计算机视觉领域的研究热点。近年来,目标检测的深度学习算法有突飞猛进的发展。目标检测作为计算机视觉的一个重要研究方向,已广泛应用于人脸检测、行人检测和无人驾驶等领域。随着大数据、计算机硬件技术和深度学习算法在图像分类中的突破性进展,基于深度学习的目标检测算法成为主流。
1.3.5 智慧城市
随着机器视觉技术的不断发展,基于机器视觉的智慧城市人流量的统计能够更好地服务群众,减少安全隐患,增加管理效率。例如,对于智慧城市公共场所的人流密度进行实时统计与跟踪得到了广泛的研究和应用,对特色景点和公园等人流密度较大的公共区域进行人数统计,准确地掌握当前区域的游客数量,有利于避免踩踏及偷窃等多种不良事件发生。
2. PyTorch应用场景
- 程序需要GPU加速计算
PyTorch不仅能够实现强大的GPU加速的张量计算,同时还支持动态自动求导的深度神经网络,这一点是现在很多主流框架(如TensorFlow)都不支持的 - 开发人员对Python熟悉
与任何深度学习库相比,PyTorch更倾向于Python,这是因为PyTorch相对容易理解,而且感觉更自然,更原生,与Python代码风格基本一致 - 良好的开发和调试体验
当前并没有完美的深度学习框架,因此从众多主流的深度学习框架中选择适合自身项目的框架并非易事,如果对于功能性需求不苛刻、追求良好的开发和调试体验,PyTorch相对来说是比较合适的框架。
