专访 | 小白也能搭建深度模型,百度EasyDL的背后你知多少

部署深度学习服务非常困难,因此简单易用的图形化系统就显得极为重要。本文介绍了百度的图形化深度学习系统 EasyDL,用户可以不需要机器学习背景知识而搭建优秀的深度学习服务。本文重点讨论了 EasyDL 系统的技术模块与优势,它大量采用了迁移学习与自动模型搜索,并针对不同的定制化任务学习不同的深度模型。

随着机器学习,尤其是深度学习在复杂数据上的表现越来越优秀,很多开发者希望能将其应用到自己的服务或产品中。然而即使是使用预训练模型或开源框架,对于很多不太了解机器学习算法工程的开发者而言还是有非常大的挑战。此外,若机器学习不是产品的核心技术,额外维护机器学习算法团队的成本又非常高。因此,很多时候我们需要一种能快速使用高性能深度学习的方法。

从整体而言,构建我们自己的机器学习应用首先需要收集数据,并执行复杂而繁琐的数据预处理,随后如何选择模型与各种层出不穷的修正结构也非常困难。在训练中,需要经验的调参过程与各种技巧也会对模型性能造成影响,更不用说需要根据数据情况选择与修正最优化方法了。因此即使不考虑工程化问题,将机器学习模型部署到客户端也有非常大的成本。

其实目前在 GitHub 上有很多优秀的机器学习开源项目,例如各种预训练深度卷积网络、高度封装的算法以及大量开放数据集,不过要想复现以及根据实际情况调整这些项目,开发者还是需要一些 ML 领域知识。此外,很多项目的文档说明与技术支持都有待提高,它们需要开发者一点点调试与试错才能正确搭建。更重要的是,将训练后的模型部署到移动端等平台会遇到非常多的困难,这主要还是当前流行的深度学习框架并不能完美支持模型部署。

所以对于不太了解 ML 的开发者而言,最好将上述这些过程都自动化。例如我们只需要收集少量和任务相关的数据,并直接在平台上完成标注,然后让系统帮我们选择合适模型与超参数进行训练,最后已训练模型还可以直接部署到云 API 或打包成安装包。其实现在也已经有一些平台能完成这一些过程,例如谷歌的 AutoML 和百度的 EasyDL 等。

EasyDL 主页:http://ai.baidu.com/easydl/

如下所示为 EasyDL 训练模型的基本流程,整个过程都是图形化操作,且如果是上传已经处理好的数据,那么强大的迁移学习系统会在几分钟内完成模型的训练。百度 AI 开放平台文档中心对 EasyDL 的建模过程有详细的描述,因为这一图形化的系统非常简明,所以文档也通俗易懂。

如上所示,EasyDL 将整个服务精炼为四个步骤,并且可以在不需要机器学习背景知识的情况下开发模型。创建模型只需要选择我们任务所属的类别,例如图像分类或目标检测等。训练模型只是选择我们创建的任务与数据,再点击训练就行了,系统会自动搜索各种模型架构和超参数。最后上线模型同样也只需要确定到底是获取云端 API 还是离线 SDK,整个过程不会涉及到复杂的算法与工程方面问题。

EasyDL 在 2017 年 11 月初上线了定制化图像识别服务,并在业内展开公开测试。在 2018 年 4 月、5 月和 7 月陆续发布了定制化物体检测服务、定制化模型设备端计算和定制化声音识别等多个定制化能力方向,并形成了从训练数据到最终定制化服务的一站式端云一体平台。目前 EasyDL 的各项定制能力在业内广泛应用,累计过万用户,在包括零售、安防、互联网内容审核、工业质检等等数十个行业都有应用落地,并提升了这些行业的智能化水平和生产效率。

主要技术手段

EasyDL 的主要优势在应用案例的累积、简明的产品设计与操作流程、支持移动端计算与部署等,而支持这些优势的是 EasyDL 背后各种主要技术手段。例如 AI Workflow 统一大数据工程系统与分布式训练系统,为 EasyDL 提供稳定的系统和流程支持;采用 PaddlePaddle 作为基本框架,为模型的搭建提供基础;采用 Auto Model Search 自动搜索模型超参数,支持获得更好的训练效果;采用迁移学习训练较小的用户数据集,从而大大加强训练效率与效果等。

AI Workflow 与 PaddlePaddle

AI Workflow 是百度对机器学习从训练到上线构建的工作流引擎,它是一个将大数据成熟的工程系统与人工智能分布式模型训练相结合的引擎。它覆盖了从训练数据的存储,ETL(抽取、交互转换和加载)、模型训练任务的发起、训练集群资源调度、训练状态监控同步、模型自动部署、服务发布上线等全部环节,并实现了全自动流程。

总体而言,AI Workflow 的主要流程可以分为四个阶段。首先第一阶段是对数据进行预处理,例如对图像实现归一化、大小裁剪与数据增强等。随后第二阶段是模型的训练,或者说是学习过程,这一阶段会基于百度研发的深度学习框架 PaddlePaddle 进行分布式训练。训练完模型后,第三阶段就需要验证模型的效果,也就是说用户可以上传小规模的测试数据,并对模型的召回率与精度等指标进行验证。最后第四阶段为服务的上线或模型的部署,在这个过程中我们可以将已训练模型加载到云端并对外提供服务,也可以打包为一组移动端开发套件,为进一步集成到其它任务中提供接口。

整个 AI Workflow 在系统层面和服务层面同样也会有一些优化,例如 PaddlePaddle 团队会对模型的训练阶段做很多优化,包括 GPU 的内核融合和利用 RDMA 优化分布式训练等。而 EasyDL 团队这边也会在服务层面做一些优化,例如在推理阶段中,他们需要优化任务调度,并加速模型推理速度。

在 AI Workflow 中,整个训练和推理阶段都是使用 PaddlePaddle 框架,它包含了许多高性能的模型算法实现, 为最终出色的效果提供了强有力的支撑。虽然 EasyDL 的用户不需要了解与使用 PaddlePaddle,但其多年的 AI 技术积累以及大量的业务使用验证,使得框架对于各种任务都非常安全稳定。

此外针对于移动端部署,Paddle-Mobile 设计之初就对嵌入式的性能、体积、能耗、硬件平台覆盖等方面做了考虑。而 EasyDL 的端计算版本也是使用该框架设计更紧凑与高效的模型,并将其发布到移动端。

自动模型搜索与迁移学习

目前 EasyDL 采用了 Auto Model Search 的算法,即系统会同时发起多个模型结构和超参数不同的训练,并采用对应算法进行最终模型的筛选,从而确保更优的模型效果。Auto Model Search 与后文介绍的 AutoDL 在功能上是相近的,但百度的 AutoDL 是一种神经架构搜索方法,它关注于利用强化学习从头构建神经网络。

Auto Model Search 是指对于同一方向的定制能力,也就是说它会采用多个经典模型以及不同的超参数配置,并分别进行训练。然后再按一些策略挑选出比较好的结果,并完成模型的上线。其中系统可调的超参数包含神经网络类型的选择,例如对于图像分类可以选择 Inception、ResNet 或者其他。而对于每一个模型,可选的超参数包含批量大小、迭代数量和卷积核大小等。在确定模型架构,并配置完超参数后,每一个单独的模型都会并行的训练,并按一定策略选择效果最好的模型。

其实 Auto Model Search 是针对特定用户数据的,在用户上传与他们任务相关的数据后,EasyDL 会抽取多个已训练深度网络,并采用迁移学习和不同的超参配置精调这些深度网络。如下所示在用户确定好小型数据集后,EasyDL 可能会选择 Inception v3/v4 和 ResNet 等,在固定这几个网络前面层级的权重后,系统会根据用户数据以及不同的批量大小和学习率训练网络。

EasyDL 大量采用了迁移学习技术,各种基础模型会在百度大规模数据集上进行预训练,并将从中学习到的知识(Knowledge)运用到用户提交的小规模训练数据集上,从而实现出色的模型效果和快速的模型训练。迁移学习的主干是非常大的网络,而一般我们每一类只需要使用 20 到 100 多张图像就能完成对后面层级的训练,且 EasyDL 也会采用 Early Stopping 等正则化手段降低模型过拟合的风险。

图像的迁移学习可能比较好处理,但 EasyDL 的声音分类并不需要太关注序列上的长期依赖关系,因此它也能使用迁移学习。声音分类的迁移主要会采用 MFCC 或加上快速傅立叶变换将音频的时域数据转换为频域的图,然后再利用与计算机视觉相类似的迁移方法传递与音频相关的知识。而以后在处理语音识别等存在长期依赖性的数据时,主体模型可能会继续用到其它迁移知识的技术。

此外对于图像方面的迁移学习,如果用户需要区分非常精细的图片或执行细粒度识别任务,那么一般迁移学习主要会获取图像的全局信息,它很难抽取精细特征。EasyDL 其实也能处理这些细粒度识别任务,但迁移效果很大程度上会受到用户数据的影响。因此训练集图片需要和实际场景要识别的图片环境一致,且对于细粒度识别这种具有很多相似图像的任务,用户需要增加更多的训练图像。

最后,为了提升模型迁移效果,EasyDL 会做一些特别的数据增强操作,即增加一些图像以加强模型的迁移效果。例如假定用户希望系统能识别两个类别,并为这两个类别提供了特定的数据,那么系统会自动增加其它一些数据,并作为第三个类别。在训练中,系统不仅需要识别用户的数据,同时还需要识别自动添加的数据为第三类别。

神经架构搜索

EasyDL 即将引入百度领先的 AutoDL 技术,这是一种 AutoML 的技术,它实现了深度学习网络结构的自动搜索和设计。百度的 AutoDL 是工业界中的一个项目,因此它主要由三部分组成,首先第一部分是从头开始搜索神经网络架构,即神经架构搜索。第二部分是神经网络的自动适配,也就是说根据不同的任务目标与需要进行适配,比如说目标是部署模型到移动端,那么系统就需要考虑正确率、参数量和计算量等条件来适配网络。第三部分是设计网络的迁移能力,AutoDL 希望搜索出具有强大迁移能力的一般性神经网络架构。实际上架构搜索与迁移能力是存在相对关系的,系统花大量计算资源希望搜索到针对特定数据有强大能力的架构,而可迁移性又希望系统找到的架构能推广到其它更多的数据。

在架构搜索策略上,目前比较流行的有进化策略、强化学习和基于梯度的连续空间搜索方法。而百度的 AutoDL 主要是基于强化学习,其核心思路是希望能搜索到尽可能广的空间。为了将神经架构搜索构造为强化学习问题,神经架构的生成可以视为智能体对动作的选择,动作空间也就相当于搜索空间。智能体获得的奖励会根据已训练架构在验证数据上的性能评估而定义。

不同的 RL 方法在表示智能体的策略和如何优化它们存在差异:Zoph 等研究者使用循环神经网络(RNN)策略对一个字符串进行序列采样,该字符串反过来对神经架构进行编码。Baker 等人利用 Q-learning 训练策略,该策略依次选择层的类型和对应的超参数。这些研究,包括谷歌大脑早期提出来的 NASNet,它们都引入了非常强的先验知识。

例如 NASNet 规定了网络实际上有多少单元,这些单元的搭建方式也是手动设计的,系统只需要自动设计单元的具体结构。而设计具体的单元结构也会存在一些先验知识,例如限制单元必须是两个操作输出一个结果等。AutoDL 主要的方向是希望搜索任何有向无环图结构,这样模型的表达能力和搜索空间就远远大于之前的方法。此外由于降低了搜索的先验知识,因此计算力会变得非常大,这也就对强化学习的采样效率有非常高的要求。

除了神经架构搜索,模型的适配也是非常重要的方向。AutoDL 会将很多目标添加到强化学习的反馈值,例如我们考虑一些多任务学习,模型会有一套衡量参数量、计算量与正确率的方法,并最终反馈到强化学习,从而修正搜索方向。

AutoDL 采用的是一种 Hierarchical RL,它同样也是基于 on policy。因为 AutoDL 的搜索空间非常大,系统需要一些结构性的探索,因此搜索空间的探索才回更有效率一些。NASNet 之前第一个版本是基于策略梯度(PG),第二版本是基于近端策略优化(PPO),虽然它们的抽样效率比较低,但它们确实展示了强化学习在这一方面的能力。所以总体而言,AutoDL 主要还是沿着 NASNet 所开辟的方法,并利用其它技术与技巧提高采样效率。

模型部署与设备端计算

目前 EasyDL 有两种发布服务的方式,即生成在线 API 和离线 SDK。从应用场景来说,在线 API 能让开发者更方便地与业务系统整合,因为在线 API 毕竟是 HTTP 层面的接口。而离线 SDK 有更低的调用延迟,对互联网的依赖性也没有那么强,它可以利用本地计算资源实现更安全与稳定的计算。而从技术实现来看,在线 API 是云计算的形式,离线 SDK 是端计算的形式,它们主要的差别在于是不是需要对性能与能耗做权衡。

在线 API 的能耗主要出现在服务端,系统不需要做太多的量化或者模型剪枝等优化,模型也不需要做特定的压缩。此外,在线 API 对于芯片端的优化也只需要考虑各种云端 GPU 来做一系列的推理加速。但是移动端的话选择非常丰富,例如可以是针对高通系列的芯片、也可以针对神经网络 NPU 或者针对可插拔的 Intel Movidius 加速卡进行优化。因此离线 SDK 的技术实现相对而言要难一些。

一般对于机器学习开发者而言,在云端训练一个模型,并部署为一个服务已经比较成熟。但将模型迁移到设备端仍然会面临很多困难,开发者需要考虑硬件兼容、能耗与性能等非常具体的问题。EasyDL 在发布离线 SDK 的过程中就已经自动做了很多工程优化,包括对轻量模型的选择和对计算阶段的量化等。其中选择轻量架构可以大幅度降低模型大小,量化可以大量降低包体大小,它们都能加速应用在内存中的加载。

总的而言对于设备端计算加速,首先 EasyDL 会选择 MobileNet 和 ShuffleNet 等轻量级的模型,例如在目标检测中,系统可能会使用 MobileNet 代替 SSD 中的主干网络,因而获得更高能效比。第二点是系统会通过模型剪枝将不太重要的网络参数去掉,例如去掉 CNN 中权重小于某个阈值的连接或直接去掉不太重要的卷积核。第三点会采用量化操作加速推理阶段的计算,其主要思想是降低卷积运算中数值的精度,从而降低整体的计算量与参数存储空间。

设备端加速第四点会采用很多指令集,包括 ARM 和 Neon 等,其中 Neon 是一种单指令多数据的指令集,系统可以通过一条指令加速多条数据,这些都是硬件层面的加速。最后设备端还能从计算单元的角度进行加速,例如 GPU 和 NPU 等。

欢迎使用百度EasyDL: ai.baidu.com/easydl
原文摘自原文摘自机器之心。

专访 | 小白也能搭建深度模型,百度EasyDL的背后你知多少相关推荐

  1. 如何获取高精度CV模型?快来试试百度EasyDL超大规模视觉预训练模型

    在深度学习领域,有一个名词正在被越来越频繁地得到关注:迁移学习.它相比效果表现好的监督学习来说,可以减去大量的枯燥标注过程,简单来说就是在大数据集训练的预训练模型上进行小数据集的迁移,以获得对新数据较 ...

  2. 从零开始搭建深度学习验证码识别模型

    文章目录 从零开始搭建深度学习验证码识别模型 CNN模型与图像识别 验证码数据集介绍 生成数据集 生成EasyCaptcha 生成Kcaptcha 搭建模型 EasyNet模型 KCapNet模型 模 ...

  3. 【小白学PyTorch】6.模型的构建访问遍历存储(附代码)

    <<小白学PyTorch>> 小白学PyTorch | 5 torchvision预训练模型与数据集全览 小白学PyTorch | 4 构建模型三要素与权重初始化 小白学PyT ...

  4. 1.搭建深度学习项目树莓派的硬件设备选择

    搭建深度学习项目树莓派的硬件设备选择 文章目录 搭建深度学习项目树莓派的硬件设备选择 1.型号选择 1.1 官网产品 1.2 型号介绍 1.2.1 树莓派 400 1.2.2 树莓派 数字系列 1.2 ...

  5. 1、搭建深度学习图像识别开发环境

    搭建深度学习开发环境 1.前言 1.1 本文章约定 1.2 开始条件 1.3 视频教程 1.4 整个流程概览 1.5 所需硬件 1.6 软件版本概览 2.安装 Anaconda 2.1 创建环境 tf ...

  6. Ubuntu18.04+RTX 2080Ti+CUDA 10.0 +cuDNN+PyTorch搭建深度学习环境

    SSH无密码登陆 安装SSH Server Ubuntu 默认已安装了 SSH client,此外还需要安装 SSH server: sudo apt-get install openssh-serv ...

  7. python学习框架图-从零搭建深度学习框架(二)用Python实现计算图和自动微分

    我们在上一篇文章<从零搭建深度学习框架(一)用NumPy实现GAN>中用Python+NumPy实现了一个简单的GAN模型,并大致设想了一下深度学习框架需要实现的主要功能.其中,不确定性最 ...

  8. 从DSSM语义匹配到Google的双塔深度模型召回和广告场景中的双塔模型思考

    ▼ 相关推荐 ▼ 1.基于DNN的推荐算法介绍 2.传统机器学习和前沿深度学习推荐模型演化关系 3.论文|AGREE-基于注意力机制的群组推荐(附代码) 4.论文|被"玩烂"了的协 ...

  9. 深度模型推理在腾讯游戏的应用与实践(王者荣耀、和平精英等均有应用)

    猜你喜欢 0.图模型在信息流推荐系统中的原理和实践1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.全民K歌推荐系统算法.架构及后台实现4.微博推荐算法实践与机器学习平台演进5.腾 ...

最新文章

  1. 深入浅出JVM的锁优化案例
  2. 实战:CNN+BLSTM+CTC的验证码识别从训练到部署 | 技术头条
  3. 2019全球AI文创大赛正式启动,AI科技赋能新文创
  4. zhcon解决Ubuntu命令行模式乱码问题
  5. Love:程序猿的方式~【情人节520—我爱你】~动画加音效 → 那些年最浪漫的表白(帮你得到你的她)
  6. 自定义LeNet5,开启你的炼丹之路
  7. c调用python第三方库_用 Python ctypes 来调用 C/C++ 编写的第三方库
  8. RxSwift 之官方文档
  9. 前端学习(1183):指令v-cloak
  10. android继承父类的界面,Android调用父类方法,进行子界面刷新
  11. NSString 截取字符串
  12. Hibernate(一)——采用Hibernate框架开发环境搭建
  13. 在线民宿满意度测评项目[开源]
  14. ASP.NET--表达式、运算符与分支结构
  15. Android自定义View【实战教程】2⃣️----自定义view那些事
  16. 官方文件出炉!北京住建委权威解读商住限购
  17. 程序员初入职场,如何规划好自己的职业生涯?
  18. JAVA 开发命名规范——阿里巴巴Java开发手册
  19. Python中的虚拟变量(dummy variables)
  20. 将一个n位数分解为各个位数的数字。

热门文章

  1. GDPR合规_Exchange Online(一)之eDiscovery Holds
  2. 手把手教你:【史上最全】C++开发环境搭建:win732位下VS2010+Boost_1_53_0+Qt5.2+MySql搭建
  3. 什么,恩智浦的flash模拟EEP是这么玩的?
  4. TCL转型启示录:大叔级企业拥抱互联网才能迎来第二春
  5. 手工集成7牛SDK到YII2框架中
  6. Python 不改变Excel单元格样式—xls和xlsx两种格式
  7. Java 爬取BiliBili追番排行榜
  8. linux v4l2 pdf,linux V4L2编程
  9. opencv——SURF特征点检测并使用Flann算法匹配
  10. Densely Connected Convolutional Networks(文献阅读笔记)