DARTS及其变体综述

1. DARTS基础

1.1 核心思想

可微架构搜索(Differentiable Architecture Search, DARTS)由Liu等人于2019年提出1,将离散的架构选择问题松弛为连续的参数优化问题。

关键创新: 用softmax混合操作替代单一操作选择:

其中是边上的架构参数。

1.2 双层优化框架

DARTS求解以下双层优化问题:

交替优化:

for epoch in range(num_epochs):
    # 内层:优化权重
    for _ in range(inner_steps):
        omega = omega - lr_w * grad_w(L_train, omega, alpha)
    
    # 外层:优化架构
    alpha = alpha - lr_a * grad_a(L_val, omega, alpha)

1.3 架构离散化

搜索结束后,使用以下规则离散化连续架构:


2. Skip连接主导问题

2.1 问题描述

DARTS面临严重的**性能崩溃(Performance Collapse)**问题:跳过连接(Skip Connect)在搜索过程中占主导地位,导致最终选择的架构性能不佳。

现象:

  • Skip连接的概率迅速接近1
  • 其他操作(卷积等)被抑制
  • 搜索得到的架构性能低于预期

2.2 理论分析

梯度不对称性:

Skip连接的计算梯度为:

而其他操作的梯度更复杂,可能存在梯度消失问题。

损失景观平坦性:

Skip连接使得网络更易于优化,在损失景观中位于更平坦的区域,导致架构参数向其偏移。

2.3 问题根源

因素描述
梯度不对称Skip连接梯度计算简单,卷积等操作梯度复杂
优化效率Skip连接不影响训练动态,加速收敛
超参数敏感搜索学习率等参数影响严重
正则化缺失缺乏防止过度依赖skip连接的正则项

3. ZO-DARTS++方法

3.1 零阶优化框架

论文: Xie et al., “ZO-DARTS++: An Efficient and Size-Variable Zeroth-Order NAS Algorithm” (arXiv 2503.06092)

核心思想: 使用零阶(Zeroth-Order, ZO)优化替代双层优化,避免梯度消失问题。

ZO梯度估计:

其中是高斯随机方向。

3.2 大小可变搜索

创新点: 搜索过程中允许网络大小(宽度、深度)动态调整。

class ZO_DARTS_PlusPlus:
    def __init__(self, min_width=16, max_width=64):
        self.width_schedule = self._create_schedule(min_width, max_width)
    
    def search_step(self, epoch):
        # 动态调整网络宽度
        current_width = self.width_schedule[epoch]
        self.model.adjust_width(current_width)
        
        # ZO优化步骤
        alpha_grad = self._zo_gradient_estimate()
        self.alpha -= self.lr_a * alpha_grad

3.3 内存效率优化

技术内存节省精度影响
梯度估计~40%轻微降低
延迟更新~30%
异步计算~20%

4. FX-DARTS方法

4.1 拓扑无约束搜索

论文: Rao et al., “FX-DARTS: Designing Topology-unconstrained Architectures” (arXiv 2504.20079)

核心创新: 移除传统DARTS对有向无环图(DAG)的限制,允许更灵活的拓扑结构。

搜索空间扩展:

4.2 熵基超网络收缩

机制: 使用熵正则化引导超网络搜索

其中是熵函数,强制架构参数更均匀分布。

def entropy_shrinking(self):
    """基于熵的超网络收缩"""
    for edge in self.superNet.edges:
        # 计算softmax分布的熵
        probs = F.softmax(self.alpha[edge], dim=-1)
        entropy = -(probs * torch.log(probs + 1e-8)).sum()
        
        # 如果熵过低,增加正则化
        if entropy < self.threshold:
            self.alpha[edge] *= self.shrink_factor

4.3 跳过连接问题解决

FX-DARTS通过以下方式缓解跳过连接主导:

  1. 拓扑约束: 限制每层skip连接数量
  2. 熵正则化: 防止操作概率过度集中
  3. 动态重置: 定期重置被主导的操作参数

5. 半搜索空间DARTS

5.1 方法动机

问题: 完整超网络需要大量GPU内存( for nodes)。

解决方案: 只搜索部分边,共享其他边的操作。

5.2 半搜索空间设计

论文: Rumiantsev et al., “Half Search Space is All You Need” (arXiv 2505.13586)

核心思想:个节点的搜索空间减半为个搜索节点。

5.3 权重共享策略

策略内存节省精度影响
完整搜索0%基准
半搜索~50%<1%
1/4搜索~75%~2-3%
单节点搜索~90%~5%

6. 平滑激活正则化

6.1 方法动机

论文: Zhou et al., “Regularizing DARTS with Smooth Activation” (arXiv 2504.16306)

观察: Skip连接主导与激活函数的不连续性相关。

6.2 平滑激活函数

用平滑激活替代ReLU:

6.3 正则化效果

class SmoothDARTS:
    def __init__(self, activation='mish'):
        self.activation = get_activation(activation)
    
    def regularization_loss(self, model):
        """鼓励操作混合的正则化"""
        loss = 0
        for name, param in model.arch_params.items():
            # 惩罚过度集中的分布
            probs = F.softmax(param, dim=-1)
            entropy = -(probs * torch.log(probs + 1e-8)).sum(dim=-1)
            loss += entropy.mean()
        return loss

7. 其他DARTS变体

7.1 EM-DARTS

ICLR 2025: 使用边变异机制防止性能崩溃

核心机制:

def edge_mutation(self, edge):
    """边变异:随机增强非skip操作"""
    with torch.no_grad():
        probs = F.softmax(self.alpha[edge], dim=-1)
        if probs[skip_idx] > 0.5:  # skip主导
            # 增加其他操作的概率
            self.alpha[edge, other_idx] += self.mutation_strength

7.2 DARTS-EAST

应用智能期刊: 边自适应+拓扑优先选择

改进:

  • 边自适应选择阈值
  • 拓扑优先的架构评估
  • 更稳定的搜索过程

7.3 LoRA-DARTS

结合LoRA: 使用低秩适应技术改进DARTS

优势:

  • 参数效率更高
  • 减少过拟合
  • 更好地处理skip连接

8. 方法综合比较

方法核心创新Skip问题内存效率搜索质量
DARTS连续松弛严重中等
ZO-DARTS++ZO优化缓解良好
FX-DARTS拓扑无约束解决中等优秀
半搜索空间减半轻微良好
平滑激活激活正则化缓解无变化良好
EM-DARTS边变异解决中等优秀

9. 实践建议

9.1 方法选择指南

场景推荐方法原因
资源受限半搜索/ZO-DARTS++内存高效
高质量搜索FX-DARTS/EM-DARTS跳过连接问题解决
稳定搜索平滑激活简单有效
通用场景DARTS-EAST平衡性能

9.2 超参数设置

config = {
    'DARTS': {
        'outer_lr': 3e-4,      # 架构参数学习率
        'inner lr': 3e-3,      # 权重学习率
        'unrolled steps': 5,   # 展开步数
        'weight decay': 1e-4,  # 权重衰减
    },
    'FX-DARTS': {
        'entropy weight': 0.1,  # 熵正则化权重
        'shrink threshold': 0.3, # 收缩阈值
    },
    'ZO-DARTS++': {
        'num directions': 8,   # 随机方向数
        'perturbation': 1e-3,  # 扰动大小
    }
}

9.3 常见问题与解决

问题原因解决方案
Skip主导梯度不对称FX-DARTS熵正则化
训练不稳定学习率过大降低outer_lr
泛化差过拟合超网络早停+正则化
搜索时间长超网络过大半搜索空间

10. 相关主题


参考文献

Footnotes

  1. Liu, H., Simonyan, K., & Yang, Y. (2019). DARTS: Differentiable Architecture Search. ICLR 2019.