作者: 陈 扬
编辑:赵一帆
简 介
分层表示高效的架构搜索(HIERARCHICAL REPRESENTATIONS FOR EFFICIENT ARCHITECTURE SEARCH)这篇文章讲的是如何利用高效的搜索算法来搜索网络的拓扑结构。用一个简单但功能强大的演化算法。 这个方法可以发现具有卓越性能的新架构。它这篇文章很大程度上借鉴了 GECNN 的一些东西,或者说,我之前写了 GECNN 的论文笔记,里面也是讲演化算法的:https://zhuanlan.zhihu.com/p/36758195 。
GitHub:https://github.com/markdtw/awesome-architecture-search(还没开源代码)
arxiv:https://arxiv.org/abs/1711.00436
章节目录
-
优点摘要
-
抛砖
-
引玉
-
定义部分
-
元操作
-
进化
-
初始化
-
算法
-
训练结果
01
优点摘要
-
通过分层图学习的方法,大大减少了冗余的搜索空间
-
引入分层表示来描述神经网络体系结构。
-
通过堆叠简单的基元(比如 conv,maxpooling),实现了复杂的结构,使用简单的随机搜索,也可以获得用于图像分类的竞争架构,这体现了 搜索空间构建的重要性。
-
可以通过跳跃链接实现 resnet,densenet 等深层次的网络(为 resnet 引用都快破万了,你现在用不上残差块的思想你好意思发论文吗……)。
02
抛砖
首先一个问题,我们为什么要想办法设计出一个自动生成的网络架构,因为我最近发现一个问题啊,你一个神经网络特别那种实验室做出来的,效果估计也就是退 cifar-10 啊,mnist 这些效果好一点点,但是一碰到真实环境,效果就菜的一批(可能会),可能这种机器生成的神经网络效果不一定有专业人员做的好,但是他在针对其他真实条件下的数据集,他的效果可能会反超那些定下来的网络结构,因为这个东西他上自适应调整的。
03
引玉
这篇文章,他提出来用邻接矩阵去表示一个有向无环图,然后用点表示 feature map,用边表示一种操作(其实就只有 conv, max_pooling, average-pooling, identity, 开心不,意外不)。
04
定义部分
我们先定义一个邻接矩阵,然后 leval-1 的矩阵的值的意思就是集合 option{}。The architecture is obtained by assembling operations o according to the adjacency matrix G:
结构 = assemble(G, o)mrge 是合并
o1(1)在这里是 1 _1 的卷积,o2(1)是 3 _3 的卷积,o3(1)是 3_3 的最大池化(不是 2 _2 因为他要保证 feature map 一样大),他们统称为元操作(相当于 tf.nn 里面一个函数啊)。
我大概画一下 leval-2
G1(2)=[0 3 2;
0 0 1;
0 0 1]
然后我们把这个生成的子图当成一个新的子图 ,是不是很 6所以我们就这样定义了一个 level-2 的子图了,接下来我们如法炮制的搞出了 3 个 leval-2 的子图,just like this:
你发现了吗,每一层的 piont 的个数是一样的,是固定的,这个就是他这个算法不太好的地方一。
然后我们就得到了一个 level-3 的网络结构(简直就是 insecption 加 resnet 的样子)到此为止,我们就算是搞出来一种可以表示这个网络的方法了。
05
元操作
作者在实验中发现啊,3*3 的 conv 只要搞多几次,就可有搞出很大的感受野什么的,所以他就搞的元操作其实很少(6):
• 1 × 1 convolution of C channels(调整特征图的维度)
• 3 × 3 depthwise convolution(不解释了吧)
• 3 × 3 separable convolution of C channels
• 3 × 3 max-pooling(最大池化)
• 3 × 3 average-pooling (平均池化)
• identity
对于每一个 feature map,他都用了 RELU 激活函数和批次正则化(-.-)。channels 固定为常数 C(可以通过 1*1 卷积)。
如果 option(i,j)==0 的话就说明 i,j 之间没有边。
concat 就是之间把 feature map 加到一起。
06
进化
首先,我们要实现 3 个基本操作:增加 add,修改 alter,删除 remove。
- 本文地址:机器学习论文笔记—如何利用高效的搜索算法来搜索网络的拓扑结构
- 本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出
07
初始化
-
创建很小的元操作的 DNA(类似 GECNN 上面有链接),为每个 DNA 创建一个映射,相当于是下一层的元操作
-
通过大量随机突变产生变异样本(类似蒙特卡洛方法随机)
**
**
08
算法
异步锦标赛进化(相当于生物学里面的达尔文进化论)
part 1:
part 2:
什么是锦标赛算法?
假设种群规模为 n,该法的步骤为:
-
随机产生 n 个个体作为第一代(其实这步准确的说不是属于选择操作的,但每个算子并没有绝对的界限,这个是在选择操作之前的必做之事) 。
-
从这 n 个个体中随机(注意是随机)选择 k(k< n)个个体,k 的取值小,效率就高(节省运行时间),但不宜太小,一般取为 n/2(取整)。
-
从这 k 个个体中选择最大的一个个体(涉及到排序的方法),作为下一代 n 个个体中的一个个体 。
-
重复 2-4 步,至得到新的 n 个个体。
-
进行这新的 n 个个体之间的交叉操作。
09
****训练结果
-
对于不同大小的数据集,我们要输入不同大小的 level 层数和节点 k 数,总共最多会产生 k^l 个 feature map,所以初始化的时候应该是有非常多的 0 元素才对(猜测)。
-
随机梯度下降,学习率的调整细节等……不想说了
我个人认为的改进点:可以看得出这个架构其实不是线性的,网络是可以比较复杂的,肯定是有 resnet 在里面的,应该是越深层越适应大的训练集,不过从我的实际工作来看,最好是再加一个网络结构预判器,因为针对点多且深的网络结构来说,没有做够的 resnet 到了深层肯定会梯度爆炸或者消失,那种明显不合格的网络是可以被检查出来的,可以极大的减少冗余计算,因为越好的网络训练应该是越快的,反而是大部分都是垃圾结构牺牲了大部分的时间(二八定律),具体是实现方法我自己留着发论文了。
具体的训练细节太复杂了,DEEPMIND 也没开源代码,我就不好瞎说了。
在 CIFAR-10 上的训练效果
我想吐槽的是:
真的好有钱啊,200 个 p100,我算了一下在阿里云上面竞价的话要 1020024*1.5=7200RMB,???????
说实话这个效果来说还是非常值这个价的,在 CIFAR-10 上这个被 p 过几百万次的数据集上还能和那些老 p 客难分伯仲,要是换的真实数据集的话效果应该会跟好一些吧。
10
总结
目前网络结构生成的两种方法强化学习和演化学习都在发 paper,从难度来说我其实更喜欢演化学习,因为治疗都是现成的,但是长远的看我觉得强化学习会赢,这个元学习也一直是我觉得很有意思的一个方向,可能是迈向强人工智能的一个阶梯吧,百尺竿头更进一步。
题外话,这个全屏模式啊,一不小心就搞到 1 点了,哎明天上课是不是又要迟到了……
****
END
注意:本文归作者所有,未经作者允许,不得转载