NAS 学习笔记(十一)- GreedyNAS

  |     |   本文总阅读量:

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

引言

  本文继续分享一篇商汤 2020 年在 CVPR 上关于 NAS 的论文 [1],文中提出了 GreedyNAS 算法,它也是一种 One-Shot NAS,有点是对 supernet 做了贪心操作,本文对它做简单的笔记。

Motivation

  我们知道在 One-Shot 模型里,supernet 的训练质量是至关重要的,因为在搜索的时候采样的 child architecture 不会再训练,直接 infer。我们之前介绍过的 Single Path One-Shot 和 FairNAS 方法都是尽可能的想让 sueprnet 训练时对每个采样都公平点,将 supernet 中每一个 architecture 认为 是同等重要的,supernet 应该对每个结构进行准确评估或相对排序。然而 supernet中所包含的搜索空间的是非常巨大的,想要准确的评估对于 supernet 来说是非常困难的,会导致 supernet 中结构的表现与其真实表现相关性很差,要求 supernet 正确预测所有路径准确率过于严苛。并且由于训练超网过程中所有路径高度共享,训练不好的路径可能对好的路径造成干扰。
  因此 GreedyNAS 试图解决这些问题,主要思路就是使用多路径采样策略过滤不好的路径,使 supernet 训练更加聚焦潜在优异的路径。

Greedy path filtering

  作者将 supernet 的搜索空间作如下定义:

\[ \mathcal{A}=\mathcal{A}_{\text {good}} \bigcup \mathcal{A}_{\text {weak}}, \mathcal{A}_{\text {good}} \bigcap \mathcal{A}_{\text {weak}}=\emptyset \tag{1} \]

  \(\mathcal{A}_{\text {good}}\) 中的 path \(a\) 都要比 \(\mathcal{A}_{\text {weak}}\) 中的 paht \(b\) 要好,即:

\[ \operatorname{ACC}\left(\boldsymbol{a}, \mathcal{N}_{o}, \mathcal{D}_{v a l}\right) \geq \operatorname{ACC}\left(\boldsymbol{b}, \mathcal{N}_{o}, \mathcal{D}_{v a l}\right) \]

  其中 \(\mathcal{N}_{o}\) 是未知的 supernet。

Multi-path sampling with rejection

  我们的目标就是在训练 supernet 时从 \(\mathcal{A}_{\text {good}}\) 采样 path,即:

\[ p\left(\boldsymbol{a} ; \mathcal{N}_{o}, \mathcal{D}_{v a l}\right)=\frac{1}{\left|\mathcal{A}_{g o o d}\right|} \mathbb{I}\left(\boldsymbol{a} \in \mathcal{A}_{g o o d}\right) \]

  但是因为 supernet 是未知的,我们很难分出 \(\mathcal{A}_{\text {good}}\)\(\mathcal{A}_{\text {weak}}\),遍历搜索空间一遍开销肯定是不能接受的,所以作者提出了一种多路径拒绝式采样方法。
  我们定义 \(q = \left|\mathcal{A}_{g o o d}\right| /|\mathcal{A}|\),则从 \(\mathcal{A}_{\text {weak}}\) 的概率就是 \(1-q\),那么假设我们采样 \(m\) 个 path,则至少有 \(k\) 个 path 来自 \(\mathcal{A}_{\text {good}}\) 的概率就是:

\[ \sum_{j=k}^{m} \mathbb{C}_{m}^{j} q^{j}(1-q)^{m-j} \]

  当 \(q\) 较大或者 \(k\) 较小时这个概率都是很大的,所以作者每次就简单的挑选 top-\(k\) 的 path 去训练。
  因为挑选 top-\(k\) 又涉及到了在 \(D_{val}\) 上训练得到 ACC 去排序,这个操作也是开销比较大的,因次作者仅使用 \(D_{val}\) 的一个子集 \(\mathcal{D}_{v a l}\) 来训练得到 loss 去做排序,整个过程的伪代码如下:

   # Greedy training of supernet

Training with exploration and exploitation

  因为我们每次做完 greedy path filtering 后得到一些可能比较好的 path,它们一次训练可能不够充分,有重复训练的必要,所以这里作者也提出了一个 exploration 和 exploitation 的 trade-off,即使用一个 candidate pool \(\mathcal{P}\) 来存储这些比较好的 path,并且它其实是一个优先队列,priority 是每个 path 做 evaluation 时的 loss,下次训练时采取如下的采样:

\[ \boldsymbol{a} \sim(1-\epsilon) \cdot U(\mathcal{A})+\epsilon \cdot U(\mathcal{P}) \]

  因为 supernet 在训练初期是训练不充分的,每个 path 得到的 loss 不可信,也就是 priority 不可信,所以作者将 \(\epsilon\) 从 0 开始逐渐升大。
  这样一种采样方式其实也提高了我们从 \(\mathcal{A}_{\text {good}}\) 中采样的概率:

\[ q=\epsilon+(1-\epsilon)\left|\mathcal{A}_{g o o d}\right| / \mid \mathcal{A} \]

Stopping principle via candidate pool Different

  作者采取一种自适应的条件来终止训练,主要依据 candidate pool 的大小有没有稳定了:

\[ \pi:=\frac{\left|\mathcal{P}_{t} \cap \mathcal{P}\right|}{|\mathcal{P}|} \leq a \]   \(\mathcal{P}_{t}\) 这一次迭代前的 candidate pool。整个训练的伪代码如下:

Searching with candidate pool

  supernet 训练完毕后,使用 NSGA-II 进化算法在超网中搜索符合条件的最优模型,并且使用 candidate pool 初始化 Population,相较于随机初始化,借助于候选池能够使进化算法有一个更好的初始,提升搜索效率及最终的精度能得到更好的模型分布:

Conclusion

  商汤的这篇论文解决的核心问题就是让 supernet 更注重于有潜力的好 path 的训练,并且使用了贪心算法,提出了 multi-path sampling with rejection 和 candidate pool 的方法,还是非常让人有启发的。

Refer

  • [1] S. You, T. Huang, M. Yang, F. Wang, C. Qian, and C. Zhang, “GreedyNAS: Towards Fast One-Shot NAS with Greedy Supernet,” 2020.

相关内容


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



文章目录
  1. 1. 引言
  2. 2. Motivation
  3. 3. Greedy path filtering
    1. 3.1. Multi-path sampling with rejection
    2. 3.2. Training with exploration and exploitation
    3. 3.3. Stopping principle via candidate pool Different
    4. 3.4. Searching with candidate pool
  4. 4. Conclusion
  5. 5. Refer
  6. 6. 相关内容
您是第 位小伙伴 | 本站总访问量 | 已经写了 680.3k 字啦

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