为了最大化上一次进化过程学习到的知识的价值,提出了连续进化结构搜索方法
论文使用进化算法(GA)来进行结构进化,GA能提供很大的搜索空间。在结构优化阶段,种群内的结构根据论文提出的pNSGA-III方法逐步更新。为了加速,使用一个超网用来为不同的结构共享权重,能够极大地降低个体训练的计算量。
https://github.com/huawei-noah/CARS
文章中定义了一个概念:超网N,也就是之前方法中的搜索空间,是一个冗余的、具有大量参数和结构的网络。每个搜索到的子网Ni 可以表示为,也就是浮点参数集合与二值连接参数集合。
更新网络参数的思想是用梯度方法更新每个子网络的参数,其中W是超网的参数, P是种群数量,假定输入为X,目标为Y,则有损失函数:
参数W的梯度:
由于参数W应该适用于所有个体,因此使用所有个体的梯度来计算W的梯度,最终配合SGD进行更新:
在参数收敛后,我们可以用遗传算法和NSGA-III中的非支配排序策略交替优化二进制连接参数C。首先定义支配的概念:
假设网络Ni 的准确率大于等于网络Nj,并且有一个其它指标优于网络Nj ,则称网络Ni 支配网络Nj ,在进化过程网络Nj可被网络Ni 代替。利用这个方法,可以在种群中挑选到一系列优秀的结构,然后使用这些网络来优化超网对应部分的参数。尽管non-dominated排序能帮助选择的更好网络,但搜索过程仍可能会存在小模型陷阱现象。由于超网的参数仍在训练,所以当前轮次的模型不一定为其最优表现,如果存在一些参数少的小模型但有比较高的准确率,则会统治了整个搜索过程。因此,论文基于NSGA-III提出pNSGA-III,加入准确率提升速度作为考虑。
CARS算法的优化包含两个步骤,分别是网络结构优化和参数优化,另外,在初期也会使用参数warmup
Parameter Warmup:由于超网的共享权重是随机初始化的,如果结构集合也是随机初始化,那么出现最多的block的训练次数会多于其它block。因此,使用均分抽样策略来初始化超网的参数,公平地覆盖所有可能的网络,每条路径都有平等地出现概率,每种层操作也是平等概率,在最初几轮使用这种策略来初始化超网的权重
Architecture Optimization:在完成超网初始化后,随机采样N个不同的结构作为父代,N为超参数,后面pNSGA-III的筛选也使用。在进化过程中生成t×N个子代,t 是用于控制子代数的超参,最后使用pNSGA-III从(t+1)×N 中选取N个网络用于参数更新 Parameter Optimization:给予网络结构合集,使用公式3进行小批量梯度更新
在下图3中训练了3个不同大小的模型,在训练600轮后,模型的准确率与其大小相关,从前50轮的曲线可以看出小模型陷阱的原因: 1.小模型准确率上升速度较快 2.小模型准确率的波动较大 在前50轮模型C一直处于下风,若使用NSGA算法,模型C会直接去掉了,这是需要使用pNSGA-III的第一个原因。对于模型B和C,准确率增长类似,但由于训练导致准确率波动,一旦模型A的准确率高于B,B就会被去掉,这是需要使用pNSGA-III的第二个原因
算法同样在CIFAR 上也有很好的表现:
最后是搜索到的结构,CARS-H与DARTS参数相似,但准确率更高,CARS-H的reduction block包含更多的参数,而normal block包含更少的参数,大概由于EA有更大的搜索空间,而基因操作能更有效地跳出局部最优解,这是EA的优势:
由于特征图之间在可视化之后具有一定的相似性,因此可以通过卷积只得到部分的特征图,再由得到的特征图经过简单的变换得到其他相似的特征图。这样做既可以减少卷积核,减少模型的参数量,也可以减少模型的运算量。
首先减少网络的输出通道数,然后用已有的特征图通过卷积生成其他特征图。
https://github.com/huawei-noah/ghostnet
卷积神经网络模型得到的特征中有许多特征是冗余的。比如下图是ResNet-50的第一个残差块得到的特征图,红色、绿色和蓝色框的特征图表现出非常高的相似性。同颜色的下一个特征图就像是上一个特征图的镜像(ghost)。而这些相似度高的特征图是由不同的卷积核参数计算得到的。 因此得到启发从部分特征图生成其他特征图。
其中y′i 表示Y′ 第i个特征图。Φi,j 表示第j个线性操作,用于生成y′i 的第j个镜像特征图yij 。最后一个操作Φi,s 是一个自身映射操作,用于保留卷积的输出结果。所有的yij 组成最后的输出。
镜像模块的主要特征是每个特征图通过线性操作生成自身的镜像特征图,特征图和镜像特征图组合成输出,输出的通道数和原来的卷积层输出的通道数一致。
GhostNet是由镜像模块组成的网络。GhostNet是模仿MobileNetV3而设计的,主要区别是MobileNetV3的卷积模块换成了镜像模块。模块的图示GhostNet的网络结构如下所示:
提出滤波器嫁接(filter grafting)技术。和pruning相反,滤波器嫁接并不是移除网络的无效滤波器,而是通过引入外部信息的方法来激活无效滤波器使之重新发挥作用。
将其他网络的有效滤波器的参数嫁接到无效滤波器上,同时提出了信息熵相关的指标评估滤波器的好坏,并用自适应的方式来平衡嫁接网络和被嫁接网络的参数。
https://github.com/fxmeng/filter-grafting
1.Noise as Scions(使用噪音嫁接)
使用高斯噪声对无效滤波器进行修改,嫁接前,无效滤波器的l1范数较小,对输出的影响较小。但嫁接后,无效滤波器的l1范数变大,对DNNs的影响也越来越大。同时在嫁接过程中不断降低高斯噪声:
2.Internal Filters as Scions(内部滤波器嫁接)
在无效滤波器(l1范数较小)中加入其他滤波器(l1范数较大)的权值。具体来说,对于每一层,我们根据l1范数对滤波器进行排序,并设置阈值γ。对于l1范数小于γ的滤波器,我们将这些滤波器视为无效滤波器。然后将第i大滤波器的权值嫁接到第i小滤波器中。这个过程如下图所示:
同时,为了验证这样的嫁接方式不会带来额外的信息熵,作者通过信息语言理论对其进行了进一步的论证。 根据定理1,选择内部滤波器作为接穗不会带来新的信息:
3.External Filters as Scions(外部滤波器嫁接)
和内部滤波器嫁接相比,其关键性差异为:
1.以网络中的层为嫁接的单位,而不是滤波器
1.L1 norm (1范数)
但最近的研究表明,较小的标准并不总是正确的。一个特殊的情况是,0-1个规则排列的过滤器比所有1个过滤器都好。
2.熵
在计算连续分布的熵比较困难的情况下,首先将连续分布转化为离散分布。具体来说,我们将值的范围划分为m个不同的值,并计算每个值的概率。最后,熵变量的计算方法如下:
第i层的熵为:
为了保持滤波器间的相关性:
valid criterion on Cifar dataset:
valid graft method on Cifar dataset:
Compared with other method on Cifar and ImageNet: