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_grad3.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_factor4.3 跳过连接问题解决
FX-DARTS通过以下方式缓解跳过连接主导:
- 拓扑约束: 限制每层skip连接数量
- 熵正则化: 防止操作概率过度集中
- 动态重置: 定期重置被主导的操作参数
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 loss7. 其他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_strength7.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
-
Liu, H., Simonyan, K., & Yang, Y. (2019). DARTS: Differentiable Architecture Search. ICLR 2019. ↩