自动化机器学习(AutoML)最近变得越来越火,是机器学习下个发展方向之一。其中的神经网络结构搜索(NAS)是其中重要的技术之一。人工设计网络需要丰富的经验和专业知识,神经网络有众多的超参数,导致其搜索空间巨大。NAS即是在此巨大的搜索空间里自动地找到最优的网络结构,实现深度学习的自动化。自2017年谷歌与MIT各自在ICLR上各自发表基于强化学习的NAS以来,已产出200多篇论文,仅2019年上半年就有100多篇论文。此系列文章将解读AutoDL领域的经典论文与方法,笔者也是刚接触这个领域,有理解错误的地方还请批评指正!
本篇介绍两篇论文:谷歌的《Learning Transferable Architectures for Scalable Image Recognition》,商汤的《Practical Block-wise Neural Network Architecture Generation》。前两篇博文介绍的方法都是从最简单的初始化网络一点一点地增加基本操作如卷积、池化等,这样搜索空间巨大非常耗时。这里介绍的两篇论文是以搜索基本的层结构或块结构为主要目的,然后重复堆叠这些基本结构组成最终的网络。这相当于增加了先验知识,也较少了搜索空间,速度会比之前的方法快。
一、Learning Transferable Architectures for Scalable Image Recognition
1、引言
本文提出的方法叫做NASNet,是基于《Neural Architecture Search with Reinforcement Learning》(NAS)这篇论文的。直接用NAS在巨大的数据集上比如ImageNet是非常耗时的,因此作者提出现在小数据集上比如CIFAR-10上搜索,然后将搜索到的结构迁移至大数据及上。作者为了实现这种可迁移性,设计了新的搜索空间(称作NASNet搜索空间),使网络的复杂性与网络的深度和输入图像的大小无关。并且,搜索空间中的所有卷积网络都是由结构相同但权重不同的卷积层(或cell)组成的,搜索网络结构就相当于搜索最好的cell。搜索cell会比搜索整个结构更快,而且cell结构更容易泛化。
2、Normal cell 和 Reduction cell
在此方法中,卷积网的整体架构是人工确定的。它们由重复多次的卷积cell组成,每个卷积cell具有相同的结构,但是不同的权重。用控制器RNN去预测卷积cell,然后将卷积cell按顺序堆叠,以处理任意大小的输入和过滤器的深度。这里作者指定两种类型的卷积cell:(1)Normal cell,输入和输出的特征图维度相同;(2)Reduction cell,输出特征图长宽减半。当降低特征图大小时,将输出中的过滤器数量增加一倍,以保持大致恒定的隐藏状态维数。
3、搜索步骤
在搜索空间里,每个cell接受两个初始的隐藏状态$h{i}$和$h{i-1}$,他们是前面两个较低层中的两个cell的输出或输入图像。给定这两个隐藏状态,控制器RNN循环地预测对他们的操作,如下图所示:
4、搜索空间
在上述的 step 3 和 step 4 中,RNN需要选择对隐藏状态的操作,这里预定义的操作包括如下几种:
其他关于搜索空间的细节:所有的卷积都使用ReLU激活函数;为了保证卷积cell的形状匹配,必要情况下会插入1X1的卷积;所有深度可分离卷积都不采用批归一化和(或)深度分离卷积和元素操作之间的ReLU;所有的卷积遵循ReLU、卷积操作、批归一化这样的顺序;当一个可分离卷积作被选为操作时,可分离卷积被两次应用于隐藏状态,作者发现这可以提高整体性能。
5、训练
不同于NAS方法,这里的控制器RNN是用近端策略优化(Proximal Policy Optimization,PPO)算法,PPO算法实现过程简单同时具有优秀的性能,使用PPO速度比较快且稳定。
在学习了卷积cell之后,可以探索几个超参数来构建给定任务的最终网络:(1)cell重复数N;(2)初始卷积cell中的滤波器数目。在选择了初始过滤器的数量之后,在步幅为2时将过滤器的数量增加一倍。作者定义了一个简单的符号来表示所有网络中的这两个参数,例如,4 @ 64,其中4和64分别表示网络倒数第二层的细胞重复数和过滤器数。
控制器RNN是一个一层的100个隐层单元的LSTM,有2X5XB个softmax预测。
在训练时,作者还使用了ScheduledDropPath策略,这是DropPath 策略的改进版本。在DropPath中,cell内的每条路径在训练过程中以一定的概率随机丢弃。而在ScheduledDropPath中,cell中的每条路径都以一个在训练过程中线性增加的概率被删除。作者发现DropPath并不能很好地用于NASNet,而ScheduledDropPath在实验中显著提高了NASNet的最终性能。
二、Practical Block-wise Neural Network Architecture Generation
1、引言
大多数的现代网络如Inception、残差网络等都是block堆叠的结构,作者也以生成block为基础,堆叠这些块来生成网络。这里的block和上篇论文里的block不太一样,这里的block结构上相当于上篇里的cell。作者使用Q-learning、经验回放、epsilon-贪婪策略等方法去生成block结构,然后生成整个网络。作者还提出了一种早停策略,以加快搜索收敛。重新设计了奖励函数,使早停的网络的准确率和充分训练的网络的准确率有正相关性。相当于用此奖励函数去预测最终的准确率。
2、Network Structure Code
为了将网络表示成有向无环图,作者提出了一种新的层表示方法,称作network structure code(NSC),如下表所示:
此外,block里所有没有后继连接的层都被连接起来作为输出。所有的Convolution都为Pre-activation Convolution Cell(PCC),即包括ReLU、卷积、批归一化三个部分。
2、Q-learning
在这篇论文里,$s in S$表示当前层的NSC,是个5-D向量:{later index,layer type,kernel size,pred1,pred2}。动作$a in A$是下一个层的决策。状态转移的过程$(s{t}, a(s{t})) rightarrow (s_{t+1})$如下图所示:
$$ R{mathcal T}={Bbb E}{P({mathcal T}_{a1:T})}[{Bbb R}] $$
$Bbb R$是累积的奖励。使用贝尔曼方程取解这个最大化问题,这里给出了迭代解法:
$$ begin{aligned} Qleft(s{T}, aright) &=0 Qleft(s{T-1}, a{T}right) &=(1-alpha) Qleft(s{T-1}, a{T}right)+alpha r{T} Qleft(s{t}, aright) &=(1-alpha) Qleft(s{t}, aright) +alphaleft[r{t}+gamma max {a^{prime}} Qleft(s_{t+1}, a^{prime}right)right], t in{1,2, ldots T-2} end{aligned} $$
$alpha$是学习率,决定新信息所占的比例,$gamma$是折扣因子,决定长期奖励的重要性。$r{t}$表示在当前状态$s{t}$下的奖励,$s{T}$是最终状态,也就是NSC里的Terminal层。$r{T}$是针对$a{T}$后整个网络训练收敛后验证集的准确率。由于奖励$r{t}$不能在我们的任务中明确测量,我们使用下式来加速训练:
$$ r{t}=frac{r{T}}{T} $$
而之前的一些工作将$r_{t}$设置成了0,这会使收敛变慢,这就是所谓的时间信用分配问题,这使得强化学习非常耗时。
3、早停策略
按搜索block的方式生成网络确实可以有效地加速搜索,但整个搜索过程还是比较费时的。为了加速学习过程,作者使用了早停策略。早停策略可能会导致准确率比较低。如下图所示:
$$begin{aligned} text {reward}=mathrm{ACC}_{text {Earlystop }} -mu log (text { FLOPs }) -rho log (text { Density }) end{aligned}$$
FLOPs是block计算复杂度的估计,Density是block这个有向无环图中边数比上顶点数。
4、训练细节
- epsilon-贪婪策略:这里作者根据下表来逐渐降低epsilon值,使智能体从探索平滑地过度到利用:
- 经验回放:在每一次迭代后存储验证集准确率和block的描述。在每一次训练迭代里,智能体从经验回放采样64个block以及对应的验证集准确率,更新Q值64次。
-
BlockQNN生成:在更新过程中,学习率$alpha=0.01$,折扣因子$gamma ==1$,奖励函数中的参数$mu =1, rho=8$。智能体一次采样64个NSC的集合作为一个mini-batch,一个block里的最大层编号为23。训练智能体178轮,也就是说一共会采样178*64=11392个block。对于每个生成的完整的网络,训练12轮。在得到一个最优的块结构后,我们用堆叠的块构建整个网络,并对网络进行训练直到收敛,以验证集准确率作为选择最优网络的标准。
-
参考文献
[1] Zoph B, Vasudevan V, Shlens J, et al. Learning Transferable Architectures for Scalable Image Recognition[J]. 2017. [2] Zhong Z , Yang Z , Deng B , et al. BlockQNN: Efficient Block-wise Neural Network Architecture Generation[J]. 2018. [3] http://baijiahao.baidu.com/s?id=1600615825111400186&wfr=spider&for=pc[54https://wenku.baidu.com/view/eb78122d814d2b160b4e767f5acfa1c7aa008292.html