LLM引导的神经架构搜索
概述
大型语言模型(LLM)的代码理解和生成能力为神经架构搜索(NAS)带来了新的可能性。LLM-to-NAS旨在利用LLM辅助架构设计,减少甚至消除对大规模架构评估的依赖。1
LLM在NAS中的角色
架构描述生成
LLM可以将自然语言需求转换为架构代码:
用户需求: "设计一个适合移动端的目标检测网络,
延迟<10ms,精度>75% mAP"
↓
LLM理解 + 代码生成
↓
架构代码: {
"backbone": "MobileNetV3",
"neck": "FPN",
"head": "YOLOX-Head",
"optimization": "剪枝+量化"
}
搜索空间理解
LLM可以理解搜索空间的语义结构:
- 微搜索空间:单层操作选择(Conv3x3 vs Conv5x5)
- 宏搜索空间:整体架构设计(阶段数、通道数)
- 约束条件:延迟、参数量、功耗限制
反馈与迭代
LLM可以根据评估结果提供架构改进建议:
# 示例:LLM反馈循环
feedback = llm.analyze(
architecture=current_arch,
metrics={"accuracy": 0.72, "latency": 15ms},
constraints={"max_latency": 10ms}
)
# 输出: "将第3阶段的通道数从64减少到48,
# 使用深度可分离卷积替代标准卷积"代表性方法
RZ-NAS:反射式零成本NAS
Reflective Zero-cost NAS (RZ-NAS)2是ICML 2025的工作:
核心思想
将LLM定位为架构评估者而非生成器,通过零成本代理引导搜索:
┌─────────────┐ ┌─────────────┐
│ 结构化Prompt│ --> │ LLM │
│ + ZCP分数 │ │ 反馈分析 │
└─────────────┘ └─────────────┘
│
┌────────────────┼────────────────┐
▼ ▼ ▼
架构改进建议 搜索空间约束 性能预测
│ │ │
└────────────────┴────────────────┘
│
迭代优化循环
结构化Prompt设计
SYSTEM_PROMPT = """
你是一个神经网络架构专家。
给定当前架构的性能指标和约束条件,
请提供具体的改进建议。
要求:
1. 建议必须具体可执行
2. 考虑延迟、参数量约束
3. 避免过度复杂的设计
"""
USER_PROMPT = """
当前架构: {arch_description}
性能指标:
- Top-1准确率: {acc}%
- 延迟: {latency}ms
- 参数量: {params}M
约束条件:
- 最大延迟: {max_latency}ms
- 最大参数量: {max_params}M
零成本代理分数: {zcp_score}
排名: 第{rank}名(共{total}个候选)
请提供:
1. 当前架构的主要瓶颈
2. 具体的改进建议
3. 预期性能提升
"""反射模块
RZ-NAS引入反射模块让LLM评估自身建议的质量:
class ReflectionModule:
def evaluate_suggestion(self, arch, suggestion):
"""评估建议的有效性"""
# 检查建议是否在搜索空间内
in_space = self.search_space.validate(suggestion)
# 检查约束是否满足
satisfies_constraints = self.check_constraints(
arch + suggestion
)
# LLM自我评估
self_assessment = self.llm.assess(
f"这个建议合理吗?{suggestion}"
)
return in_space and satisfies_constraints and self_assessment实验结果
| 基准 | 搜索时间 | Top-1准确率 | 对比方法 |
|---|---|---|---|
| NAS-Bench-201 | 0.5 GPU小时 | 93.8% | DARTS: 93.9% |
| DARTS空间 | 4 GPU小时 | 74.9% | RL: 74.0% |
| ImageNet | 4 GPU小时 | 22.1%误差 | - |
SEKI:自进化+知识蒸馏
SEKI3采用两阶段范式:
第一阶段:自进化
初始架构池 → LLM生成候选 → 评估反馈 → 架构改进
↓
高性能架构池
迭代细化机制:
def self_evolution(current_arch, feedback, iterations=5):
pool = initialize_pool()
for i in range(iterations):
# 生成新候选
candidates = llm.generate_variants(
current_arch,
n_variants=10,
feedback=feedback
)
# 快速评估
for cand in candidates:
score = fast_evaluate(cand) # ZCP
pool.add(cand, score)
# 选择最优
current_arch = pool.best()
# 生成反馈
feedback = pool.summarize_feedback()
return pool.high_performers()第二阶段:知识蒸馏
从高性能架构池中提取模式:
def knowledge_distillation(high_performers):
"""分析优秀架构的共同特征"""
patterns = []
for arch in high_performers:
# 提取架构特征
features = extract_features(arch)
patterns.append(features)
# 发现共同模式
common_patterns = find_common_patterns(patterns)
# 生成新架构
new_arch = llm.generate_from_patterns(common_patterns)
return new_arch性能
| 数据集 | 方法 | 搜索成本 | 准确率 |
|---|---|---|---|
| CIFAR-10 | SEKI | 0.05 GPU天 | 97.1% |
| CIFAR-10 | DARTS | 0.5 GPU天 | 97.0% |
| ImageNet | SEKI | 0.1 GPU天 | 75.3% |
| ImageNet | ProxylessNAS | 4.0 GPU天 | 75.1% |
PATNAS:路径基免训练NAS
Path-based Training-Free NAS (PATNAS)4:
核心思想
将架构表示为计算路径,利用图结构进行评估:
架构图表示:
节点:操作(Conv, Pool, Skip)
边:数据流
路径评估:
路径1: Input → Conv3x3 → Pool → Output
路径2: Input → Conv5x5 → Skip → Output
路径重要性 = Attention(路径特征)
算法流程
class PATNAS:
def search(self, search_space):
# 1. 路径采样
paths = self.sample_paths(search_space, n=1000)
# 2. 路径特征提取
path_features = [self.extract_features(p) for p in paths]
# 3. 零成本评估
scores = [self.zcp_score(pf) for pf in path_features]
# 4. 图神经网络编码
graph_encoding = self.gnn_encode(search_space.graph)
# 5. 综合排序
final_scores = combine(scores, graph_encoding)
return top_k(final_scores, k=10)LLM NAS搜索框架
完整搜索流程
┌─────────────────────────────────────────────────────────┐
│ LLM引导的NAS流程 │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────┐
│ 1. 问题定义与约束输入 │
│ (自然语言描述) │
└─────────────────────────┘
│
▼
┌─────────────────────────┐
│ 2. 搜索空间构建 │
│ (LLM理解+编码) │
└─────────────────────────┘
│
▼
┌─────────────────────────┐
│ 3. 候选架构生成 │
│ (LLM代码生成) │
└─────────────────────────┘
│
▼
┌─────────────────────────┐
│ 4. 快速评估 │
│ (ZCP + 轻量微调) │
└─────────────────────────┘
│
▼
┌─────────────────────────┐
│ 5. LLM反馈分析 │
│ (性能→改进建议) │
└─────────────────────────┘
│
▼
┌─────────────────────────┐
│ 6. 架构迭代优化 │
│ (返回步骤3) │
└─────────────────────────┘
│
▼
最终架构输出
Prompt工程技巧
架构描述模板
ARCH_TEMPLATE = """
## 网络架构规范
### 阶段配置
{stage_configs}
### 操作定义
{operation_definitions}
### 约束条件
- 最大深度: {max_depth}
- 最大宽度: {max_width}
- 最大参数量: {max_params}M
### 搜索空间
操作集合: {ops}
连接方式: {connectivity}
"""上下文示例
def few_shot_prompt():
examples = [
{
"input": "3层CNN,卷积核3x3",
"output": "Conv3x3 → Conv3x3 → Conv3x3"
},
{
"input": "ResNet风格,带跳跃连接",
"output": "Conv3x3 → [+ Conv3x3] → Pool"
}
]
return format_few_shot(examples)挑战与局限
Hallucination问题
LLM可能生成不存在的操作或不可执行的架构:
| 问题类型 | 示例 | 影响 |
|---|---|---|
| 操作幻觉 | ”SuperConv”(不存在) | 代码无法运行 |
| 连接幻觉 | 违反DAG约束 | 循环依赖 |
| 性能幻觉 | ”此架构可达到99%“ | 误导搜索方向 |
缓解策略:
def validate_llm_output(architecture):
"""验证LLM输出的有效性"""
# 1. 操作合法性检查
valid_ops = get_valid_operations()
for op in architecture.ops:
assert op in valid_ops, f"非法操作: {op}"
# 2. 图结构验证
assert is_acyclic(architecture.graph), "存在循环"
# 3. 约束满足检查
assert architecture.params <= MAX_PARAMS
assert architecture.depth <= MAX_DEPTH知识边界
LLM的知识受限于预训练数据:
- 新操作:可能不知道最新提出的操作(如新激活函数)
- 新搜索空间:需要额外上下文
- 特定领域:通用LLM可能不擅长专用网络设计
效率权衡
| 组件 | 计算成本 | 占比 |
|---|---|---|
| LLM推理 | ~0.1秒/次 | 30% |
| ZCP评估 | ~0.01秒/次 | 10% |
| 架构构建 | ~0.1秒/次 | 30% |
| 验证测试 | ~1秒/次 | 30% |
未来方向
多模态LLM+NAS
结合视觉能力直接评估架构图:
# 未来可能的接口
arch_diagram = visualize(architecture)
feedback = multimodal_llm.analyze(
image=arch_diagram,
question="这个架构设计合理吗?"
)自动化Prompt优化
学习最优的架构搜索Prompt:
# Auto-Prompt for NAS
def learn_nas_prompt(task_description, feedback):
"""学习任务特定的Prompt"""
initial_prompt = generic_nas_prompt
for _ in range(iterations):
# 生成架构
arch = llm.generate(initial_prompt, task_description)
# 评估
performance = evaluate(arch)
# 更新Prompt
initial_prompt = update_prompt(
initial_prompt,
performance,
feedback
)
return initial_prompt领域自适应
针对特定领域(目标检测、NLP、语音等)的专用NAS:
| 领域 | 专用先验 | LLM知识增强 |
|---|---|---|
| 目标检测 | 特征金字塔 | YOLO/FCOS架构 |
| NLP | Attention模式 | Transformer变体 |
| 语音 | 时序卷积 | Conformer设计 |
相关内容
- 神经网络架构搜索概述 — NAS基础概念
- 免训练NAS与零成本代理 — ZCP基础与进展
- 搜索策略 — 强化学习、进化方法
- NAS评估方法 — 代理模型与评估
参考文献
Footnotes
-
Ji et al., “RZ-NAS: Enhancing LLM-guided Neural Architecture Search via Reflective Zero-Cost Strategy” (ICML 2025) ↩
-
ICML 2025, “RZ-NAS: Enhancing LLM-guided NAS” ↩
-
arXiv:2502.20422, “SEKI: Self-Evolution and Knowledge Distillation for LLM-based NAS” (2025) ↩
-
IEEE TPAMI 2025, “PATNAS: A Path-Based Training-Free Neural Architecture Search” ↩