原文链接:https://arxiv.org/pdf/1812.00332.pdf 发表:ICLR 2018
编辑:牛涛
code:https://github.com/MIT-HAN-LAB/ProxylessNAS
为了减小NAS的复杂度,之前的方法通过在proxy dateset上搜索cell然后堆叠的方式生成网络结构。但是proxy上性能好不代表迁移后表现也好,同时堆叠cell需要cell结构都一样,这限制了其结构多样性。
由此,本文提出了一种在target task上的NAS方法,同时还兼顾了硬件的metric。该方法允许cell是多样的。
类似于One-Shot和DARTS,本文建立了一个hypernet,每层的输出是分支输出的融合结果。如下式
但是这样做的一个显著问题是,每次计算的时候需要保留所有支路的中间变量,这需要庞大的显存并且很耗时。作者通过二值化在每次只选择一条支路计算的方式解决上述问题。具体如下
对于结构参数,因为其参与了二值化无法直接求导,所以借鉴了二值神经网络(准确的说是里面的直通估计),跳过了二值化处的求导来传递梯度。然而,更新结构参数的时候还是需要把整个hyper-net传到GPU中,为了解决显存问题,作者利用了一个很直观的思想。即如果某一个candidate是最好的,它比任意一个都要好。通过在N个候选path中依据概率选择两个,只需要更新这两个的大小关系,不断重复迭代最后任意两个都会有明确的大小关系。(这部分原文没有公式只有文字描述,详情可以参考原文)
作者在更新结构参数的同时还考虑到了推理时延,每层的时延也采用mix-operation的方式,对于该层的每个分支,用一个时延预测模型预测其推理时延,记为F,如下式
因此在更新结构参数时的总损失写为
除了用直通估计传递梯度更新的方式,作者还使用了RL的方式(策略梯度)来更新,详情可以参考原文,和最开始的NAS如出一辙。