自动化机器学习(AutoML)变得越来越火,是机器学习下个发展方向之一。其中的神经网络结构搜索(NAS)是其中重要的技术之一。人工设计网络需要丰富的经验和专业知识,神经网络有众多的超参数,导致其搜索空间巨大。NAS即是在此巨大的搜索空间里自动地找到最优的网络结构,实现深度学习的自动化。本文将介绍几种经典的NAS方法,方便给读者一个对NAS的直观总览。虽然NAS的热度有所降低,但NAS的发展不会停下,AutoML的发展更不会停下,毕竟一个成熟的AI该学会自己成长了
1、基于强化学习的NAS
这里介绍的论文是Zoph, Barret, and Quoc V. Le. “Neural Architecture Search with Reinforcement Learning.” ICLR, 2016. 这篇论文的大体框架和思路如下图所示。在这篇论文中作者使用一个RNN作为智能体。作者考虑到神经网络的结构和连接可以用一个可变长度的字符串表示,这样可以用RNN生成这样的字符串。RNN采样生成了这样的字符串,一个网络,即子网络(child network)就被确定了。训练这个子网络,得到验证集在这个网络上的准确率,作为奖励信号。然后根据奖励计算策略梯度,更新RNN。在下一轮迭代,RNN会给出可能在验证集上准确率高的一个网络结构。也就是说,RNN会随着时间提升它的搜索质量。
首先作者假设要生成一个前向的只包含卷积的网络(没有跨连接)。使用RNN可以生成卷积层的超参数,超参数表示为一个标记序列:
RNN会预测每一层的滤波器的高度、宽度,步长的高度、宽度,和滤波器个数,一个5个参数。每一个预测是通过softmax分类器实现的,这个时间步的预测会作为下个时间步的输入。当层数达到一个特定的值,这个生成的过程就会停止。这个值会随着训练过程增加。一旦RNN生成了一个结构,即子网络,这个子网络就会被训练,验证集的准确率被记录下来被作为奖励。然后控制器RNN的参数
被更新以生成期望验证集准确率最大的结构。
RNN生成一个子网络后,其生成的标记序列可以被看作一系列动作
。验证集在其上取得的准确率作为奖励R RR,然后训练RNN。为了找到最优的结构,我们网RNN取最大化期望奖励
:
上式的经验估计如下:
这里m是控制器在训练过程中一个batch生成的子网络数量,T是生成的每个子网络的超参数数量,
是第k个子网络在验证集上的准确率。上述的估计是无偏的,还会有很高的方差,为了降低方差,作者使用了baseline function:
这里b是之前子网络准确率的指数移动平均值。
上面介绍的就是基于强化学习NAS的基本原理,不过原论文中还有带跨连接(skip)网络的搜索和RNN的搜索,感兴趣的读者可以继续阅读原论文。基于强化学习的方法是NAS的开创之作,但缺点也很明显:每次生成新的网络结构需要重新训练,非常耗时,且策略梯度不一定能达到很好的结果。
2、基于遗传算法的NAS
这节介绍