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

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
NLP自然语言处理_基础版,每接口每天50万次
NLP 自学习平台,3个模型定制额度 1个月
简介: 如何自动搜出更好、更小、更快的NLP模型?

前言

最近读了不少神经架构搜索(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的时间,对于每个设备只需要几十秒就搜出来了。

相关文章
|
18天前
|
机器学习/深度学习 自然语言处理 PyTorch
从零开始构建nlp情感分析模型!
本教程介绍了如何使用PyTorch和Hugging Face的Transformers库构建一个情感分析模型。主要内容包括导入所需库、读取训练数据集、加载预训练的BERT模型和分词器、定义情感数据集类、划分训练集和验证集、创建数据加载器、设置训练参数、训练模型、评估模型性能以及定义和测试预测函数。通过这些步骤,可以实现一个简单而有效的情感分析模型。
47 2
|
1月前
|
自然语言处理 PyTorch 算法框架/工具
掌握从零到一的进阶攻略:让你轻松成为BERT微调高手——详解模型微调全流程,含实战代码与最佳实践秘籍,助你应对各类NLP挑战!
【10月更文挑战第1天】随着深度学习技术的进步,预训练模型已成为自然语言处理(NLP)领域的常见实践。这些模型通过大规模数据集训练获得通用语言表示,但需进一步微调以适应特定任务。本文通过简化流程和示例代码,介绍了如何选择预训练模型(如BERT),并利用Python库(如Transformers和PyTorch)进行微调。文章详细说明了数据准备、模型初始化、损失函数定义及训练循环等关键步骤,并提供了评估模型性能的方法。希望本文能帮助读者更好地理解和实现模型微调。
71 2
掌握从零到一的进阶攻略:让你轻松成为BERT微调高手——详解模型微调全流程,含实战代码与最佳实践秘籍,助你应对各类NLP挑战!
|
1月前
|
机器学习/深度学习 自然语言处理 并行计算
探索深度学习中的Transformer模型及其在自然语言处理中的应用
【10月更文挑战第6天】探索深度学习中的Transformer模型及其在自然语言处理中的应用
100 0
|
1月前
|
机器学习/深度学习 自然语言处理 异构计算
【NLP自然语言处理】初识深度学习模型Transformer
【NLP自然语言处理】初识深度学习模型Transformer
|
1月前
|
机器学习/深度学习 自然语言处理 算法
【NPL自然语言处理】带你迅速了解传统RNN模型
【NPL自然语言处理】带你迅速了解传统RNN模型
|
3月前
|
自然语言处理
【NLP】from glove import Glove的使用、模型保存和加载
使用 from glove import Glove 进行词向量训练、保存和加载的基本示例。
52 2
【NLP】from glove import Glove的使用、模型保存和加载
|
3月前
|
机器学习/深度学习 自然语言处理 PyTorch
PyTorch与Hugging Face Transformers:快速构建先进的NLP模型
【8月更文第27天】随着自然语言处理(NLP)技术的快速发展,深度学习模型已经成为了构建高质量NLP应用程序的关键。PyTorch 作为一种强大的深度学习框架,提供了灵活的 API 和高效的性能,非常适合于构建复杂的 NLP 模型。Hugging Face Transformers 库则是目前最流行的预训练模型库之一,它为 PyTorch 提供了大量的预训练模型和工具,极大地简化了模型训练和部署的过程。
190 2
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】探讨最新的深度学习算法、模型创新以及在图像识别、自然语言处理等领域的应用进展
深度学习作为人工智能领域的重要分支,近年来在算法、模型以及应用领域都取得了显著的进展。以下将探讨最新的深度学习算法与模型创新,以及它们在图像识别、自然语言处理(NLP)等领域的应用进展。
128 6
|
3月前
|
机器学习/深度学习 自然语言处理 数据处理
|
3月前
|
自然语言处理
【NLP】如何实现快速加载gensim word2vec的预训练的词向量模型
本文探讨了如何提高使用gensim库加载word2vec预训练词向量模型的效率,提出了三种解决方案:保存模型以便快速重新加载、仅保存和加载所需词向量、以及使用Embedding工具库代替word2vec原训练权重。
220 2
下一篇
无影云桌面