├── paper-notes ├── Designing neural network architectures using reinforcement learning.md ├── MnasNet: Platform-Aware Neural Architecture Search for Mobile.md ├── DARTS: Differentiable Architecture Search.md ├── Efficient Architecture Search by Network Transformation.md ├── Learning transferable architectures for scalable image recognition.md ├── Neural architecture search with reinforcement learning.md ├── Large-scale evolution of image classifiers.md ├── Efficient Neural Architecture Search via Parameter Sharing.md └── Path-Level Network Transformation for Efficient Architecture Search.md └── README.md /paper-notes/Designing neural network architectures using reinforcement learning.md: -------------------------------------------------------------------------------- 1 | 这篇论文按照arXiv发布时间来看应该是同一时期的工作,采取了与NAS非常不同的架构。在强化学习算法上,前者用的是policy-bases算法REINFORCE, 2 | 而后者是传统的Q-learning方法,注意不是DQN,根据论文来看作者用的Q-Learning是没有包含FA的,也就是直接查表,因此感觉没有NAS的架构灵活。 3 | 4 | 这篇文章有很多的细节部分,没有细读,在这里只是总结一下一些大的框架。首先是状态空间的定义: 5 | 6 | ![](http://o7ie0tcjk.bkt.clouddn.com/ic34jwu9voavqy7l.jpg) 7 | 8 | 每个时间步的状态都是上表中四种类型之一,然后允许agent在任意时间步选择终止步从而终止网络结构的搜索。这里可以看出,这篇论文和NAS有一个逻辑定义 9 | 上的区别,NAS把这篇论文中的state定义为action,因此本文的动作空间就没有NAS中定义的自然,本文的动作空间是根据当前所处的状态不同而不同的, 10 | 为了使得最后搜索出的架构合理且加速整个训练流程,作者对action的选取增加了很多的限制,比如当当前状态处于第i层时,只能选择层数是i+1的网络类型。 11 | 12 | 下面是整个算法的伪代码: 13 | 14 | ![](http://o7ie0tcjk.bkt.clouddn.com/c3htk16c49w93ekk.jpg) 15 | -------------------------------------------------------------------------------- /paper-notes/MnasNet: Platform-Aware Neural Architecture Search for Mobile.md: -------------------------------------------------------------------------------- 1 | 亮点在于直接使用移动设备的延迟作为reward的一部分来考虑,而不是理论上计算FLOPS 2 | 3 | ![](http://o7ie0tcjk.bkt.clouddn.com/nz5p2uutf89hn5sk.jpg) 4 | 5 | 然后搜索空间比较简单(因为是Mobile环境,网络结构减少碎片化可以大幅度提升效率): 6 | 7 | ![](http://o7ie0tcjk.bkt.clouddn.com/6yoqj3hpw3k2ubar.jpg) 8 | 9 | 实验结果: 10 | 11 | ![](http://o7ie0tcjk.bkt.clouddn.com/emquy8rax7ns3bi9.jpg) 12 | 13 | ![](http://o7ie0tcjk.bkt.clouddn.com/md5pyebz7yujuzt1.jpg) 14 | 15 | 可以看到在延迟减少的情况下性能还有所提升。 16 | 17 | 下面是最终的网络结构: 18 | 19 | ![](http://o7ie0tcjk.bkt.clouddn.com/lj6yfjv8z6rmfbvn.jpg) 20 | 21 | 然后是最佳网络结构变种的耗时情况: 22 | 23 | ![](http://o7ie0tcjk.bkt.clouddn.com/2yol4q23buj4qsx4.jpg) 24 | 25 | 最后作者关于网络结构有一些结论: 26 | 1. 5×5的kernel会更快一些 27 | 2. layer的多样性比较重要(现存的network的layers都比较单一) 28 | -------------------------------------------------------------------------------- /paper-notes/DARTS: Differentiable Architecture Search.md: -------------------------------------------------------------------------------- 1 | 这篇论文没有采用强化学习或者遗传算法等进行网络架构的搜索,但是效果很好,而且速度非常快。在我看来也是对NASNet的一种改进,同时结合了ENAS的思想,即在一个完全模型(有向无环图) 2 | 中去搜索子图作为网络架构。但很大的区别是,算法的整个迭代过程中是将每条边都进行考虑,而不是只是从其中用某种策略进行采样。同时考虑的方法是对于可选 3 | 操作(例如对于卷积网络来说,包括卷积,池化等操作),采用softmax的方法给每种操作产生的结果做一个加权平均,这样使得离散的网络搜索过程变成了一个 4 | 可微的优化问题。 5 | 6 | 形式化来说,每种操作都赋予一个选取概率alpha,根据alpha值进行softmax操作,其实就是一个多分类问题。这样网络结构的搜索其实就转化为求出一组alpha值, 7 | 这一组alpha值就可以看成是网络结构的一种编码。由于这alpha值是连续的,因此这就是一个可微的优化问题,loss就是根据验证集的精度得到。最后alpha训练出来 8 | 之后,每个block选alpha值最大的操作作为最终的网络结构。 9 | 10 | 因此网络结构搜索问题可以转化为以下优化问题: 11 | 12 | ![](http://o7ie0tcjk.bkt.clouddn.com/z4aqebfzhd7c4tve.jpg) 13 | 14 | 直接求解以上问题是不现实的,因为alpha每一次变化都要重新求解(4)式,作者提出了一种迭代求解的思路,这种思路很简单,但是其中有一个很重要的点就是 15 | 在固定w求解alpha的时候,w要往前再走一个梯度下降步(说实话我不是很理解,论文也没有给出这样做对收敛性有什么好处之类的证明,只不过有些论文在解 16 | 以上优化问题的时候是这么做的)。 17 | 18 | 算法流程如下: 19 | 20 | ![](http://o7ie0tcjk.bkt.clouddn.com/5dr3y7294mwai0s2.jpg) 21 | -------------------------------------------------------------------------------- /paper-notes/Efficient Architecture Search by Network Transformation.md: -------------------------------------------------------------------------------- 1 | 这篇论文主要借鉴了Net2Net的思想,并将其应用到以强化学习为基础的NAS中。其主要思想是通过应用Net2Net之后,每次进行结构 2 | 搜索时都不用重新训练网络,因为其动作空间是在之前的网络上“加宽”或者“加深”,之前训练好的参数直接无损地复制(说复制不太恰当 3 | ,具体后面解释)过来,这样可以大幅度地加速训练。 4 | 5 | 它和NAS还有一个主要区别在于并不是直接用网络结构作为state,而是将每一层网络结构进行编码之后输入到一个Bi-LSTM中得到整个网络 6 | 的一个编码,以这个编码作为state。整体框架如下所示: 7 | 8 | ![](http://o7ie0tcjk.bkt.clouddn.com/8yfe98ufthbs4kr6.jpg) 9 | 10 | 这个架构中最重要的还是两种Actor Network,分别是Net2Wider以及Net2Deeper,下面分别解释这两种操作。 11 | 12 | 首先是Net2Wider,这里的加宽对于全连接层来说就是增加维度,对于卷积层来说就是增加filter的个数。以卷积层来举例,假设第i层一共有 13 | l(i)个filter,进行加宽之后变成了m(i)个filter,为了保证网络的输出不变,需要进行的操作就是这m(i)个filter中前l(i)个filter的 14 | 参数直接从原来的复制过来,剩余的m(i)-l(i)个filter的参数从原先的l(i)个中随机采样。这还没完,因为这m(i)个filter中有些参数被 15 | 复制了多次,因此第(i+1)层的filter相对应的就要除去重复次数,这样才能保证网络输出不变。 16 | 17 | Net2Wider Actor的具体结构如下所示: 18 | 19 | ![](http://o7ie0tcjk.bkt.clouddn.com/wmkyqyc1nv9kmd33.jpg) 20 | 21 | 这里的softmax分类器是所有层共享的,其首先输出每一层是否要加宽,如果是的话就把该层的维度或者filter个数从当前值增加到预先定义好的 22 | 下一个级别,这里的动作空间都是离散的。 23 | 24 | 对于Net2Deeper操作就要简单些,只要增加一个identity层就可以。Net2Deeper Actor的结构如下: 25 | 26 | ![](http://o7ie0tcjk.bkt.clouddn.com/094qwgbnpsdqofhq.jpg) 27 | 28 | 这里的block是以pooling层分隔的。论文中还提出了一个针对DenseNet结构的搜索空间,具体可参看论文。 29 | -------------------------------------------------------------------------------- /paper-notes/Learning transferable architectures for scalable image recognition.md: -------------------------------------------------------------------------------- 1 | 这篇论文是NAS的后续工作,主要改进在于设计了一个新的搜索空间NASNet search space,借鉴了Inception 2 | 以及Resnet的网络结构。主要实验流程,首先在CIFAR10上进行预训练,接着在ImageNet上进行fine-tune。 3 | 同时对于回归任务,使用了在以上任务中提取出的feature结合Faster-RCNN在COCO数据集上进行了detection。 4 | 5 | 搜索空间可简单概括如下,其整个网络结构中只有两种Cell(一般意义上的layer,这里的layer类似于Inception网络), 6 | 即Normal Cell以及Reduction Cell,前者输入与输入的feature map的size相同,后者输出feature map的size 7 | 高度和宽度缩小为输入的1/2。然后整个网络都是这两种Cell的交替堆叠,其中每个Cell都可以重复堆叠多次。值得注意的是, 8 | 所有同种类的Cell内部结构都是完全相同的。如下图所示: 9 | 10 | ![architecture](http://o7ie0tcjk.bkt.clouddn.com/nas-paper-notes/arch.png) 11 | 12 | 这两种Cell均由5个Block组成,每个Block又由五部分组成: 13 | - 输入1 (从前两层layer输出中选择或者从本层前面Block的输出选择或者是输入图片) 14 | - 输入2 (同上) 15 | - 针对输入1的操作 16 | - 针对输入2的操作 17 | - 针对操作之后两个输出的合并操作(elementwise add或者depthwise concat) 18 | 19 | 具体可选操作如下图所示: 20 | 21 | ![opera](http://o7ie0tcjk.bkt.clouddn.com/nas-paper-notes/opera.png) 22 | 23 | 总结起来就是每种Cell共需要5B个softmax输出。论文中同时学习两种Cell的结构,采用的方法是网络设定为10B个softmax层 24 | 输出,前五个给Normal Cell,后五个给Reduction Cell,总结如下图: 25 | 26 | ![control_model](http://o7ie0tcjk.bkt.clouddn.com/nas-paper-notes/control_model.png) 27 | 28 | 附上最优网络结构: 29 | 30 | ![best_arcg](http://o7ie0tcjk.bkt.clouddn.com/nas-paper-notes/best_arch.png) 31 | 32 | 另外比较有意思的一点是论文中的baseline选择为random search算法,最后的效果和PPO只差了一个点左右,作者解释说是因为 33 | 搜索空间设计的比较精妙,所以随机策略也能取得很好的效果。 34 | 35 | ![random_search](http://o7ie0tcjk.bkt.clouddn.com/nas-paper-notes/random_search.png) 36 | 37 | 在论文附录部分提到了一个比较重要的细节,就是如果操作选择为seperable convelution的时候,需要将这个操作对输入进行两次, 38 | 实验结果表明这样设计会使得效果提升很多。除了这一点之外,附录部分还提到了很多实现细节,值得仔细研究。 39 | -------------------------------------------------------------------------------- /paper-notes/Neural architecture search with reinforcement learning.md: -------------------------------------------------------------------------------- 1 | 这篇论文应该算是用强化学习进行网络结构搜索的鼻祖了(就目前看过的论文看来,欢迎指正),毕竟用800个GPU训练28天这种事情也就Google 2 | 能干得出来。 3 | 4 | 网络结构搜索用强化学习来解决,其主要问题在于如何把结构搜索这个问题应用到强化的结构中,也就是状态空间、动作空间以及reward的定义问题。 5 | 论文中定义的方法按我的理解整理如下: 6 | - 状态空间 7 | - 对于论文中状态空间的定义其实有两种方式。 8 | - 如果按照论文中的公式来看,其状态转移方程就没有涉及到状态,只有action的转移概率。按照这种 9 | 定义来理解的话,结构搜索这个问题只有一个状态,有种bandit问题的感觉了 10 | - 我的另外一种观点是,由于论文采用RNN来进行网络结构的搜索,在每个 11 | 时间步网络以前一步的hidden state作为输入,然后这一步的sofmax产生输出(类似图片描述生成的模式,只用前一步的hidden state作为输入) 12 | 即为action。这样看来,state可以表示为之前所有的action的一个joint distribution 13 | - 动作空间 14 | - 论文其实一共搜索了三种网络结构,分别是一般的CNN、带skip connection的CNN(Resnet)以及LSTM。对于这三种结构分别设有不同的动作空间, 15 | 其实也就是不同的网络组成模块,CNN的话就有filter height/width、stride height/width等等。skip connection就在之前的基础上新加 16 | 了一个确定connection位置的anchor。至于LSTM则比较有意思,论文设计了一种更通用的类LSTM结构,我就在后面直接贴图好了 17 | - reward 18 | - reward的定义就很自然了,将搜索出的网络在验证集上进行训练,最后的accuracy经过一些预处理后作为reward 19 | 20 | 所以整个的流程可以表示如下: 21 | 22 | ![nas_overview](http://o7ie0tcjk.bkt.clouddn.com/nas-paper-notes/nas_overview.png) 23 | 24 | 对于三种不同网络结构的搜索空间,可以由下面三张图看出来,首先是普通的CNN, 可以看到只有卷积层: 25 | 26 | ![cnn](http://o7ie0tcjk.bkt.clouddn.com/nas-paper-notes/cnn.png) 27 | 28 | 然后是带有skip connection的CNN: 29 | 30 | ![cnn_sc](http://o7ie0tcjk.bkt.clouddn.com/nas-paper-notes/cnn_sc.png) 31 | 32 | 最后是LSTM: 33 | 34 | ![lstm](http://o7ie0tcjk.bkt.clouddn.com/nas-paper-notes/lstm.png) 35 | 36 | 在强化学习算法上,论文选取了带有baseline的REINFORCE算法,baseline是之前架构accuracy的exponential moving average。 37 | 38 | 在实现的时候为了加速训练,采用了如下的并行架构: 39 | 40 | ![parallel](http://o7ie0tcjk.bkt.clouddn.com/nas-paper-notes/parallel.png) 41 | -------------------------------------------------------------------------------- /paper-notes/Large-scale evolution of image classifiers.md: -------------------------------------------------------------------------------- 1 | 论文采用遗传算法代替强化学习进行网络结构的搜索。 2 | 3 | 本文采用的遗传算法较为简单,只包含选择和变异部分,交叉操作没有采用,原因是因为本文采用的编码方式不是类似二进制编码,而是直接用有向无环图 4 | 来表示每一个个体,也就是网络结构。其中图的顶点代表tensot或者activation(batch normalization or ReLU or Linear),边代表卷积操作 5 | 或者identity操作(参照resnet,最近一篇论文表示Resnet结构同样拥有general function approximator的能力,同时比fully connected网络 6 | 理论假设更少)。同时learning rate信息也保存在个体中,这一点倒是挺少见,大部分论文都只做网络结构的搜索。 7 | 8 | 用作编码的有向无环图允许一个顶点有大于1的入度和出度。大于1的入度会带来一个问题,也就是论文假定activation(顶点)的输入必须是相同size的, 9 | 本文的做法是从所有入边中选取一条作为primary edge,这条边不能是skip connection。然后其他边必须通过reshape、channel的truncation或者oadding 10 | 去符合primary edge的维度。适应度指的是模型经过训练后在验证集上的精度。 11 | 12 | 论文采用的遗传算法具体流程如下: 13 | 1. 从一个个体开始 14 | 2. 变异,并将变异的后代加入群体中 15 | 3. 随机选择两个个体,杀掉(在总个体数不少于lower bound的情况下)适应度更低的 16 | 4. 跳转到第二步,重复这个过程直到满足终止条件 17 | 18 | 变异操作包括以下几种 19 | - 改变学习率 20 | - 不变 21 | - 重置weight 22 | - 增加卷积层 23 | - 去除卷积层 24 | - 改变stride ($2^{n}$) 25 | - 改变channel 26 | - 改变filter size (奇数) 27 | - 加入identity连接 28 | - 加入skip connection 29 | - 去除skip connection 30 | 31 | 以上所有操作需要进行随机采样的都是从均匀分布进行采样,详细描述如下: 32 | 33 | ![](http://o7ie0tcjk.bkt.clouddn.com/5y8tf.jpg) 34 | 35 | 为了提高训练效率,论文采用了并行的方式进行算法迭代。本文采用的方法比较有意思,除了运行算法的worker之外(设定群体个数 36 | 的1/4,论文采用了250个worker),还有一个共享目录存放群体,这些群体不是存成文件,而是存成文件夹,然后把模型序列化之后 37 | 存到这个文件夹中。然后通过给文件夹重命名来表示当前这个个体的状态,例如训练中、已经死亡、活跃等等。 38 | 39 | 在算法开始阶段,每个worker运行的模型都只有一层隐藏层,学习率设定为0.1且不包含卷积层。论文表示这样可以尽可能少的去利用 40 | 先验信息(若变异操作设计得更加底层不知道效果如何),让算法更加充分的挖掘搜索空间。还有一点要注意的是,论文为了减少训练 41 | 难度,大部分变异操作除了变异的部分之外权重都全部保留。 42 | 43 | 论文在附录中贴出了详细的伪代码以及实现细节,最终搜索出的模型架构如下: 44 | 45 | ![](http://o7ie0tcjk.bkt.clouddn.com/z4ooa.jpg) 46 | 47 | 可以看出有一些很神奇的结构,比如多个卷积不加激活函数(完全可以用一个卷积表示),还有一个卷积后面连续跟着好几个非线性变换。 48 | -------------------------------------------------------------------------------- /paper-notes/Efficient Neural Architecture Search via Parameter Sharing.md: -------------------------------------------------------------------------------- 1 | 这篇论文是NAS的进阶版,我觉得其实就是NASNet的一种改进。其中心思想在于,将搜索空间固定在一个有向无环图中,这个图中的顶点代表 2 | 具体操作,根据设计的是CNN还是RNN有所不同,然后边就代表层与层之间的连接。重点在于有向图,这个图中的顶点是有序号的,一条边只能从 3 | 序号靠前的顶点出发,终止于序号靠后的顶点。 4 | 5 | 那么为什么ENAS能够只用一张1080Ti就能在16个小时之内训练出一个很好的网络呢?精髓就在于参数共享,由于强化学习算法在搜索空间,也就是 6 | 这个有向无环图中进行搜索,每一次选取的边以及顶点上的操作都各不相同,但是,如果强化算法之前进行某次采样时对某条边上的参数进行了训练, 7 | 那么之后某一次采样又采到这条边时,参数就不是初始化了,而是直接用之前训练好的参数。意思就是说,对于强化算法来说有一个全局的参数库, 8 | 每一次搜索都是从这个参数库中选取一些参数,更新之后又写回到参数库中。 9 | 10 | 所以训练的流程可以叙述如下:首先强化学习的控制器还是一个RNN,它有一套参数w,然后共享参数库里是另一套参数theta。首先我们固定w,然后 11 | 采样出一些网络结构,我们训练这些结构(注意,只要这些结构有公共边,那么这些边的参数就是互相共享的,只有一个总的全局参数库)直到收敛 12 | (其实是400个step),根据最后得到的reward来更新w。之后继续重复上述过程,强化算法和NAS论文一样。这里有个很有意思的地方,由于每个采样出的 13 | 网络都有一个reward, 最后用策略梯度来更新w的时候,实验表明虽然理论上方差会很大,但是batch=1同样能取得很好的效果! 14 | 还有一点值得说明的是训练完成以后最终的网络怎么获得。论文采用的方式是先采样出一堆网络,然后对每个网络从验证集中拿出一个batch在上面进行性能测试, 15 | 选准确率最高的网络继续训练。这个和一般的方法还真有些不一样,论文也说一般用的方法是选出一堆网络每个都直接在训练集上继续训练直到收敛, 16 | 最后选个最好的,但是很明显前一种方法耗费的资源要小得多,虽然感觉上只在验证集的一个batch测试有点不靠谱,但是实验表明性能还真没差多少。 17 | 我感觉原因应该是最后采样出的网络性能其实都差不多吧 = = 18 | 19 | 下面分别讲一下每种网络的搜索空间都是什么样的,我就贴几张图,不细讲了,看图其实就能明白个大概。 20 | 21 | 首先是RNN: 22 | 23 | ![](http://o7ie0tcjk.bkt.clouddn.com/ojdhoqzur8kbxv6z.jpg) 24 | 25 | 然后是CNN,这里CNN有两种方式,一种是直接训练整个网络,另外一种就是像NASNet那样训练Cell然后堆叠起来: 26 | 27 | ![](http://o7ie0tcjk.bkt.clouddn.com/zwto7k8zm67x7kzx.jpg) 28 | 29 | 注意这里不像RNN只能从之前的顶点里选一条边,而是任意条,搜索空间一下子大了好多。 30 | 31 | 另一种方法: 32 | 33 | ![](http://o7ie0tcjk.bkt.clouddn.com/hcxg3oebxzscmnu9.jpg) 34 | 35 | 我看到这张图就觉得ENAS其实就是NASNet的扩展版,就是将NASNet Block之间的所有连接的可能都存起来,然后从里面进行采样。 36 | 37 | 论文最后提到比较重要的一点就是之前的论文结果都表明只要搜索空间设置的好,随机策略都能取得比较好的效果。但是本文最后表明 38 | 随机效果比较差,我感觉原因是因为ENAS的搜索空间要比NASNet还有NAS要大一些,但是因为参数共享所以能够应付这么大的空间;反而随机策略 39 | 因为搜索空间过大就无法取得好的效果了。 40 | -------------------------------------------------------------------------------- /paper-notes/Path-Level Network Transformation for Efficient Architecture Search.md: -------------------------------------------------------------------------------- 1 | 这篇论文是上交大之前那篇EAS的扩展,同样使用了Net2Net的方法,以及强化学习框架,如下图: 2 | 3 | ![](http://o7ie0tcjk.bkt.clouddn.com/7sxcxccoipqhkkd1.jpg) 4 | 5 | 当然只是说框架一样,具体的network transformation操作以及network encoding方式还是很不相同的。 6 | 7 | 作者认为之前提出的EAS的方法的缺点在于Net2Wider以及Net2Deeper两种操作所设计出的网络过于简单,结构不够丰富,没有 8 | 办法设计出类似Inception这样的具有多分支的网络结构(而这些结构是当前流行的且效果最好的)。因此作者已多分支结构为基础, 9 | 重新设计了net transformation的操作,不再是wider以及deeper了。 10 | 11 | 如果想要某一层(卷积层或者全连接层)变成多分支的结构,同时在进行transformation之后还保持原有网络的输出,这一点作者 12 | 表示还是挺简单的,下面以两分支为例说明: 13 | 14 | ![](http://o7ie0tcjk.bkt.clouddn.com/whwuli0gxhb9k3j2.jpg) 15 | 16 | 上图中Add以及Concat表示作者设定的action,意思就是说如果对分支采用这两种merge方式,应当如何保证网络输出一致。我们可以看出, 17 | 对于卷积层来说,Add操作只要对原先输入进行复制,然后每一个分支乘以一个平均系数就可以保证了;对于Concat操作,同样复制输入, 18 | 只不过每个分支平分输入的channel就可以。至于全连接层就很相似了,只不过Concat操作的话需要对输入进行split。 19 | 20 | 以上这种结构其实就定义了Path-Level EAS的搜索空间,可以看到很像一棵树,作者是故意这么设计的。这棵树的node代表{identity,split} 21 | 与{add, concat}的组合,edge代表我们一般的卷积层、池化层等等。那么动作空间又是什么呢? 22 | 23 | ![](http://o7ie0tcjk.bkt.clouddn.com/wvaz6fmhlrxz9l1a.jpg) 24 | 25 | 从上图可以很清晰的解释动作空间。首先我们有一个搜索起点,这个起点非常简单,就是一个卷积层(当然只是为了简化说明),对于这样一个叶节点来说, 26 | 对它进行的操作就是进行扩展,让它产生一个叶节点,自己变成节点,这是第一类操作;然后对于这样一个孩子只有一个叶结点的结点,我们对它进行的 27 | action就是分裂成多分支,分支的数量以及最后分支merge的方式都是可选的action,这构成了第二类action,可以看出第a步的操作其实可以分为两步。 28 | 继续往下,对于进行a步操作之后的树来说,是一个父亲结点带有两个孩子结点并且这两个孩子结点是叶节点的结构。第b步进行的操作其实是,对于其左孩子, 29 | 进行与第a步相同的操作,即扩展该叶节点并分裂,这样就形成了第三幅图。第c步我们看到将identity操作替换成了一个seq 3×3的操作,这就是第三类 30 | action,第三类action一共有7种选择,都是之前论文中比较偏好的结构: 31 | 32 | ![](http://o7ie0tcjk.bkt.clouddn.com/42sfsyl0sitlhi9f.jpg) 33 | 34 | 随后就形成了第4幅图。最后将其转化为比较理论的一个形式。所以对于这样一个理论的形式,数据流向是这样的,首先从顶向下,然后自底向上,形成 35 | 最后的输出。这样搜索空间以及动作空间都定义好了,其实搜索空间也就是状态空间,但是由于论文对网络结构通过LSTM进行编码,因此搜索空间只能 36 | 说是观察空间,编码之后的网络结构才能说是状态空间。 37 | 38 | 但是由于这次作者是用一棵树来表示一个网络的,不像EAS那样是一个序列,这样的话就不能简单地用Bi-LSTM来进行编码了。所以作者用了Tree-Structed 39 | LSTM来对网络结构进行编码。作者引用的文章里还分了两类,一类叫做有序的LSTM(N-ary Tree-LSTM)以及无序的LSTM(Child-Sum Tree-LSTM),这 40 | 两类正好对应着concat操作以及add操作(完美匹配...),这是处理了两种node,对于edge,作者使用了一般的LSTM进行处理,形式化是这样的: 41 | 42 | ![](http://o7ie0tcjk.bkt.clouddn.com/vw0tppnd4yxoz5u8.jpg) 43 | 44 | 然后作者为了致敬Bi-LSTM,所以这样的操作进行了两次: 45 | 46 | ![](http://o7ie0tcjk.bkt.clouddn.com/the5fqicio7no92n.jpg) 47 | 48 | 这样一来就可以再次应用最开始提到的强化框架进行网络结构搜索了。实验表明结果要优于NASNet以及EAS,同时只需要200个GPU小时就可以了(比之ENAS还是不行): 49 | 50 | ![](http://o7ie0tcjk.bkt.clouddn.com/idq76bh1h8y1ooo6.jpg) 51 | 52 | 最后搜索出来的两个最优结构以及算法伪代码: 53 | 54 | ![](http://o7ie0tcjk.bkt.clouddn.com/5bik5lcp1vpx450u.jpg) 55 | ![](http://o7ie0tcjk.bkt.clouddn.com/2yhwhjmbzn9a43h2.jpg) 56 | ![](http://o7ie0tcjk.bkt.clouddn.com/i42tvacnyky4p1ou.jpg) 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Paper Collection of Network Architecture Search (NAS) 2 | 3 | This is a collection of research and review papers of network architecture search (NAS). The Papers are sorted by time. Any suggestions and pull requests are welcome. 4 | 5 | The sharing principle of these references here is for research. If any authors do not want their paper to be listed here, please feel free to contact Ewan Lee (Email: ewanlee [AT] yeah.net). 6 | 7 | ## Research Papers 8 | - Zhang, Xinbang, Zehao Huang, and Naiyan Wang. "[You Only Search Once: Single Shot Neural Architecture Search via Direct Sparse Optimization](https://arxiv.org/pdf/1811.01567.pdf)." arXiv preprint arXiv:1811.01567 (2018). 9 | - Bender, Gabriel, et al. "[Understanding and simplifying one-shot architecture search](http://proceedings.mlr.press/v80/bender18a.html)." International Conference on Machine Learning. 2018. 10 | - Luo, Renqian, et al. "[Neural Architecture Optimization](https://arxiv.org/pdf/1808.07233.pdf)." arXiv preprint arXiv:1808.07233 (2018). 11 | - Tan, Mingxing, et al. "[MnasNet: Platform-Aware Neural Architecture Search for Mobile](https://arxiv.org/pdf/1807.11626v1.pdf)." arXiv preprint arXiv:1807.11626 (2018). [`paper note`](./paper-notes/MnasNet:%20Platform-Aware%20Neural%20Architecture%20Search%20for%20Mobile.md) [`code (PyTorch)`](https://github.com/AnjieZheng/MnasNet-PyTorch) [`code (Keras/Tensorflow)`](https://github.com/Shathe/MNasNet-Keras-Tensorflow) 12 | - Liu, Hanxiao, Karen Simonyan, and Yiming Yang. "[DARTS: Differentiable Architecture Search](https://arxiv.org/pdf/1806.09055.pdf)." arXiv preprint arXiv:1806.09055 (2018). [`paper note`](./paper-notes/DARTS:%20Differentiable%20Architecture%20Search.md) [`code`](https://github.com/quark0/darts) 13 | - Cai, Han, et al. "[Path-Level Network Transformation for Efficient Architecture Search](https://arxiv.org/pdf/1806.02639.pdf)." arXiv preprint arXiv:1806.02639 (2018). [`paper note`](./paper-notes/Path-Level%20Network%20Transformation%20for%20Efficient%20Architecture%20Search.md) 14 | - Pham, Hieu, et al. "[Efficient Neural Architecture Search via Parameter Sharing](https://arxiv.org/pdf/1802.03268.pdf)." arXiv preprint arXiv:1802.03268 (2018). [`paper note`](./paper-notes/Efficient%20Neural%20Architecture%20Search%20via%20Parameter%20Sharing.md) [`code`](https://github.com/carpedm20/ENAS-pytorch) 15 | - Zoph B, Vasudevan V, Shlens J, et al. [Learning transferable architectures for scalable image recognition](http://openaccess.thecvf.com/content_cvpr_2018/papers/Zoph_Learning_Transferable_Architectures_CVPR_2018_paper.pdf)[J]. arXiv preprint arXiv:1707.07012, 2017, 2(6). [`paper note`](./paper-notes/Learning%20transferable%20architectures%20for%20scalable%20image%20recognition.md) 16 | - Cai, Han, et al. "[Efficient architecture search by network transformation](https://arxiv.org/pdf/1707.04873.pdf)." AAAI, 2018. [`paper note`](./paper-notes/Efficient%20Architecture%20Search%20by%20Network%20Transformation.md) [`code`](https://github.com/han-cai/EAS) 17 | - Real E, Moore S, Selle A, et al. [Large-scale evolution of image classifiers](https://arxiv.org/pdf/1703.01041.pdf)[J]. arXiv preprint arXiv:1703.01041, 2017. [`paper note`](./paper-notes/Large-scale%20evolution%20of%20image%20classifiers.md) 18 | - Baker B, Gupta O, Naik N, et al. [Designing neural network architectures using reinforcement learning](https://arxiv.org/pdf/1611.02167.pdf)[J]. arXiv preprint arXiv:1611.02167, 2016. [`paper note`](./paper-notes/Designing%20neural%20network%20architectures%20using%20reinforcement%20learning.md) [`code`](https://github.com/bowenbaker/metaqnn) 19 | - Zoph B, Le Q V. [Neural architecture search with reinforcement learning](https://arxiv.org/pdf/1611.01578.pdf)[J]. arXiv preprint arXiv:1611.01578, 2016. [`paper note`](./paper-notes/Neural%20architecture%20search%20with%20reinforcement%20learning.md) 20 | --------------------------------------------------------------------------------