例如我们假设模型必须是一个三层的全连接神经网络(一个输入层、一个隐层、一个输出层) , 隐层可以有不同的激活函数和节点个数 , 假设激活函数必须是 relu 或 sigmoid 中的一种 , 而隐节点数必须是 10、20、30 中的一个 , 那么我们称这个网络结构的搜索空间就是{relu, sigmoid} * {10, 20 ,30} 。在搜索空间中可以组合出 6 种可能的模型结构 , 在可枚举的搜索空间内我们可以分别实现这 6 种可能的模型结构 , 最终目标是产出效果最优的模型 , 那么我们可以分别训练这 6 个模型并以 AUC、正确率等指标来评价模型 , 然后返回或者叫生成一个最优的神经网络模型结构 。
因此 , NAS 算法是一种给定模型结构搜索空间的搜索算法 , 当然这个搜索空间不可能只有几个参数组合 , 在 ENAS 的示例搜索空间大概就有 1.6*10^29 种可选结构 , 而搜索算法也不可能通过枚举模型结构分别训练来解决 , 而需要一种更有效的启发式的搜索算法 , 这种算法就是后面会提到的贝叶斯优化、增强学习、进化算法等 。
使用超参自动调优
前面提到 NAS 是一种搜索算法 , 是从超大规模的搜索空间找到一个模型效果很好的模型结构 , 这类问题我们也可以看作一个优化问题 , 也就是从搜索空间中找到另一个模型效果更优的模型结构 。而神经网络模型的结构和效果并不是线性关系的 , 也没有一个函数可以描述这种关系 , 如果存在这样的函数我们就可以通过求导、SGD 等方法用数学的方式找到最优解了 , 因此这可以看作一类黑盒优化(Black-box optimization)问题 , 或者是多臂老虎机(Multi-armed bandit)问题 , 对于黑盒优化问题的解法可以参考专栏另一篇文章《贝叶斯优化: 一种更好的超参数调优方式》(https://zhuanlan.zhihu.com/p/29779000)。
回到 NAS 的场景 , 我们需要定义一个搜索空间来让算法选择更优的网络结构 , 而这个搜索空间无外乎就是网络层个数、网络层的类型、网络层的激活函数类型、网络层是否加 Dropout、网络层是否加 Batch normalization , 还有就是诸如卷积层的 filter size、strip、padding 和池化层的 polling type、kernel size 等等 , 这些我们都可以认为是神经网络的超参数 。
如果你使用过我开源的 tensorflow_tempalate_application 应该就理解 , 为什么是 template application?因为我们可以通过传入的参数 --model={dnn, lr, wide_and_deep, cnn}来选择更好的模型结构 , 也可以通过参数 --optimizer={sgd, adadelta, adagrad, adam, ftrl, rmsprop}来选择更好的优化算法等等 , 这里不再细说 , 感兴趣可以在 Github 上了解下:
https://github.com/tobegit3hub/tensorflow_template_application
实际上 , NAS 可以是一个普通的超参调优问题 , 也可以是一个针对模型结构场景的调优问题 。例如 Google 开源的 NASnet 模型和 ENAS 算法就是在通用的超参调优上更进一步 , 当然并不是说后者的方法更优更先进 , 而是有些问题是超参不好描述的 , 例如用超参来表达每一层的输入是前面的哪一层 , 这里不妨推荐一篇文章介绍基于 Policy百思特网 gradient 的 NAS 经典实现:
https://lab.wallarm.com/the-first-step-by-step-guide-for-implementing-neural-architecture-search-with-reinforcement-99ade71b3d28
对于可以用超参轻易描述并且实现的模型结构 , 实现 NAS 并没有那么难 , 我们不需要自己去实现类似 Policy gradient 的启发式调优算法(后面会详细介绍到) , 可以使用一些已有的超参调优库 , 只要自己实现机器学习模型的训练过程和返回最终的指标结果即可 。
推荐阅读
- 国家不建议使用微波炉吗?为什么不建议用微波炉
- 十五的月亮十六圆下一句情话 十五的月亮十六圆是什么意思
- 37次想你 想你大结局是什么
- 女人对应的潘驴邓小闲 潘驴邓小闲是什么意思
- pdf版是什么样子的 pdg是什么格式
- 纸币最早源于哪个国家 最早出现的纸币叫什么
- 地中海气候区的雨季通常在什么季节 地中海气候区的雨季
- 宫保鸡丁中的宫保是啥意思 宫保鸡丁的宫保
- 广州蹦极旅游景点推荐 广州哪有蹦极的地方有哪些