写点什么

伯克利提出数据增强新方法,计算速度提升 1000 倍

  • 2019-06-22
  • 本文字数:2408 字

    阅读完需:约 8 分钟

伯克利提出数据增强新方法,计算速度提升1000倍

来自伯克利的人工智能研究团队提出了一种基于群体的数据增强算法(PBA),这是一种能快速有效地学习最新方法来增强神经网络训练数据的算法。PBA 的输出结果足以与之前 CIFAR 和 SVHN 数据集上的最佳成绩匹敌,但前者的计算量只有千分之一,从而使研究者和从业者使用单颗工作站 GPU 就能有效地学习新的增强策略。用户可以在众多场景中使用 PBA 来提升图像识别任务中的深度学习性能。


作者在近期发布的一篇论文中探讨了 PBA 的表现(https://arxiv.org/abs/1905.05393.pdf),并介绍了在 Tune 框架(https://ray.readthedocs.io/en/latest/tune.html)上对新数据集使用 PBA 算法的简单步骤(https://github.com/arcelien/pba)。

为什么要关注数据增强?

近年来深度学习模型的发展主要归功于这些年收集到的庞大而多样的数据。数据增强是一种策略,使从业者无需收集新数据就能显著提升已有数据的多样性,从而更好地服务训练模型。诸如裁剪、填充和水平翻转等数据增强技术通常用于训练大型神经网络。然而,神经网络训练中使用的大多数方法只用到了基本的增强技巧。虽然神经网络体系结构的研究愈加深入,但业界开发更强大的数据增强技术,探索能够捕获数据不变属性的数据增强策略的步伐却非常缓慢。



一张数字”3“的原始图像与应用基础数据增强算法之后的结果。


最近,谷歌通过 AutoAugment(https://arxiv.org/abs/1805.09501)这种新的自动数据增强技术提升了 CIFAR-10 等数据集的精确度。之前的数据增强只使用水平翻转或填充和裁剪等一组固定的转换,而 AutoAugment 的成果表明这种老式算法有很大的改进潜力。AutoAugment 引入了 16 种几何和基于颜色的转换,并制定了一种新的增强策略,可以对每批数据应用最多两个有一定幅度级别的转换。训练模型会直接用数据强化学习这些性能更高的增强策略。

有什么成果?

AutoAugment 是一种成本高昂的算法,它需要训练 15,000 个模型才能收敛,才能为基于强化学习的策略生成足够的样本。样本之间不共享计算过程,学习 ImageNet 数据集的增强策略需要 15,000 个 NVIDIA Tesla P100 GPU 小时,学习 CIFAR-10 需要 5,000 GPU 小时。举例来说,如果使用谷歌云的 P100 GPU 按需服务,学习 CIFAR 策略将花费大约 7,500 美元,而 ImageNet 策略需要 37,500 美元!因此在培训新数据集时,更常见的用例是使用公开发布的,展示出比较好效果的策略。



对图像应用基于群体的增强的效果,按照训练度百分比分类

基于群体的数据增强

伯克利团队提出的数据增强策略名为基于群体的增强(PBA),其在各种神经网络模型上实现的测试准确度与谷歌方案接近,但需要的计算量少了三个数量级。团队在 CIFAR-10 数据集上训练几个小型模型副本来学习增强策略,使用 NVIDIA Titan XP GPU 时只需要 5 个小时就能学成一个策略。之后迁移到大型模型体系和 CIFAR-100 数据集上从头开始训练时,该策略表现出了强大的性能。


与训练大型 CIFAR-10 网络需要花费的几天收敛时间相比,预先运行 PBA 的成本很低,却能显著改善结果。例如,在 CIFAR-10 上训练 PyramidNet 模型时,使用 NVIDIA V100 GPU 需要 7 天以上,而学习 PBA 策略只会增加 2%的预计算训练时间开销。对于 SVHN 来说这种开销甚至更低,少于 1%。



在 WideResNet、Shake-Shake 和 PyramidNet + ShakeDrop 模型中,PBA、AutoAugment 和仅使用水平翻转,填充和裁剪的基础策略之间的 CIFAR-10 测试错误对比。PBA 明显优于基础策略,与 AutoAugment 相当。


PBA 利用基于群体的训练算法(https://deepmind.com/blog/population-based-training-neural-networks/)来生成增强策略调度,该调度可以基于当前的训练 epoch 做调整。这与固定增强策略正好相反,后者对不同的 epoch 都使用相同的转换。


这样一来,单机工作站用户就可以很容易试验不同的搜索算法和增强操作。一个有意思的用例是引入新的增强操作,这些操作可能针对特定的数据集或图像模态,并能够快速生成定制的,高性能的增强调度。伯克利通过变量控制研究方法发现,学习的超参数和调度顺序都显著影响结果质量。

增强调度是怎样学习的?

伯克利团队使用 16 个小型 WideResNet 模型作为群体进行基于群体的训练。群体中的每个 worker 都将学习自己的候选超参数调度。之后团队用性能最佳的调度迁移到大型模型上开始从头训练,从中得出测试误差指标。



基于群体的训练框架。通过训练一群神经网络来找出超参数调度。它结合了随机搜索(发现)和复制高性能的 worker 模型权重(利用)两种手段。


群体模型在目标数据集上训练时,一开始所有的增强超参数都设置为 0(未应用增强)。“利用和发现”过程会频繁将高绩效 worker 的模型权重复制到低绩效 worker 来“利用”前者,然后扰乱 worker 的超参数来“探索”。这个过程能够在 worker 之间共享大量计算过程,并针对不同的训练区域使用不同的增强超参数。因此,PBA 用不着训练几千个模型才收敛,用很少的计算量就能获得很高的性能。

示例和代码

利用 Tune 内置的 PBT 实现就可以直接使用 PBA 了。


import raydef explore(config):    """Custom PBA function to perturb augmentation hyperparameters."""    ...
ray.init()pbt = ray.tune.schedulers.PopulationBasedTraining( time_attr="training_iteration", reward_attr="val_acc", perturbation_interval=3, custom_explore_fn=explore)train_spec = {...} # Things like file paths, model func, compute.ray.tune.run_experiments({"PBA": train_spec}, scheduler=pbt)
复制代码


这里用自定义探索函数调用 Tune 的 PBT 实现。这将创建 16 个 WideResNet 模型的副本并同时训练它们。每个副本使用的策略调度都会保存到磁盘,并可在训练结束后迁移到新模型训练中。


可以参考这里的说明(https://github.com/arcelien/pba)运行PBA。在Titan XP 上,只需要一个小时即可学到 SVHN 数据集上的高性能增强策略调度。在自定义数据集上也可以轻松使用 PBA:只需定义一个新的 dataloader 即可。



2019-06-22 08:006055

评论 1 条评论

发布
用户头像
很好的想法。
2019-06-22 20:45
回复
没有更多了
发现更多内容

JavaScript进阶(三)模块化

Augus

JavaScript 9月日更

产品分析:谁是利益相关者?

石云升

产品经理 9月日更

在线JSON转jsdoc工具

入门小站

工具

Node 编码规范 -努力做得更好

Geek_25b8d1

node.js Node 规范

权威报告显示:BATH坐稳中国四朵云

科技热闻

惊掉下巴!这本Alibaba百万年薪必备—高性能架构路线震撼出世!

Java 编程 程序员 架构 计算机

什么是数据粒度

奔向架构师

数据仓库 9月日更

博睿数据 短信服务监测解决方案专场直播

博睿数据

【优化技术专题】「温故而知新」基于Quartz系列的任务调度框架的动态化任务实现分析

洛神灬殇

Java quartz 任务调度 9月日更

linux之fping命令

入门小站

Linux

汽车行业的进化秘诀,竟在这座智慧出行乐园中……

脑极体

【直播预告】阿里云服务网格 ASM 产品易用性改善实践与思考

阿里巴巴云原生

阿里云 云原生

探索:北鲲云超算平台能否应用于中医药行业

北鲲云

Android 上的 Kotlin 协程

Changing Lin

9月日更

阿里巴巴最新最全800道Java后端面试大全(值得收藏)

Java 程序员 编程语言 java面试 java架构

边缘使用 K8s 门槛太高?OpenYurt 这个功能帮你快速搭建集群!

阿里巴巴云原生

阿里云 云原生 边缘计算

数据结构与算法:缓存置换算法

正向成长

LRU 置换算法

即时通讯系统架构设计-如何设计一款WhatsApp

OpenIM

译文:为什么超链接是蓝色的?(一)

姬翔

JVM 内存模型学习笔记(二)

风翱

JVM 9月日更

别把云原生想复杂了

dinstone

微服务 云原生 云平台

Java“锁”事

中原银行

Java 中原银行

中秋节如何拍月亮

卢卡多多

9月日更

【Vuex 源码学习】第六篇 - Vuex 的模块收集

Brave

源码 vuex 9月日更

小小感悟

Nydia

CSS交互动画指南之transition

devpoint

CSS css3 transform 引航计划 9月日更

autojs自动化框架简介

IT蜗壳-Tango

9月日更

【LeetCode】回文链表Java题解

Albert

算法 LeetCode 9月日更

网络攻防学习笔记 Day140

穿过生命散发芬芳

9月日更 网站安全基础

Prometheus 2.22.0 新特性

耳东@Erdong

Prometheus 9月日更

耗时大半个月收整全套「Java架构进阶pdf」没白费,Github上点赞破十万!

Java 程序员 面试 计算机 金九银十

伯克利提出数据增强新方法,计算速度提升1000倍_AI&大模型_Daniel Ho_InfoQ精选文章