parameter是什么意思(功放parameter是什么意思)( 二 )


回到NAS场景,我们需要为算法定义一个search 空 room来选择更好的网络结构,而这个search 空 room无非就是网络层的数量,网络层的类型,网络层的激活函数的类型,网络层是否加入Dropout,网络层是否加入批量归一化,还有滤波器大小,条带,卷积层和轮询类型的填充,池层的内核大小等 。,这些都可以认为是神经网络的超参数 。
如果你用过我的开源tensor flow _ template _ application,你应该明白,为什么要模板应用?因为我们可以通过传入的参数选择更好的模型结构——model = { DNN,LR,wide _ and _ deep,CNN},也可以通过参数选择更好的优化算法——optimizer = { SGD,Adadelta,Adagrad,Adam,FTRL,RMSProp}等 。这里不赘述,可以在Github上感兴趣 。
https://github . com/tobegit 3 hub/tensor flow _ template _ application
实际上,NAS可以是常见的超参数调优问题,也可以是模型结构场景的调优问题 。例如,谷歌的开源NASnet模型和ENAS算法在通用超参数调优上走得更远 。当然并不是说后一种方法更好更先进,而是有些问题很难用超参数来描述,比如用超参数来表示每一层的输入在哪一层的前面 。在这里,我们不妨推荐一篇文章,介绍基于策略梯度的NAS的经典实现:
https://lab . wall arm . com/the-first-step-by-step-guide-for-implementing-neural-architecture-search-with-reinforcement-99 ade 71 B3 d 28
对于超参数容易描述和实现的模型结构,实现NAS并不那么困难 。我们不需要自己实现类似于策略梯度(后面会详细介绍)的启发式调优算法 。我们可以使用一些现有的超参数调优库,只要实现了机器学习模型的训练过程,并返回最终的索引结果 。
所以我尝试使用Google Vizier开源实现顾问上的NAS功能,发现不到100行代码就可以实现自动生成网络结构的完整功能,而且不需要服务器做任何修改,就可以使用几十行Keras代码或者TensorFlow之类的任何框架,而且只需要提前描述好hyperreference search room空,我还向Github提交了样例代码 。
Github链接:
https://github . com/tobegit 3 hub/advisor/tree/master/examples/keras
网络接入系统的优化算法
如前所述,NAS算法是一种搜索算法 。除了定义搜索空区间外,还需要一个能收敛的启发式优化算法 。因为生成一个网络模型的search 空区间一般都很大,如果search 空区间不大,可以暴力枚举,需要训练评估生成一个模型的质量,成本也很大 。
这时候我们想到的优化算法有贝叶斯优化、粒子群优化、策略梯度、DQN等等,都可以用来优化NAS的内部模型 。是的,NAS内部也有一个模型,在论文或代码中一般称为控制器模型,它控制要生成的神经网络模型的结构,生成的神经网络模型会根据客户的使用场景(如图像分类)返回模型效果对应的指标,一般称为子模型 。
前面介绍了基于Advisor的NAS 。事实上,Advisor的内置调整模型被用作NAS的控制器模型 。默认是贝叶斯优化 。此外,只需要修改一个参数,就可以使用后端已经通过统一接口支持的随机搜索、网格搜索等调优算法 。
前面推荐的博客在强化学习中使用了策略梯度算法,包括后面提到的ENAS论文也使用了这种算法,而Google的其他论文介绍了进化算法和DQN的使用,AlphaZero在超参数整定中使用了贝叶斯优化,Deepmind最新的参数整定论文介绍了类似PSO的群优化算法 。
我们需要明白,这些算法本质上是一样的,都是黑盒优化算法,因为如果不知道优化目标和优化参数之间是否存在函数关系,无法从中获得梯度等信息,就只能根据超参数组合和最终的模型效果,从历史模型训练结果中选择超参数的变化值 。这些算法的区别在于算法的效率和复杂度,所以也会应用到不同的领域 。
我们经常看到玩围棋和游戏的人喜欢用DQN和A3C算法优化自己的模型,因为象棋和游戏都可以用软件模拟,可以很快收到奖励 。比如一分钟收集几十万个状态和奖励,就足够训练一个高度复杂的AlphaZero模型(基于ResNet) 。但是AlphaZero的超参数调优使用的是基于高斯过程的贝叶斯优化,因为重新训练模型来调整超参数的代价非常大,大概需要几个小时才能得到一个状态和奖励,不足以训练一个比ResNet弱很多的神经网络模型 。但是,可以在数学上假设所有超参数都符合联合高斯分布,然后通过高斯过程计算状态和回报的相关度的均值和方差,然后基于探索/剥削原理选择下一个更好的探索点,这就是贝叶斯优化的实现原理 。其实这也解释了为什么Google之前基于DQN和进化算法的NAS模型需要上百个GPU并发训练好几个月,因为评估一个模型结构的好坏真的很耗时,这也是为什么ENAS在解决了评估模型的问题后效率如此之高,后面会详细介绍 。


推荐阅读