前言

最近读了不少神经架构搜索(NAS)的论文,把NAS的整体脉络大致摸清了。

但是也发现了NAS目前还是用在CV领域居多,NLP领域和移动端优化寥寥无几。因此这里分享几篇NLP或者移动端上的NAS论文。

刚入门,很多不懂,理解有误或者有更多推荐的相关论文都可以评论区留言。

AMC

「[ECCV 18] AMC: AutoML for Model Compression and Acceleration on Mobile Devices」

动机

以往的压缩策略或者说剪枝率都是人工调的,而本文提出了一直基于强化学习的剪枝方法,每层剪枝率可以单独调。

方法

从最下面一层开始,编码整个网络的状态。然后用强化学习生成下一层的剪枝率,更新状态。最后的reward可以是压缩率、延时、FLOPs等等。actor用的是DDPG,action定义为(0, 1]之间的稀疏率。上面是剪枝和状态更新过程。

应用场景分为两种,一种是资源受限条件下寻找效果最高的模型,这种情况reward就直接定义为效果就行了,而资源的限制设定在了action空间里,就是上图伪代码做的事情。另一种是效果不变的情况下,压缩的尽量小,这种情况就要改reward,本文设定为了 ,这里改成FLOPs也是可以的,因为参数量前面加了,所以参数量的下降产生的奖励非常小,这就能一定程度上防止效果下降过多。延时的话本文认为和FLOPs基本正相关,因此直接优化FLOPs就行了(其实很多地方不是这样,比如考虑到并行等)。

实验

相同稀疏率情况下,效果更好。

评价

可以针对不同设备,自动搜出最佳的压缩策略,对于平衡效果和压缩率/加速比非常友好。

TextNAS

「[AAAI 20] TextNAS: A Neural Architecture Search Space Tailored for Text Representation」

动机

大多数NAS方法集中在搜索策略的设计上,但是本文重点在定义了一个很好的搜索空间,包含了文本处理里面常用的一些操作符。

方法

本文发现NLP领域cell搜索不如直接搜整个网络效果好。搜索空间定义为了卷积层、池化层、双向循环结构(GRU)、注意力层。搜索算法就是用的ENAS,并且每个layer只能选择前面k=5个layer作为输入,这样可以减小搜索空间,但其实这样也丢失了长距离的残差连接。

实验

这篇是做效果提升的,因此可以看到在很多数据集上效果都超过了之前的模型。

评价

感觉上和ENAS差别不是很大,就是搜索空间针对NLP任务做了一些扩展。此外搜索目标只是效果,并没有考虑到延时等条件。

ET

「[ICML 19] The Evolved Transformer」

动机

这篇是想搜出一个效果更好的Transformer结构。

方法

搜索空间也是cell堆叠,每个cell里面encoder有6个block,decoder有8个,这样是为了初始化的时候能重现Transformer结构。

演化算法初始个体就用的是Transformer结构,这样收敛的更快一点。为了加快搜索速度,采用了Progressive Dynamic Hurdles的方法,过程是这样的:初始种群全部训练到一定步数后early stop,算出平均适应度。接下来后代训练到相同步数后,适应度高于平均值的继续训练一定步数后early stop,其余的直接early stop。然后更新这个early stop的步数和对应的适应度平均值,继续演化出后代。

实验

可以看出,在多个不同模型大小设置下,ET效果都要高于Transformer,而且越小效果越好。

评价

大力出奇迹,效果也不错,但是缺点就是搜索时间太长了。

OFA

「[ICLR 20] Once for All: Train One Network and Specialize it for Efficient Deployment」

动机

NAS能减小目标设备上的延时,但是对于每个设备都得retrain,甚至得重新搜索结构。所以本文只需要训练一次,对于每个设备只需要几分钟就能搜出最优结构,并且不需要retrain。

方法

首先train一个超网络,然后采用progressive shrinking进行子网络的采样和finetune,progressive shrinking会同时训练各个大小的网络,这样不同子网络之间性能都能达到比较好。

最后训练一个(模型结构,准确率)的预测器,再维护一个(模型结构,目标设备,延时/FLOPs)的loopup table,用演化算法直接搜一个目标设备上最优的模型。因为是帕累托最优,所以寻找的是小于限定延时/FLOPs情况下最佳效果的模型。

实验

相同延时的情况下效果会好很多。搜出结构之后再finetune会更好。搜出结构后从头train效果很差,说明pretrain的weight是有用的。

评价

移动端部署很好用,只需要train一次,速度非常快,progressive shrinking解决了多个子网络互相影响的问题。

HAT

「[ACL 20] HAT: Hardware Aware Transformers for Efficient Natural Language Processing」

动机

Transfomer部署到不同终端,NAS费时费钱。

方法

其实就是把OFA照搬到Transformer上,这里连progressive shrinking都没用,直接uniform采样,貌似也没有用不同size的模型联合训练。

实验

评价

我感觉相比于OFA创新很小,就是设计了一下Transformer的搜索空间,其他基本差不多。

后记

目前看来,AMC、OFA和HAT是之后可以尝试的工作。

如果想不改变结构,单纯通过剪枝压缩的话,可以尝试用AMC在相同压缩率或延时的情况下达到更好的效果。

而如果想要更深一步优化延时和压缩率,可以尝试OFA的方法,这种方法只需要train一次超网络,训练过程中采用技巧防止子网络性能互相影响即可。最后针对不同设备直接搜出最优结构就行了,不需要在评估过程中重新训练。因此速度非常快,也很方便。

OFA和HAT的代码也都开源了,可以按照教程试一试,我试了在ImageNet上搜出一个比较好的模型还是非常快的。不考虑pretrain的时间,对于每个设备只需要几十秒就搜出来了。

「OFA:」
https://github.com/mit-han-lab/once-for-all

「HAT:」
https://github.com/mit-han-lab/hardware-aware-transformers

此外AMC也有两个很nice的工具包都集成进去了:
「Intel:」
https://github.com/IntelLabs/distiller/tree/master/examples/auto_compression/amc
「MicroSoft:」
https://github.com/microsoft/nni/tree/master/examples/model_compress/amc

作者简介:godweiyang知乎同名华东师范大学计算机本硕,字节跳动算法工程师,研究方向句法分析、机器翻译、模型压缩

评论区留下你想说的话,或者加我微信进一步交流。

如何自动搜出更好、更小、更快的NLP模型?相关推荐

  1. Google 开源的依赖注入库,比 Spring 更小更快!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:GinoBeFunny zhuanlan.zhihu.com ...

  2. 苹果公司提出Mobile-ViT | 更小更轻精度更高,MobileNets或成为历史

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨ChaucerG 来源丨集智书童 MobileviT是一个用于移动设备的轻量级通用可视化Tran ...

  3. 小程序 数据库 时间_使用云开发数据库构建更生动的小程序

    导语 长连接服务被广泛应用在消息提醒.即时通讯.推送.直播弹幕.游戏等场景.本篇文章将介绍云开发数据库的长连接服务--实时数据推送,使用它来构建更生动的小程序.什么是实时数据推送? 通过云开发数据库的 ...

  4. Poor Man's BERT: 更小更快的Transformer模型

    文 | sliderSun 源 | 知乎 NLP模型的大小不断增加,随之而来的是可用性降低,TinyBERT,MobileBERT,和DistilBERT都提出了一个独特的知识蒸馏框架,其共同目标是在 ...

  5. 使用云开发数据库构建更生动的小程序

    长连接服务被广泛应用在消息提醒.即时通讯.推送.直播弹幕.游戏等场景.本篇文章将介绍云开发数据库的长连接服务 - 实时数据推送,使用它来构建更生动的小程序. 什么是实时数据推送 通过云开发数据库的实时 ...

  6. 微信公众平台接口调试工具json格式不对怎么搞_腾讯云和微信推出更快速的小程序开发平台,微信读书小程序作示范...

    腾讯云副总裁刘颖将腾讯云定义为微信的一个助手,腾讯云面向微信生态开发者输出的技术解决方案包括"小程序·云开发".小程序音视频直播.小游戏联机对战引擎等,腾讯云与企业微信的合作也会在 ...

  7. 微信公众平台接口调试工具json格式不对怎么搞_腾讯云和微信推出更快速的小程序开发平台,微信读书小程序作了示范...

    腾讯云副总裁刘颖将腾讯云定义为微信的一个助手,腾讯云面向微信生态开发者输出的技术解决方案包括"小程序·云开发".小程序音视频直播.小游戏联机对战引擎等,腾讯云与企业微信的合作也会在 ...

  8. hp510台式计算机,体积更小更时尚 惠普Pavilion 510台式机简评

    体积更小更时尚 惠普Pavilion 510台式机简评 2016年07月13日 01:00作者:王普编辑:王普文章出处:泡泡网原创 分享 随着DIY市场的萎靡,PC行业早已没有当年那番景气,但是大家对 ...

  9. android 打开移动开关,教你一个让安卓手机运行更流畅的小技巧:打开这个开关即可...

    原标题:教你一个让安卓手机运行更流畅的小技巧:打开这个开关即可 安卓用户对于"系统优化"这个词一定不会陌生,因为Android系统越用越卡的毛病难以解决,必须进行优化才能保持流畅. ...

  10. 联想小新15用什么C语言程序,长处更长 优点更优 联想小新Air 15 2019首测

    原标题:长处更长 优点更优 联想小新Air 15 2019首测 15.6英寸笔记本有以下几点优势:一是屏幕更大,视觉体验更好:二是键盘区可以容纳右侧独立数字键盘,对于经常需要用到数字按键的朋友来说非常 ...

最新文章

  1. 镜头评价指标及测试方法(二)—畸变与分辨率
  2. Spring+ActiveMQ配置
  3. 深度学习利器:TensorFlow在智能终端中的应用——智能边缘计算,云端生成模型给移动端下载,然后用该模型进行预测...
  4. 静态html文件js读取url参数
  5. python中的urllib库_七、urllib库(一)
  6. 数据分析python够用吗_学数据分析不等于学python
  7. 第九十三节,html5+css3移动手机端流体布局,基础CSS,头部设计,轮播设计,底部设计...
  8. oracle 12c sql图形化,Oracle 12c PL/SQL程序设计终极指南
  9. Linux工作笔记-查看tcp与udp端口并对比Windows简单分析
  10. python中除法 / 和// 区别 以及np.divide,np.true_divide,np.floor_divide方法区别
  11. python-循环控制-break
  12. 11054 - Wine trading in Gergovia
  13. 相机下载_佳能相机如何连接手机传输相片,视频?
  14. 开源WebGIS实施方案
  15. EasyRecovery---U盘数据恢复技巧
  16. COGS 265 线段覆盖
  17. 微信小程序入门6-微信公众号授权登录(适用于H5小程序)
  18. 局域网、城域网IEEE802(LAN/MAN)标准——【局域网、城域网网络知识基础篇】
  19. 【机器学习】朴素贝叶斯算法及其实现
  20. SaaS软件公司ServiceNow市值突破1000亿美元

热门文章

  1. 简易效率的抽奖算法(转)
  2. 重构之以委托取代继承
  3. opengl 关于glGenBuffers函数没有定义
  4. [转]android MapView 定位与Overlay onTap事件处理
  5. eclipse,aptana,zendstudio,flex全屏插件
  6. 有行统计项和列统计项的行列转换,以及EXCEL导入SQL的简单应用
  7. Flash Memory(一)
  8. 2-ESP8266 SDK开发基础入门篇--点亮一个灯
  9. 开启es6——搭建开发环境
  10. Linux 基础命令3 shell