风起于青萍之末(下):从 XOR 到神经网络与 LLM

Posted on 二 14 7月 2026 in Tech

Abstract 风起于青萍之末(下):从 XOR 到神经网络与 LLM
Authors Walter Fan
Category Tech
Status v1.0
Updated 2026-07-14
License CC-BY-NC-ND 4.0

一条直线,撞上了四个点

上篇讲到,感知机像一个拿着计分表的门卫:收集证据,乘以权重,加上偏置,再看总分是否过线。训练也不复杂,预测错了或刚好压线,就把权重往正确方向推一下。

这套办法对线性可分的数据很有效。说白了,只要两类样本能被一条直线切开,感知机就有机会找到那条线。

问题也恰恰出在“一条线”上。

有一个只有四条数据的小问题,单个感知机无论训练多久都解决不了。它叫 XOR。这个小钉子并没有钉死神经网络,反而撬开了一扇更大的门:原始空间分不开,能不能先学习一种新的表示?

这篇文章沿着这条线,回答四个问题:

  • XOR 为什么能难住单个感知机;
  • 多一层网络以后,为什么突然可以解决;
  • 反向传播怎样让隐藏层学会有用的表示;
  • 从多层感知机到 Transformer 和 LLM,什么发生了变化,什么一直没变。

这篇文章怎么读

你想带走什么 建议路线 可以放心跳过
只想听懂演进故事 第 1 至 6 节主干 所有“数学加餐”
想理解神经网络训练 第 1、2、3、5 节 XOR 不等式证明和第 4 节 Transformer
想弄懂数学骨架 从头阅读,重点看 XOR 构造与链式法则

遇到“数学加餐”时,若不感兴趣,略过公式和推导,从加餐后的第一段正文继续即可。


1. 一道 XOR,把感知机难住了

异或(XOR)的规则是:两个输入不同时输出 1,相同时输出 0。

\(x_1\) \(x_2\) XOR
0 0 0
0 1 1
1 0 1
1 1 0

把四个点画在平面上,两个正类落在对角,两个负类落在另一条对角。无论怎样画一条直线,都不能把它们完全分开。

XOR 的两个类别交叉分布在两条对角线上

不是训练时间不够,也不是学习率没调好,而是单个感知机的表达能力根本装不下 XOR

数学加餐:用不等式证明“一刀切不开”

若一个感知机能表示 XOR,那么应满足:

$$ \begin{aligned} b &< 0 && \text{对应 }(0,0)\\ w_1+b &\ge 0 && \text{对应 }(1,0)\\ w_2+b &\ge 0 && \text{对应 }(0,1)\\ w_1+w_2+b &< 0 && \text{对应 }(1,1) \end{aligned} $$

由中间两式可知 \(w_1\ge-b\)\(w_2\ge-b\),于是:

$$ w_1+w_2+b\ge-b>0 $$

这和最后一式矛盾。几何图上的“画不出一条线”,在代数里就变成了四条无法同时成立的不等式。

1969 年,Marvin Minsky 和 Seymour Papert 在《Perceptrons》一书中系统研究了这类局限。后来很多简化版历史把它说成“他们证明了神经网络不行,于是 AI 进入寒冬”,这话说得太满。更准确的说法是:单层感知机的能力边界被严肃地摆上了桌面,而当时训练多层网络的方法、算力和数据都还不成熟。热情退潮不只由一本书造成,技术史也很少只有一个反派。

有意思的是,XOR 没有判感知机死刑,反倒给后人指了路:一刀分不开,能不能先换一个空间,再画一刀?


2. 多一层,为什么世界就不一样了

破局的办法不是苦练画出一条更聪明的直线,而是先换一组问题。第一层暂时不回答 XOR,只回答两个更简单的问题:

输入 至少一个为 1? 两个都是 1? 最终 XOR
0, 0 0 0 0
0, 1 1 0 1
1, 0 1 0 1
1, 1 1 1 0

第二层拿到这两个新答案后,只需选择“至少一个为 1,但不能两个都是 1”。原来纠缠在一起的四个点,换一种表示后就能分开了。

这就是隐藏层的作用:不急着给最终答案,先把原始问题改写成一组更好用的新特征。

数学加餐:用两个隐藏单元写出 XOR

若想看具体参数,可以用两个隐藏单元把 XOR 拆开:

$$ h_1=\operatorname{step}(x_1+x_2-0.5) \qquad \text{相当于 OR} $$
$$ h_2=\operatorname{step}(x_1+x_2-1.5) \qquad \text{相当于 AND} $$

再组合一次:

$$ y=\operatorname{step}(h_1-2h_2-0.5) $$

这三个公式正是上面那张表的数学版本:第一层创造“至少一个为 1”和“两个都是 1”两个新特征,第二层再组合它们。

这才是多层神经网络真正厉害的地方:

前一层学习怎样表示问题,后一层学习怎样在新表示上作决定。

单个感知机只会在原空间画一条线;多个感知机组成隐藏层,可以把空间切成多个区域;层层组合以后,简单边界能够拼成复杂边界。图像网络的浅层可能响应边缘和纹理,深层再组合成部件和对象;语言模型的浅层处理局部词形和位置,后面的层逐步形成与语法、指代和语义有关的表示。

这里的“形成”不是工程师手工给每个神经元分配任务。我们只给目标和数据,表示是在优化过程中学出来的。这一点,比“多画了几条线”更深。


3. 光有多层还不够,还得解决“谁该背锅”

多层网络早就有人想到,麻烦在于怎样训练。

最后输出错了,输出层当然有责任,可前面几十层里的每个权重该改多少?这就是典型的信用分配问题(Credit Assignment Problem),用职场话说就是:项目出了问题,不能只让最后写汇报的人背锅,得沿着依赖链找到每个环节贡献了多少误差。

硬阶跃函数不适合这件事,因为它几乎处处导数为零。后来神经网络采用 Sigmoid、Tanh、ReLU 等非线性激活函数,让网络在保留非线性表达能力的同时,能够计算梯度。

先用一个项目复盘来理解反向传播:

阶段 神经网络 项目复盘
前向传播 输入逐层计算,得到预测 需求经过各团队,最后交付产品
计算损失 比较预测与正确答案 比较交付结果与目标
反向传播 从结果往回计算每层的责任 沿依赖链查每个环节贡献了多少偏差
更新参数 按责任大小调整权重 各环节针对性改进

反向传播并不是让错误数据倒着流一遍,而是把“最终误差对每个参数有多敏感”逐层算回去。某个参数对结果影响大,就多改一点;影响小,就少改一点。

只看主线的读者记住这一句即可:前向传播负责作答,反向传播负责追责,梯度下降负责整改。

数学加餐:链式法则怎样逐层追责

下面两条公式只是把“前向作答、反向追责”写得更精确。跳过它们,直接从“1986 年”那段历史继续即可。

对一个 \(L\) 层网络,前向计算可以概括为:

$$ \mathbf{a}^{(l)}=\sigma\left(\mathbf{W}^{(l)}\mathbf{a}^{(l-1)}+\mathbf{b}^{(l)}\right) $$

反向传播则用链式法则把最终损失逐层传回去:

$$ \frac{\partial L}{\partial \mathbf{W}^{(l)}} = \frac{\partial L}{\partial \mathbf{a}^{(L)}} \frac{\partial \mathbf{a}^{(L)}}{\partial \mathbf{a}^{(L-1)}} \cdots \frac{\partial \mathbf{a}^{(l)}}{\partial \mathbf{W}^{(l)}} $$

1986 年,David Rumelhart、Geoffrey Hinton 和 Ronald Williams 在 Nature 发表论文,推动反向传播广为人知。反向传播的思想并非凭空在这一年出现,但这项工作清楚展示了:隐藏层能够通过误差反传学出有用的内部表示。

至此,感知机留下的几个零件终于组装成了更强的机器:

感知机里的种子 神经网络里的发展
加权求和 矩阵乘法,一次计算许多神经元
阈值激活 可导或几乎处处可导的非线性激活
错了就调权重 损失函数、梯度下降和反向传播
一个分类边界 多层表示与复杂决策边界
一条条处理样本 成批处理、GPU 和分布式训练

当然,能表示不等于能学会,能学会也不等于泛化得好。网络加深以后,还有梯度消失、过拟合、初始化、优化稳定性等一长串麻烦。技术的演进从来不是解决一个问题后从此太平,而是解决一个问题,换来一批更高级的问题。程序员对此应该很熟悉。


30 秒复盘:从一条线走到多层网络

到这里先停一下。前三节其实只完成了三次升级:

遇到的问题 解决办法 新能力
一条线分不开 XOR 增加隐藏层 先学习新特征,再分类
隐藏层不知道怎么调整 使用可导激活与反向传播 把误差责任逐层传回去
一个神经元能力太小 大量单元并行并逐层组合 表达更复杂的模式

如果有点累,可以在这里停下来。前半篇已经回答了“神经网络为什么比单个感知机强”。后半篇只做一件事:看看这套老骨架怎样住进 Transformer。


4. 从多层感知机到 Transformer

走到这里,还不能说“多层感知机就是 LLM”。中间隔着卷积网络、循环网络、表示学习、注意力机制、海量语料、GPU 集群和许多工程突破。跳过这些直接画等号,差不多相当于说算盘就是云计算,祖上有关系,但不能冒充同一个产品。

不过,2017 年提出的 Transformer,身体里依然能看到感知机留下的基本动作。

线性投影:还是加权组合

模型会先把文本切成一个个基本片段,称为 token,它可能是一个字、一个词或词的一部分。自注意力再把每个 token 的输入表示复制成三份不同用途的版本:Query 表示“我在找什么”,Key 表示“我能提供什么线索”,Value 表示“我的实际内容是什么”。这三份不是原样复印,而是分别乘上可学习的权重:

$$ Q=XW_Q,\qquad K=XW_K,\qquad V=XW_V $$

不看公式也没关系,它表达的就是:同一份输入,经过三套不同的打分规则,变成三种角色。 这仍是学习权重后的线性变换,只不过从一个向量的一次点积,变成了大批向量的矩阵运算。

Attention:不只变换自己,还选择看谁

开会时,你不会同等关注每个人说的每句话。讨论数据库故障,你会多听数据库工程师;讨论页面颜色,你会多听设计师。Attention 做的事类似:处理当前 token 时,根据上下文动态决定其他 token 各有多重要。

$$ \operatorname{Attention}(Q,K,V) =\operatorname{softmax}\left(\frac{QK^{\mathsf T}}{\sqrt{d_k}}\right)V $$

公式里的 Softmax 负责把关注程度变成一组加起来等于 1 的比例。感知机只问“这些输入特征该各占多大权重”,自注意力进一步问“处理当前 token 时,序列里的其他 token 各该看多少”。权重不再完全固定,而是随上下文动态变化。

前馈网络:每一层里都住着一个 MLP

Attention 负责从上下文收集信息,接下来还要消化这些信息。Transformer 的每个块通常包含一个逐位置前馈网络,可以把它看成每个 token 都要单独经过的一间小型加工厂:先扩大和变换表示,经过非线性激活,再压回需要的尺寸。

$$ \operatorname{FFN}(x)=W_2\,\sigma(W_1x+b_1)+b_2 $$

这就是多层感知机(MLP)的现代版本。公式看不懂,只要记住“变换一次、激活一下、再变换一次”。具体模型可能采用 GELU、SwiGLU 等激活和门控结构,但“线性变换 + 非线性 + 再线性变换”的骨架还在。

训练目标:仍然从错误中调权重

LLM 在预训练时,常见目标是根据前文预测下一个 token。模型会给候选答案各分配一个概率,再用一种叫交叉熵的损失函数衡量预测与正确答案的差距:正确答案的概率给得越低,受到的惩罚越大。最后,反向传播更新所有层的参数。

模型 从错误中学习
感知机 样本分错或压线 → 直接调整相关权重
LLM 下一个 token 预测得不好 → 反传梯度 → 调整大量参数

二者规模相差巨大,目标和结构也不同,但“让误差告诉参数该往哪里走”这条主线没有断。


5. 为什么这么小的东西,能长出神经网络

回头看,感知机能成为神经网络的起点,不是因为它本身足够强,而是因为它有五个适合继续生长的基因。

1. 它把规则变成了可学习参数

传统程序由人写规则,感知机只规定计算框架,具体权重由数据决定。这个变化看似小,却把“编程”从手写判断推进到搜索参数空间。

2. 它可以组合

一个感知机表达一条边界,多个感知机可以并行表达多条边界,再把输出交给下一层。简单单元可堆叠,这是复杂系统生长的前提。晶体管也不会写博客,可足够多的晶体管组合起来,咱们就得开始担心 AI 会不会抢饭碗了。

3. 非线性让组合不再白堆

把一个只会放大两倍的机器,接到另一个只会放大三倍的机器后面,最终效果无非是放大六倍,完全可以换成一台机器。线性网络也是如此。

数学上,多次线性变换总能合并成一次,最后仍等价于一层。激活函数引入非线性,才让深度真正增加表达能力。没有非线性,百层网络只是把一张纸反复对折又摊平,看着忙,能力没变。

4. 梯度让庞大参数能够一起学习

感知机用局部错误更新权重,反向传播把这个思想推广到多层、可求导的计算过程。链式法则给每个参数算出责任份额,训练算法再统一调整。没有这套机制,多层网络只能靠碰运气试参数,规模一大就寸步难行。

5. 它的核心运算适合规模化

点积、矩阵乘法、逐元素激活,都容易批量并行,也适合 GPU、TPU 这类专门加速大规模计算的芯片。算法能组合,训练能求导,计算还能并行,三件事凑齐,规模化才不只是口号。

一句话:

感知机贡献的不是一个万能模型,而是一种可学习、可组合、可扩展的计算单元。

从感知机到 LLM,真正不断长大的,是表示能力、训练方法和计算规模。


6. 一张演进路线图

把八十多年的故事压缩一下,大致是这样:

从人工神经元、感知机到 Transformer 和 LLM 的演进路线

这条路线不是一条笔直的大道,中间有退潮、有绕路,也有许多并行发展的分支。可那根最朴素的线一直在:输入经过带参数的变换产生输出,再根据误差修正参数。


最后一句:失败不是句号,是路标

感知机很简单,简单到只能解决线性可分问题;感知机也很深刻,深刻到它把“机器从例子中学参数”变成了一套明确算法。

它失败在 XOR,并不是一个尴尬的黑历史。恰恰是这次失败逼人们看见:原始特征不够,就学习新的表示;一层不够,就引入隐藏层;硬阈值没法传递责任,就换成可求导的非线性,用反向传播逐层更新;处理语言时需要灵活利用上下文,就让 Attention 动态决定该重点看谁。

所以,若想真正理解神经网络,不妨先亲手写一次感知机,再让它去学 XOR,看它怎样固执地犯错。成功让人知道算法会什么,失败才告诉人边界在哪里。

回看上篇:风起于青萍之末(上):感知机如何学会画一条线

下篇动手清单

  • [ ] 用上篇的感知机代码训练 XOR,记录每轮错误数;
  • [ ] 用两个隐藏单元构造 XOR,理解“学习表示”是什么意思;
  • [ ] 把阶跃函数换成 Sigmoid,推一遍链式法则;
  • [ ] 打开一个 Transformer 实现,找到线性投影、Attention 和 FFN;
  • [ ] 用自己的话解释感知机和 LLM 之间“像在哪里,不像在哪里”。

术语小抄

术语 一句话解释
XOR 两个输入不同时为 1,相同时为 0
隐藏层 在输入和输出之间学习新表示的网络层
梯度 参数稍微变化时,误差会怎样变化
反向传播 计算每个参数对最终错误应负多少责任
token 模型切分文本后处理的基本片段
Attention 根据当前上下文,动态决定应该重点看谁
Transformer 以 Attention 和前馈网络为核心的神经网络架构
LLM 用海量文本训练的大规模语言模型

参考资料


本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。