深度学习框架被喻为AI时代的操作系统
无人驾驶、智能家居、智能客服、
物联网等AI应用
都离不开它的训练和预测服务
本文的主角是PaddlePaddle
来自我厂的深度学习框架产品
PaddlePaddle的意思是“AI之桨”
随着PaddlePaddle成为全球发展热度增速最高的开源深度学习平台
一艘AI大船的既视感油然而生
对于广大AI开发者来说
PaddlePaddle就是一款功能强大的
AI趁手利器
可以助您从大量重复的体力劳动中解放出来
将更多精力投入到AI应用创新之中
值PaddlePaddle 3.0正式推出之际
小编献上一箱新鲜出炉的硬货
向您揭秘PaddlePaddle的核心技术与实践
告诉您为啥PaddlePaddle可以让深度学习走入寻常百姓家
让AI应用不再成为难事
本文涉及到PaddlePaddle核心技术与实践的方方面面,包括深度学习的语义计算技术、百度视觉技术、PaddlePaddle的新特性、大规模稀疏数据分布式模型训练、移动端深度学习技术及应用实践、深度学习预测引擎Anakin的优化、以及深度学习的可视化等,小编为您逐个解析。
本篇目录如下
1、基于深度学习的语义计算技术
1.1 文本生成的例子
1.2 NLP计算服务
2、PaddlePaddle在视觉技术的工程实践
2.1 来自视觉技术研发的挑战
2.2 基于PaddlePaddle的模型研发
2.3 PaddlePaddle的技术支持
2.4 PaddlePaddle-Cloud 集群训练
2.5 视觉模块:已发布PaddlePaddle视觉模型
2.6 视觉模块:开发中的视觉模型
2.7 未来会发布更多自研模型
3、工程示例:OCR PaddlePaddle-v1 迁移到PaddlePaddle-Fluid
3.1 OCR预测库接入和封装需要解决的问题
3.2 具体的解决方法
3.3 模型研发总结
基于深度学习的语义计算技术
百度产品中常见的语义匹配场景包括百度搜索、百度Feed流以及百度拍照搜索等,分别实现问题与答案匹配、用户与新闻匹配、图片与文本匹配的效果。
语义匹配模型包括输入层、表示层、匹配层和匹配得分四层。
其中表示层需要完成输入数据转化为数值向量的过程。
匹配层需要完成两个向量融合并产生打分的过程,表示层和匹配层都可以是一个深度神经网络。
上图是百度常见的训练模型,百度拥有海量的用户行为日志,包括点击行为和非点击行为,这些行为通常暗示一种语义关系,点击行为的语义更相关,因此要从海量的用户行为日志信息中挖掘样本,提取高质量弱标记数据,将语义相关的数据作为正例,语义不太相关的数据作为负例,Query和正例的打分比Query和负例的打分大,使????↓+ −????↓−>????,通过定义目标函数来优化神经网络的参数。
由于召回端有非常多的结果,如果用复杂的神经网络模型来计算匹配度,系统很难承受,因此可以在召回层对Query做向量表示,将这个表示离线的计算出来,可以大大减少计算开销。在精排阶段,在结果很少的情况下可使用GPU做复杂的模拟计算,也就是在匹配层进行复杂计算。
流行的Encoder、Decoder算法组件、Transformer:地址见https://github.com/PaddlePaddle/models/tree/develop/fluid/neural_machine_translation/transformer
1.1 文本生成的例子
接下来举一个文本生成的例子。我们常用的机器翻译模型,其目标是把原语言通过神经网络建模翻译成目标语言,目前学术界对翻译模型的抽象都是基于编码器和解码器两个阶段的建模方法。基于用户输入的原语言做Decoder编码,然后对Decoder的词做最大化的测量估计,在机器翻译的解码过程中,通常对用户输入的语言做原语言的编码,通过Beam Search的方法找到最大可能的翻译的结果。Transformer是近两年比较常用的、效果和速度都比较好的模型,感兴趣的开发者不妨跑一跑。
语言模型是自然语言处理中比较经典的问题,其目标是学习一个词序列的联合概率函数,也就是说这个句子是否常见。如世界杯期间,在百度搜索中搜“阿根廷在”这四个字,“阿根廷在哪个组”这个Query的概率较大。
Neural Network LanguageModel. Bengio. 2003
上图是神经网络中较常见的Neural Network LanguageModel,它是用神经网络做语言模型的比较常见的模型。
上图是一个循环神经网络,它会不断融合历史和当前的信息,因此也是作为语言模型比较常见的侯选。
1.2 NLP计算服务
接下来介绍一下NLP的计算服务,在ai.baidu.com网站有很多基于深度学习训练的NLP模型的可调用服务,包括DNN语言模型、词法分析、短文本相似度、中文情感分析等。百度在NLP方面开源了一些基于PaddlePaddle的项目,如NLP里的中文词法分析,开源了整个模型训练的配置,以及部署的方法,其中基于深度学习网络,融合了切词、标注,以及专名识别,是三个任务融合为一体的一个开源项目。
PaddlePaddle在视觉技术的工程实践
百度的AI视觉技术主要包括四个方面:图像识别、图像搜索、视频理解和机器人视觉。五年前百度已开始将机器人视觉全面转向深度学习技术,这些技术大量应用于百度内部和外部的各种业务。
图像识别是把图像生成文本标签,包括通用分类,百度内部主要的分类模型有文字识别、人脸识别,以及医疗图像、图像审核和一些细粒度分类等一些特定领域的应用,图像识别主要使用CNN的分类技术。
图像检索是用深度学习定义图像和图像之间的关系,图像检索主要应用于百度识图,包括图文检索、相同图片检索,相似图片检索以及商品图片检索等功能。
视频理解用于视频分类、视频标签等,也大量应用于监控场景下的目标跟踪、人体姿态跟踪等。在小视频带来的新型市场环境下,视频理解技术大量应用于百度内部的业务场景中。
机器人视觉主要用于一些工业场景,包括深度传感器、SLAM、嵌入式视觉等,使用大量的嵌入式的技术。
据我厂专家介绍,这些AI视觉技术已经开放,同时百度还会不断通过新的数据进行持续迭代,提供更加优质的服务。
2.1 来自视觉技术研发的挑战
百度内部有上百个模型同时使用,每天会不断产生新的数据,模型迭代需要解决的问题主要有三个方面:一是如何评价对比模型,然后才能选择最优的模型结构或优化策略;二是如何快速经济的训练(复现)这些模型;三是如何沉淀工程和算法经验,供大家共同使用。百度视觉技术研发的目标是使得机器学习流程化、标准化,构建模型持续快速迭代能力。
接下来介绍一下百度是如何基于PaddlePaddle解决上述问题的。
2.2 基于PaddlePaddle的模型研发
百度内部有两种模型的研发,一是基线模型,是一些基础的视觉问题,如图像分类、图像检测、图像跟踪等,百度将这些问题定义为一个基本的机器学习问题。另一种是业务模型,就是针对业务场景、业务需求来收集数据,训练模型。这两种场景下采用不同的方式,使模型的比较和模型的复现更加容易。
自2017年PaddlePaddle发布Fluid版本后,基线模型研发统一采用开源的方式实现,并且通过开源社区提交基线模型的训练代码和文档等研究成果,它的好处在于可以把机器学习的各个步骤进行标准化,包括将训练框架统一到PaddlePaddle的最新版本,数据读取、预处理、网络定义、优化参数等接口均实现标准化,便于模型对比。
2.3 PaddlePaddle的技术支持
PaddlePaddle提供标准的符合论文实现的operator实现;
通过PaddlePaddle实现统一的训练方式,保证单机单卡、单机多卡、多机多卡训练效率和收敛一致性;
基于开源社区开发新的视觉相关operator。
2.4 PaddlePaddle-Cloud 集群训练
PaddlePaddle-Cloud平台的作业管理
百度内部基于PaddlePaddle有一个较好的实现模型快速迭代的PaddlePaddle-Cloud平台,基于Kubernetes资源调度、队列管理、用户管理等于一身,可管理模型训练,可统一管理训练配置,提供Visual-DL的支持。在数据读取方面,PaddlePaddle-Cloud平台上实现了统一的数据读取、数据仓库的直读,保证可以从原始数据直接复现业务模型。此外,训练模型可以经过平台训练,直接存储在模型仓库中,跟存储打通。
示例:图像分类模型的论文结果复现——复现标准的分类模型
示例:图像分类模型的论文结果复现——搭建过程
2.5 视觉模块:已发布PaddlePaddle视觉模型
图像分类:image_classification
人脸检测:face_detection
OCR识别:ocr_recognition
目标检测:object_detection
模型转换:image_classification/caffe2fluid
2.6 视觉模块:开发中的视觉模型
图像特征学习
OCR end2end
定点化训练
2.7 未来会发布更多自研模型
人脸检测: 2018 WiderFace 第一名
大规模分类: 2018 Webvision 第一名
视频识别: 2018 ActivityNet 第一名
工程示例:OCR PaddlePaddle-v1如何迁移到PaddlePaddle-Fluid
下面重点介绍一下OCR的工程示例,OCR于三年前开始使用PaddlePaddle-V1版本进行识别模型训练,由于V1版本已不是主流的维护版本,因此要将OCR升级到最新的Fluid的版本,把训练统一迁移到内部的Paddle-Cloud集群,与此同时,百度一些优化的预测库也可以应用到最新的OCR预测中。
在此背景下,百度在开源社区成立了PaddlePaddle-vision联合项目组,并在迁移的过程中实现了模型研发、训练迁移和预测迁移三大目标。
在模型迁移的过程中,项目组将PaddlePaddle的一些特殊OP用Fluid的版本进行打平,验证了PaddlePaddle-Fluid版本的前向网络和PaddlePaddle-V1的一致性,同时也验证了新版本的训练效果。Fluid版本与旧版本PaddlePaddle对齐了模型训练指标,通过对比多种优化方法和学习率动态调整策略,使得整个网络的准确率大幅提升。
模型训练方面,实现Fluid框架训练OCR英文识别模型,与旧版本PaddlePaddle训练出的模型相比,精度相对提升1%。此外,还在PaddlePaddle-Cloud上实现了afs数据分发,实现了PaddlePaddle-Cloud进行单机单卡、单机多卡训练OCR识别模型。
3.1 OCR预测库接入和封装需要解决的问题
开发Fluid预测库框架,实现统一接口的封装;
实现Fluid预测库框架下的多batch预测;
携手sysanakin团队优化了GPU预测速度,加速47%;
将Fluid-OCR预测加入到QA自动回归测试流程,避免因PaddlePaddle升级而引入新的bug。
在预测库的接入和封装方面遇到了不少困难,其中包括封装的接口与原服务Tcmalloc兼容、预测加速不明显、新预测库对原检测系统耗时的影响大等问题。
3.2 具体的解决方法
在动态库里面提供glibc编译的内存释放接口;
与sysanakin团队合作,优化了预测速度;
Fluid默认打开了openblas的多线程。openblas多线程优先级较高,导致系统默认多线程的资源只能分配到单核CPU上,需要服务显式关闭openblas的多线程。
经过一番努力之后,实现了基于PaddlePaddle Fluid框架训练和预测的OCR英文识别模型上线。成功上线后,整体中英文系统QPS提升7%,每天影响约1500w含英文文本图像的OCR流量。
3.3 模型研发总结
基于公开数据集对齐公开算法,保证基线模型正确性,标准化数据集合和训练步骤,便于横向对比。
基于开源方式,百度实现贡献到PaddlePaddle社区,经过重复review,提升代码和文档质量,实现社区反馈,技术积累和问题解决。
基于PaddlePaddle统一的集群训练方式,实现一些高级训练特性的快速集成;PaddlePaddlemobile,anakin等团队针对不同硬件的优化;独立的训练QA测试,保证训练结果随版本迭代可复现。
本篇总结
本文作为《首次揭秘PaddlePaddle核心技术与实践》上篇,介绍了百度利用PaddlePaddle在语义和视觉技术上的实践,语义和视觉技术是AI应用的基础技术,基于百度的PaddlePaddle可以大幅降低语义和视觉技术在AI应用中门槛,促进AI应用的创新。
在本文的下篇, 小编将重点介绍PaddlePaddle深度学习框架的新特性,以及移动端深度学习实践、深度学习可视化等内容。下篇同样精彩,记得一直要关注百度云,小编随时可能奉上硬货噢。