当前位置: 首页 > news >正文

国产首款——飞桨PaddlePaddle深度学习框架介绍

现在深度学习框架不但内卷严重,而且头部效应明显。一提起深度学习框架,首先想到的肯定是Google家的TensorFlow,和Facebook家的PyTorch。究竟排名谁先谁后,还要看你是工业界还是学术界。不过,深度学习框架远不止这两家,只不过,有一些前浪已经镶在墙上,而有一些后浪,同样出自名门,但还在为一个奔涌的机会而不断努力,今天的主角飞桨PaddlePaddle(以下简称“飞桨”)就是其中之一。

 

1

为什么要使用深度学习框架

飞桨是度娘家推出的深度学习框架,在介绍飞桨之前,我们先来聊聊为什么实现深度学习模型,业界通常都会选择使用现成的深度学习框架。

在深度学习刚刚兴起来的时候,大家对深度学习的热情很高,学习的方法也是五花八门,其中有一种特别提倡动手能力,大概是叫“从零开始实现深度学习模型”。这些方法说起来也不复杂,就是使用大家都很熟悉的Python科学运算库Numpy来实现深度学习所需要的各种部件,譬如说后向传播机制。

说实话,我发现我们这种直男式的程序员,好像天生就有一种怀疑精神,非常不信任第三方代码,非常不情愿使用第三方代码,只要调用了第三方的代码,一旦出了问题,就会产生一种“总有刁民要害朕”的气愤。所以,这种“从零开始实现XXX”的教学一直很受欢迎,大家就像鲁迅先生那篇《孔乙己》里面买黄酒的客人一样,非要看着代码一字字的被敲出来才放心。

但是,在深度学习这里,自己敲的代码用来学习还可以,用在生产环境上可能就有点力不从心了。首先就是质量,深度学习大量使用微分运算,譬如所有模型都必须使用的误差后向传播,这种机制实现代码比较复杂,而且出了问题不容易发现,用在生产环境中很可能会会埋了雷。

其次是效率。深度学习是2012年前后热起来的,也就10年不到的时间,但是,这门技术并非只有10年,历史非常悠久。我们知道,深度学习的前身是名叫“神经网络”的机器学习模型,神经网络的身世相当坎坷,两次攀到巅峰然后跌落低谷,每次都要被雪藏个好几十年,人称“神经网络的寒冬”,上一次还是在上个世纪90年代,被另一款机器学习模型支持向量机打得鼻青脸肿。

那神经网络这几年是因为什么才能王者归来,连名字都换成了霸气侧漏的“深度学习”呢?就是因为硬件能力的提升。现在硬件白菜价了,连跳广场舞的大妈都知道了,只要多买GPU,算力就能蹭蹭蹭地往上冒。当然,如果只是硬件便宜了,改变不了什么。你想想,算力提高是大家一起提高,凭什么就得让你深度学习一家独大呢?不好意思,深度学习模型还真有个和在座各位“不太一样”的地方,这就是模型性能和算力能够呈正相关,简单来说,就是只要算力保持“蹭蹭蹭”,模型性能也能跟着“蹭蹭蹭”。

所以,深度学习模型放在GPU上跑已经成了常规操作,但这就涉及了GPU编程,主要是CUDA,这就又要额外学习相关知识。而且,编写来的代码能用是一回事,把性能优化到极致又是另一回事,优化自身就是一个大坑。

最后是便捷。相信看完上面两个原因,大家的“懒癌”也差不多要发作了,徒手搭建一款完整能用于生产环境的深度学习模型,代价实在是太高了,可谓是费事费力难度大。就算你历尽千辛万苦,真的搭建好一个模型,麻烦又来了——深度学习模型长在处于爆发期,推陈出新特别快,更新又该怎办呢?现在业界常见的做法是构建计算图(Computation Graph),通过计算图能够比较精确地描述深度学习模型所需的各种操作,但是实现起来相当麻烦。

2

常见深度学习框架介绍

怎么办呢?简单,直接用成熟的深度学习框架就好了,不但代码质量有保证,不会因为手残导致奇奇怪怪的错误,而且性能(包括GPU运行和分布并行等的性能)可靠。更重要的是,你使用成熟的深度学习框架,你的精力主要是放在模型搭建上,注意力能够更为集中,而不用耗费在底层编码上面。

目前市面常见的深度学习框架一共有5款,都是由国内外知名互联网公司推出,Google的TensorFlow、Facebook的PyTorch、亚马逊的MXNet、微软的CNTK,以及百度的PaddlePaddle。前面的两款,TensorFlow和PyTorch,是现在深度学习行业的扛把子,就份额来看,目前还是出得最早、工程能力最强的TensorFlow占有优势,不过,从口碑来看的话,一般认为PyTorch从文档到到API设计都要更优雅一些,所以,一般有工业界偏好TensorFlow,而学术界偏好PyTorch的说法。

接下来说说后浪MXNet和CNTK。MXNet给我感觉是款走网红路线的深度学习框架,为什么这么说呢?略有了解的人应该都有这种感觉,别看前面TensorFlow和PyTorch名气很大,一般人想得出来一两个开发者的名字吗?不能,但是一提到MXNet,首先想到的可能不是这款框架能干什么,而是框架的开发者李沐博士。李沐博士水平很高,自带大神光环,不过有意思的是,李沐博士写了一本深度学习的书,教学代码当然用的是自家的MXNet来写,大神写的书肯定很多人找来看,然后Github上就有人放出了Pytorch实现的版本,结果一下成了高星项目。

当然,MXNet也确实很优秀也很努力,只是IT行业很多就是这样,一旦市场被人占了先机,后来者就很难再挤出一席之地。深度学习框架也一样,MXNet知道市场的基本盘已经被TensorFlow和PyTorch分完了,正在尝试另辟蹊径,走模型封装的道路。

至于CNTK,我总感觉巨人微软自从网络时代慢了一步之后,真有点一步慢、步步慢的感觉,我个人是很推崇微软的工程能力的,但是微软推出来的几个蹭热度产品,还真的只是蹭热度,蹭蹭就没有然后了。这次在深度学习时代推出来的CNTK好像也延续了这一风格,发布前后热度挺高,不过据说微软内部对CNTK的态度也是“十动然拒”,给我留下的唯一印象就是支持C#,还有就是可以作为Keras的后端,这几年就再没听过CNTK的消息 。写这篇文章的时候我还专门查了一下,CNTK应该还没停更,不过最新的一次发布已经是2019年了。

当然了,深度学习框架远不止这些,譬如知名度很高的还有Theano、Caffe、Torch等等,不过这些基本属于前深度学习时代的深度学习框架,要么是个人要么是小团体开发,有着手撸代码的种种不足,过去主要是研究人员使用,现在已经逐渐退出了历史舞台。

3

百度深度学习框架飞浆PaddlePaddle介绍

度娘家出的飞桨PaddlePaddle是首款国产深度学习通用型框架,既然是通用性框架,可以对于张量(Tensor)进行各种操作是最起码的要求,而作为深度学习框架,搭建神经网络所需的卷积、池化等各类单元层、各类激活函数、损失函数等等基本套件,PaddlePaddle也肯定都得有,至于神经网络离不了的后续传播机制已经成了业界标配,PaddlePaddle也必须得支持。总之一句话,如果你了解其它深度学习框架,你就会发现PaddlePaddle在使用层面也是大同小异。

不过,PaddlePaddle想要和TensorFlow、PyTorch相提并论,就一定会面临前面MXNet一样的困境:既然各家功能差不多,写法也区别不大,那为什么我要选择PaddlePaddle,而不直接用霸榜的那两款呢?

我想这个问题同样也深深困扰着PaddlePaddle团队,所以,他们选择做了两样事情。第一样是主打“国产”。现在技术都很强调国产,特别是未来准备大力发展的关键技术,不怕一万就怕万一。当然了,这只是其一,其二是据百度技术学院参与编写的《飞桨PaddlePaddle深度学习实战》介绍,PaddlePaddle对国产的硬件支持良好,超过了TensorFlow和PyTorch。

主打国产是一条新路子,当然,这还远远不够,所以PaddlePaddle同时还选择了做另一件事,这就是前面介绍MXNet也说过的,主打预训练模型。

什么意思呢?深度学习模型现在性能越来越强大,这当然是好事,但是有人喜有人忧。

前面我们说,深度学习框架可以很方便搭建模型,但是,现在深度学习模型性能越来越强大,同时也意味着模型越来越复杂,哪怕是用了深度学习框架,要准确、快速地完成一款模型的搭建也绝非易事。对于一般的用户,最常见的选择就是等大神搭完了丢出来再用,这就比较看运气了。PaddlePaddle就是看到了这点,官方团队就实现了一些经典的和先进的模型,而且已经训练好了参数,你想使用,只是拿出来就可以用了,非常的方便。

譬如说目标检测模型YOLOv3,对于一般人来说,光是看懂原理就不太容易了,但是使用了PaddlePaddle以后,事情就要简单很多。PaddlePaddle有一个组件,叫PaddleHub,是飞桨生态下的预训练模型管理工具。通过PaddleHub获取模型非常简单,只要先找到模型的名称,然后安装模型就可以使用了。在PaddleHub中,采用COCO2017数据集训练的YOLOv3模型称为yolov3_coco2017,想要安装这款模型,只需要执行一条命令:

hub install yolov3_coco2017

模型安装完成之后,无需额外操作即可以直接使用,譬如说进行图片预测。对于想要快速了解模型性能,特别是想通过新模型提升产品性能的同学,这套工具还是非常方便的。

想要进一步了解PaddlePaddle以及周边工具使用的同学,推荐阅读《飞桨PaddlePaddle深度学习实战》,这本书是由百度团队和高校专家共同撰写,既有很强的官方背景,又有很高的学术水平。在内容方面,本书是以深度学习的知识点为主线讲述,可以作为深度学习的教材,而在代码实现时则同时给出了两套方案,一套是通过Numpy的手工实现,一套则是通过PaddlePaddle实现,内容一样,所以对比性很强,更容易理解,而且更为系统。我感觉这本书比PaddlePaddle官方入门文档的编排更为合理,阅读体验更为顺畅,而且既然也是百度官方出品,完全可以视作官方入门文档的Plus版来阅读。

 

4

作者简介

莫凡,娱乐向机器学习解说选手,《机器学习算法的数学解析与Python实现》作者,前沿技术发展观潮者,擅长高冷技术的“白菜化”解说,微信公众号“睡前机器学习”,个人知乎号“木羊”。

扫码关注作者

 

5

推荐阅读

《飞桨PaddlePaddle深度学习实战》

作者:刘祥龙、杨晴虹、胡晓光、于佃海、白浩杰

深度学习技术及应用国家工程实验室

百度技术学院 组编

书号:978-7-111-66236-5

卖点:

  • 本书由百度官方出品,PaddlePaddle总架构师共同创作。

  • 百度公司CTO王海峰博士作序,张钹院士、李未院士、百度集团副总裁吴甜联袂推荐

  • “内容全面、由浅入深、注重实践”,结合新近PaddlePaddle技术版本,详细讲解了PaddlePaddle的技术和原理,以及如何从零开始快速掌握深度学习。

 

推荐语:

百度官方出品,百度公司CTO王海峰博士作序,张钹院士、李未院士、百度集团副总裁吴甜联袂推荐!结合新近PaddlePaddle版本,融合大量实践案例,让你从“零基础”到“全精通”,深入掌握深度学习的知识

 

 

更多精彩回顾

书讯 | 12月书讯 | 年末上新,好书不断

资讯 | DB-Engines 12月数据库排名:PostgreSQL有望获得「2020年度数据库」荣誉?

书单 | 机器人时代已来!推荐几本机器人学硬核好书

干货 | Python循环语句代码逐行详解:while、for、break和continue

收藏 | 微信第 1 行代码曝光!

上新 | 复杂的密码学也可以人人可懂

赠书 | 【第34期】如何成为一个软件架构师?

点击阅读全文了解更多AI好书

相关文章:

  • “MySQL Analytics Engine”来了
  • 【第35期】数字化转型到底该怎么做?
  • 详解华为12种数据采集技术及应用实践
  • JavaScript 25 岁了!
  • 43种机器学习开源数据集(附地址/调用方法)
  • 中国量子计算原型机“九章”问世,普通人怎样初识量子计算?
  • 中台“不火”了,企业数智转型如何破圈?
  • 一本书读懂“财税RPA”
  • 华为官方出品:首本HMS Core技术解析图书问世
  • 系统学习WebAssembly —— 理论篇
  • Hi~大家好,我是今年的圣诞老人华章妹!
  • 8本书助你了解人民日报“创作大脑”
  • 2020 PostgreSQL中国技术大会盛大开启
  • 【第36期】最强Redis特性导图
  • Python 新人笑、C# 旧人哭,你立的技术 Flag 2020 实现了吗?
  • angular组件开发
  • bootstrap创建登录注册页面
  • CSS实用技巧
  • js操作时间(持续更新)
  • MYSQL 的 IF 函数
  • Python利用正则抓取网页内容保存到本地
  • python学习笔记-类对象的信息
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • vue数据传递--我有特殊的实现技巧
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • vue中实现单选
  • 从0到1:PostCSS 插件开发最佳实践
  • 好的网址,关于.net 4.0 ,vs 2010
  • ------- 计算机网络基础
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 两列自适应布局方案整理
  • 手写一个CommonJS打包工具(一)
  • 突破自己的技术思维
  • 微信公众号开发小记——5.python微信红包
  • 线上 python http server profile 实践
  • 原生Ajax
  • ​你们这样子,耽误我的工作进度怎么办?
  • (42)STM32——LCD显示屏实验笔记
  • (LeetCode C++)盛最多水的容器
  • (Ruby)Ubuntu12.04安装Rails环境
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一)python发送HTTP 请求的两种方式(get和post )
  • .bat批处理(六):替换字符串中匹配的子串
  • .Net Core缓存组件(MemoryCache)源码解析
  • .Net 知识杂记
  • .NET 中的轻量级线程安全
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .net中我喜欢的两种验证码
  • /etc/shadow字段详解
  • [<事务专题>]
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析