LLM作为通用计算单元的可行性:神经网络权重正在变成新的机器码?
LLM作为通用计算单元的可行性:神经网络权重正在变成新的机器码?
如果说Software 1.0是二进制的确定性世界,Software 2.0是神经网络的概率性黑箱,那么Software 3.0正在试图建立一座桥梁——让概率性计算具备工程化的确定性。
从二进制到权重:计算单元的演进史
要理解LLM作为计算单元的可行性,我们需要回到计算的本质。
Software 1.0——这是我们熟悉的世界。程序员用高级语言编写代码,编译器将其转换为汇编,最终变成机器码:一系列0和1的精确指令。计算机的CPU逐条执行这些指令,每一步都是确定的、可预测的、可重复的。这是确定性计算的黄金时代。
在这个范式中,计算的边界清晰明确:输入 → 处理 → 输出。如果输入相同,输出必然相同。如果程序有bug,我们可以通过单步调试追踪到具体的指令。程序的正确性可以通过逻辑推理来证明。
Software 2.0——随着深度学习的兴起,计算的范式发生了根本性转变。程序员不再编写明确的指令,而是设计神经网络架构,准备训练数据,然后让优化算法自动调整数十亿个权重参数。计算的载体从二进制指令变成了浮点数权重。
这个转变带来了前所未有的能力:图像识别、语音合成、自然语言理解——这些在传统编程中几乎不可能完成的任务,在Software 2.0中变得可行。但代价是确定性的丧失:给定相同的输入,输出可能不同;权重如何产生特定行为是不可解释的;bug的调试变得极其困难。
Software 3.0——现在,我们站在新的十字路口。Agentic Engineering的兴起、推理模型的发展、形式化验证技术的进步——这些趋势正在试图回答一个核心问题:能否让概率性计算具备工程化的确定性? 或者说,能否建立一套方法论,让神经网络权重像机器码一样被理解、被验证、被信任?
机器码的本质:什么让Software 1.0可工程化?
在探讨LLM是否能成为通用计算单元之前,我们需要先理解机器码为什么能成功。
形式化语义。每一条机器码指令都有精确的数学定义:它读取哪些寄存器,执行什么操作,写入哪些寄存器,如何改变程序状态。这种形式化语义让程序的行为可以被严格推理。
组合性。复杂的程序由简单的指令组合而成。每条指令的效果是局部的、独立的,但它们的组合可以产生任意复杂的行为。这种组合性让程序可以被模块化地理解和构建。
可验证性。给定程序规约,我们可以(至少在理论上)证明程序是否满足规约。类型系统、Hoare逻辑、模型检查——这些形式化方法让软件的正确性可以被数学保证。
可调试性。当程序出错时,我们可以检查每一条指令的执行,追踪状态的变化,定位问题的根源。确定性让调试成为可能。
可移植性。机器码是抽象的、与具体硬件无关的(至少在ISA层面)。同样的程序可以在不同的CPU上运行,只要它们实现相同的指令集。
这些特性共同构成了Software 1.0的工程化基础。问题是:Software 2.0(神经网络)是否具备这些特性?如果不具备,能否获得它们?
神经网络权重的计算特性:现状与挑战
让我们诚实地审视当前LLM作为计算单元的状况。
形式化语义的缺失。这是最根本的问题。我们知道Transformer架构的数学定义:注意力机制、前馈网络、层归一化。我们知道权重的数值。但我们不知道这些权重共同实现了什么计算。与机器码不同,我们无法从权重推导出高层语义。
当GPT-4回答一个问题时,哪些权重参与了推理?它们分别贡献了什么?信息如何在网络的各层之间流动?这些问题的答案隐藏在数十亿个参数中,人类无法直接理解。
组合性的挑战。神经网络的组合性是一个复杂的话题。一方面,层的堆叠、模块的组合确实产生了组合效果。另一方面,这种组合不是透明的——模块之间的交互充满了 emergent properties(涌现特性),难以预测。
在Software 1.0中,如果我们知道函数A和函数B的行为,我们就知道A后接B的行为。在Software 2.0中,两个训练好的网络组合在一起可能产生完全意外的行为。
可验证性的困境。如何验证一个LLM的输出是否正确?对于某些任务(如数学计算),我们可以独立验证答案。但对于开放式任务(如创意写作、战略建议),”正确性”本身就没有明确标准。
更深层的问题是:即使我们能验证输出,我们也无法验证模型产生输出的过程。这与Software 1.0形成鲜明对比——在Software 1.0中,过程的验证(代码审查、形式化证明)与结果的验证(测试)是互补的。
可调试性的局限。当LLM产生幻觉时,我们如何调试?目前的做法主要是试错:调整提示词、改变温度参数、增加示例。这与Software 1.0的精确调试(检查变量值、追踪调用栈)完全不同。
可移植性的悖论。神经网络权重在技术上是可移植的——你可以在一个GPU上训练,在另一个GPU上运行。但语义的可移植性是另一回事。同样的权重,不同的提示词工程,不同的解码策略,可能产生完全不同的效果。”程序”的边界变得模糊。
可行性的证据:Software 2.0已经能做什么?
尽管存在上述挑战,我们不能忽视一个事实:Software 2.0已经以惊人的规模部署在生产环境中。
Google搜索使用神经网络进行排序。YouTube使用神经网络推荐视频。自动驾驶汽车使用神经网络识别路况。这些系统每天处理数十亿次请求,可靠性要求极高。
这些成功案例告诉我们什么?它们告诉我们:即使缺乏形式化语义,工程化的方法是存在的。这些方法不是基于理解,而是基于经验、统计、近似。
经验方法。通过大量的实验和测试,工程师们发现了哪些架构有效,哪些训练策略有效,哪些提示模式有效。这些经验被编码为最佳实践、设计模式、调参指南。
统计验证。不验证单个输出的正确性,而是验证分布的正确性。如果模型在1000个测试案例上达到99%的准确率,我们接受它。即使我们不知道它为什么正确,我们知道它在统计上可靠。
近似保证。不追求100%的正确性,而是追求”足够好”。推荐系统不需要每次都给出最优推荐,只需要给出足够好的推荐。自动驾驶不需要处理所有 edge cases,只需要处理99.99%的场景。
人在回路。对于关键决策,保留人类的最终审核权。模型提出建议,人类做出决定。这样,模型不需要完美,只需要有帮助。
这些方法不是Software 1.0的形式化方法,但它们是有效的方法。它们在实践中证明了Software 2.0的可行性。
Software 3.0的路径:走向工程化的确定性
现在,我们来到核心问题:Software 3.0能否结合Software 1.0的确定性优势和Software 2.0的能力优势?
我认为,答案是有条件的肯定。通过特定的架构设计和方法论,我们可以让LLM作为计算单元具备足够的工程化特性,同时保留其强大的能力。
验证优先于生成。这是Agentic Engineering的核心原则。不盲目信任模型的输出,而是建立多层次的验证机制:单元测试、属性测试、人类审查、形式化验证(对于可验证的子问题)。
模块化与接口契约。将复杂的Agent系统分解为模块,每个模块有明确的输入输出契约。模块内部可以是神经网络,但模块之间的接口是确定的、可验证的。
思维链的显式化。通过Chain-of-Thought等技术,让模型的推理过程可见。这不是真正的形式化语义,但提供了可解释性的近似。我们可以检查推理步骤是否合理,而不需要理解权重本身。
工具使用的约束。限制模型只能使用定义良好的工具,每个工具有明确的前置条件和后置条件。这样,模型行为的边界由工具的契约决定。
持续对齐与监控。不期望模型一次训练就永远正确,而是建立持续监控和对齐的机制。当模型行为偏离预期时,及时调整。
人在关键节点的介入。不是完全自动化,而是设计人机协作的工作流。模型处理常规情况,人类处理异常情况。模型提供建议,人类做出最终决策。
这些方法不追求Software 1.0的完美确定性,而是追求足够的确定性——足以让系统可工程化、可维护、可信任。
等价性差异:Software 1.0 vs 2.0 vs 3.0
让我们用一张表总结三个范式的核心差异:
| 特性 | Software 1.0 | Software 2.0 | Software 3.0 (目标) |
|---|---|---|---|
| 计算单元 | 二进制指令 | 神经网络权重 | 权重 + 验证层 + 工具契约 |
| 确定性 | 完美确定性 | 概率性 | 统计确定性 + 边界保证 |
| 可解释性 | 完全可解释 | 黑箱 | 思维链近似 + 接口契约 |
| 验证方法 | 形式化证明 + 测试 | 统计测试 | 多层次验证(测试+审查+形式化) |
| 调试方法 | 单步调试 | 试错/提示工程 | 模块化调试 + 人在回路 |
| 组合性 | 透明组合 | 涌现组合 | 契约化组合 |
| 适用场景 | 确定性问题 | 模式识别问题 | 复杂开放性问题 |
Software 3.0不是Software 1.0的回归,也不是Software 2.0的简单延续。它是一种融合:保留神经网络的能力,但通过工程化方法获得足够的确定性和可控性。
实践中的Software 3.0:当前的最佳实践
让我们看看Software 3.0在实际中是如何工作的。
Cursor的Composer模式。不是让模型直接生成最终代码,而是让模型生成规划,然后分步骤执行,每步都有明确的目标和验证。人类在关键步骤审查。这是验证优先于生成的实践。
Claude的Artifacts。将模型的输出封装为结构化的、可迭代的artifacts,而不是自由文本。这提供了形式语义的近似——artifacts有明确的类型和接口。
LangChain的链式架构。通过预定义的链(chains),将模型的行为约束在特定的模式内。每个链有明确的输入输出,组合时遵循特定的规则。
形式化验证的尝试。研究者正在探索如何将神经网络与形式化方法结合。例如,验证神经网络控制器的安全性,或者验证神经符号系统的逻辑一致性。
这些实践都处于早期阶段,但它们指向同一个方向:在保留神经网络能力的同时,建立工程化的控制机制。
未解决的问题与研究方向
尽管前景乐观,我们必须承认,Software 3.0还远未成熟。有许多根本性问题尚未解决。
形式化语义的建立。能否为神经网络建立真正的高层语义?不是近似,而是精确的数学描述。这可能需要新的数学工具,或者对神经网络结构的根本性重新设计。
组合性的理论。如何预测神经网络组合的行为?是否有类似于类型系统的理论,可以让我们推理复杂神经网络的性质?
验证的自动化。如何自动验证神经网络输出的正确性?对于开放式任务,这是否可能?对于可验证的子任务,如何集成形式化方法?
调试的工具化。当神经网络出错时,如何定位问题?可解释性AI(XAI)提供了一些工具,但这些工具是否足以支持工程化的调试?
成本与能力的权衡。增加验证层、人在回路、模块化设计——这些都会增加系统的复杂度和成本。在什么情况下,这种成本是值得的?什么情况下,我们应该接受Software 2.0的不确定性?
这些问题没有简单的答案。Software 3.0的演进将是一个渐进的过程,伴随着理论的突破、工具的成熟、最佳实践的积累。
结论:不是替代,而是融合
回到最初的问题:LLM能否作为通用计算单元?神经网络权重是否正在变成新的机器码?
我的答案是:是的,但形式不同。
神经网络权重不会完全替代二进制机器码。确定性计算仍有其价值,仍有其适用场景。但权重的计算将成为新的计算范式,与二进制计算并存、互补、融合。
Software 3.0不是Software 1.0的回归,而是超越。它承认概率性计算的价值,但拒绝接受其不可控性。它试图建立新的工程化方法,让概率性计算可以被理解、被验证、被信任。
这不是一个已经完成的任务,而是一个正在进行的过程。我们正处于Software 3.0的黎明。Agentic Engineering的兴起、推理模型的发展、形式化验证技术的进步——这些都是黎明的曙光。
未来的软件工程师将需要掌握新的技能:不仅要知道如何编写代码,还要知道如何编排智能体;不仅要理解确定性算法,还要理解概率性模型;不仅要会进行形式化验证,还要会设计多层次验证策略。
这是一场计算的革命,也是一场工程的革命。而我们,正处于这场革命的起点。
延伸阅读与参考
- Software 2.0 - Andrej Karpathy
- Formal Verification of Neural Networks
- Interpretability and Explainability in Machine Learning
- Neurosymbolic AI: The Third Wave
- Agentic Engineering Patterns - Simon Willison
| *Published on 2026-03-05 | 阅读时间:约 15 分钟* |