EAS:基于网络转换的神经网络结构搜索 | AAAI 2018

论文提出经济实惠且高效的神经网络结构搜索算法 EAS,使用 RL agent 作为 meta-controller,学习通过网络变换进行结构空间探索。从指定的网络开始,通过 function-preserving transformation 不断重用其权重,EAS 能够重用之前学习到的知识进行高效地探索新的结构,仅需要 10 GPU days 即可

来源:晓飞的算法工程笔记 公众号

论文: Efficient Architecture Search by Network Transformation

Introduction


  为了加速神经网络搜索过程,论文提出 EAS(Efficient Architecture Search),meta-controller 通过网络转化(network transformation)操作进行结构空间探索,操作包含拓宽层,插入层,增加 skip-connections 等。为了继续使用学习到的权重,基于 function-preserving transformation 来初始化新的不同参数的网络,再进一步训练来提高性能,能够显著地加速训练过程。对于 meta-controller,则结合了最近的强化学习方法

Architecture Search by Net Transformation


  整体算法逻辑如图 1,meta-controller 学习如何对当前网络中进行网络转换,为了学习多种网络转换操作以及不增加 meta-contreoller 复杂性,使用 encoder network 来学习当前网络的低维表达,然后传到 actor netowrk 来生成一个确定的模型转换动作。为了处理不定长的网络结构输入以及考虑整体网络结构,使用 bidrectional recurrent network 以及 input embedding layer

Actor Networks

  给予输入结构的低维表达,每个 actor network 给予特定的网络转换动作,共有两种 actor network,分别是 Net2Wider actor 和 Net2Depper

  • Net2Wider Actor

  Net2Wider 在保持网络功能下替换网络的某一层为更宽的层,例如对于全连接层是增加 unit 数,对于卷积层是增加卷积核数。对于卷积层的卷积核K_l,shape 为(k_w^l,k_h^l,f_i^l,f_o^l),分别代表卷积核宽高以及输入和输出的维度数,将当前层替换成更宽的层即\hat {f}_o^l>f_o^l

  首先介绍随机映射函数G_l,可以获得新卷积核\hat{K}_l[k_w^l,k_h^l,f_i^l,f_j^l],第一个f_o^l直接从K_l中获得,剩余的\hat{f}_o^l-f_o^l维根据G_lK_l中随机选择一维,因此,更宽的新层的输出特征\hat{O}_l=O_l(G_l(j))

  为了保持原有的功能,由于输入多了复制的部分,下一层的卷积核K_{l+1}需要修改,新卷积核\hat{K}_{l+1}的 shap 维(k_w^{l+1},k_h^{l+1},\hat{f}_i^{l+1}=\hat{f}_o^l,f_o^{l+1}),公式 3 的意思大概是,权重要除以前一层对应维度复制的次数,以保证l+1层输出跟之前一样

  为了方便,论文使用的 Net2Wider actor 同时决定处理的层,对于 encoder netowrk 输出的每一层对应的 hidden state 使用 shared sigmoid 分类器,另外将卷积的核数或全连接的 unit 数进行分区,直接将决定的层的对应参数升至下一个区间,例如32\to 64

  • Net2Deeper Actor

  Net2DeeperNet 操作向网络中插入新的层,然后将其初始化成跟插入 identity mapping 一样,保持其原来的功能。对于新的卷积层,将其卷积核设为 identity 卷积核,对于全连接层,则将权重矩阵设为 identiy 矩阵,因此,新层必须与前一层有一样的核数或 unit。另外,想要保持原来网络的性能,对于激活函数\phi,必须满足\phi(I\phi(v))=\phi(v),ReLU 能满足,而 Sigmoid 和 thnh 不能,但仍然可以重用带 sigmoid 或 tanh 激活的网络的权重,毕竟这样总比随机初始化要好。另外,当使用 BN 时,要设置其 scale 和 bias 为 undo normalization,而不是初始化为 1 和 0

  Net2Deeper actor 的结构如图 3,为一个循环神经网络,hidden state 初始化为 encoder network 的最后一个 hidden state。将 CNN 结构根据 pooling 的位置分成多个 block,首先确定插入的 block,然后再确定插入层的下标,对于新的卷积网络,agent 还需要确定卷积核大小和步长,而对于全连接层则不需要。在卷积网络中,全连接层需要在网络的顶层,如果插入位置在全局池化或全连接后面,新层则指定为全连接层

Function-preserving Transformation for DenseNet

  原始的 Net2Net 设定网络是 layer-to-layer 的,没有并行层,但目前的网络大都将单层的输入应用到多个后续的多个层中,直接应用 Net2Net 会出现问题,因此论文对其进行了改进。对于 DenseNet,l^{th}层会将所有前面的层 concatenate 成输入[O_0,O_1,…,O_{l-1}],标记l^{th}层的卷积核为K_l,shape 为(k_w^l,k_h^l,f_i^l,f_o^l)
  假设需要拓宽层并保持其功能,首先根据 Net2WiderNet 操作按公式 1 和公式 2 生成新层\hat{K}_l,这样新输出为\hat{O}_l=O_l(G_l(j)),由于l^{th}的输出会传递到多层,\hat{O}_l的复制会传递到后面的所有层,所以要修改所有后续的层

  对于m^{th}>l层,输入变为[O_0,…,O_{l-1},\hat{O}_l,O_{l+1},…,O_{m-1}],将随机映射函数改为公式 4,f_o^{0:l}=\sum_{v=0}^{l-1}f_o^vl^{th}层的所有输入数量,公式 4 的第一部分为[O_0,…,O_{l-1}],第二部分为\hat{O}_l,第三部分为[O_{l+1},…,O_{m-1}]

\hat{G}_m的简单示意如上,前面的为新层的 index,后面为对应的旧的维度 index,然后m^{th}层的新权重直接使用替换成\hat{G}_m的公式 3 获得
  假设要在 DenseNet 的l^{th}层插入新层,新层输入为O_{new},输出为[O_0,O_1,…,O_l]。因此,对于m^{th}>l层,插入后的输入为[O_0,…,O_{l},O_{new},O_{l+1},…,O_{m-1}],为了按照类似 Net2WiderNet 那样保持性能,O_{new}应该为[O_0,O_1,…,O_l]中的一个复制

  新层的每个卷积核可以表示为 tensor\hat{F},shape 为(k_w^{new},k_h^{new},f_i^{new}=f_o^{0:l+1}),第三项为输入 channel 数。为了让\hat{F}的输入为[O_0,O_1,…,O_l]n^{th}项,按照类似公式 5 的方式进行设置(假设卷积宽高为 3),其它卷积核设为 0,当新层的的输出设定好后。建立一个特定的随机映射(这里是按照层建立映射,前面是按照映射建立层),然后按照公式 4 和公式 3 来修改后续的层的卷积核

Experiments and Results


  EAS 使用 5 GPU 进行搜索,有两种设定,第一种为普通卷积网络空间,仅包含卷积、池化和全连接,第二种为 DenseNet 结构空间

Training Details

  meta-controller 为单层双向 LSTM,50 个 hidden units,embedding size 为 16,使用 ADAM 进行训练。每轮通过网络转换采样 10 个模型,由于重用了特征,每个模型只训练 20 轮(原来为 50 轮),初始学习率调低为 0.02,使用 SGD 训练,对准确率acc进行线性变化来放大高准确率的收益,例如tanh(acc_v\times \pi/2),另外,每个卷积和全连接后面接 ReLU 和 BN

Explore Plain CNN Architecture Space

  • Start with Small Network

  初始网络如表 1,卷积核大小为\{1,3,5 {\}},卷积核数量为\{16,32,64,96,128,192,256,320,384,448,512 \},全卷积的 unit 数为\{64,128,256,384,512,640,768,896,1024 \}

  训练分为两阶段,第一阶段每轮将起始网络进行 5 次 Net2Deeper 和 4 次 Net2Wider,采样够 300 个网络后,选取表现最好的网络训练 100 轮作为下阶段的输入。第二阶段也是进行 5 次 Net2Deeper 和 4 次 Net2Wider,采样 150 个网络后停止,取最好模型进行 300 轮迭代。结果如表 2 的 depth=16,整体需要 10 GPU days,共 450 个网络

  • Further Explore Larger Architecture Space

  将上一个实验的最好模型作为这次实验的起点,结果如表 2 的 depth=20,另外与 SOTA 进行了对比,结果如表 3

  • Comparison Between RL and Random Search

Explore DenseNet Architecture Space

  将 DenseNet-BC(L=40,k=40)作为起点,结果如表 4

CONCLUSION


  论文提出经济实惠且高效的神经网络结构搜索算法 EAS,使用 RL agent 作为 meta-controller,学习通过网络变换进行结构空间探索。从指定的网络开始,通过 function-preserving transformation 不断重用其权重,EAS 能够重用之前学习到的知识进行高效地探索新的结构,仅需要 10 GPU days 即可



如果本文对你有帮助,麻烦点个赞或在看呗 ~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

work-life balance.