NAS 学习笔记(七)- NAO

  |     |   本文总阅读量:

版权声明:本文原创,转载请留意文尾,如有侵权请留言,谢谢

引言

  NAO(Neural Architecture Optimization 1Renqian)[1] 是微软发表的一篇 NAS 的论文,它和 DARTs 一样都是搜索空间在 continuous space 上优化和搜索 architecture ,但是本质上又很不一样,本文对它做一些笔记。

Overview

  我们都知道,基于强化学习和进化算法的 NAS 算法都是把搜索空间限定于 discrete space 上,它通过 softmax 将 discrete space 进行了 relaxation,然后从 mixture weights 里 argmax 出一个最优的 architecture,而 NAO 是通过一个 encoder 和 decoder 来搜索和优化 architecture。   NAO 把搜索空间构造成 continous space 实际是通过 embedding 去做到的,它包含三个核心部分:

  • An encoder embeds/maps neural network architectures into a continuous space.
  • A predictor takes the continuous representation of a network as input and predicts its accuracy.
  • A decoder maps a continuous representation of a network back to its architecture.

  同时它也支持和 ENAS 一样 sharing parameters 的功能。下面我们分这三个核心部分介绍下 NAO,它的总的算法过程如下图所示:

Encoder

  encoder \(E: \mathcal{X} \rightarrow \mathcal{E}\) 实际上非常简单,就是一个 LSTM,输入初始的 architecture \(x\) 得到 LSTM 的 hidden states \(e_{x}=\left\{h_{1}, h_{2}, \cdots, h_{T}\right\} \in \mathcal{R}^{T \times d}\) 作为这个 architecture 的 embedding 表示 \(e_x\)

Performance predictor.

  NAO 通过一个 performance predictor \(f: \mathcal{E} \rightarrow \mathcal{R}^{+}\) 来评估每个网络的性能,它是一个 feed-forward network,通过输入 \(\bar{e}_{x}=\frac{1}{T} \sum_{t}^{T} h_{t}\) 来得到一个值作为对性能的估计,然后再和 \(x\) 在验证集上的精度 \(s_x\) 做均方误差 \(\left(s_{x}-f(E(x))\right)^{2}\) 来优化 \(f\)。   因为要保证 architecture embedding 对相似结构有差不多的性能,作者还采取了一个数据增强的方式,拿 CNN 来说,它会将一个 architecture \(x_1\) 的左右 branch 调个边作为 \(x_2\),然后将 \((s_x, x_1)\)\((s_x, x_2)\) 一起去训练 encoder 和 performance predictor。

Decoder

  decoder \(D: \mathcal{E} \rightarrow x\) 的原理也很简单,就和 sequence-to-sequence 模型中的 decoder 差不多,也是一个 LSTM,用 \(h_T(x)\) 作为 initial hidden state \(s_0\),并且结合了 attention 机制,计算出一个 \(ctx_r\)。   decoder 的目的就是最大化 \(P_{D}\left(x | e_{x}\right)=\prod_{r=1}^{T} P_{D}\left(x_{r} | e_{x}, x_{<r}\right)\) 得到一个最优的结构,其中 \(P_{D}\left(x_{r} | e_{x}, x_{<r}\right)=\frac{\exp \left(W_{x_{r}}\left[s_{r}, c t x_{r}\right]\right)}{\sum_{x^{\prime} \in V_{r}} \exp \left(W_{x^{\prime}}\left[s_{r}, c t x_{r}\right]\right)}\),优化的时候通常是取一个 log。

Training

  NAO 通过最小化 performance prediction loss \(L_{p p}\) 加上 structure reconstruction loss \(L_{r e c}\)\(E\)\(f\)\(D\) 一起训练和优化:

\[ L=\lambda L_{p p}+(1-\lambda) L_{r e c}=\lambda \sum_{x \in X}(s_{x}-f(E(x))^{2}-(1-\lambda) \sum_{x \in X} \log P_{D}(x | E(x)) \]

  这里 \(L_{p p}\) 实际上可以看作是一个正则化项,它可以使 encoder 和 decoder 不是一个简单的编码和解码的过程。

Inference

  当 encoder 和 decoder 都收敛后,我们就可以试图推断出更好的 architecture。挑选一个已经有比较好的性能的 \(x\),计算它的 \(e_x\),然后利用梯度下降试图找到一个更好的 \(e_{x^{\prime}}\)

\[ h_{t}^{\prime}=h_{t}+\eta \frac{\partial f}{\partial h_{t}}, \quad e_{x^{\prime}}=\left\{h_{1}^{\prime}, \cdots, h_{T}^{\prime}\right\} \]

  最后通过 decoder 得到 \(x^{\prime}\),重复这个过程迭代,NAO 的伪代码如下:

Conclusion

  NAO 提出了一种基于 encoder,performance predictor 和 decoder 的算法,它可以在 continous 的搜索空间上通过梯度下降法搜索更优的 architecture。

Refer

[1] Luo R, Tian F, Qin T, et al. Neural architecture optimization[C]//Advances in neural information processing systems. 2018: 7816-7827.

相关内容


坚持原创技术分享,您的支持将鼓励我继续创作,π(3.14)元就够啦!



文章目录
  1. 1. 引言
  2. 2. Overview
  3. 3. Encoder
  4. 4. Performance predictor.
  5. 5. Decoder
  6. 6. Training
  7. 7. Inference
  8. 8. Conclusion
  9. 9. Refer
  10. 10. 相关内容
您是第 位小伙伴 | 本站总访问量 | 已经写了 670.5k 字啦

载入天数...载入时分秒...