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-2010.5 GPU小时93.8%DARTS: 93.9%
DARTS空间4 GPU小时74.9%RL: 74.0%
ImageNet4 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-10SEKI0.05 GPU天97.1%
CIFAR-10DARTS0.5 GPU天97.0%
ImageNetSEKI0.1 GPU天75.3%
ImageNetProxylessNAS4.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架构
NLPAttention模式Transformer变体
语音时序卷积Conformer设计

相关内容


参考文献

Footnotes

  1. Ji et al., “RZ-NAS: Enhancing LLM-guided Neural Architecture Search via Reflective Zero-Cost Strategy” (ICML 2025)

  2. ICML 2025, “RZ-NAS: Enhancing LLM-guided NAS”

  3. arXiv:2502.20422, “SEKI: Self-Evolution and Knowledge Distillation for LLM-based NAS” (2025)

  4. IEEE TPAMI 2025, “PATNAS: A Path-Based Training-Free Neural Architecture Search”