对Exploring RandomlyWired Neural Networks for Image Recognition的另类解读:披着随机搜索外衣的操作至上方法

原文链接:https://arxiv.org/abs/1904.01569

项目地址:https://github.com/seungwonpark/RandWireNN

中文翻译:https://blog.csdn.net/weixin_37993251/article/details/89161502

参考的博客:xiaoiker的博客georgeandgeorge的博客

1.本文在探究什么问题?

NAS的出现使得人们真正意义上开始了对网络架构这一重要参数的机器学习过程。然而,目前的方法通常是选定一个网络生成器,随后用这个网络生成器学习如何搜索网络。

然而,就像ResNet和DenseNet中的布线模式一样,NAS网络生成器是手工设计的,允许的布线模式的空间被限制在所有可能的图的一个小子集中。也即,虽然搜索的层级提高了,但是我们还是没能跳出“制定一个网络->执行任务”的框架。而我们所期望的AutoDL,应当是机器能够摆脱人类的思想束缚,实现更优秀的性能。

所以,本文的核心思想,就是探究“有没有更优秀的网络生成器”。

2.本文做了什么?

我觉得,用经典的NASNet作对比,能够很好的说明本文的工作。

NASNet使用一个RNN网络生成隐含层(绿色和灰色节点)间的连接方式、操作(黄色)、操作结果的连接方式(绿色)。而生成的网络的训练结果会作为反馈修正RNN的参数。

而本文的网络,固定了每个节点的操作(黄色与绿色),只探索如何如何连接各个隐含层。

既然是探索固定数目的节点间的连接,那不就变成一个随机图问题了嘛!所以,本文使用了三种随机图方法:ER(p), BA(M), WS(K,P),每种方法都只包含一个或者两个参数,然后用枚举法,用不同的参数各生成5个结果(这些结果没有经过筛选,因此是完全随机的!),最后的结果如下图。

虽然图上柱子看着差挺多,但是发现:这种瞎连的方法生成的结果,方差都挺低(同一个生成器出来的结果精度几乎相同),而且精度还都挺高!(最好的几个结果优于SOTA的NAS方法生成的网络)而最重要的是,这些结果都来自于随机生成的网络!

其实上图中的结果差距这么小,我们完全可以概括一下他们:用数量固定的操作节点,连数量几乎固定的线,最终生成的结果几乎相同!再概括一下就是,在节点间随便画N根线,最后训出来的效果都差不多。(虽然原文的三种随机图方法还是有一定纪律性的)

那说明网络结构对你的精度贡献不大啊!到底啥大呢,想过去肯定是节点的操作啊!原文中有这样一张图:

这里浅绿色点是文中使用的操作的结果,方块菱形三角则是换了节点操作以后的结果。虽然原文一直在说“后面三种都差不多”,但重点明显应该是:你这第一个和剩余的差的(相比于不同网络结构的差)也太大了吧!

所以,本文的实验结果,与NASNet相比,有下面两个优势:

1.网络生成器完全不需要用子网络的结果训练,因为差距不大,完全可以枚举完成嘛!(训练耗时down)

2.子网络生成过程中的限制少,想怎么连就怎么连(多样性up,但并没用上,因为无论怎么连都差不多)

 

3.一个小小的启发

3.1节对我的思想有一个启示,首先记录在这里:

网络可以看成是输入参数到输出参数的映射,\beta=g(\alpha),其中函数g由网络的架构和其中的参数确定。

但同时,g也可以看作是一种概率分布。也即,\alpha的作用是从这个概率分布中获得一个确定的结果。

而我们训练网络的过程,实则是使这个分布,更加接近我们的预期。这个分布与我们的预期越接近,网络的性能便越高。

 从概率论的角度理解网络,有一种豁然开朗的感觉。

不过整个3.1节给人的感觉就是,说明了现在的网络生成器受到了诸多限制。

4.如何生成一个神经网络

这一部分我直接引用了georgeandgeorge的博客中的内容,他写的足够详细。而我补充的部分会通过斜体标注。

这个神经网络是用图生成的。什么图呢,有向无环图(DAG)。为什么是有向的?方向指示了数据的流向。为什么是无环的?因为神经网络中的环会导致求导过程中的无穷包含问题。我觉得神经网络理想情况下是有环的,环起到一个循环数据的作用,它的存在使得数据复用率更高,从而使得神经网络更为精简。其实我们反复迭代去计算、去修正神经网络的参数,就好像把数据和网络放在一个大环里反复执行计算,所以传统神经网络里面反倒没有了环。

怎么生成一个DAG?先造一个图,再用启发式方法确定边的指向。

图由节点V和边E构成,图的复杂度取决于V和E的数目。作者选了3种造图的算法:

(1)ER算法:初始状态是N个节点0条边,对于每一对节点,以p的概率在其间连边,该模型可记做ER(p)。当时,该图有较大概率成为一个连通分量。仅包含一个超参数p。

(2)BA算法:初始状态是M个节点。依次添加新节点,每加一个节点,就加上M条边。新加的节点以一定概率连接到已有的节点v上,这个概率与v的度数相关。节点个数增加到N为止。该模型可记做BA(M)。仅包含一个超参数M。

(3)WS算法:初始状态下,N个节点排成环状,每个节点与前后K/2个相邻节点相连(K是偶数)。以顺时针的顺序,对每个节点v,考察与它相连的第i个节点,以p的概率“重新连接”它。所谓“重新连接”,就是随机选取一个v以外的,当前没有与本节点相连的节点进行连接。重复该操作K/2次,得到新图。该模型可记做WS(K,P)。包含两个超参数(K,P)。

如何将生成的无向图转化成DAG?

给这些节点编号,让所有边中编号小的节点指向编号大的节点。在ER图中,节点编号的顺序是随机的;在BA算法中,初始的M个节点编号是1-M随机的,之后的节点编号是依插入顺序的;在WS图中,节点序号是顺时针序。

如何将DAG映射成网络呢?

网络是由传送数据的数据流线路,以及处理数据流的运算模块构成的。前者与边构成映射,后者与节点构成映射,该思路是符合人们的直观认识的。

具体来说,边操作包含:将数据流从一个节点传递到另一个节点。节点操作由3个部分组成:

(1)aggregation(聚集):将输入数据流加权求和,权值是可学习的,且是正值。

(2)transformation(转换):将聚集的数据做卷积、激活等操作,本文中采用的是ReLU-Conv-BN操作。卷积部分是默认用类似Inception网络里的3x3 separable conv做的(yige 3x3深度可分离卷积结构后跟一个1x1卷积,可参考博客:https://blog.csdn.net/u012426298/article/details/80998547)

(3)distribution(分配):将加工过的数据输出到其他节点。

之所以这样设计节点和边的操作是因为这样的话有如下好处:

(1)保持了进出的通道数一致,这防止了某些出入度节点因为计算量较大而在网络中有更大影响力。

(2)保证了FLOPs和参数数目不变。

(3)聚集操作和分配操作几乎没有参数,这样使得FLOPs、参数数目和节点数目差不多呈线性正相关,方便度量网络的能力。

定义了这种映射关系之后,就要解决如何输入、输出的问题。解决方法也很图论,就是类似于流网络技术,额外添加一个输入节点、一个输出节点。

继续类比神经网络的结构,我们发现一个神经网络往往由多个部分组成,每个部分有着不同的结构,承担着不同的任务。我们将上述生成的一个“图”网络视作一个stage,而整个神经网络则由多个stage拼接而成。下面比较一下ResNet和与之类似的5-stage RandWire architecture的网络结构。

可以看到两者的大体结构是形成了对应关系的,而且在性能上随机连接网络在分类任务上的性能要好于ResNet。

在这个网络中,手工设计的参数包括:网络的stage数量,节点数量,节点间连接数量(用来能和之前的算法进行比较);随机图算法ER(p), BA(M), WS(K,P)中的p,M,K,P这些参数(人工试错法,通过行/网格搜索实现)。这四个参数人工试错的结果如下图。

这里需要强调的是,在选定这些参数后,原文并没有再从这些参数生成的网络中进行选择,而是直接随机选择了这些确定参数的随机图算法生成的5个网络架构。而他们的实验表明,这些架构的结果都差不多!也即上图中的黑色线表示的方差都很小。

我们知道,调试神经网络的超参数是炼丹的关键。关于optimization,是否可以逐步做到AUTO_ML是我们关心的事情。对比经典NN和本文提出的这些随机生成的网络,实验结果表明这些随机网络不需要怎么调参(其他生成器还需要反复训一系列网络来更新生成器参数,而这里在确定p,M,K,P这些参数后就直接随机选择了),就能获得比较好的结果,更符合AUTO_ML的趋势。

4.实验结果

首先是从网络中随机移除一个点或随机移除一个边对网络精度的影响。这里个人觉得意义不大,有兴趣可以看下原文和翻译。

接下来是替换网络中的transform转换操作。这里其实很耐人寻味:虽然原文一直在对比这三个新操作,但是很明显:这三个新操作的性能都远不及原来的3x3分离卷积。也即,本文的这个方法能够取得如此成绩,与选择了恰当的节点操作密不可分。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章