EDA、符号主义与 LLM 的交汇

2026-05-06 · Steve Chan

EDA、符号主义与 LLM 的交汇

一、EDA 背后的算法基石

EDA(电子设计自动化)本质上是符号化的约束求解

  • 逻辑综合:布尔代数 + Quine-McCluskey / ESPRESSO 算法做最小化
  • 形式验证:BDD(二元决策图)、SAT/SMT 求解器(Z3、MiniSat)
  • 布局布线:图论 + 整数线性规划(ILP)+ 模拟退火
  • 时序分析:静态时序分析(STA)基于图的最长路径
  • RTL 仿真:事件驱动 + 符号执行

这些都是精确的、可证明的——不容许概率性错误。一个 CPU 流片错误成本上亿美元,因此 EDA 工具必须建立在严格的数理逻辑之上。

1.1 虚拟电子实验室:把电路变成方程

代表软件:SPICE / LTspice / PSpice / Multisim / Proteus / TINA-TI / Qucs / EasyEDA / Cadence Virtuoso

它们看起来是"画原理图、按下 Run、出波形",背后却是一整套数值计算流水线:

原理图 ──► 网表 (Netlist) ──► 方程组装 ──► 数值求解 ──► 波形
            │                    │              │
            │                    │              └─ Newton-Raphson + 数值积分
            │                    └─ Modified Nodal Analysis (MNA)
            └─ R / L / C / Diode / BJT / MOSFET 模型

核心算法:修正节点分析法(MNA)

对每个节点写基尔霍夫电流定律 (KCL)

∑ I_in = ∑ I_out      (每个节点)
∑ V (回路) = 0         (KVL)

把所有节点方程组装成矩阵:

G · v = i      (线性元件)

其中 G 是导纳矩阵,v 是节点电压向量,i 是注入电流。线性电路一步矩阵求解;非线性元件(二极管、三极管)需要迭代。

非线性求解:Newton-Raphson

二极管的 Shockley 方程 I = I_s (e^(V/V_T) − 1) 是非线性的。SPICE 的做法:

v_{k+1} = v_k − J(v_k)⁻¹ · f(v_k)

每一步把非线性元件线性化成"等效电导 + 等效电流源"(companion model),再走一次 MNA,迭代直到收敛。

瞬态仿真:数值积分

电容 i = C dv/dt、电感 v = L di/dt 是微分方程。SPICE 默认用:

  • Backward Euler(一阶,最稳)
  • Trapezoidal(二阶,默认)
  • Gear / BDF(高阶,刚性问题)

把微分项离散成"等效电阻 + 历史电流源",整个系统又退化成一次 MNA。

仿真模式

模式 数学本质 用途
.OP 工作点 解非线性代数方程组 静态偏置
.DC 扫描 一系列工作点 转移特性曲线
.AC 小信号 工作点处线性化 + 复频域 jω 频响、Bode 图
.TRAN 瞬态 非线性 ODE 数值积分 真实波形
.NOISE 噪声功率谱积分 信噪比
.MC 蒙特卡洛 随机抽样元件容差 良率分析

元件模型本身就是几十年的工程积累

  • BJT:Ebers-Moll → Gummel-Poon → VBIC
  • MOSFET:Level 1/2/3 → BSIM3 → BSIM4 → BSIM-CMG (FinFET)
  • 一个 BSIM4 模型有 400+ 参数,每个都对应一种物理效应

1.2 自动计算与设计:以振荡电路为例

一个具体问题:给我设计一个 1 kHz 正弦振荡器。EDA / 仿真软件背后的"自动设计"在做什么?

步骤 1:拓扑选择(符号知识库)

频率范围           ─► 拓扑
───────────────────────────────────────
< 1 MHz, 正弦      ─► RC(文氏桥、相移)
1 MHz – 100 MHz    ─► LC(Hartley、Colpitts、Clapp)
> 1 MHz, 高稳定度  ─► 晶体振荡器
方波 / 张弛         ─► 555、施密特触发

这是专家系统式的规则库——MYCIN 风格的 IF-THEN。

步骤 2:起振判据(巴克豪森准则)

任何振荡器都要满足两个数学条件:

|A · β| ≥ 1            (幅值条件:环路增益 ≥ 1)
∠(A · β) = 2nπ         (相位条件:环路相移为 2π 整数倍)

软件要做的是符号 + 数值地验证这两个条件。

例:Colpitts 振荡器

        ┌── L ──┐
        │       │
        ├── C1 ─┤
        │       │
        └── C2 ─┘
              │
            BJT (Q)

理论结果(教科书可推导,软件直接套用):

  • 振荡频率:f = 1 / (2π√(L · C1·C2/(C1+C2)))
  • 起振条件(小信号 g_m):g_m · R_L ≥ C2 / C1
  • BJT 最小 β(电流放大系数):从 g_m = I_C / V_T 反推 I_C,再由 I_B = I_C / β 给出 β_min

软件的自动设计流程

用户输入 f = 1 kHz, V_out = 5 Vpp, 负载 = 10 kΩ
        │
        ▼
1. 选拓扑:1 kHz → 文氏桥 RC 振荡器
2. 解方程:f = 1/(2πRC) → 选 R = 16 kΩ, C = 10 nF
3. 增益条件:A_v ≥ 3(文氏桥的硬性要求)
4. 选三极管:查库 → 2N3904 (β=100~300) 满足
5. 计算偏置电阻:保证静态工作点 + 启振裕度
6. SPICE 仿真验证:跑 .TRAN 看波形是否起振、是否失真
7. 容差分析:.MC 跑 100 次看 R/C 偏差 5% 时频率漂移
        │
        ▼
输出:网表 + BOM + 波形 + 良率报告

每一步都是符号推理(公式)+ 数值仿真(SPICE)+ 规则库(元件型号)的混合。

关键判断:是否满足要求?

软件回答的不是"对/错",而是给出裕度(margin)

检查项 数学表达 物理意义
起振裕度 \|Aβ\| − 1 越大越容易起振,越小越省功耗
相位裕度 180° − ∠(Aβ) @ 0dB < 45° 容易振荡发散
增益裕度 −\|Aβ\| @ ∠=180° 稳定性储备
频率精度 Δf / f 受 R、C 容差影响
谐波失真 THD AGC 是否压住非线性

这些指标都是SPICE 直接算出来的,不需要人工求解。

1.3 数字电路设计的自动化

数字侧的虚拟实验室(Multisim 数字模式 / Proteus / Logisim / Vivado / Quartus)走的是另一条路:

真值表 → 最小布尔表达式 → 门级网表

真值表 ──► 卡诺图 / Quine-McCluskey ──► 最简 SOP/POS ──► 工艺映射
                                                          │
                                                          ▼
                                                  NAND/NOR 门网表

例:3 输入多数表决器

输入 ABC → 输出 Y = AB + BC + AC   (Quine-McCluskey 自动求出)

时序电路:状态机最小化

  • Hopcroft 算法:合并等价状态,O(n log n)
  • 状态编码:one-hot vs binary vs Gray,影响面积/功耗/速度
  • 重定时(retiming):移动寄存器位置以缩短关键路径

综合阶段还要做

  • 逻辑等价检查(LEC):综合前后逻辑是否等价 → SAT/BDD
  • 静态时序分析(STA):所有路径 setup/hold 是否满足
  • 功耗估算:开关活动 × 电容 × V² × f

这些都是精确算法,不容许"差不多"。

1.4 自动设计背后的优化引擎

当问题不能解析求解(多目标、离散选择),就动用优化算法

问题 算法 例子
元件值选择 梯度下降 / Nelder-Mead 调放大器带宽
拓扑搜索 遗传算法 / 模拟退火 滤波器结构演化
布局 模拟退火 / 力导向 芯片 floorplan
布线 A* / Lee 算法 / 整数规划 多层 PCB
参数良率 蒙特卡洛 + 重要性采样 6σ 设计

这些算法是"哑"的——它们不懂电路,只会按指标搜索。 真正的"懂"被编码在 SPICE 模型 + 设计规则 + 检查器里。这正是符号主义的精髓:把领域知识写成可执行的规则与方程

1.5 LLM 在虚拟电子实验室中的位置

老软件的痛点:门槛高。要会画原理图、懂 SPICE 语法、懂模型参数、懂指标含义。LLM 把每一步都接上自然语言:

用户:"给我设计一个 1 kHz 低失真正弦发生器,5V 单电源,BOM ≤ 5 元"
        │
        ▼
LLM ──► 选拓扑(文氏桥)+ 算元件 + 生成 SPICE 网表
        │
        ▼
调用 ngspice(工具调用)──► 拿到波形 + THD
        │
        ▼
LLM 解读:"THD = 1.2%,超出预期。建议加 AGC(用 JFET 自动稳幅)"
        │
        ▼
重新生成网表 ──► 再仿真 ──► 收敛

这个回路里:

  • LLM = 自然语言前端 + 拓扑知识 + 调试经验
  • SPICE = 精确求解器(符号验证器)
  • 元件库 / 设计规则 = 专家系统的知识库
  • 优化算法 = 参数搜索

结构上和第六章描述的"LLM 提议 + 符号验证"完全一致——只是把数学定理换成了电路指标。

一个仿真器是封装好的物理学;一个 LLM 是封装好的工程经验。两者相加,才是新一代的"虚拟工程师"。


二、符号主义的家谱

符号主义 (Symbolicism / GOFAI)
├── 逻辑推理
│   ├── Prolog       —— 一阶逻辑 + SLD 归结
│   ├── Coq / Lean   —— 依赖类型 + Curry-Howard 同构
│   └── Isabelle/HOL —— 高阶逻辑
├── 专家系统
│   ├── MYCIN        —— 血液感染诊断(1970s 斯坦福)
│   ├── DENDRAL      —— 化学分子结构推断
│   └── XCON / R1    —— DEC 计算机配置(每年省 4000 万美元)
├── 概率图模型
│   ├── 贝叶斯网络   —— Pearl 的 do-calculus
│   ├── HMM / CRF
│   └── 马尔可夫随机场
└── EDA / CAD
    ├── SAT / SMT    —— 形式验证
    └── 约束传播     —— 时序、布线

符号主义的核心信念:智能 = 符号操作 + 逻辑推理。它与今天的连接主义(神经网络、LLM)形成对照。


三、具体例子

3.1 Prolog(家族关系 / 可达性推理)

parent(tom, bob).
parent(bob, ann).
ancestor(X, Y) :- parent(X, Y).
ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y).

?- ancestor(tom, ann).   % true

EDA 中"信号能否从 A 传到 B"、"这条路径有没有组合环",本质上就是同一类可达性推理

3.2 Coq(数学定理证明)

Theorem plus_O_n : forall n : nat, 0 + n = n.
Proof.
  intros n. simpl. reflexivity.
Qed.

Coq 已被用来证明:

  • 四色定理(Gonthier, 2005)
  • CompCert:一个被形式化证明正确的 C 编译器
  • 奇异性定理(Lean / mathlib 中的 Liquid Tensor Experiment)

这与 EDA 的"形式验证"是同一思想——不是测试,而是证明没有 bug。

3.3 MYCIN 风格的医疗专家系统

IF  患者发热 > 38.5°C
AND 血培养阳性
AND 革兰氏阴性
THEN 怀疑铜绿假单胞菌 (CF = 0.7)

确定性因子(Certainty Factor) 是 MYCIN 的发明,用来在严格逻辑之上叠加不确定性。后来被贝叶斯网络在数学上更优雅地取代。

3.4 贝叶斯网络(概率推断)

吸烟 ──► 肺癌 ──► X光异常
         │
         └──► 咳嗽

给定 P(肺癌|吸烟)P(X光|肺癌)P(咳嗽|肺癌),可以做:

  • 诊断推断:观察到 X 光异常,逆推 P(肺癌|X光)
  • 干预推断do(戒烟)P(肺癌) 是多少
  • 反事实推断:如果他没吸烟,会得肺癌吗

EDA 中的故障诊断良率预测就是贝叶斯网络的直接应用。


四、LLM 能为这些"老派"系统带来什么?

符号系统的痛点是:规则一多就维护不了,自然语言进不去。LLM 恰好补上:

老派系统 痛点 LLM 的赋能
Prolog 规则需手写 从自然语言/文档自动抽规则
Coq / Lean 证明步骤繁琐 GPT-f / LeanDojo / DeepSeek-Prover 自动生成证明策略
MYCIN 知识获取瓶颈 从医学文献抽取规则、与医生自然语言交互
贝叶斯网络 网络结构难定 从文本因果描述构建 DAG
EDA Verilog/约束门槛高 ChipNeMo(NVIDIA):自然语言生成 RTL、调 EDA 工具

4.1 数学软件 + LLM 的进展

  • Mathematica + LLM:Wolfram 已把 LLM 当作"自然语言前端",把"求 sin(x)/x 在 0 处的极限"翻译成 Limit[Sin[x]/x, x->0]
  • Lean 4 + Copilot:陶哲轩用 Lean + Copilot 形式化自己的论文(2023~2024)
  • AlphaProof(DeepMind, 2024):在 IMO 上达到银牌水平,结合 Lean 做符号验证
  • 自动求导:早期 SymPy / Mathematica 用规则;现在 LLM 可以生成 + 验证 + 解释推导步骤

关键架构:LLM 提议(neural) + 符号系统验证(symbolic)——这就是所谓的 Neuro-Symbolic AI。LLM 负责"猜",符号系统负责"判"。

4.2 EDA + LLM 的实际产品

  • NVIDIA ChipNeMo:基于 LLaMA 微调,工程师用自然语言查 bug、写 SystemVerilog 断言
  • Synopsys.ai Copilot / Cadence JedAI:辅助生成约束、调参
  • RTLCoder / VerilogEval:开源 RTL 生成基准

五、反过来:符号主义如何影响 LLM 的训练?

这是更深的一层。

5.1 Chain-of-Thought(思维链)= 推理过程的符号化

LLM 的"逐步推理"本质上是把符号系统的显式中间步骤搬到 token 序列里。早期符号系统的成功证明:显式分步比隐式跳跃更可靠

5.2 RLHF / RLVR:用符号验证器当奖励信号

  • 代码训练:单元测试通过 = 奖励 → 这就是符号验证器
  • 数学训练:Lean / 数值校验 = 奖励
  • DeepSeek-R1, o1:在可验证任务上做 RL,本质是让 LLM 向符号正确性对齐

5.3 工具调用(Tool Use)= 把符号引擎挂在 LLM 旁边

LLM 不擅长精确算术、SAT 求解、定理证明。解决方案:让它调用 Python / Z3 / Lean / Wolfram。这是当代 Agent 的核心。

5.4 数据合成:符号系统反哺训练数据

  • 用 SymPy 自动生成大量"题目—解答"对训练数学能力
  • 用 Lean 生成"陈述—证明"对训练形式化能力
  • 用 EDA 工具生成"约束—布局"对训练芯片设计

没有符号引擎,就没有可验证、可扩展的高质量训练数据。

5.5 架构启示

  • Transformer 的 attention ≈ 软化的符号绑定
  • Mixture-of-Experts ≈ 软化的规则路由
  • 神经网络在尝试"学出"当年人类手写的符号结构

六、结论:两条路线的合流

维度 符号主义 连接主义(LLM)
表示 离散符号 连续向量
推理 演绎、严格 归纳、概率
可解释
鲁棒性 脆(规则外失效) 柔(外推但易幻觉)
知识获取 手工 数据驱动

未来的 EDA / 数学 / 医疗系统不会"二选一",而是 LLM 当大脑、符号引擎当脊柱

用户自然语言 ──► LLM 理解 + 提议 ──► 符号求解器/证明器 ──► 验证 ──► 反馈给 LLM
                       ▲                                              │
                       └──────────────────────────────────────────────┘

EDA 几十年积累的"如何把现实约束转成可求解的符号系统"的工程智慧,正是 LLM 时代最珍贵、最难复制的资产之一。


七、Agent 的新范式:从"全家桶工具"到"原子工具 + 自生长"

7.1 趋势反转

早期 Agent / Function-calling 的设计哲学是"工具越多越强"——给模型挂上几十上百个 API:搜索、读文件、写文件、查天气、订机票……每个能力对应一个预定义工具。

新一代 Agent(如 Anthropic 的 Claude Code、SWE-agent、OpenHands、以及一些研究型 Agent 框架)开始反过来

只给极少数(≈ 9 个)原子工具,剩下的能力让 Agent 自己组合 / 派生 / 长出来

典型的"原子集"大致是:

read     —— 读文件 / 读资源
write    —— 写文件 / 写资源
edit     —— 局部修改
bash     —— 执行 shell(图灵完备的逃生舱)
glob     —— 按模式找文件
grep     —— 按内容找文件
spawn    —— 派生子 Agent / 子任务
plan     —— 规划 / 任务分解
recall   —— 记忆 / 上下文检索

任何更高层能力("部署到 k8s"、"跑一遍回归测试"、"重构这个模块")都不再是预定义工具,而是这些原语的组合表达式

7.2 这正是 Lambda 演算 / Lisp 的思想

Lambda 演算(Church, 1936)证明了:只要有 变量抽象 (λ)应用 三个原语,就能表达任何可计算函数。这是计算的最小核

Lisp(McCarthy, 1958)的 7 个原语

quote   atom    eq    car    cdr    cons    cond

仅靠这 7 个,加上 lambdalabel(递归),McCarthy 在论文里用 Lisp 自己写出了 Lisp 的 eval——这就是著名的"Lisp 的不动点",是计算机科学史上最深刻的几页之一。

进一步地:

  • defunletcond —— 都是宏
  • CLOS(Common Lisp Object System) —— 整个面向对象系统是用宏写出来的,不是语言内置
  • loop、format、async —— 都是用户空间的宏展开
  • Scheme 的 call/cc、Racket 的整套语言族 —— 同样的递归构造

核心信条:用极少的、正交的、可组合的原语,递归地构造无限丰富的上层结构。

7.3 Agent ≅ Lisp 解释器

把对应关系写出来:

Lisp 新 Agent
7 原语(car/cdr/cons/...) 9 原子工具(read/write/bash/...)
lambda 抽象 "把这一串操作封装成一个子任务"
eval Agent 的主循环(observe → think → act)
宏(macro) Agent 自己写出的 skill / sub-agent / shell 脚本
REPL Agent 的对话回合
不动点 / 自举 Agent 用 Agent 写 Agent(meta-agent)
S-expression 工具调用的结构化 JSON / XML

Claude Code 里 Agent 用 bash 写一个一次性脚本来完成某个复合任务,本质上就是在做宏展开——临时定义一个新"函数",立即应用,然后丢弃。

7.4 这与"专家系统"的连接

老派专家系统(MYCIN、XCON)的命门是:规则要由人手写,知识获取是瓶颈。

新范式给出的答案是:

原子工具(公理) + LLM(推理引擎) + 反馈环(验证)
        │                                  │
        └────► Agent 自己生长出规则 ◄──────┘
  • 公理少而正交 ← Lisp / lambda 演算
  • 从已知推未知 ← 数理逻辑、Coq 的 tactic
  • 可验证的反馈 ← 符号系统(编译器、测试、Lean)
  • 可自然语言驱动 ← LLM

这正是 MYCIN 当年想做但做不到的事——它差的不是规则引擎,而是一个能从经验里长出新规则的归纳器。LLM 补上了这一环。

7.5 LLM 的自进化也在向 Lisp 哲学靠拢

观察当代 LLM 训练 / 推理栈:

Lisp 思想 LLM 中的体现
用少量原语递归定义一切 基础模型 + 少量工具 派生千变万化的 Agent 行为
代码即数据(homoiconicity) Prompt 即程序,模型既消费也生成 prompt
宏:编译期生成代码 Agent 写 Agent、自动生成 skill / sub-agent
REPL 交互式开发 Agent 的 ReAct / 思维链循环
自举(self-hosting) LLM 生成训练数据训练 LLM(self-play, RLAIF, self-distillation)
不动点 模型在自我反思 / self-refine 中收敛

自进化 LLM 的极致形态:

LLM₀ ──产生数据──► 数据集 D₁ ──训练──► LLM₁
 ▲                                         │
 └─────── 用 LLM₁ 校验 / 筛选 ──────────────┘

这就是 Lisp 的 eval 不动点在大模型时代的回响。

7.6 为什么"少即是多"对 Agent 是对的

  1. 组合爆炸性:n 个正交原语能组合出指数级行为;n 个重叠的高层工具反而互相干扰。
  2. 可解释性:每一步都是原子动作,trace 即解释。
  3. 可移植性:原子工具是跨环境最稳定的抽象(任何 Unix 都有 bashgrep)。
  4. 训练友好:原子动作的数据更易合成、验证、RL。
  5. 避免"工具偏置":预定义高层工具会让模型过拟合到特定 API,丧失泛化。

7.7 与 EDA 的呼应

回到本文主题:EDA 工具链同样是这种哲学——

  • 门级原语(NAND / NOR)是硬件版的"7 原语"
  • 标准单元库 = 宏库
  • HDL(Verilog/Chisel) = 在原语之上的 DSL
  • 综合器 = 把高层描述展开到原语网表 ≈ Lisp 的宏展开

一颗芯片,归根结底是 NAND 门的"宏展开";
一个 Agent,归根结底是 9 个原子工具的"宏展开";
一个数学定理,归根结底是公理的"宏展开";
一段 Lisp 程序,归根结底是 7 个原语的"宏展开"。

这是同一种思想在不同物质衬底上的化身。

7.8 展望:Agent = 可执行的 Lisp 方言

我们或许正在见证一种新型编程语言诞生:

  • 语法:自然语言 + 工具调用
  • 语义:LLM 解释 + 符号验证
  • 运行时:Agent 主循环
  • :积累下来的 sub-agent / skill / prompt
  • 元编程:Agent 写 Agent

如果这个类比成立,那么软件工程下一阶段的核心技能,可能不是写代码,而是设计原子集——选哪 9 个工具、定义什么样的最小原语,决定了上层能长出多丰饶的能力。

这恰好是 McCarthy 1958 年做的事,也是 Church 1936 年做的事。历史在更高的螺旋上重演。


八、设计一个 LLM 原生的虚拟电子实验室

把前面所有线索(符号求解器、原子工具、自进化、专家系统)落到一个具体产品上:ElectroLab-LM

8.1 设计原则

  1. LLM 不替代 SPICE,LLM 包裹 SPICE——精确数值仍由数值求解器负责,LLM 负责理解、规划、解释、迭代。
  2. 原子工具优先——给 Agent ≈ 9 个原子工具,复杂功能由其组合派生。
  3. 一切可验证——LLM 的每一个输出都要能被 SPICE / DRC / 单元测试反证。
  4. 闭环自进化——产品在运行中持续产生训练数据。

8.2 总体架构

┌────────────────────────────────────────────────────────────────┐
│                        用户 (自然语言)                            │
└────────────────────────────────────────────────────────────────┘
                               │
                               ▼
┌────────────────────────────────────────────────────────────────┐
│                     Planner LLM (Opus 级)                       │
│       ─ 拓扑选择 / 任务分解 / 调试推理 / 解释                    │
└────────────────────────────────────────────────────────────────┘
                               │ 调用原子工具
                               ▼
┌──────────┬──────────┬──────────┬──────────┬─────────┬─────────┐
│ netlist  │ simulate │ measure  │ search   │ compute │ render  │
│ 生成网表  │ 调SPICE  │ 提取指标 │ 查元件库 │ 符号代数│ 画波形  │
├──────────┼──────────┼──────────┼──────────┼─────────┼─────────┤
│  read    │  write   │   bash   │  recall  │  spawn  │         │
│  文件    │   文件   │  逃生舱  │   记忆   │ 子Agent │         │
└──────────┴──────────┴──────────┴──────────┴─────────┴─────────┘
                               │
                               ▼
┌────────────────────────────────────────────────────────────────┐
│   符号/数值后端:ngspice · Xyce · SymPy · Z3 · KLayout · gEDA   │
└────────────────────────────────────────────────────────────────┘
                               │
                               ▼
┌────────────────────────────────────────────────────────────────┐
│   反馈环:仿真结果 → LLM 解读 → 修改设计 → 再仿真 → 收敛         │
└────────────────────────────────────────────────────────────────┘

8.3 原子工具集(9 个)

def netlist(spec: str) -> Netlist            # spec → SPICE 网表
def simulate(net: Netlist, mode: str)        # .OP/.AC/.TRAN/.NOISE/.MC
def measure(wave: Wave, metric: str)         # 提取 f / THD / margin / 裕度
def search(query: str) -> list[Component]    # 元件库检索
def compute(expr: str)                       # SymPy / 数值求值
def render(data, kind: str)                  # 波形/Bode/Smith
def read(path)  / write(path, content)       # 文件 IO
def bash(cmd)                                # 调外部 EDA 工具
def spawn(role, task)                        # 派生子 Agent (布局/良率)

任何更高级功能("设计 PLL"、"修这个振荡器")都是这 9 个原子的宏组合——和 Lisp 一样。

8.4 数据合成:从符号引擎反向"挤"训练数据

LLM 训练最贵的是数据。电子领域的优势:拥有完美的符号验证器(SPICE)——可以无限合成可验证的高质量数据。

合成管线

教科书电路模板 (≈ 1000 个) ──┐
随机参数采样          ──────┤
拓扑变异 (GA)         ──────┼─► 网表 ──► SPICE 仿真 ──► (网表, 指标)
故障注入 (元件偏差)   ──────┘                            │
                                                          ▼
                                              过滤(收敛/合理)
                                                          │
                                                          ▼
                                              LLM 反向标注:
                                              "这是什么电路?为什么用这个值?
                                               指标是否合理?怎么改进?"
                                                          │
                                                          ▼
                                              (问题, 推理链, 答案)

五类合成数据

数据类型 生成方式 用途
正向设计(指标 → 网表) 模板 + 参数采样 + SPICE 验证 SFT 主菜
反向解释(网表 → 指标 + 解释) SPICE 跑结果 + LLM 文字化 教学/调试
故障诊断(坏电路 → 找 bug) 注入元件错误 + 对比正确版 RL 高价值
优化轨迹(迭代改进) 真实优化器 trace Chain-of-Thought
多轮对话(用户 ↔ Agent) LLM 自演 + 评分 对话能力

关键技巧:拒绝采样(Rejection Sampling)

for trace in 10_000 candidates:
    if not spice_converges(trace.netlist): drop()
    if not meets_spec(trace.metrics, trace.target): drop()
    if not llm_judge(trace.reasoning) > threshold: drop()
    keep(trace)   # 也许只剩 5%

这就是 DeepSeek-R1 / o1 风格的"用验证器筛数据"——把 SPICE 当成数学领域的 Lean。

8.5 SFT(监督微调)设计

阶段 0:基座模型——选 Qwen3-Coder / DeepSeek / Llama-4 之类有强代码 + 数学能力的开源底座。

阶段 1:领域语料继续预训练(CPT)

─ 教科书:Sedra/Smith、Razavi、Gray-Meyer (≈ 50M tokens)
─ SPICE 文档 + 模型卡(BSIM4 全部参数说明)
─ 元器件 datasheet(数百 GB,要 OCR + 抽取)
─ 应用笔记(TI / ADI / Maxim app notes)
─ 学术论文(IEEE TCAS、JSSC)
─ 仿真日志(自家合成)

阶段 2:SFT 数据格式(指令 + 工具使用 + 推理)

{
  "instruction": "设计一个 1 kHz 文氏桥振荡器,5V 单电源,THD < 1%",
  "thinking": "文氏桥需要 A_v ≥ 3 才起振;为压低 THD 要加 AGC...",
  "tool_calls": [
    {"name": "compute", "args": "f=1/(2*pi*R*C), 取 R=16k → C=10n"},
    {"name": "search",  "args": "JFET for AGC, Vp around 2V → 2N5457"},
    {"name": "netlist", "args": "<wien-bridge template>"},
    {"name": "simulate","args": "{net, '.TRAN 0 50ms'}"},
    {"name": "measure", "args": "THD"}
  ],
  "observation": "THD = 0.6%, f = 998 Hz",
  "answer": "<最终网表 + 解释>"
}

关键:thinking 字段必须真实经过 SPICE 验证——否则就是教 LLM 编故事。

阶段 3:分层 SFT

SFT-1  基础工具调用(10 万样本,模板化)
SFT-2  单步推理 + 验证(30 万,含拒绝采样)
SFT-3  多步迭代调试(10 万,真实 trace)
SFT-4  对话式设计(5 万,多轮)

每一阶段用上一阶段的模型 + 更难的数据 + 更严的过滤——课程学习(curriculum)。

8.6 蒸馏(Distillation)设计

目标:把 Opus 级 Planner 的能力压到能跑在工程师本地的 Sonnet/Haiku 级模型。

两条路线

A. 黑盒蒸馏(response-level)

Teacher (Opus) ──► 生成 (问题, 完整推理 + 工具轨迹 + 答案)
                    │
                    ▼
            SPICE 验证 + 指标过滤
                    │
                    ▼
Student (Haiku) ── SFT on filtered traces

数量级:百万级合成 trace,过滤后保留 10–20%。

B. 白盒蒸馏(logit-level)

如果 teacher 权重可得(自家训的):

Loss = α · CE(student, gold) + β · KL(student || teacher)

对工具调用 token 的 KL 权重要更高——这是知识密集区。

C. 推测解码(Speculative Decoding)做线上加速

小模型先猜 → 大模型验证。在网表生成这种结构强、模板多的任务上,speedup 能到 3-5 ×。

蒸馏的特殊技巧:保留"工具调用轨迹"而非只保留答案

电路设计的价值在过程(哪一步选了什么、为什么否决某拓扑),而不是最终网表。蒸馏时要让 student 学整条 trace

8.7 RL 设计:用 SPICE 当奖励模型

这是整个系统的灵魂。SPICE 是天然的、零幻觉的奖励函数。

奖励函数设计

def reward(trace):
    if not spice_converges(trace.netlist):     return -1.0
    metrics = simulate(trace.netlist)

    r_spec   = spec_match(metrics, trace.target)      # 指标命中
    r_margin = margin_score(metrics)                  # 裕度(起振/相位/温度)
    r_cost   = -bom_cost(trace.netlist)               # BOM 成本
    r_steps  = -0.01 * len(trace.tool_calls)          # 鼓励简洁
    r_robust = monte_carlo_yield(trace.netlist)       # 良率

    return w1*r_spec + w2*r_margin + w3*r_cost + w4*r_steps + w5*r_robust

注意:这是 RLVR(RL with Verifiable Rewards),没有人类偏好模型,没有 reward hacking 的常见漏洞——因为 SPICE 不会被 prompt 骗。

算法选择

阶段 算法 原因
起步 GRPO(DeepSeek 风格) 不需要 critic,简单稳定
进阶 PPO + 工具调用裁剪 长 trajectory 必备
探索 MCTS-on-LLM(AlphaProof 风格) 拓扑搜索空间大

Trajectory 设计

state    = (用户需求, 当前网表, 历史仿真结果)
action   = 一次工具调用
reward   = 终止时根据指标计算(稀疏奖励)
         + 中间步骤的 shaping(每次仿真收敛 +0.01)

课程学习(关键)

Level 1  分压器 / 滤波器 (单元件)
Level 2  共射放大器(直流偏置)
Level 3  振荡器(环路稳定性)
Level 4  锁相环 PLL(多环路)
Level 5  Sigma-Delta ADC(混合信号)
Level 6  完整子系统(电源 + MCU + 模拟前端)

每一级用上一级的模型初始化,否则探索空间爆炸。

防止 Reward Hacking

电路里一个常见 hack:模型把元件值调成极端理想化(比如 R = 1e-9)让指标"完美"。对策:

  • 元件值必须在标准 E12/E24 系列内(离散约束)
  • BOM 必须从真实供应商库里选(KiCad / LCSC API)
  • 物理合理性 critic:温度、功耗、击穿电压

8.8 自进化闭环

        ┌─────────────────────────────────────────┐
        │                                          │
        ▼                                          │
   v0 模型 ──► 用户使用 ──► trace 收集 ──► 自动评分 ──┘
                              │
                              ▼
                    高分 trace → SFT 数据池
                    低分 trace → RL 反例池
                    异常 trace → 人工审核(少量)
                              │
                              ▼
                          下一版模型 v1

每周/每月一次迭代。这就是 Lisp 自举(self-hosting)在 LLM 时代的版本——产品在运行中改进自己。

8.9 评估基准(Bench)

没有可比的指标,训练就是开盲盒。需要建立:

维度 测试集 指标
拓扑选择正确率 1000 道题 top-1 acc
指标命中率 各种 spec spec-match @1, @5
一次过通过率 真实任务 first-pass yield
调试能力 注入故障的电路 找出+修复时间
BOM 优化 同指标下成本 相对基线
鲁棒性 蒙特卡洛良率 6σ 通过率
解释质量 人评 + LLM-judge Likert 1–5

可以参考 VerilogEval / RTLLM / AnalogBench / CircuitNet,并自建模拟版基准。

8.10 落地路线图(最小可行路径)

Month 1-2   ─ 搭工具层:netlist/simulate/measure 三件套打通
Month 3-4   ─ 合成 100 万训练样本(拓扑 100 种 × 参数采样)
Month 4-6   ─ SFT v0:能写出收敛的振荡器 / 滤波器 / 放大器
Month 6-8   ─ RL v1:起振裕度、THD、BOM 多目标优化
Month 8-12  ─ Beta:嵌入到 KiCad / EasyEDA 作为 Copilot
Year 2      ─ 自进化数据闭环 + 蒸馏小模型本地跑
Year 3      ─ 扩展到混合信号 / RF / 电源系统

8.11 失败模式与对策

风险 表现 对策
幻觉网表 引用不存在的元件 元件库做硬约束,工具层校验
过拟合模板 只会改教科书电路 拓扑变异 + 真实问题混入
长上下文崩溃 多轮调试后乱掉 工作记忆压缩 + 状态外置(写文件)
优化器卡死 多目标 reward 拉扯 Pareto 前沿 + 用户偏好向量
训练-推理鸿沟 训练时 SPICE 完美,推理时元件容差垮 训练就加蒙特卡洛

8.12 一句话总结

把 SPICE 当 Lean,把电路当定理,把工程师当用户——剩下的就是 LLM 在符号验证回路里的 RL + 自进化。
9 个原子工具决定了能力上限;SPICE 决定了真实性下限;课程数据决定了学习速度;自进化闭环决定了能跑多远。


九、更深的类比:训练即逆向工程,流片即训练,BA 软件的 Lisp 血统

9.1 训练 LLM = 对人类知识做逆向工程

逆向工程的标准定义:只能观察输出,要恢复出生成它的系统。芯片逆向、软件 reverse-engineering、生物基因测序——本质相同。

LLM 预训练完美贴合这个定义:

真实世界                            训练目标
─────────────────────              ─────────────────────────
人类大脑 + 文化 + 经验  ──产生──►   文本                       
 (生成器,未知)                       │
                                     ▼
                               最大似然拟合 ──► 模型 θ ≈ 生成器

我们看不到"人类是怎么想的",只能看到产物(文本、代码、对话)。训练就是把数百亿 token 当作黑盒输出,反推那个黑盒

芯片逆向 LLM 训练
显微镜剥层拍照 爬虫抓取语料
网表恢复 拟合 token 分布
行为对照(黑盒探针) benchmark 评测
不可能 100% 还原 不可能 100% 还原
得到的是可工作的近似 得到的是可工作的近似

关键洞见:逆向出来的"模型"不是原始系统,是它的有损压缩。LLM 不是大脑,是大脑产物的统计影子——和 reverse-engineered netlist 不是原 RTL 是同一种关系。

进一步推论:

  • 数据质量 = 探针质量。语料越好,逆向越准。
  • Scaling Law = 逆向收敛律。更多观测 → 更精确恢复,但回报递减。
  • 微调 = 局部精修逆向。SFT 把某子模块还原得更细。
  • RL = 用真实输出验证逆向版本。RLVR 像把恢复出的网表放回 SPICE 跑——不一致就修。
  • 蒸馏 = 二阶逆向。从已逆向的大模型再逆向出小模型,损失叠加。

9.2 CPU 流片 ≈ 一次 LLM 训练 run

两者在工程经济学上几乎同构:

维度 CPU 流片(7 nm) 大模型训练(万亿参数)
一次性成本 掩膜组 $20–50M GPU 集群租用 $50–200M
周期 4–9 个月 数周到数月
错误代价 re-spin 再花一轮 重训或重启 checkpoint
提交前验证 仿真 / 形式验证 / FPGA 原型 小模型预实验 / scaling law 外推
良率 wafer yield % 收敛率(多少 run 不发散)
一旦冻结 mask set 不可改 权重发布后不可改
后期补救 microcode patch LoRA / 后训练
流片厂 TSMC / Samsung OpenAI / Anthropic / DeepSeek
设计公司 AMD / Apple / NVIDIA 应用层创业公司

两者都遵循同一条铁律:把昂贵的"提交"前移到便宜的"验证"。

  • 芯片:形式验证 + 仿真 + 静态时序让 bug 死在流片前
  • LLM:小模型扫超参 + 数据消融 + scaling law 外推让翻车死在大训前

这就是为什么 OpenAI、Anthropic 都强调 scaling law predictability——它就是 LLM 时代的"流片前签核(sign-off)"。

推论:未来的训练会越来越像流片:

  • "流片厂"(基础模型 lab)和"设计公司"(应用层)分工
  • 共享 PDK(Process Design Kit)≈ 共享 base model + 工具链
  • IP 库 ≈ LoRA 适配器市场
  • DRC / LVS ≈ 安全评测 / 红队

9.3 BA / 数据分析软件的 Lisp 血统

用户提到 Tableau 早期版本与 Lisp 的渊源——更广义地看,几乎所有"符号化的、形式语言驱动的"分析类软件都有 Lisp 基因。这不是巧合。

已确证的 Lisp 系谱

软件 Lisp 角色 影响
Macsyma (1968, MIT) 整体用 MacLisp 实现 符号代数始祖,Mathematica 直接继承者
Mathematica (1988) 模式匹配 + 求值规则深受 Lisp 影响 全球科学计算标杆
AutoCAD (1986+) AutoLISP 作为脚本/扩展层 把 CAD 变成可编程平台
Emacs Elisp 全平台扩展 至今仍是最强可编程编辑器
ITA Software Common Lisp 实现机票搜索引擎 被 Google 收购,QPX
Cyc Lisp 表达常识知识库 最大规模符号知识工程
Crash Bandicoot / Jak & Daxter GOOL / GOAL(Lisp 方言) 游戏 AI 脚本
Viaweb / Hacker News Common Lisp / Arc Paul Graham 的论据
Grammarly 初版后端 Common Lisp 自然语言规则引擎
Tableau / Polaris(学术原型阶段) 形式查询语言 VizQL 设计深受 Lisp/代数化思想影响(声明式、可组合、元编程) 把数据可视化变成"代数"

Tableau 的关键不是"v1 是不是 Lisp 写的"这个事实问题,而是更深的结构事实

  • VizQL 是声明式形式语言,把可视化表达成「字段 × 美学映射 × 几何 × 统计」的代数运算
  • 这种"用最小代数公理生成无限组合"的设计哲学,就是 Lisp 哲学(参见第七章)
  • 同样地,SQL 是关系代数的语法糖;dplyr / Spark 是函数式管道;Power Query M 显式 lambda——BA 软件的内核全是符号代数

为什么 BA / 分析软件天然亲近 Lisp?

  1. 数据本身是 S-expression:表 = list of records;JSON = nested cons cell
  2. 查询是 AST:SQL 编译器内部就是 Lisp 风格树重写
  3. 可视化是组合子:Grammar of Graphics(ggplot2 的灵感)= 函数组合
  4. 元编程必备:BA 工具要让用户写公式、宏、模板
  5. 代码即数据:仪表板配置 = JSON/YAML = 数据驱动的程序

ggplot2 的作者 Hadley Wickham 直接说他的灵感是 Wilkinson 的《Grammar of Graphics》,而那本书是 代数学 视角的可视化——Lisp 思想的另一身影。

9.4 形式化逻辑证明:贯穿三者的脊柱

逆向工程要"恢复正确的系统"——靠什么判断"正确"?
流片要"提交可工作的电路"——靠什么签核?
BA 要"可信的分析结果"——靠什么保证?

答案都是形式化方法

                 ┌─────────────────────────┐
                 │   形式化逻辑 / 数理证明     │
                 └─────────────┬───────────┘
                               │
        ┌──────────────────────┼──────────────────────┐
        ▼                      ▼                      ▼
   芯片签核              LLM 训练验证           BA 数据正确性
   ─────────             ─────────────          ───────────
   等价性检查 (LEC)      RLVR 可验证奖励        SQL/关系代数等价
   时序证明 (STA)        Lean/Coq 数学评测      血缘 (data lineage)
   形式属性 (SVA)        单元测试通过率         维度一致性证明

具体例子

  • CompCert(Coq 证明的 C 编译器):每次编译都附带"输出汇编 ≡ 源码语义"的证明
  • seL4:被形式化证明无 bug 的微内核
  • AWS s2n / IronFleet:分布式协议形式化验证
  • DeepSeek-Prover / AlphaProof:用 LLM 在 Lean 里搜索证明
  • dbt + Great Expectations:数据管道里的"形式契约"
  • TLA+ (Lamport):在 AWS、MongoDB 用来证明分布式算法

这些工具的共同祖先就是 Coq/Isabelle/Lean,再往上是 Curry-Howard 同构(程序 ≡ 证明),再往上是 Church-Turing。

9.5 把所有线索串起来

       Church (1936) λ-calculus
              │
              ▼
       McCarthy (1958) Lisp ──────► Macsyma ──► Mathematica
              │                       │
              │                       └────► AutoLISP / Emacs / ITA / Cyc
              │
              ├────► Coq / Lean ──► CompCert / seL4 / AlphaProof
              │
              ├────► SQL / VizQL / ggplot2 ──► Tableau / Power BI / Looker
              │
              ├────► SPICE / Verilog / SAT ──► EDA / 流片
              │
              └────► Transformer / RLHF / RLVR ──► LLM
                              │
                              ▼
                     用 LLM 重写以上一切
                  (LLM-native EDA / LLM-native BI /
                   LLM-native 定理证明 / LLM-native CAD)

三个产业的命运正在交汇

  1. 训练 LLM 是对人类符号活动的逆向工程
  2. 流片 / 训练 都是高成本、长周期、强签核的工业过程
  3. BA / EDA / 数学软件 都建立在形式语言之上,且都在被 LLM 重新封装

谁会赢?赢家是那些把符号验证器(SPICE / Lean / SQL 引擎)和 LLM 紧密耦合的人——因为:

  • 没有验证器,LLM 是华丽的幻觉机器;
  • 没有 LLM,验证器是高门槛的专业工具;
  • 二者结合 = 工程经验的无限复制 + 数学正确性的无限保证

这就是为什么 EDA、BI、CAS(计算机代数系统)、定理证明器在 LLM 时代不会消亡——它们会变成 LLM 的右脑:左脑负责语言与直觉,右脑负责符号与证明。

9.6 一句话收束

过去 70 年,我们用符号系统逼近世界;接下来 70 年,我们用神经网络逼近符号系统。
流片是芯片的"训练",训练是知识的"流片",BA 是数据的"代数",Lisp 是这一切的元语言。
LLM 不是符号主义的终结,而是它在更高维度上的复活。


十、美国科技大发展的根基础:从 SPICE / MATLAB / Mathematica 到 LLM 的世系

LLM 不是天上掉下来的,它建立在七十年的科学计算软件、数值算法、编程语言、芯片工艺、操作系统、互联网基础设施之上。没有 SPICE 就没有 NVIDIA GPU;没有 MATLAB 就没有 NumPy;没有 LINPACK 就没有 cuBLAS;没有 Lisp 就没有今天的 Agent。 这是一条几代人的接力。

10.1 时间总轴

1950s ──── Lisp / Fortran                          (McCarthy / Backus)
1960s ──── Macsyma / SHRDLU / DENDRAL              (MIT / 斯坦福)
1970s ──── SPICE / Unix / C / Smalltalk            (Berkeley / Bell Labs / PARC)
            LINPACK / EISPACK
1980s ──── MATLAB / Mathematica / AutoCAD          (MathWorks / Wolfram / Autodesk)
            反向传播 (Rumelhart-Hinton-Williams 1986)
            Common Lisp 标准化 (1984)
1990s ──── MATLAB Neural Network Toolbox
            Lush (LeCun) / Torch1 雏形
            统计学习 / SVM (Vapnik @ Bell Labs)
2000s ──── NVIDIA CUDA (2006-07)
            Theano (Bengio MILA, 2007)
            Hinton "deep belief net" 复兴 (2006)
2010s ──── Caffe (Berkeley, 2013) / Torch7 / Lasagne
            AlexNet (2012, CUDA on GTX 580) ← 历史拐点
            TensorFlow (Google, 2015) / PyTorch (Meta, 2016)
            Transformer (Google, 2017)
2020s ──── GPT-3 (2020) → ChatGPT (2022) → Claude / Gemini / DeepSeek

关键认知:每一层都不是独立发明,而是站在上一层的肩上。下面分阶段拆。

10.2 1950–60 年代:编程语言与符号 AI 的播种

Lisp(McCarthy, MIT, 1958)Fortran(Backus, IBM, 1957) 划分了世界:

  • Fortran 派:科学计算、数值方法、矩阵运算 → 后来 LINPACK / BLAS / MATLAB / NumPy / GPU kernel
  • Lisp 派:符号操作、AI、元编程 → Macsyma / 专家系统 / Emacs / 现代 Agent

两派至今仍在博弈,而 LLM 是第一次让二者同一个系统里融合——transformer 的张量运算(Fortran 派)+ 思维链与工具调用(Lisp 派)。

ARPA / DARPA 的隐形之手:MIT、CMU、斯坦福、SRI 在 1960s 就拿到了大量国防经费做"AI"。这奠定了美国学界 + 政府长期投入基础研究的传统,是今天 OpenAI / Anthropic 能融到天文数字的远因。

10.3 1970 年代:Berkeley 系与"开放工具"文化

这是被严重低估的十年。三件大事在加州湾区同步发生:

  1. SPICE(Berkeley, 1973,Donald Pederson 团队)——免费、开源、人人能用。学生 Larry Nagel 写出来后,Pederson 拒绝商业封闭,白送给整个工业界。今天所有的商业 EDA(Synopsys、Cadence、Mentor)都是 SPICE 的衍生或竞品。
  2. Unix / C(贝尔实验室,Thompson & Ritchie)——把"软件可移植"变成可能。
  3. LINPACK(Argonne,1979) / EISPACK / BLAS——把"数值算法可复用"变成可能。这是后来所有矩阵库(包括 cuBLAS、PyTorch 后端)的祖宗

这十年定义了"美国科技基础设施"的 DNA: - 政府/大学出基础(NSF、DARPA) - 开源 + 标准化(BSD、Unix、BLAS 接口) - 工业界自由商业化(Sun、Oracle、Synopsys)

没有 1979 年的 BLAS 接口规范,就没有 2024 年的 H100 上 FlashAttention。API 是跨越时代的契约

10.4 1980 年代:MATLAB 与个人计算的合流

MATLAB 的诞生是一段动人故事:

  • Cleve Moler,新墨西哥大学数学教授,写 LINPACK 时发现学生不会用 Fortran
  • 1979 年他用 Fortran 给学生写了个"矩阵实验室"的交互式壳,目的是让学生不必学 Fortran 也能用 LINPACK
  • 1983 年 Jack Little(斯坦福工程师)说服 Moler 商业化,用 C 重写
  • 1984 年 MathWorks 成立,MATLAB 1.0 发布

MATLAB 的伟大在于它的哲学:"矩阵是一等公民,运算是表达式。" 这正是 50 年后 NumPy / PyTorch 的基础观念。

同时期:

  • Mathematica(Wolfram, 1988)——把 Macsyma 的符号计算 + Lisp 的模式匹配 + C 的速度合成一体
  • AutoCAD(1982)+ AutoLISP(1986)——把 CAD 变成可编程平台
  • MATLAB / Mathematica / Maple 三足鼎立,定义了"科学计算软件"这一品类

反向传播在这十年被重新发现

  • 1974 Werbos 博士论文(被忽视)
  • 1986 Rumelhart-Hinton-Williams Nature 论文,用 MATLAB 风格的伪代码描述
  • 之后整个 1990s 神经网络的默认实现语言就是 MATLAB

一代研究者的肌肉记忆是 A * Bsigmoid(W*x+b)——这种向量化心智模型,是 MATLAB 给的。

10.5 1990 年代:寒冬中的暗流

主流认为这是 AI 寒冬,但底层基础设施在悄悄堆高:

  • MATLAB Neural Network Toolbox(1992) 发布——大学课程标配
  • LeCun + Bengio 在贝尔实验室做 LeNet(1998),用 C + Lush(自家 Lisp 方言)
  • Vapnik 在贝尔实验室做 SVM(1995)——把统计学习变成主流
  • Common Lisp 标准化(ANSI 1994)——给后来的 Clojure / 现代 Lisp 复兴打底
  • Linux(1991)+ Apache(1995)+ Python(1991)+ Perl 的生态成形

Python 这年崛起被严重低估——Guido 1991 写了第一版,1996 年起 NumPy 的前身 Numeric 出现(Jim Hugunin、Travis Oliphant),目标就是"在 Python 里复刻 MATLAB 的体验"

这条线很关键

Fortran/LINPACK ──► MATLAB ──► Numeric ──► NumPy (2006) ──► PyTorch (2016)
                                                            ──► JAX (2018)
                                                            ──► TensorFlow (2015)

每一层都在前一层提供的"矩阵 API"上加新东西。NumPy 的 np.dot 调的就是 BLAS,BLAS 的接口 1979 年就定下了。45 年没变——这就是基础设施的力量。

10.6 2000 年代:GPU 革命的预兆

两件几乎不被同时讨论但深度耦合的事

  1. NVIDIA CUDA(2006-2007)——把 GPU 从图形专用变成通用并行计算。而 NVIDIA 的 GPU 本身是用 Synopsys / Cadence 的 EDA 工具设计出来的——SPICE 的孙子辈在养育深度学习。
  2. Theano(Bengio MILA, 2007)——第一个能跑 GPU 的自动微分框架。直接从 SPICE 的伴随灵敏度(adjoint sensitivity)借用了思想:电路仿真早就在做"对参数求梯度",深度学习只是换了个名字叫 backprop。

同期:

  • Hinton 的"deep belief network"(2006)重启深度学习信仰
  • ImageNet 数据集启动(Fei-Fei Li, 2007)——"算法、算力、数据"三件套的最后一块
  • scikit-learn(2007)——把 MATLAB 风格的机器学习搬进 Python

关键的因果链:EDA 让芯片越来越复杂 → NVIDIA 设计出 GPU → CUDA 把 GPU 开放给科学家 → Theano 把自动微分做出来 → AlexNet(2012)一战封神。
没有 SPICE,就没有现代 GPU;没有现代 GPU,就没有现代深度学习。EDA 是 LLM 的祖父辈技术。

10.7 2010 年代:框架战国与拐点

2012 年 AlexNet 是分界线——Alex Krizhevsky 在两块 GTX 580 上跑出 ImageNet 破纪录的成绩。这是第一次有研究者证明:CUDA + 深度网络 + 大数据 = 质变

之后框架井喷:

年份 框架 出处 哲学血统
2013 Caffe Berkeley (贾扬清) 配置式,C++
2014 Torch7 NYU (LeCun) Lua,源自 Lush(Lisp)
2015 TensorFlow Google 静态图,工业
2016 PyTorch Meta FAIR 动态图,Pythonic
2018 JAX Google 函数式 + 自动微分

注意:PyTorch 的接口几乎是 NumPy 的延续,NumPy 是 MATLAB 的延续,MATLAB 是 LINPACK 的延续,LINPACK 是 Fortran 的延续。七十年一脉相承的"矩阵编程经验",全部沉淀在 torch.matmul 这一行里

同时:

  • Transformer(2017, Vaswani et al., Google)——把 RNN/CNN 砸碎,全部用 attention
  • TPU(Google, 2016)——第一颗为深度学习专门设计的 ASIC,用 Synopsys 全套 EDA 工具流片

10.8 2020 年代:LLM 时代到来

  • GPT-3(2020):1750 亿参数,证明 scaling law
  • ChatGPT(2022 年 11 月):对齐 + 产品化的关键一击
  • GPT-4 / Claude / Gemini / DeepSeek / Llama:百花齐放
  • NVIDIA 市值越过 3 万亿美元(2024)——直接受益方

LLM 的训练栈完整长这样

应用层      ─ Claude Code / Cursor / ChatGPT
模型层      ─ Transformer + RLHF + RLVR
框架层      ─ PyTorch / JAX / DeepSpeed / Megatron
算子层      ─ FlashAttention / cuDNN / Triton
矩阵层      ─ cuBLAS(API 沿用 1979 年 BLAS 规范)
驱动层      ─ CUDA / NCCL
硬件层      ─ H100 / B200(用 Synopsys/Cadence 设计)
工艺层      ─ TSMC 4nm(用 SPICE/STA 验证)
物理层      ─ 半导体器件物理(BSIM 模型,1980s)

每一层都需要前面所有层。一个 H100 的成功,是 SPICE(1973)+ BLAS(1979)+ MATLAB(1984)+ CUDA(2006)+ PyTorch(2016)的总和。

10.9 几代人的接力:基因谱系

把人也画出来:

McCarthy ─► Minsky ─► Patrick Winston ─► (MIT AI Lab 一系)
                                          ├─► Rod Brooks (机器人)
                                          └─► Gerald Sussman (SICP)
                                                ▲
                                                │
Pederson (Berkeley) ─► Larry Nagel (SPICE)      │
                                                │
Cleve Moler ─► Jack Little (MATLAB)             │
                                                │
Hinton (Toronto) ─► Ilya Sutskever ─► OpenAI    │
        ├─► Yann LeCun (NYU/Meta) ───────────┐  │
        └─► Yoshua Bengio (MILA)             │  │
                ├─► Ian Goodfellow (GAN)     │  │
                └─► Aaron Courville          │  │
                                             │  │
Schmidhuber (瑞士) ─► LSTM ─────────────────►├──┘
                                             ▼
                              Vaswani et al. (Transformer, Google)
                                             │
                                             ▼
                              GPT/Claude/Gemini 全部建立其上

几个不能忽视的客观事实

  1. 深度学习核心人物多数不是出生在美国(Hinton 英国/加拿大、Bengio 加拿大、LeCun 法国、Schmidhuber 德国、Sutskever 苏联/以色列、Krizhevsky 乌克兰)
  2. 但他们都在美国/加拿大体系内工作——美国基础设施 + 加拿大 CIFAR 资助 + 英语学术圈的合力
  3. 支撑他们的工具栈几乎全部美国出品:MATLAB、Python、NumPy、CUDA、PyTorch、TensorFlow

美国的科技优势不在"谁最聪明",而在它把全世界最聪明的脑子都放到了它的工具栈上

10.10 美国基础设施的五个关键禀赋

为什么 LLM 几乎必然首先在美国出现?

  1. 联邦研究投入七十年不断:NSF、DARPA、NIH、DOE
  2. 大学—产业旋转门:教授办公司不丢教职(Stanford、MIT 默认)
  3. 开源传统:BSD、GPL、Apache、MIT 协议给软件法律基础设施
  4. 风险资本:硅谷愿意为 10 年回报项目下注(OpenAI 早期亏损巨大仍能融资)
  5. 半导体工艺协同:Intel/AMD/NVIDIA/TSMC(虽然在台湾但客户在美)+ Synopsys/Cadence 形成美国主导的全球分工

反过来看缺一不可

  • 没有开源 → CUDA 起不来
  • 没有 VC → OpenAI 早就破产
  • 没有 EDA → GPU 设计不出来
  • 没有大学传统 → 论文不会公开
  • 没有 DARPA → 1960s AI 研究就停了

10.11 互相影响的循环图

不是单向的"基础 → 上层",而是循环互哺

        ┌─► EDA 软件 ─┐
        │             │
        │             ▼
LLM ◄───┤        GPU/TPU 芯片 ◄────┐
        │             │             │
        │             ▼             │
        │       数值计算/MATLAB     │
        │             │             │
        │             ▼             │
        │       PyTorch/JAX ────────┤
        │             │             │
        │             ▼             │
        └────── 训练大模型 ─────────┘
                      │
                      ▼
               用 LLM 写新的 EDA / MATLAB / PyTorch
                      │
                      └─────► 回到顶端,下一轮

这就是技术飞轮。当 LLM 开始能写 Verilog、写 SPICE 网表、写 PyTorch 代码、改 CUDA kernel 时,循环就闭合了。它会加速以前几代人才能完成的工作。

10.12 对照与启示

现象 历史教训
MATLAB 押注矩阵抽象 赌对了基础抽象就赌对了未来 30 年
SPICE 选择开源 基础工具开源会繁衍出整个行业
BLAS 接口稳定 45 年 API 比代码寿命长,设计 API 时要按 50 年寿命来想
Hinton 在寒冬里坚持 跨周期的认知积累是不可压缩的
GPU 从图形跨到 AI 意外用途常常比设计用途更重要
Transformer 击败 RNN 简单可扩展打败复杂巧妙
LLM 重新封装符号系统 新范式不消灭旧范式,而是包裹它

10.13 收束

从 1958 年 McCarthy 写出第一行 Lisp,到 2022 年 ChatGPT 上线,中间隔着 64 年、四代人、数百万工程师、上万亿美元、无数论文与开源仓库。

每一行 torch.nn.Linear,背后是 BLAS 的 1979;
每一颗 H100,背后是 SPICE 的 1973;
每一段 Agent 工具调用,背后是 Lisp 的 1958;
每一份训练数据,背后是 Unix 的 1969 与 Web 的 1991。

LLM 不是孤立的奇点,是七十年基础设施的合奏。 理解这一点,比任何一篇论文都重要——因为它告诉你下一个十年的护城河仍然在底层:新算子、新硬件、新形式语言、新接口标准、新开源协议

谁能在这条堆栈里再添一层稳定 30 年的抽象,谁就给下一代 LLM 留下了脚印。