本文用户记录黄埔学院学习的心得,并补充一些内容。

课程2:十行代码高效完成深度学习POC,主讲人为百度深度学习技术平台部:陈泽裕老师。

因为我是CV方向的,所以内容会往CV方向调整一下,有所筛检。

课程主要有以下三个方面的内容:

  1. 深度学习POC的基本流程
  2. 实用预训练模型应用工具快速验证
  • 通用模型一键检测
  • 十行代码完成工业级文本分类
  1. 自动化调参AutoDL Finetuner

一、深度学习POC的基本流程

1.1 深度学习发展历程

2006年,这一年多伦多大学的Geoffrey Hinton教授发表的论文,提出了两个重要观点:(1)多层的神经网络模型有很强的特征学习能力,深度学习模型能够学习到的数据更本质的特征;(2)对于深度神经网络获得全局最优解的问题,可以采用逐层训练方法解决。自此,深度学习迅速发展。2007年,深度学习框架Theano发布,用于优化多维数组的计算。2011年,深度学习首先在语音识别领域取得突破。2012年,Krizhevsky等人首次将卷积神经网络应用至ImageNet图像识别大赛,大获全胜。随后,深度学习在自然语言处理、图像识别等多个领域遍地开发。2016年,基于深度强化学习的AlphaGo战胜李世石,大放异彩,以深度学习为代表的人工智能技术在广大群众中热议。2019年,三位深度学习之父:Geoffrey Hinton, Yann LeCun,和Yoshua Bengio共同获得了图灵奖。

1.2 深度学习的成功与局限

深度学习界的圣经,花书《Deep Learning》也提到,深度学习的成功有以下两个方面的原因:

(1)与日俱增的数据量:“要从一个深度学习算法获得良好的性能需要一些技巧。幸运的是,随着训练数据的增加,所需的技巧正在减少”。随着数据量的激增,以大数据驱动的深度学习算法在某些复杂任务上达到甚至超越了人类的水平。

(2)大算力背景下与日俱增的模型规模:越发庞大的计算资源可以允许我们运行更大的模型,Hinton教授以及很多联结主义的学者提到,模型的规模更大,特征学习能力更强(当然也不是模型越大越好)。

也正因为如此,深度学习在小样本、低算力的场景下效果受限,同时大模型的设计门槛也是比较高的。

1.3 深度学习技术的探索方向

多任务学习:比如基于预训练模型的迁移学习。实际上在很多场合下(特别是工业、医疗等场景),数据——尤其是负样本的数量是非常少的,基于预训练模型的迁移学习技术能够起到比较关键的作用。我在看科技部发的“新一代人工智能”相关文件的时候,很多项目都提到了研究技能迁移技术,可见其重要性。

自监督学习:自监督学习是无监督学习的一种,也是为了解决小样本问题。深度学习需要的训练样本是需要人工贴标的,但是标注成本非常大。自监督学习的“标注”通常来自于数据本身,比如扣掉视频中的某些帧,覆盖掉图像中的某一部分,让模型依赖其周围的信息去预测缺失部分,从而学习到数据的特征。

1.4 深度学习POC的基本流程

POC,即Proof of Concept,POC的作用是在项目初始阶段进行方案的测试性验证。

深度学习POC的用于明确该项目能否采用深度学习技术完成,基本流程如下图所示:

(1)明确需求:首先需要明确任务的需求是什么,然后确定客户的技术指标,是否能与深度学习模型的效果建立关联。

(2)数据优化:采取深度学习技术做一个项目,很大比重的经历要放在数据采集、数据标注和清洗上。数据集的好坏直接关系到任务的上限。

(3)模型选型:确定客户任务的场景是否能用现成的预训练模型解决,比如人类检测、通用分类等等,找到一个合适的预训练模型可以说能够解决一半问题;结合部署环境和性能要求选择模型,比如节拍需求、精度要求、成本问题等等;确定是否需要结合传统的视觉技术,如图像分割,边缘检测等等;是否需要多个模型组合到一起,比如分类+分割,等等。

(4)调参训练:调参训练涉及到数据增强、网络调参和训练参数调参等等。现在有一些自动化的超参数优化策略。

(5)模型部署:部署时需要对边缘计算设备算力、成本等多方面考虑,通常需要进行模型压缩(详见第一课的内容)。要考虑是服务端部署,还是移动端、嵌入式设备、ASIC芯片部署、服务化部署等等。

1.5 视觉领域基础模型

视觉领域有很多典型的模型,根据任务的不同可以分为图像分类、目标检测、分割任务。分类任务比较好理解,就是解释“Yes” or “No”的问题。目标检测任务需要解决“what is where”问题,不光要判断是什么,还有定位出它的位置。三种分割任务要解决的是每个像素点所属的类型,根据需求的不同分为语义分割、实例分割以及全景分割。

一般需要精细化检测的时候,需要用到语义分割或者实例分割。只需要知道“what is where”时,用目标检测就可以。

1.4 视觉预训练模型的选型

现在不管做CV还是NLP,都逐步进入了预训练时代。

下图表示的是各种的模型 Top-1准确率VS计算复杂度,圆圈大小表示占用内存开销。

在分类的任务上,一般比较关注下图靠左的这些模型:精度相对比较高、模型也比较小,算力开销也不大,能够在算力有限的部署端取得不错的性能。在做检测任务的时候,需要关注单阶段还是两阶段。不过在实际的任务中,关注比较多的是多尺度。因为有很多小目标的检测,多尺度性能会高一些。分割任务的主流是Encoder-Decoder结构,需要关注的就是低层的backbone结构。

整体来说需要关注三个方面:

(1)综合考虑精度、预测性能、还有内存开销

(2)在未来的有根据硬件特性来设计模型的趋势

(3)AutoML技术

二、实用预训练模型应用工具快速验证

2.1 通用模型一键检测

PaddleHub是飞桨的预训练模型管理和迁移学习工具,其中内置了面向多种场景和多项任务的预训练模型。采取高质量的预训练模型+Fine-tune的方式,可以快速完成迁移学习到部署过程。

链接为:https://github.com/PaddlePaddle/PaddleHub/

一个高质量的预训练模型需要算法+算力+数据+专家知识四个因素结合起来才能完成。PaddleHub的架构如下图所示,预训练模型很丰富,覆盖了图像分类、检测等多种任务。

PaddleHub有一个特点,就是把模型都作为Python的软件包管理起来,这就非常便捷易用了。

如下图所示,PaddleHub里有很多预训练模型。以上一节课提到的人脸识别来说,就可以调用PaddleHub里的pyramidbox_face_detection:

仅仅需要几行代码就能实现人脸识别:

import paddlehub as hub
module = hub.Module(name="pyramidbox_face_detection")
input_dict = {"image": ["PATH/TO/IMAGE"]}
results = module.face_detection(data=input_dict)

类似的例子还有很多,涵盖图像、文本、视频等多个领域的多项内容,覆盖面非常全,就不一一列举了。

2.1 十行代码完成工业级文本分类

课程中介绍如何使用PaddleHub和Fine-tune API,通过极少的代码量完成一个工业级的文本分类。

采用预训练模型加微调的方式,一般需要少量的用户数据和超大规模预训练模型,这里使用的大规模预训练模型为ERNIE。

代码及备注如下:

import paddlehub as hub# 载入ChnSentiCorp中文情感分析数据集
dataset = hub.dataset.ChnSentiCorp()<br># 下载并加载ERNIE模型,可在PaddleHub官网搜索
ernie= hub.Module(name=“ernie”)<br># trainable=True表示预训练模型的参数可以被训练
inputs, outputs, program = ernie.context(trainable=True)<br># 数据预处理,设置最大序列长度
reader = hub.reader.ClassifyReader(<br>  dataset=dataset, max_seq_len=128,vocab_path=ernie.get_vocab_path())<br># 配置Tensor
feed_list= [inputs["input_ids"].name, inputs["position_ids"].name,inputs["segment_ids"].name, inputs["input_mask"].name]<br># 配置优化策略,优化器Adam,学习率衰减
strategy = hub.AdamWeightDecayStrategy(learning_rate=5e-5)<br># 配置训练的参数
config= hub.RunConfig(num_epoch=3, strategy=strategy)
# 创建迁移学习任务
task = hub.TextClassifierTask(data_reader=reader,feature=outputs["pooled_output"],feed_list=feed_list,num_classes=dataset.num_labels,config=config
)
<br># 启动Fine-tuning,自动评估、保存、可视化
task.finetune_and_eval()

如果对目标检测、人脸检测等任务的迁移学习比较感兴趣的话,百度也提供了免费的教程可以学习:

https://aistudio.baidu.com/aistudio/course/introduce/1070

三、自动化调参AutoML Finetuner

3.1 模型调优策略

斯坦福大学的吴恩达教授在他的深度学习课程上,用非常形象的方式将模型的调优策略分成两类:熊猫策略和鱼子酱策略。(因为一个生的少但精心养护,一个虽然不管不问但奈何比较能生。。。)

所谓的熊猫策略就依赖对模型非常熟悉的专家,对一个比较重要的模型精心调优,让它每天都能优化一点点。鱼子酱策略就是多组模型并行训练,随便设置若干组超参数,让模型自己去跑,然后再去甄别哪一组超参数下的模型效果最好。

模型调优是一个黑盒优化问题,在调优的过程中只看到模型的输入和输出,而看不到调优过程中的梯度信息。所以优化的关键就在于,怎么能尽可能少的次数找到一组超参数,能让模型的效果最优,就涉及到超参搜索的问题。

3.2 超参数搜索

超参搜索的策略有两种:网格搜索(Grid Search)和随机搜索(Random Search)。

正如表面意思,网格搜索指的是以某种组合规律来均匀的分布超参数,随机搜索就是直接在参数的设置空间里随机的撒入参数组,看看哪一组比较好。

在工业中,一般随机搜索会取得更好的效果。这是因为深度学习模型的超参数中有些是非常重要的(比如学习率),有些是没那么重要的。所以没必要给重要的超参数和不重要的超参数相同的搜索机会。比如上图左侧:重要的和不重要的都给了三次搜索机会。随机搜索就可以让重要超参数和搜索机会更密集一些,得到的效果也就更好。

除了这两种自动化调参算法之外,还有遗传算法、粒子群优化、贝叶斯优化等等。不过前两种优化算法所需的初始样本点较多,优化效率也一般。业界用的相对多一些的是贝叶斯优化。

不同黑盒优化策略的对比如下表所示:

熊猫策略网格搜索随机搜索贝叶斯优化优点可以取得较好的超参设置实现简单,可并行搜索搜索空间友好,可并行搜索搜索效率高,鲁棒性强缺点耗时耗力,成本高搜索空间高维灾难超参搜索相互独立需要顺序优化,并行度低

2017年,Population Based Training(PBT)被提出,下图中最上面的长条代表网络性能,中间的圆圈代表超参数,下面的长条代码模型参数。

图中(a)策略采取的是一种“串行”的优化策略:先设置一种超参数,经过训练后看一看模型的效果,然后来评估哪些超参要调整一下。一般人工调参就采取这种策略,成本非常高,效率比较低。

图中(b)策略采取的是并行的优化策略:在大算力的支持下,同时设置若干组超参去训练,然后看看哪一组效果最好。这种方式虽然效率会高一些,但是组与组之间的结果是没有相互交流的,都在各干各的。

图中(c)策略就是PBT:在并行优化的过程中,就评估哪一组超参下的模型效果比较好,接着在这一组效果比较好的超参的基础上,添加一些随机扰动,然后把它经过轻微改动的超参分享给其他组,加强组与组之间的交流。

3.4 AutoDL Finetuner自动化超参搜索

PaddleHub中的超参搜索工具AutoDL Finetune,提供了两种优化算法:HAZero和PSHE2。HAZero的核心思想是通过对正态分布中协方差矩阵的调整来处理变量之间的依赖关系和scaling。PSHE2采用哈密尔顿动力系统搜索参数空间中“势能”最低的点,即超参数的最优组合。

为了评估搜索的超参的效果,AutoDL Finetuner提供了两种超参评估策略:

Full-Trail::给定一组超参,利用这组超参从头开始Fine-tune一个新模型,之后在验证集评估这个模型;

Population-Based:给定一组超参,若这组超参是第一轮尝试的超参组合,则从头开始Fine-tune一个新模型;否则基于前几轮已保存的较好模型,在当前的超参数组合下继续Fine-tune并评估。

四、总结

总结一下PaddleHub的内容:

(1)丰富、优秀的预训练模型库,涵盖了自然语言处理和计算机视觉两个方面;

(2)模型即软件,便捷、易用的迁移学习,仅需几行代码就能实现迁移学习;

(3)提供自动化的超参数搜索算法和评估算法,优化模型,降低训练门槛。

http://weixin.qq.com/r/kChDW_bEAbt_raI4932C (二维码自动识别)

百度飞桨:十行代码高效完成深度学习POC相关推荐

  1. 从我开发过的Tensorflow、飞桨、无量框架看深度学习这几年

    文 | Peter潘欣@知乎 和深度学习框架打交道已有多年时间.从Google的TensorFlow, 到百度的PaddlePaddle,再到现在腾讯的无量.很庆幸在AI技术爆发的这些年横跨中美几家公 ...

  2. 飞桨模型保存_重磅发布开源框架、生物计算平台螺旋桨,百度飞桨交了年终成绩单...

    机器之心报道 作者:蛋酱.张倩 在 12 月 20 日举行的「WAVE SUMMIT+ 2020 深度学习开发者峰会」上,飞桨平台交出了一份非常亮眼的年终成绩单. 2020 年,是不平凡的一年:这一年 ...

  3. 共创软硬件协同生态:Graphcore IPU与百度飞桨的“联合提交”亮相MLPerf

    本文已在飞桨公众号发布,查看请戳链接: 共创软硬件协同生态:Graphcore IPU与百度飞桨的"联合提交"亮相MLPerf AI领域最负盛名的产业级基准测试榜单MLPerf T ...

  4. 2021世界人工智能大会开幕,百度飞桨荣获“SAIL之星”奖项

    点击左上方蓝字关注我们 7月8日,2021世界人工智能大会(WAIC)在上海隆重召开.同期,世界人工智能大会的最高奖项--SAIL奖(Super AI Leader,卓越人工智能引领者奖)揭开帷幕,百 ...

  5. 百度飞桨、郑州大学联合培养AI工程人才,破解无纺布瑕疵检测难题

    1平方毫米有多大?圆珠笔尖大小.这么小的一个点要是放在高速运转每分钟几十米的布匹上,要检测出来的难度可想而知.而针对以无纺布为原材料的口罩,无纺布的质量要求容不得一点瑕疵,因此瑕疵检测成为行业里的一个 ...

  6. 英特尔携手百度飞桨,共创软硬一体人工智能生态

    今日,英特尔出席在线上举办的Wave Summit 2022深度学习开发者峰会,与众多人工智能专家.开发者与架构师,及知名学者等行业从业者一道分享英特尔与百度在人工智能各领域应用的创新突破,并深度展现 ...

  7. 相约AIIA!百度飞桨深度学习公开课预约中

    11月1日,AIIA2019人工智能开发者大会即将以"'源'开则行,'机'智则灵"为题于杭州拉开帷幕.据悉,此次大会将继续邀请国内外人工智能产业知名人士.国家政府主管部门.行业内顶 ...

  8. 国家战略下的技术自强,百度飞桨的时代之歌

    文 | 曾响铃 来源 | 科技向令说(xiangling0815) 科技自强从口号变成国家战略只在一夜之间. 刚刚结束的十九届五中全会上,首次提出"把科技自立自强作为国家发展的战略支撑&qu ...

  9. 基于百度飞桨PaddlePaddle模型训练的手势识别模型控制音乐播放器

    基于百度飞桨paddle模型训练的手势识别模型控制音乐播放器 前言 一.什么是百度飞桨PaddlePaddle? 一.1 飞桨AI Studio 二.实际使用 1.配置虚拟环境 2.安装 三.实战 四 ...

最新文章

  1. Docker源码分析(二):Docker Client创建与命令执行
  2. 谋定国际农民丰收节贸易会·万祥军:以色列农业逆袭变局
  3. 大型科技公司架构:中台模式的爱与恨
  4. java流与文件——正则表达式
  5. linux启动服务需要ubb文件吗,如何开启tuxedo的snmp监控
  6. 《ArcGIS Runtime SDK for Android开发笔记》
  7. Oracle中修改sysman和dbsnmp密码正确流程
  8. Python工作笔记001---python3的print加括号_Python3中不存在raw_input( )了
  9. CVPR2022车道线检测Efficient Lane Detection via Curve Modeling
  10. 第四篇:决策树分类算法原理分析与代码实现
  11. 51Nod-1010 只包含因子2 3 5的数【打表+排序+二分搜索】
  12. C#.NET 通用权限管理系统中的数据集权限设置实现参考界面(商业化成熟权限管理系统,提供全部源码)...
  13. 嵌入式系统——面向对象的设计原则
  14. 设置linux系统的线程数量,Linux_查看系统cpu个数、核心数、线程数
  15. 动作Action详解
  16. powershell get-date计算指定日期及格式化
  17. Windows---diskpart命令的使用
  18. 小时候的蓝精灵,大家还记得木有哇?
  19. 【开发工具】【windows】Visual Studio Code(VS Code)常用插件
  20. c语言机考答案,c语言题库答案机考

热门文章

  1. WIN7\win10下使用批处理配置JAVA环境变量
  2. heartbleed_Heartbleed:这是什么,您应该怎么做?
  3. “人工智能与人类社会”栏目约稿函暨论文汇总2022-2017
  4. 在微型计算机中应用最普遍的数字编码是,计算机基础知识理论复习题及答案
  5. 启动tomcat提示端口号被占用 Serveral ports(8005,8080,8009) required by Tomcat v8.0 Server at localhost are alre
  6. CAN2.0和J1939协议的关系
  7. 服务窗 菜单 php,支付宝服务窗API接口开发php版本
  8. 预测神经胶质瘤基因型的多模态学习
  9. C语言实现简易的信贷系统
  10. JAVA作业——KFC模拟收银系统