neural architecture search with reinforcement learning 用强化学习RL架构进行NAS工作
提出了以RNN作为控制器(Controller)用于NAS的RL架构
由RNN预测诸如层(filter)、跨步(stride)大小,通道数(channel)等超参数,一层一层从前往后预测
简而言之,每个层(Layer)标记一个锚点(anchor point),每一对层(相邻层)决定是否形成跳跃连接,其中$W_{prev}$、$W_{curr}$和$v$是可训练的参数,$h_k$是RNN控制器到第$k$层时的隐藏状态(hiddenstate)
$$\mathrm{P}(\mathrm{Layerjisaninputtolayer~i})=\mathrm{sigmoid}(v^\mathrm{T}\mathrm{tanh}(W_{prev}*h_j+W_{curr}*h_i))$$
分布式架构,多台服务器一起上
就算是并行计算,那也是钱砸出来的,试那么多个模型还是很慢啊
基本原理就是依次生成运算方法或激活函数,最后指定哪个函数归属哪个结点,比如下图中的1,0,那么
划分块示意图如下,可以清楚的看到
示例为"base 2"架构(实际训练是"base 8"架构)
其中细胞状态$C_t$是借鉴了LSTM的设计原理:
知乎上扒的,有点糊...
下图是笔者基于论文RNN设计原理整理的生成LSTM的示意图,至于看上去像是base多少看不太出来,maybe base 4
大概就是跑的仍然比较慢,不过论文里没挂出来训练多久,只说同时用了800个GPU,都是之后引用的论文的挂出来的(NASNet那篇说500个GPU跑了28天 = 1w4 GPU days)。扬长避短
SMASH: One-Shot Model Architecture Search through HyperNetworks 通过构建超网(HyperNet)实现单次模型架构搜索
解释:
- 首先训练超网$H$(一个输入为神经架构,输出为权重的特殊神经网络)
- 采样小批量输入$x_i$,随机架构$c$和随机权重$W=H(c)$
- 得到训练误差反向传播更新$H$
- 随机采样大量架构$c$,找到一个最好的$c_0$
- 在验证集上评估找到最好的$c_0$
- 正常训练$c_0$的权重,得到结果
- 如何采样架构?论文提出了Memory-Bank,将采样拓扑编码为二进制向量
- 如何采样权重?采用超网(HyperNet)得到二进制拓扑向量所映射的权重空间(其实就是跑一遍超网$H$)
memery-bank读取和写入概念(以ResNet,DenseNet等为例):
其中白色矩形为 Memery-Bank ,用于存储神经网络架构(使用预编码规则的二进制向量存储)
(只有一个大Memery-Bank供存储,不是1、3、2个Memery-Bank, 笔者起初误解了 )
读取:
采样(随机或启发式)网络架构,用于评估、训练或进一步搜索。
写入:
生成网络架构(随机、进化算法或其他方法得出),编码后存入。
以CNN为例,论文中采用了下右图的基本网络框架,其中trans为
上左图显示了每个块(block)中的一个操作,它包含一个
实现细节看不太懂
不难发现,由于是一次性训练的超网,同一个架构所用的是同一组权重,然而这可能并不合适,对于不同的架构,可能存在不同的特征和需求,使用同一组权重可能无法充分捕捉到每个架构的特性。这可能会导致某些架构的性能不足,尤其是在架构间有显著差异时。
Learning Transferable Architectures for Scalable Image Recognition 提出了新颖的搜索空间,即常规单元和缩减单元($\text{Normal Cell and Reduction Cell}$),采用这种搜索空间甚至使得采用强化学习方法只比随机搜索强一点。
非常好搜索空间,常规单元和缩减单元($\text{Normal Cell and Reduction Cell}$),使得训练得到的网络对数据集分辨率的变化具有较高的鲁棒性,具有可迁移、可扩展性。
常规单元($\text{Normal Cell}$)是不改变图像特征图的卷积单元,而缩减单元($\text{Reduction Cell}$)则将特征图的长宽减半,具体操作是将第一个
引用21年kbsAutoML综述(指
具体也没说);对于非第一层,他们由前两层产生。
生成
- 从
$\text{hidden state set}$ 中挑第一个$h_1$ (怎么挑?) - 从
$\text{hidden state set}$ 中挑第二个$h_2$ - 为
$h_1$ 找一个$\text{operation}_1$ (怎么找?) - 为
$h_2$ 找一个$\text{operation}_2$ - 找一个能够组合
$\text{operation}_1$ 和$\text{operation}_2$ 的输出来创建一个新$h_3$ 的方法,随后将$h_3$ 加入$\text{hidden state set}$
以上“怎么挑”,“怎么找”都是RNN控制器需要训练的内容。
即如下的生成
统计:有
有的同学可能听到这大概懂
还记得上文提到的灵活性吗,保证灵活性可不只是提高
Efficient Neural Architecture Search via Parameter Sharing 通过参数共享进行高效搜索
这也有一个超网,不过在论文中的表述是
采用的还是强化学习(RL)方法,其中控制器由一个LSTM组成,它的主要任务是什么呢,如上图所示,对于每个节点,它主要是决定之前需要连哪个节点,还有采样什么激活函数(activation function)。
两组参数交替训练:
- LSTM 控制器(controller)的参数
$\theta$ - 子模型共享参数(就是那张大型计算图
$G$ 的参数)$\omega$
还是基于
Controller对每个结点进行前结点采样和激活函数采样,权重取
在Penn Treebank数据集上只跑了0.45个 GPU days(一张卡跑了10h)
先是试了试基于
再是基于
过程也与之前类似,一个
缩减单元同理。
候选操作
关于
- 除前两个块外排列组合
$(B-2)!$ - 每个块两条
$\text{input}$ 的排列组合$((B-2)!)^2$ - 每条
$\text{input}$ 都有一个对应的$\text{operation}$ $(M^B\times(B-2)!)^2$ - 常规单元和缩减单元独立采样
$(M^B\times(B-2)!)^4$
考虑到不同的
可分离卷积(Separable Convolution)Tips: 其中
$\mathbf{sep_conv_3\times3}$ 代表$3\times3$ 的可分离卷积,那么啥是分离卷积? 对于图像大小为$\mathrm{N}$ ,输入、输出通道数分别为$\mathrm{I}$ 、$\mathrm{O}$ ,卷积核大小为$\mathrm{S}$
- 传统卷积计算量 $$ \mathrm{N} \times \mathrm{I} \times \mathrm{O} \times \mathrm{S} $$
- 分离卷积计算量(深度卷积 + 逐点卷积)
- 深度卷积:
$$\mathrm{N} \times \mathrm{I} \times \mathrm{S}$$ - 逐点卷积:
$$\mathrm{N} \times \mathrm{I} \times \mathrm{O}$$
In summary, 可分离卷积通过削弱传统卷积的灵活性,大大减少了计算量。
DARTS: differentiable architecture search 提出了可微分搜索空间
常规强化学习使用的搜索空间是离散的,不连续的,所谓可微分搜索空间就是将结点之间的连接通过不同操作加权和得到,通过学习其中的权来获取架构,最后由权最大的操作导出最终架构。
以下是边混合操作的公式:
最终目标是要获得一个架构$\alpha$,它能使得在验证集上的损失 $\mathcal{L}{val}(w^{}(\alpha),\alpha)$ 最小化,其中权重 $w^{}(\alpha)$ 是能够使训练集损失 $\mathcal{L}{train}(w,\alpha)$ 最小化的权重
算法如下: $$\begin{aligned}&\text{Create a mixed operation }\bar{o}^{(i,j)}\text{ parametrized by }\alpha^{(i,j)}\text{ for each edge }(i,j)\&\textbf{while }not\textit{ converged do} \&\begin{array}{c}1.\text{ Update architecture }\alpha\text{ by descending }\nabla_\alpha\mathcal{L}{val}(w-\xi\nabla_w\mathcal{L}{train}(w,\alpha),\alpha) \(\xi=0\text{ if using first-order approximation})\end{array} \&\begin{array}{c}2.\text{ Update weights }w\text{ by descending }\nabla_w\mathcal{L}_{train}(w,\alpha)\end{array} \&\text{Derive the final architecture based on the learned }\alpha.\end{aligned}$$
其中 $\nabla_{\alpha}\mathcal{L}{val}(w-\xi\nabla{w}\mathcal{L}{train}(w,\alpha),\alpha)$ 是估算 $\nabla{\alpha}\mathcal{L}_{val}(w^{*}(\alpha),\alpha)$ 的结果。
估算后经链式法则推导,由于二阶导难以计算,为进一步减少计算量,对二阶导进行近似,推导过程如下: $$\begin{align} &\quad\nabla_{\alpha}\mathcal{L}{val}(w^{*}(\alpha),\alpha) \ &\approx \nabla{\alpha}\mathcal{L}{val}(w-\xi\nabla{w}\mathcal{L}{train}(w,\alpha),\alpha) \ &=\nabla{\alpha}\mathcal{L}{val}(w',\alpha)-\xi\nabla{\alpha,w}^{2}\mathcal{L}{train}(w,\alpha)\nabla{w'}\mathcal{L}{val}(w',\alpha) \ &\approx\nabla{\alpha}\mathcal{L}{val}(w^{\prime},\alpha)- \xi\frac{\nabla{\alpha}\mathcal{L}{train}(w^{+},\alpha)-\nabla{\alpha}\mathcal{L}_{train}(w^{-},\alpha)}{2\epsilon} \end{align}$$
其中 $w'=w-\xi\nabla_{w}\mathcal{L}{train}(w,\alpha)$ , $w^{\pm}=w\pm\epsilon\nabla{w^{\prime}}\mathcal{L}_{val}(w^{\prime},\alpha)$
变形得: $$ \begin{aligned} f'(x_0)\approx \frac{f(x_0+h)-f(x_0)}{h} \end{aligned} $$
同理: $$ \begin{aligned} f'(x_0)\approx \frac{f(x_0)-f(x_0-h)}{h} \end{aligned} $$
上下式相加除二得: $$ \begin{aligned} f'(x_0)\approx \frac{f(x_0+h)-f(x_0-h)}{2h} \end{aligned} $$
令$h=\epsilon\cdot A$,得到: $$ \begin{aligned} f'(x_0)\cdot A\approx \frac{f(x_0+\epsilon\cdot A)-f(x_0-\epsilon\cdot A)}{2\epsilon} \end{aligned} $$
其中令 $f(\cdot )=\nabla_{\alpha}\mathcal{L}{train}(\cdot,\alpha),A=\nabla{w'}\mathcal{L}{val}(w',\alpha),x_0=w,w^{\pm}=w\pm\epsilon\nabla{w^{\prime}}\mathcal{L}{val}(w^{\prime},\alpha)$,带入得: $$ \begin{aligned} \nabla{\alpha,w}^2\mathcal{L}{train}(w,\alpha)\cdot \nabla{w'}\mathcal{L}{val}(w',\alpha)&\approx \frac{\nabla{\alpha}\mathcal{L}{train}(w+\epsilon\cdot \nabla{w'}\mathcal{L}{val}(w',\alpha),\alpha)-\nabla{\alpha}\mathcal{L}{train}(w-\epsilon\cdot \nabla{w'}\mathcal{L}{val}(w',\alpha),\alpha)}{2\epsilon} \ &=\frac{\nabla{\alpha}\mathcal{L}{train}(w^{+},\alpha)-\nabla{\alpha}\mathcal{L}_{train}(w^{-},\alpha)}{2\epsilon} \end{aligned} $$
又通过一次近似,将二阶导转化为了一阶导,由此避免了二阶导的昂贵计算代价。
不过后人的实验说明,一阶导($即\xi=0时,w^{}(\alpha)\approx w$)的结果和二阶导($即\xi>0时,w^{}(\alpha)\approx w-\xi\nabla_{w}\mathcal{L}_{train}(w,\alpha)$)的结果(精度)相差不大,$\xi>0$时反而计算代价较大。
基于DARTS本身设计的特点,当出现两个操作权重相近时,如