神经网络架构搜索——可微分搜索(DARTS)
神经网络架构搜索——可微分搜索(DARTS)
- 背景
- 算法核心思想
- 搜索空间
- Cell的组成
- 优化策略
- 生成最终Cell结构
- normal cell search
- reduce cell search
- 网络结构堆叠
- 结果
- CIFAR-10
- ImageNet
- 参考
背景
神经网络架构搜索之前主流的方法主要包括:强化学习,进化学习。他们的搜索空间都是不可微的,Differentiable Architecture Search 这篇文章提出了一种可微的方法,可以用梯度下降来解决架构搜索的问题,所以在搜索效率上比之前不可微的方法快几个数量级。可以这样通俗的理解:之前不可微的方法,相当于是你定义了一个搜索空间(比如3x3和5x5的卷积核),然后神经网络的每一层你可以从搜索空间中选一种构成一个神经网络,跑一下这个神经网络的训练结果,然后不断测试其他的神经网络组合。这种方法,本质上是从很多的组合当中尽快的搜索到效果很好的一种,但是这个过程是黑盒,需要有大量的验证过程,所以会很耗时。而这篇文章把架构搜索融合到模型当中一起训练。
算法核心思想
由上图可分析:
(a) 定义了一个cell单元,可看成有向无环图,里面4个node,node之间的edge代表可能的操作(如:3x3 sep 卷积),初始化时unknown。
(b) 把搜索空间连续松弛化,每个edge看成是所有子操作的混合(softmax权值叠加)。
© 联合优化,更新子操作混合概率上的edge超参(即架构搜索任务)和 架构无关的网络参数。
(d) 优化完毕后,inference 直接取概率最大的子操作即可。
搜索空间
DARTS要做的事情,是训练出来两个Cell(Norm-Cell和Reduce-Cell),然后把Cell相连构成一个大网络,而超参数layers可以控制有多少个cell相连,例如layers = 20表示有20个cell前后相连。
- Norm-Cell: [输入与输出的FeatureMap尺寸保持一致]
- Reduce-Cell: [输出的FeatureMap尺寸减小一半]
Cell的组成
Cell由输入节点,中间节点,输出节点,边四部分构成,我们规定每一个cell有两个输入节点和一个输出节点,Norm-Cell和Reduce-Cell的结构相同,不过操作不同。
输入节点:对于卷积网络来说,两个输入节点分别是前两层(layers)cell的输出,对于循环网络(Recurrent)来说,输入时当前层的输入和前一层的状态。
中间节点:每一个中间节点都由它的前继通过边再求和得来。
输出节点:由每一个中间节点concat起来。
边:边代表的是operation(比如3*3的卷积),在收敛得到结构的过程中,两两节点中间所有的边(DARTS预定义了8中不同的操作)都会存在并参与训练,最后加权平均,这个权就是我们要训练的东西,我们希望得到的结果是效果最好的边它的权重最大。
DARTS实际预定义的Cell结构与论文中示意图的表示略有不同,完整的Cell结构包含两个输入节点,四个中间节点和一个输出节点,如下图所示:
全连接的情况下,N0中间节点有两个前继节点;N1,N2,N3分别有3,4,5个前继节点。每个节点之间有对应8个不同的预定义操作,共同构成一组边。
首先我们定义如下公式用softmax归一化alpha处理一组边:
o ˉ ( i , j ) ( x ) = ∑ o ∈ O exp ( α o ( i , j ) ) ∑ o ′ ∈ O exp ( α o ′ ( i , j ) ) o ( x ) \bar{o}^{(i, j)}(x)=\sum_{o \in \mathcal{O}} \frac{\exp \left(\alpha_{o}^{(i, j)}\right)}{\sum_{o^{\prime} \in \mathcal{O}} \exp \left(\alpha_{o^{\prime}}^{(i, j)}\right)} o(x) oˉ(i,j)(x)=o∈O∑∑o′∈Oexp(αo′(i,j))exp(αo(i,j))o(x)
通过公式可知每个操作对应一个权值(即alpha),这就是我们要训练的参数,我们把这些alpha称作一个权值矩阵,alpha值越大代表的操作在这组边中越重要。
然后每组中间节点公式表示如下,即所有前继节点累加作为当前节点的输出:
x ( i ) = ∑ j < i o ( i , j ) ( x ( j ) ) x^{(i)}=\sum_{j<i} o^{(i, j)}\left(x^{(j)}\right) x(i)=j<i∑o(i,j)(x(j))
我们收敛到最后希望得到一个权值矩阵,这个矩阵当中权值越大的边,留下来之后效果越好。
优化策略
通过前面定义的搜索空间,我们的目的是通过梯度下降优化alpha矩阵。我们把神经网络原有的权重称为W矩阵。为了实现端到端的优化,我们希望同时优化两个矩阵使得结果变好。上述两层优化是有严格层次的,为了使两者都能同时达到优化的策略,一个朴素的想法是:在训练集上固定alpha矩阵的值,然后梯度下降W矩阵的值,在验证集上固定W矩阵的值,然后梯度下降alpha的值,循环往复直到这两个值都比较理想。这个过程有点像k-means的过程,先定了中心,再求均值,再换中心,再求均值。需要注意的是验证集和训练集的划分比例是1:1的,因为对于alpha矩阵来说,验证集就是它的训练集。
min α L v a l ( w ∗ ( α ) , α ) s.t. w ∗ ( α ) = argmin w L t r a i n ( w , α ) \begin{array}{cl} \min _{\alpha} & \mathcal{L}_{v a l}\left(w^{*}(\alpha), \alpha\right) \\ \text { s.t. } & w^{*}(\alpha)=\operatorname{argmin}_{w} \mathcal{L}_{t r a i n}(w, \alpha) \end{array} minα s.t. Lval(w∗(α),α)w∗(α)=argminwLtrain(w,α)
但是这个方法虽然可以工作,但是效果不是很好,由于这种双优化的问题很难求得精确解(因为需要反复迭代求解两个参数),所以采用一种近似的迭代优化步骤来交替更新两个参数,算法如下:
具体的公式推导流程可参考(DARTS公式推导 https://zhuanlan.zhihu.com/p/73037439)
∇ α L v a l ( ω ∗ ( α ) , α ) ≈ ∇ α L v a l ( ω − ξ ∇ ω L t r a i n ( ω , α ) , α ) \begin{aligned} \nabla_{\alpha} \mathcal{L}_{v a l}\left(\omega^{*}(\alpha), \alpha\right) \\ \approx \nabla_{\alpha} \mathcal{L}_{v a l}(&\left.\omega-\xi \nabla_{\omega} \mathcal{L}_{t r a i n}(\omega, \alpha), \alpha\right) \end{aligned} ∇αLval(ω∗(α),α)≈∇αLval(ω−ξ∇ωLtrain(ω,α),α)
∇ α L v a l ( ω − ξ ∇ ω L t r a i n ( ω , α ) , α ) = ∇ α L v a l ( ω ′ , α ) − ξ ∇ α , ω 2 L t r a i n ( ω , α ) ⋅ ∇ ω ′ L v a l ( ω ′ , α ) \begin{aligned} & \nabla_{\alpha} \mathcal{L}_{v a l}\left(\omega-\xi \nabla_{\omega} \mathcal{L}_{t r a i n}(\omega, \alpha), \alpha\right) \\ =& \nabla_{\alpha} \mathcal{L}_{v a l}\left(\omega^{\prime}, \alpha\right)-\xi \nabla_{\alpha, \omega}^{2} \mathcal{L}_{t r a i n}(\omega, \alpha) \cdot \nabla_{\omega^{\prime}} \mathcal{L}_{v a l}\left(\omega^{\prime}, \alpha\right) \end{aligned} =∇αLval(ω−ξ∇ωLtrain(ω,α),α)∇αLval(ω′,α)−ξ∇α,ω2Ltrain(ω,α)⋅∇ω′Lval(ω′,α)
∇ α , w 2 L t r a i n ( w , α ) ∇ w ′ L v a l ( w ′ , α ) ≈ ∇ α L t r a i n ( w + , α ) − ∇ α L t r a i n ( w − , α ) 2 ϵ \nabla_{\alpha, w}^{2} \mathcal{L}_{t r a i n}(w, \alpha) \nabla_{w^{\prime}} \mathcal{L}_{v a l}\left(w^{\prime}, \alpha\right) \approx \frac{\nabla_{\alpha} \mathcal{L}_{t r a i n}\left(w^{+}, \alpha\right)-\nabla_{\alpha} \mathcal{L}_{t r a i n}\left(w^{-}, \alpha\right)}{2 \epsilon} ∇α,w2Ltrain(w,α)∇w′Lval(w′,α)≈2ϵ∇αLtrain(w+,α)−∇αLtrain(w−,α)
生成最终Cell结构
根据前面所述,我们要训练出来一个alpha矩阵,使得权重大的边保留下来,所以在这个结构收敛了之后还需要做一个生成最终Cell的过程。那这个时候你可能会问,为什么不把之前的结构直接用上呢?因为边太多,结构太复杂,参数太多不好训练,所以作者希望能生成一个更简单的网络结构,接下来我们说生成的方法。
对于每一个中间节点来说,我们最多保留两个最强壮的前继;对于两两节点之间的边,我们只保留权重最大的一条边,我们定义一下什么是最强壮的前继。假设一个节点有三个前继,那我们选哪两个呢?把前继和当前节点之间权重最高的那条边代表那个前继的强壮程度,我们选最强壮的两个前继。节点之间只保留权重最大的那条边。
normal cell search
reduce cell search
网络结构堆叠
下图,展示了Normal-Cell与Reduce-Cell的连接方式,代码描述是在1/3处和2/3处添加两个Reduce-Cell。比如,在CIFAR-10数据集上的网络结构需要20个Cell串联。NetWork=6*Normal-Cell+Reduce-Cell+6*Normal-Cell+Reduce-Cell+6*Normal-Cell
由于,Cell结构是两个输入的,因此详细的Cell连接方式如下所示:
结果
CIFAR-10
ImageNet
参考
Liu, H., Simonyan, K., & Yang, Y. (2019). DARTS: Differentiable Architecture Search. ArXiv, abs/1806.09055.
DARTS 可微 架构搜索
AutoDL
DARTS公式推导
神经网络架构搜索——可微分搜索(DARTS)相关推荐
- 神经网络架构搜索——可微分搜索(Latency-DARTS)
神经网络架构搜索--可微分搜索(Latency-DARTS) 摘要 动机 方法 延迟预测模块(LPM) 数据收集 训练细节 延时预测结果 可微分时延损失 定义时延损失 嵌入到搜索的Loss中 实验 C ...
- 神经网络架构搜索——二值可微分搜索(BATS)
二值可微分搜索(BATS) 摘要 方法 搜索空间重定义 标准 DARTS 搜索空间的问题 二值神经网络搜索空间 搜索的正则化和稳定性 DARTS 搜索的不稳定分析 温度正则(temperature r ...
- ICLR 2021 | 美团AutoML论文:鲁棒的神经网络架构搜索 DARTS-
高质量模型的设计和更新迭代是当前 AI 生产开发的痛点和难点,在这种背景下,自动化机器学习(AutoML)应运而生.2017年,谷歌正式提出神经网络架构搜索(Neural Architecture S ...
- 【CVPR 2020】神经网络架构搜索(NAS)论文和代码汇总
关注上方"深度学习技术前沿",选择"星标公众号", 技术干货,第一时间送达! [导读]今天给大家整理了CVPR2020录用的几篇神经网络架构搜索方面的论文,神经 ...
- ICCV NAS Workshop 最佳论文提名:通过层级掩码实现高效神经网络架构搜索
点击我爱计算机视觉标星,更快获取CVML新技术 机器之心发布 作者:Faen Zhang.Mi Zhang等 本文介绍了由创新奇智公司联合密歇根州立大学合作开发的高效神经网络架构搜索算法 HM-NAS ...
- 神经网络架构搜索(NAS)综述
在阅读近期的CVPR2019时,看到一篇比较亮眼的图像分割论文.来自斯坦福 Li Fei-Fei组(Auto-deeplab),关于利用NAS策略进行图像分割,达到了较优的水平,仅仅比deeplabv ...
- 详解可微神经网络架构搜索框架(DNAS)
[论文]FBNet: Hardware-Aware Efficient ConvNet Design via Differentiable Neural Architecture Search [地址 ...
- 神经网络架构搜索(NAS)基础
网络架构搜索(NAS)已成为机器学习领域的热门课题.商业服务(如谷歌的AutoML)和开源库(如Auto-Keras[1])使NAS可用于更广泛的机器学习环境.在这篇博客文章中,我们主要探讨NAS的思 ...
- 自动化机器学习(三)神经网络架构搜索综述(NAS)简述
文章目录 技术介绍 简介 技术栈 实现 数据 数据读取 创建模型并训练 模型预测与评估 模型的导出 技术介绍 简介 自动化机器学习就是能够自动建立机器学习模型的方法,其主要包含三个方面:方面一,超参数 ...
最新文章
- VTK:IO之ReadPNM
- mysql查询表字段是否存在_Mysql判断表字段或索引是否存在
- 55种数据可视化开源工具_8种出色的开源数据可视化工具
- [雪峰磁针石博客]大数据Hadoop工具python教程2-python访问HDFS
- 方法二 、属性 CLR学习第九课
- openCV,C++接口,cv::Mat矩阵数据元素读取
- Detours注入DLL钩子入门教程
- 【原创】ESXI6.7+ikuai爱快搭建软路由(非常详细)
- Flutter bottomSheet的使用
- 摄影之构图,了解画面构成的五大元素:主体、陪体、前景、背景、留白
- DottedDict-提供一种使用点路径符号访问列表和字典方法的python库
- 【硬创邦】跟hoowa学做智能路由(十三):网络音箱之Android篇
- Java 基础 面试题
- forgot [XCTF-PWN][高手进阶区]CTF writeup攻防世界题解系列13
- java pdf无法加载_无法在Java中将完整数据生成为PDF文件
- ORA-39346: data loss in character set conversion for object COMMENT
- mssql+mysql联合查询_MySQL 多表查询实现分析
- 打开360安全卫士时弹出错误:windows找不到文件 regedit.exe
- TMS320C6657GPIO相关函数理解
- 小学生加减法出题神器c语言编程,低年级口算出题系统下载