通俗理解网络架构搜索(NAS)

时间:2024-05-23 08:53:22

什么是NAS

我们假设模型必须是一个三层的全连接神经网络(一个输入层、一个隐层、一个输出层),隐层可以有不同的**函数和节点个数,假设**函数必须是relu或sigmoid中的一种,而隐节点数必须是10、20、30中的一个,那么我们称这个网络结构的搜索空间就是{relu, sigmoid} * {10, 20 ,30}。

在搜索空间中可以组合出6种可能的模型结构,在可枚举的搜索空间内我们可以分别实现这6种可能的模型结构,最终目标是产出效果最优的模型,那么我们可以分别训练这6个模型并以AUC、正确率等指标来评价模型,然后返回或者叫生成一个最优的神经网络模型结构。

因此,NAS算法是一种给定模型结构搜索空间的搜索算法,当然这个搜索空间不可能只有几个参数组合,而搜索算法也不可能通过枚举模型结构分别训练来解决,而需要一种更有效的启发式的搜索算法,这种算法就是后面会提到的贝叶斯优化、增强学习、进化算法等。

什么是ENAS?

ENAS也是一种NAS实现,因此也是需要人类先给出基本的网络结构搜索空间,这也是目前ENAS的一种限制,ENAS需要人类给出生成的网络模型的节点数,我们也可以理解为层数,也就是说人类让ENAS设计一个复杂的神经网络结构,但如果人类说只有10层那ENAS是不可能产出一个超过10层网络结构,

为了提高NAS的搜索效率,ENAS引入参数共享,而不同模型结构怎样共享参数,就是ENAS的关键。

ENAS生成的所有模型节点数是一样的,例如上文说的10层,那么最后生成的所有模型都是10层,而且节点的输入和输出都是一样的。因此所有模型的所有节点的所有权重都是可以加载来使用的,因此我们只需要训练一次模型得到权重后,让各个模型都去在验证集做一个预估

只要效果好的说明发现了更好的模型了。实际上这个过程会进行很多次,而这组共享的权重也会在一段时间后更新,例如我找个一个更好的模型结构了,就可以用这个接口来训练更新权重,然后看有没有其他模型结构在使用这组权重后能在验证集有更好的表现。

通俗理解网络架构搜索(NAS)

事实上,ENAS要学习和挑选的就是Node之间的连线关系,通过不同的连线就会产生大量的神经网络模型结构,从中选择最优的连线相当于“设计”了新的神经网络模型。如果大家理解了可能觉得这种生成神经网路的结构有点low,因为生成的网络结构样式比较相似,而且节点数必须是固定的,甚至很难在其中创造出1x1 polling这样的新型结构。是的,这些吐槽都是对的,目前ENAS可以做的就是帮你把连线改一下然后生成一个新的模型,但这个就是ENAS共享权重的基础,而且可以帮你以极低的代码帮你调整模型结构生成一个更好的模型,接下来就是本文最核心的ENAS的E(Efficient)的实现原理介绍了。