EDA、符号主义与 LLM 的交汇
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 个,加上 lambda 和 label(递归),McCarthy 在论文里用 Lisp 自己写出了 Lisp 的 eval——这就是著名的"Lisp 的不动点",是计算机科学史上最深刻的几页之一。
进一步地:
defun、let、cond—— 都是宏- 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 是对的
- 组合爆炸性:n 个正交原语能组合出指数级行为;n 个重叠的高层工具反而互相干扰。
- 可解释性:每一步都是原子动作,trace 即解释。
- 可移植性:原子工具是跨环境最稳定的抽象(任何 Unix 都有
bash、grep)。 - 训练友好:原子动作的数据更易合成、验证、RL。
- 避免"工具偏置":预定义高层工具会让模型过拟合到特定 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 设计原则
- LLM 不替代 SPICE,LLM 包裹 SPICE——精确数值仍由数值求解器负责,LLM 负责理解、规划、解释、迭代。
- 原子工具优先——给 Agent ≈ 9 个原子工具,复杂功能由其组合派生。
- 一切可验证——LLM 的每一个输出都要能被 SPICE / DRC / 单元测试反证。
- 闭环自进化——产品在运行中持续产生训练数据。
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?
- 数据本身是 S-expression:表 = list of records;JSON = nested cons cell
- 查询是 AST:SQL 编译器内部就是 Lisp 风格树重写
- 可视化是组合子:Grammar of Graphics(ggplot2 的灵感)= 函数组合
- 元编程必备:BA 工具要让用户写公式、宏、模板
- 代码即数据:仪表板配置 = 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)
三个产业的命运正在交汇:
- 训练 LLM 是对人类符号活动的逆向工程
- 流片 / 训练 都是高成本、长周期、强签核的工业过程
- 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 系与"开放工具"文化
这是被严重低估的十年。三件大事在加州湾区同步发生:
- SPICE(Berkeley, 1973,Donald Pederson 团队)——免费、开源、人人能用。学生 Larry Nagel 写出来后,Pederson 拒绝商业封闭,白送给整个工业界。今天所有的商业 EDA(Synopsys、Cadence、Mentor)都是 SPICE 的衍生或竞品。
- Unix / C(贝尔实验室,Thompson & Ritchie)——把"软件可移植"变成可能。
- 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 * B、sigmoid(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 革命的预兆
两件几乎不被同时讨论但深度耦合的事:
- NVIDIA CUDA(2006-2007)——把 GPU 从图形专用变成通用并行计算。而 NVIDIA 的 GPU 本身是用 Synopsys / Cadence 的 EDA 工具设计出来的——SPICE 的孙子辈在养育深度学习。
- 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 | 静态图,工业 | |
| 2016 | PyTorch | Meta FAIR | 动态图,Pythonic |
| 2018 | JAX | 函数式 + 自动微分 |
注意: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 全部建立其上
几个不能忽视的客观事实:
- 深度学习核心人物多数不是出生在美国(Hinton 英国/加拿大、Bengio 加拿大、LeCun 法国、Schmidhuber 德国、Sutskever 苏联/以色列、Krizhevsky 乌克兰)
- 但他们都在美国/加拿大体系内工作——美国基础设施 + 加拿大 CIFAR 资助 + 英语学术圈的合力
- 支撑他们的工具栈几乎全部美国出品:MATLAB、Python、NumPy、CUDA、PyTorch、TensorFlow
美国的科技优势不在"谁最聪明",而在它把全世界最聪明的脑子都放到了它的工具栈上。
10.10 美国基础设施的五个关键禀赋
为什么 LLM 几乎必然首先在美国出现?
- 联邦研究投入七十年不断:NSF、DARPA、NIH、DOE
- 大学—产业旋转门:教授办公司不丢教职(Stanford、MIT 默认)
- 开源传统:BSD、GPL、Apache、MIT 协议给软件法律基础设施
- 风险资本:硅谷愿意为 10 年回报项目下注(OpenAI 早期亏损巨大仍能融资)
- 半导体工艺协同: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 留下了脚印。