社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

【AI不惑境】AutoML在深度学习模型设计和优化中有哪些用处?

有三AI • 4 年前 • 829 次点击  

大家好,这是专栏《AI不惑境》的第十二篇文章,讲述AutoML在深度学习模型设计和优化相关的内容。


进入到不惑境界,就是向高手迈进的开始了,在这个境界需要自己独立思考。如果说学习是一个从模仿,到追随,到创造的过程,那么到这个阶段,应该跃过了模仿和追随的阶段,进入了创造的阶段。从这个境界开始,讲述的问题可能不再有答案,更多的是激发大家一起来思考。


作者&编辑 | 言有三

自从2017年Google提出使用强化学习搜索模型结构之后,AutoML/NAS便迅速成为了学术界和工业界的宠儿,在这几年也是非常火热的领域,那么AutoML/NAS在深度学习模型的设计和优化上究竟都有了哪些实际的作用呢?本文对其进行简单的介绍。

1 AutoML简介

1.1 什么是AutoML


所谓AutoML,全称是Automated Machine Learning,即自动机器学习技术,AutoML的目标是让机器学习的整个流程自动化,从应用领域来说,这通常要包括数据的使用,特征的选择,模型架构的设计和优化,优化参数的搜索等

1.2 AutoML中的搜索方法


AutoML本质上是对参数进行自动搜索,所以其中最核心的技术是搜索策略,关键在于如何快速而准确地找到最优值,目前主要的搜索方法有几种:


(1) 随机搜索与栅格搜索。随机搜索顾名思义就是随机进行参数的选择,自然是最简单,但也是最不可靠的方法。栅格搜索就是在一个有限的搜索空间进行穷举,对于小的搜索空间是可以接受的。


(2) 强化学习。强化学习是一类很经典的算法,大名鼎鼎的AlphaGO就使用了强化学习进行训练,强化学习的经典方法包括DPG,PPO等。


(3) 进化算法。进化算法是一类算法的总称,当前很多AutoML框架都使用进化算法进行训练,它的核心思想是随机生成一个种群,然后进行选择、交叉、变异。


(4) 贝叶斯优化。贝叶斯优化假设超参数与需要优化的损失函数存在一个函数关系,通过代理模型来指导超参优化的调试方向。


其他诸如梯度优化方法等,在AutoML专栏中再进行详述。

2 AutoML与数据使用,特征工程

2.1 特征工程


智能系统与机器学习技术的发展,本身就伴随着对数据使用方法的进化。从传统的专家系统,到有监督的机器学习算法,到深度学习,本身就属于AutoML的范畴,它解决了特征选择的问题,让特征的学习来源于数据,而不是手工设计


所以深度学习也被称之为特征学习,它利用CNN等架构,实现了特征选择的过程。

当前工业界也有一些特征工程框架,比如第四范式“先知平台”中的FeatureGO,自动化的特征工程在数据挖掘领域中有着巨大的商业潜力。


2.2 数据增强


在机器学习/深度学习领域中,有一个很重要的问题,就是数据增强。在解决各类任务的过程中,常常没有足够多的数据,数据太少便意味着容易过拟合。各种各样的几何变换,颜色变换策略都被证明有助于提升模型的泛化能力,因此数据增强技术至关重要。


AutoML技术开始在数据增强领域研究的开始以Google Brain提出的AutoAugment[1]为代表。它的基本思路是使用增强学习从数据本身寻找最佳图像变换策略,对于不同的任务学习不同的增强方法,流程如下:


(1) 准备16个常用的数据增强操作。

(2) 从16个中选择5个操作,随机产生使用该操作的概率和相应的幅度,将其称为一个sub-policy,一共产生5个sub-polices。

(3) 对训练过程中每一个batch的图片,随机采用5个sub-polices操作中的一种。

(4) 通过模型在验证集上的泛化能力来反馈。

(5) 经过80~100个epoch后网络开始学习到有效的sub-policies。

(6) 之后串接这5个sub-policies,然后再进行最后的训练。


总的来说,就是学习已有数据增强的组合策略,比如对于门牌数字识别等任务,研究表明剪切和平移等几何变换能够获得最佳效果,

数据使用和特征选择作为最早被AutoML技术攻陷的领域,是机器学习算法走向智能和商业化落地的关键。

3 AutoML与模型结构设计

3.1 整个模型架构的搜索


一直以来,网络结构的设计是一个非常需要经验且具有挑战性的工作,研究人员从设计功能更加强大和更加高效的模型两个方向进行研究,我之前在阿里天池做过三次直播,感兴趣的朋友可以回头去翻看。


【总结】言有三&阿里天池深度学习模型设计直播汇总,附赠超过200页直播PPT课件

随着各类经典网络设计思想的完善,如今要手工设计出更优秀的模型已经很难,而以AutoML为代表的技术就成为了大家关注的热点。


Google在2017年利用增强学习进行最佳模型架构的搜索[2],引爆了自动设计网络模型(Neural Architecture Search,简称NAS)的研究热潮,其基本流程如下:

增强学习方法需要一些基本组件,包括搜索空间(search space),策略函数(policy),奖励指标(reward)。


搜索空间就是网络组件,也就是基本参数,包括滤波器数量,卷积核高、卷积核宽、卷积核滑动步长高、卷积核滑动步长宽等,如下图(分别是有跳层连接和无跳层连接),每一个参数的预测使用softmax分类器实现,跳层连接则使用sigmoid函数。

策略函数使用的就是RNN,实际是一个两层的LSTM,每一个隐藏层单元为35。之所以可以这么做是因为网络结构和连接可以使用一个变长的字符串进行描述,终止条件就是达到一定的层数。


奖励指标(reward)使用的是验证集上测试准确率,如下。

因为上述目标不可微分,所以需要进行近似如下:

其中m是每一个batch采样的结构,T是需要预测的参数量,学习到的网络结构如下:

从上面的结构可以看出,它拥有以下特点:

(1) 跨层连接非常多,说明信息融合非常重要。

(2) 单个通道数不大,这是通道使用更加高效的表现。


以上研究催生了Google Cloud AutoML,并在2018年1月被Google发布,AutoML技术的研究开始进入高潮,这几年成为机器学习/深度学习的大热门。


3.2 模型结构参数的优化


除了对整个模型结构进行搜索外,其实对某一些模型结构单元进行优化是更现实的策略,因为它的搜索空间更小。


基于Depthwise的分组卷积是一类非常有效的模型设计,不过每一个分组通常用同样大小的卷积核,而Inception等多尺度结构表明不同的卷积核大小能学习到不同的特征表达,是有助于提升模型性能的,分组卷积模型MixNet[3]就使用了多尺度的卷积核提升其性能。

网络结构如上,关于使用多少种不同尺度的卷积核,有两种思路。第一种,就是人工设定,比如使用3x3, 5x5, 7x7, 9x9等四种卷积核,各自的通道数量可以均分。


当然更好的方式就是基于学习了,让其对卷积核的种类和通道数量划分进行搜索,由于搜索空间较小,可以直接采用穷举的办法。


类似的模型结构有很多,比如EfficientNet[4]。

4 AutoML与优化参数

NAS关注的是模型的结构的设计,而除了模型的结构因子外,还有许多优化相关的参数,比如激活函数,归一化函数,优化目标等。


4.1 激活函数


早期研究人员使用sigmoid,tanh,relu等激活函数,而Google Brain研究在一系列一元函数和二元函数组成的搜索空间中进行了组合搜索实验,搜索空间覆盖了我们能想到的一些简单的函数,如下:

搜索结果表明好用的激活函数都比较简单,不会超过两个基本函数的乘组合。搜到了一些比Relu表现更好的函数,最好的是一个这样的函数:x · σ(βx),被称为Swish[5],它在某个特定的参数下也和ReLU及其变种类似,如下图。

4.2 归一化方法


现在我们在每一个网络层中都使用同样的归一化,这是最优的配置吗?显然不是,因为实际应用中不同的问题就有它最合适的归一化操作。比如RNN等时序模型,有时候同一个batch内部的训练实例长度不一(不同长度的句子),则不同的时态下需要保存不同的统计量,无法正确使用BN层,只能使用Layer Normalization。对于图像生成以及风格迁移类应用,使用Instance Normalization更加合适。对于Batch比较小的情况下,Group Normalization是一个替换的方案。


Switchable Normalization[6]的研究便是关注如何让不同的网络层学习到最适合该层的归一化机制,方法就是在包含各类归一化方法的池中进行选择,然后用精度进行比较择优。

上图是对于各类任务中,学习到的最适合该方法的BN,IN,LN,GN的比例。可以看到,对于分类,检测任务主干模型,BN更常用,对于LSTM任务,LN一家独大,对于Image Style Transfer任务,IN一家独大。


4.3 优化方法


要成功训练一个深度学习模型,正确的优化策略是非常重要的,如果使用不当结果会产生很大的差异,现如今优化方法也可以进行搜索[7]。搜索空间中包含sgd,rmsprop,adam等优化方法,这些方法都可以被表示为一个相同结构的树,如下:

一个优化器的应用可以被表示为5个操作,分别是选择op1,op2,两个操作的幅度函数u1,u2,以及最后对这两个操作的综合。

因此,不管选择什么优化器,完成一次优化步骤都是要做以上的5次操作,那么如果可以学习到这5次操作,就完成了一个优化器的搜索。

RNN控制器每一次选择长度为5的子序列,如上图。搜索空间如下,使用的时候还有一些约束,比如树的左右两个操作不能相同等。

经过在CIFAR10数据集上对一个2层的简单网络进行学习后,它们搜索到了一些有效的优化器,如下图的PowerSign以及AddSign。

研究者们还将PowerSign和AddSign迁移到了ImageNet分类任务和谷歌机器翻译系统,发现它们具有非常好的泛化能力,这使得该框架具有非常大的应用价值。


4.4 优化目标


一个有效的损失函数在深度学习任务中起了关键作用,然而损失函数都是人为设定,不仅需要有经验的人员进行反复尝试,也只能获得次优的方案,如果可以让模型自动对优化目标进行学习,将有望以更低的成本学习到更优的模型。


AM-LFS[8]将不同任务的损失函数用一种统一的形式表示,设计了一个搜索空间,利用了强化学习来自动搜索合适的损失函数的超参数,使用双层次优化框架来同时更新损失函数参数分布和网络结构权重参数,流程如下:

首先作者将softmax及其一些变种统一到一个框架,这里的τ和t都是函数。τ控制着样本不均衡变换,t控制着类内与类间的度量距离比例。

因此搜索空间就可以是一个分段线性函数构成的参数空间,可以使用强化学习方法进行高效的搜索。


任务的损失包含了两个,第一个是最小化任务的损失,第二个就是最大化模型奖励,此处奖励使用map等指标。具体的实现是在内层循环最小化任务的损失,外层循环最大化奖励,前者学习模型权重,后者学习损失函数的超参数。


4.5 模型优化


虽然NAS本身具有模型优化的功能,但是当前也有许多成熟的模型优化方法,比如模型剪枝与量化。


AutoML for Model Compression(AMC)[9]是一个利用强化学习自动搜索并提高模型剪枝算法质量的框架,其完整的流程如下:

在一般的剪枝算法中,我们通常遵循一些基本策略:比如在提取低级特征的参数较少的第一层中剪掉更少的参数,对冗余性更高的FC层剪掉更多的参数。然而,由于深度神经网络中的层不是孤立的,这些基于规则的剪枝策略并不是最优的,也不能从一个模型迁移到另一个模型。


AMC方法便是在该背景下,利用强化学习自动搜索并提高模型压缩的质量,该框架是每一层进行独立压缩,前一层压缩完之后再往后层进行传播,t层接受该层的输入特征s_t,输出稀疏比率a_t,按照a_t对该层进行压缩后,智能体移动到下一层L_t+1,使用验证集精度作为评估。


作者们对两类场景进行了实验,第一类是受延迟影响较大的应用如移动APP,使用的是资源受限的压缩,这样就可以在满足低FLOP和延迟,小模型的情况下实现最好的准确率;这一类场景作者通过限制搜索空间来实现,在搜索空间中,动作空间(剪枝率)受到限制,使得被智能体压缩的模型总是低于资源预算。


另一类是追求精度的应用如Google Photos,就需要在保证准确率的情况下压缩得到更小的模型。对于这一类场景,作者定义了一个奖励,它是准确率和硬件资源的函数。基于这个奖励函数,智能体在不损害模型准确率的前提下探索压缩极限。


每一层的状态空间为(t, n, c, h, w, stride, k, FLOP s[t], reduced, rest, at−1),t是层指数,输入维度是n×c×k×k,输入大小是c×h×w,reduces就是前一层减掉的flops,rest是剩下的flops。


因为剪枝对通道数特别敏感,所以这里不再是使用离散的空间,如{128,256},而是使用连续的空间,使用deep deterministic policy gradient (DDPG)来控制压缩比率,完整的算法流程如下:

对于细粒度的剪枝,可以使用权重的最小幅度作为阈值,对于通道级别的压缩,可以使用最大响应值。在谷歌Pixel-1 CPU和MobileNet模型上,AMC实现了1.95 倍的加速,批大小为1,节省了34%的内存。在英伟达Titan XP GPU 上,AMC实现了1.53 倍的加速,批大小为50。


同样的,量化也是模型压缩的另外一个技术,是学术界和工业界的重点研究方向,HAQ(Hardware-Aware Automated Quantization with Mixed Precision)[10]是一个自动化的混合精度量化框架,使用增强学习让每一层都学习到了适合该层的量化位宽。

不同的网络层有不同的冗余性,因此对于精度的要求也不同,当前已经有许多的芯片开始支持混合精度。通常来说,浅层特征提取需要更高的精度,卷积层比全连接层需要更高的精度。如果手动的去搜索每一层的位宽肯定是不现实的,因此需要采用自动搜索策略。


另一方面,一般大家使用FLOPS,模型大小等指标来评估模型压缩的好坏,然后不同的平台表现出来的差异可能很大,因此HAQ使用了新的指标,即芯片的延迟和功耗。


搜索的学习过程是代理Agent接收到层配置和统计信息作为观察,然后输出动作行为即权值和激活的位宽,其中算法细节为:


(1) 观测值-状态空间,一个10维变量,如下:

(2) 动作空间,使用了连续函数来决定位宽,离散的位宽如下:

(3) 反馈,利用硬件加速器来获取延迟和能量作为反馈信号,以指导Agent满足资源约束。

(4) 量化,直接使用线性量化方法,其中s是缩放因子,clamp是截断函数。

(5) c的选择是计算原始分布和量化后分布的KL散度,这也是很多框架中的做法。

(6) 奖励函数,在所有层被量化过后,再进行1个epoch的微调,并将重训练后的验证精度作为奖励信号。

使用了深度确定性策略梯度(DDPG)方法进行优化,下图是在延迟约束下,MobileNet-V1/V2模型在边缘端和云端设备上的实验结果,与固定的8bit量化方法相比,分别取得了1.4倍到1.95倍的加速。

下图分别是边缘端和云端设备上MobileNet-V1各个网络层的量化特点,可以发现在边缘端设备上depthwise卷积有更少的bits,pointwise有更多,在云端则是完全相反。这是因为云设备具有更大的内存带宽和更高的并行性,而depthwise就是内存受限的操作,pointwise则是计算受限的操作,MobileNet-V2上能观察到同样的特点。

AutoML是一个非常活跃而且有前途的研究和应用方向,对其中内容感兴趣的同学,欢迎到有三AI知识星球的网络结构1000变-AutoML板块进行学习,数十期内容定能满足你的求知欲。

了解有三AI知识星球详情请阅读以下文章,扫码即可加入。


【杂谈】有三AI知识星球一周年了!为什么公众号+星球才是完整的?

参考文献

[1] Cubuk E D, Zoph B, Mane D, et al. Autoaugment: Learning augmentation policies from data[J]. arXiv preprint arXiv:1805.09501, 2018.

[2] Zoph B, Le Q V. Neural Architecture Search with Reinforcement Learning[J]. international conference on learning representations, 2017.

[3] Tan M, Le Q V. MixNet: Mixed Depthwise Convolutional Kernels[J]. arXiv preprint arXiv:1907.09595, 2019.

[4] Tan M, Le Q V. EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks[C]. international conference on machine learning, 2019: 6105-6114.

[5] Ramachandran P, Zoph B, Le Q V. Searching for activation functions[J]. arXiv preprint arXiv:1710.05941, 2017.

[6] Luo P, Ren J, Peng Z, et al. Differentiable learning-to-normalize via switchable normalization[J]. arXiv preprint arXiv:1806.10779, 2018.

[7] Bello I, Zoph B, Vasudevan V, et al. Neural optimizer search with reinforcement learning[C]//Proceedings of the 34th International Conference on Machine Learning-Volume 70. JMLR. org, 2017: 459-468.

[8] Li C, Lin C, Guo M, et al. AM-LFS: AutoML for Loss Function Search[J]. arXiv preprint arXiv:1905.07375, 2019.

[9] He Y, Lin J, Liu Z, et al. Amc: Automl for model compression and acceleration on mobile devices[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 784-800.

[10] Wang K, Liu Z, Lin Y, et al. HAQ: Hardware-Aware Automated Quantization with Mixed Precision[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019: 8612-8620.

总结


本次我们总结了AutoML在深度学习模型设计和优化中的核心技术,推荐了相关的学习资源,AI不惑境的文章也是最后一期了,通过这十二期文章,希望有助于大家掌握深度学习模型的使用。

有三AI秋季划-模型优化组

如果你想系统性地学习模型优化相关的理论和实践,并获得持续的指导,欢迎加入有三AI秋季划-模型优化组,系统性地学习数据使用,模型使用和调参,模型性能分析,紧凑模型设计,模型剪枝,模型量化,模型部署,NAS等内容


模型优化组介绍和往期的一些学习内容总结请参考阅读以下文章:


【通知】如何让你的2020年秋招CV项目经历更加硬核,可深入学习有三秋季划4大领域32个方向

【总结】有三AI秋季划模型优化组3月直播讲了哪些内容,为什么每一个从事深度学习的同学都应该掌握模型优化的内容


转载文章请后台联系

侵权必究

往期精选


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/63905
 
829 次点击