Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

小白也能搭建深度模型,百度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 是端计算的形式,它们主要的差别在于是不是需要对性能与能耗做权衡。

目前可以实现在 Android、iOS 等系统的 GPU、NPU 等芯片上对定制模型预测阶段计算的加速。

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

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

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

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

产业百度EasyDL神经架构搜索
3
相关数据
英特尔机构

英特尔(NASDAQ: INTC)是全球半导体行业的引领者,以计算和通信技术奠定全球创新基石,塑造以数据为中心的未来。我们通过精尖制造的专长,帮助保护、驱动和连接数十亿设备以及智能互联世界的基础设施 —— 从云、网络到边缘设备以及它们之间的一切,并帮助解决世界上最艰巨的问题和挑战。

http://www.intel.cn/
相关技术
深度学习技术

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

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

调度技术

调度在计算机中是分配工作所需资源的方法。资源可以指虚拟的计算资源,如线程、进程或数据流;也可以指硬件资源,如处理器、网络连接或扩展卡。 进行调度工作的程序叫做调度器。调度器通常的实现使得所有计算资源都处于忙碌状态,允许多位用户有效地同时共享系统资源,或达到指定的服务质量。 see planning for more details

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

参数技术

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

剪枝技术

剪枝顾名思义,就是删去一些不重要的节点,来减小计算或搜索的复杂度。剪枝在很多算法中都有很好的应用,如:决策树,神经网络,搜索算法,数据库的设计等。在决策树和神经网络中,剪枝可以有效缓解过拟合问题并减小计算复杂度;在搜索算法中,可以减小搜索范围,提高搜索效率。

有向无环图技术

在图论中,如果一个有向图从任意顶点出发无法经过若干条边回到该点,则这个图是一个有向无环图(DAG图)。 因为有向图中一个点经过两种路线到达另一个点未必形成环,因此有向无环图未必能转化成树,但任何有向树均为有向无环图。

学习率技术

在使用不同优化器(例如随机梯度下降,Adam)神经网络相关训练中,学习速率作为一个超参数控制了权重更新的幅度,以及训练的速度和精度。学习速率太大容易导致目标(代价)函数波动较大从而难以找到最优,而弱学习速率设置太小,则会导致收敛过慢耗时太长

提前停止技术

在机器学习中,提前停止是一种正则化形式,用于在用迭代方法(例如梯度下降)训练学习器时避免过度拟合。 这种方法更新了学习器,使其更好地适合每次迭代的训练数据。 这提高了学习器在训练集之外的数据上的表现。 但是,提高学习器对训练数据的适应性是以增加的泛化误差为代价的。 提前停止规则提供了在学习器开始过度训练之前可以运行多少次迭代的指导。提前停止规则已经在许多不同的机器学习方法中使用,理论基础不尽相同。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

计算机视觉技术

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

神经网络技术

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

云计算技术

云计算(英语:cloud computing),是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。

先验知识技术

先验(apriori ;也译作 先天)在拉丁文中指“来自先前的东西”,或稍稍引申指“在经验之前”。近代西方传统中,认为先验指无需经验或先于经验获得的知识。先验知识不依赖于经验,比如,数学式子2+2=4;恒真命题“所有的单身汉一定没有结婚”;以及来自纯粹理性的推断“本体论证明”

大数据技术技术

大数据,又称为巨量资料,指的是传统数据处理应用软件不足以处理它们的大或复杂的数据集的术语。

迁移学习技术

迁移学习是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务,虽然大多数机器学习算法都是为了解决单个任务而设计的,但是促进迁移学习的算法的开发是机器学习社区持续关注的话题。 迁移学习对人类来说很常见,例如,我们可能会发现学习识别苹果可能有助于识别梨,或者学习弹奏电子琴可能有助于学习钢琴。

过拟合技术

过拟合是指为了得到一致假设而使假设变得过度严格。避免过拟合是分类器设计中的一个核心任务。通常采用增大数据量和测试样本集的方法对分类器性能进行评价。

语音识别技术

自动语音识别是一种将口头语音转换为实时可读文本的技术。自动语音识别也称为语音识别(Speech Recognition)或计算机语音识别(Computer Speech Recognition)。自动语音识别是一个多学科交叉的领域,它与声学、语音学、语言学、数字信号处理理论、信息论、计算机科学等众多学科紧密相连。由于语音信号的多样性和复杂性,目前的语音识别系统只能在一定的限制条件下获得满意的性能,或者说只能应用于某些特定的场合。自动语音识别在人工智能领域占据着极其重要的位置。

正则化技术

当模型的复杂度增大时,训练误差会逐渐减小并趋向于0;而测试误差会先减小,达到最小值后又增大。当选择的模型复杂度过大时,过拟合现象就会发生。这样,在学习时就要防止过拟合。进行最优模型的选择,即选择复杂度适当的模型,以达到使测试误差最小的学习目的。

多任务学习技术

强化学习技术

强化学习是一种试错方法,其目标是让软件智能体在特定环境中能够采取回报最大化的行为。强化学习在马尔可夫决策过程环境中主要使用的技术是动态规划(Dynamic Programming)。流行的强化学习方法包括自适应动态规划(ADP)、时间差分(TD)学习、状态-动作-回报-状态-动作(SARSA)算法、Q 学习、深度强化学习(DQN);其应用包括下棋类游戏、机器人控制和工作调度等。

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