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


因此我尝试在 Google Vizier 的开源实现 Advisor 上使用 NAS 的功能 , 发现不到一百行代码就可以实现完整的自动生成网络结构功能 , 而且不需要服务端做任何修改 , 我们用几十行 Keras 代码或者是 TensorFlow 等任意的框架都可以使用 , 只需要提前描述好超参的搜索空间即可 , 示例代码我也提交到 Github 上了 。
Github 链接:
https://github.com/tobegit3hub/advisor/tree/master/examples/keras
NAS 的优化算法
前面提到 NAS 算法是一种搜索算法 , 除了需要定义好搜索空间外 , 还需要有一种启发式的可以收敛的调优算法实现 。因为一般生成网络模型的搜索空间都很大 , 如果搜索空间不大就可以暴力枚举了 , 而且生成一个模型要评估好坏就需要训练 , 这个成本也是非常大了 。
这时我们想到的调优算法就是贝叶斯优化(Bayesian optimization)、粒子群优化(Particle swarm optimization)、Policy gradient、DQN 等等 , 这些算法都可以用于 NAS 内部的模型的优化 。是的 , NAS 内部也有一个模型 , 一般在论文或者代码中称为 controller 模型 , 又它来控制想要生成的神经网络模型的结构 , 而生成的神经网络模型会根据客户的使用场景(例如图像分类)来返回模型效果对应的指标 , 这个一般称为 child 模型 。
前面介绍了基于 Advisor 来实现的 NAS , 其实就是使用了 Advisor 内置的调优模型作为 NAS 的 controller 模型 , 默认就是贝叶斯优化 , 而且只需要修改一个参数就可以通过统一的接口来使用后端已经支持的 Random search、Grid search 等调优算法 。
前面推荐的博客使用的是增强学习中的 Policy gradient 算法 , 包括后面提到的 ENAS 论文也是使用这个算法 , 而在 Google 的其他论文中有介绍使用 Evolution algorithm 和 DQN 的 , AlphaZero 在超参调优中使用的是贝叶斯优化 , 而 Deepmind 最新的调参论文介绍了类似 PSO 的群体优化算法 。
【功放parameter是什么意思 parameter是什么意思】大家需要理解这些算法从本质上没有区别 , 都是黑盒优化算法 , 因为假设不知道优化的目标和优化的参数是否有函数关系并且不能从中获取梯度等信息 , 只能从历史的模型训练结果中根据超参组合还有最后模型效果来选择超参的变化值 。而这些算法的区别在于运行效率和算法复杂度上 , 因此也会应用到不同的领域上。
我们经常看到下围棋、打游戏的人喜欢用 DQN、A3C 算法来优化模型 , 是因为下棋和打游戏都是可以通过软件模拟操作并且可以快速收到 reward 的 , 例如一分钟收集到几十万的 state 和 reward 完全足够训练一个高度复杂的 AlphaZero 模型(基于 ResNet) 。而 AlphaZero 的超参调优却使用基于高斯过程的贝叶斯优化 , 是因为调整超参需要重新训练模型代价很大 , 大概几小时才能得到一个 state 和 reward , 这不足以训练一个比 ResNet 弱很多的神经网络模型 , 但可以通过在数学上假设所有超参之间符合联合高斯分布然后通过高斯过程求 state、reward 关联关系的均值和方差 , 然后基于 exploration/exploitation 原则选择下一个更优的探索点 , 这也就是贝叶斯优化的实现原理了 。这其实也解释了为什么 Google 以前基于 DQN、进化算法的 NAS 模型需要几百块 GPU 并发训练多个月 , 因为评估一个模型结构是好是坏真的很耗时 , 这也是为什么 ENAS 解决评估模型这个问题后这么 Efficient , 后面会有详细的介绍 。

推荐阅读