# 神经网络怎样学习

拉普拉斯的迷你世界 · 图版 F17 · 人工智能

> 神经网络学东西，只靠一件事反复做：量一下错了多少，算出每个数该往哪边拧、拧多少，然后拧一点。算出“每个数该怎么拧”的办法叫反向传播。台子上的小网络正在你的浏览器里训练：铝块上的地形是它真实的误差，钢球的每一步都是一次真实的梯度。

- 可交互的模型：https://world.lapla.si/zh/backprop/
- 嵌入页：https://world.lapla.si/embed/zh/backprop/
- English：https://world.lapla.si/en/backprop/
- 更新于：2026-10-17

## 01 学习就是拧数

台子后面是一个小神经网络。左边两个输入，是一个点的横坐标和纵坐标；中间两层，各 6 个单元；右边一个输出，是这个点属于红色一类的把握。每根玻璃杆上有一个数，叫权重；每个单元还有一个偏置。一共 67 个数。

前面瓷砖上的 160 个点绕成两条螺旋。一开始这些数是随机的，网络几乎全猜错。训练就是反复做一件事：拿一小把点让它猜，量出错了多少，叫损失；再把 67 个数都拧一点，让损失变小。右边表盘上就是损失，瓷砖的底色是网络此刻的判断。

*2 → 6 → 6 → 1 · 67 个数 · 在本页实时训练*

## 02 误差的地形

把 67 个数里的 65 个固定住，只留两根杆可以拧，就是箍着红圈的两根。每一种拧法都对应一个损失。把所有拧法铺在一块平面上，高度就是损失，就得到这块地形。铝块是照这个网络真实算出的损失铣出来的。

钢球的位置就是这两个权重此刻的值，前面和左边的游标读出它们；球所在的高度，就是此刻的损失。学习，就是让球往低处走。

*横向、纵向：两个权重 · 高度：损失（对数刻度）· 等高线每四分之一个数量级一条*

## 03 最陡的下坡

球看不到整块地形，只能感觉脚下的坡。在每一点，坡往上最陡的方向叫梯度。黄铜指针指向它的反方向，也就是往下最陡的方向；指针越长，坡越陡。

梯度下降就是：顺着指针走一小步，再量一次坡，再走一步。1847 年，柯西为解方程组写下了这个办法。

*每一步：权重 ← 权重 − 学习率 × 梯度*

## 04 步子多大

每一步走多远，由学习率决定，左前方的旋钮就是它。太小，球几十步还在半山坡；合适，十几步就下到谷底；太大，第一步就越过谷底冲上对面的坡，再一点点退回来；再大一点，球被直接甩出地形。

对一个碗形的谷，界限可以算出来：学习率超过 2 除以最陡方向的弯曲程度，就一定发散。真实网络的地形处处不同，这个界限只能靠试。

*学习率：0.1 太小 · 1.5 合适 · 4.2 太大 · 6 甩出*

## 05 一小把数据

要算准确的梯度，得把 160 个点都看一遍。大模型的训练数据有几千亿个词元，每走一步都看一遍是做不到的。办法是每步只随机取一小把，比如 16 个点，用它们的梯度代替全部的。

这样算出的方向带着噪声：细钢针是全部数据的梯度，黄铜针是这一把的，两根针总差一点。球走得歪歪扭扭，平均下来仍然往下。这叫随机梯度下降，它的数学起点是 1951 年 Robbins 和 Monro 的随机逼近。

*每步 16 个点 · 瓷砖上亮起的是这一步用到的点*

## 06 惯性与 Adam

这块地形的谷底又长又平：一侧是陡壁，顺着谷底的坡却几乎是零。普通的梯度下降（钢球）落进谷里以后，每一步都越来越短，走得很慢。在别的地形上，它还会在两壁之间来回折。

给球加上惯性（黄铜球）：每一步留下上一步速度的九成，顺着谷底的那一点点坡，一步步积成速度。Adam（蓝钢球）换一种办法：按每个权重自己梯度的大小换算步长，陡的方向走小步，平的方向走大步。三颗球从同一点出发，同样走 140 步。今天训练大模型，大多用 Adam 一类的方法。

*钢：梯度下降（学习率 2）· 黄铜：动量 0.9（0.3）· 蓝钢：Adam（0.2）*

## 07 正向：先算一遍

要知道坡往哪边斜，先得算出损失。取瓷砖上的一个点，它的两个坐标从左边进入网络。每个单元把送进来的数乘上各自杆上的权重，加起来，再经过一个 S 形的函数（tanh），交给下一层。琥珀色的光就是这些数在往右走。

每个单元算完，把自己的值存进旁边的小瓶。最右边的单元给出这个点是红色一类的把握，和正确答案一比，就是这个点的损失。

*每个单元：z = Σ 权重 × 输入 + 偏置，值 = tanh(z) · 每个值都存下来*

## 08 反向传播

现在要知道 67 个数各自该怎么拧。链式法则给出答案：损失对一根杆的变化率，等于“损失对这根杆输出端单元的变化率”乘以“输入端单元的值”。前一个数从输出往回一层层传（蓝色的光），后一个数正向时已经存在小瓶里。

所以只要从输出往输入走一遍，每根杆都拿到了自己那一份：这次的错误里，哪根杆该负多少责任，一次全算出来。1986 年 Rumelhart、Hinton 和 Williams 在《自然》上用它训练多层网络，让它广为人知；同样的倒推算法，1970 年 Linnainmaa 已经写下，当时用来估算舍入误差。

*误差信号 δ 从输出往回传 · 每根杆的梯度 = 输出端的 δ × 输入端存下的值*

## 09 一次反传的账

不用反向传播也能求梯度：把一根杆拧一点点，看损失变多少。可每个数都要单独试，拧大一点、拧小一点各算一遍：这个网络 67 个数，就要多算 134 遍。

反向传播走一遍，乘加次数大约是正向的两倍，和数有多少无关。这个网络每个点正向 54 次乘加，反向 96 次；挨个试要 7,236 次。GPT-3 有 1750 亿个数，挨个试，一步就要算三千五百亿遍；反向传播只要大约三遍正向的量。

*每个点的乘加次数：正向 54 · 反向 96 · 挨个试 7,236*

## 10 越传越弱

网络一深，麻烦就来了。误差信号每往回传一层，都要乘上一层权重和一个斜率。S 形函数 sigmoid 的斜率最大只有 1/4，七层连乘下来，最前面一层的梯度只剩最后一层的一万分之一左右，前面的杆几乎学不动。这叫梯度消失；权重太大时，同样的连乘让梯度越传越大，叫梯度爆炸。

办法是一点点找到的：按每层的宽度定初始权重的大小（2010 年 Glorot 和 Bengio），换用斜率不会一路变小的函数（tanh、ReLU），后来又有了残差连接和归一化。

*七层，同样的点：sigmoid 与 tanh 各层梯度的大小*

## 11 为什么能做大

反向传播的账不随网络变大而变坏：一步的代价总是正向的三倍左右。网络大一千倍，每一步也只贵一千倍，而不是一百万倍。

GPT-3 的 1750 亿个数，用 3000 亿个词元训练，总共约 3.14 × 10²³ 次浮点运算：每个数、每个词元 6 次，正向 2 次，反向 4 次。每一次更新，都是一遍正向、一遍反向、往下一小步，和台子上这个 67 个数的网络一样。

*每个参数、每个词元：正向 2 次 + 反向 4 次 = 6 次浮点运算*

## 12 实验台

可以换一组数据，或者在瓷砖上点出自己的点；调学习率、每步的点数、动量或 Adam，网络的宽度和层数；一步一步走，或者让它跑。地形是那两根杆的损失：其余的数在动，地形也跟着变。

**试一试**：把学习率拧到 3 以上，按“跑”。球去了哪里？再换成 Adam，同样的学习率呢？

## 模型省略了什么

台子上的网络很小：两个输入，两层各 6 个单元，67 个数，160 个点。地形只是一刀切面：真正的损失是 67 维空间里的一个曲面，这里固定其余 65 个数（实验台里它们在动），只看两根杆。高度按损失的对数铣出，太深的谷底被压平了一些。前几章里球只在这两维里走，用的是这两根杆的真实梯度。真实的大模型有几十亿到上万亿个数，学习率随训练调整，在许多块 GPU 上一起算。玻璃杆里的光是示意：亮度是这根杆此刻送过去的信号或梯度的大小。

## 几个常见的误解

梯度下降不保证找到最低点。它只保证每一步往下一点：可能停在一片平地，落进一个局部的坑，或者在谷里慢慢挪。大网络里这往往不算糟，许多不同的低处一样好。反向传播也不等于学习：它只负责算梯度，往哪走、走多远，是优化方法的事。大脑是不是也这样学，目前没有定论。

## 常见问题

### 学习率太大会怎样？

对一个碗形的谷，界限可以算出来：学习率超过 2 除以最陡方向的弯曲程度，就一定发散。

见：[04 步子多大](https://world.lapla.si/zh/backprop/#rate)

### 反向传播是谁提出的？

1986 年 Rumelhart、Hinton 和 Williams 在《自然》上用它训练多层网络，让它广为人知；同样的倒推算法，1970 年 Linnainmaa 已经写下，当时用来估算舍入误差。

见：[08 反向传播](https://world.lapla.si/zh/backprop/#backward)

### 什么是梯度消失？

S 形函数 sigmoid 的斜率最大只有 1/4，七层连乘下来，最前面一层的梯度只剩最后一层的一万分之一左右，前面的杆几乎学不动。

见：[10 越传越弱](https://world.lapla.si/zh/backprop/#vanish)

### 训练 GPT-3 用了多少计算？

GPT-3 的 1750 亿个数，用 3000 亿个词元训练，总共约 3.14 × 10²³ 次浮点运算：每个数、每个词元 6 次，正向 2 次，反向 4 次。

见：[11 为什么能做大](https://world.lapla.si/zh/backprop/#scale)

## 资料来源

1. [Rumelhart、Hinton、Williams（1986）：Learning representations by back-propagating errors，Nature 323:533–536](https://doi.org/10.1038/323533a0)
2. [Linnainmaa（1976）：Taylor expansion of the accumulated rounding error，BIT 16:146–160（1970 年硕士论文的倒推求导）](https://doi.org/10.1007/BF01931367)
3. [Griewank（2012）：Who Invented the Reverse Mode of Differentiation?，Documenta Mathematica（倒推求导的历史；梯度的代价）](https://doi.org/10.4171/dms/6/38)
4. [Werbos（1982）：Applications of advances in nonlinear sensitivity analysis（1974 年博士论文的方法用于神经网络）](https://doi.org/10.1007/BFb0006203)
5. [Lemaréchal（2012）：Cauchy and the gradient method（柯西 1847）](https://doi.org/10.4171/dms/6/27)
6. [Robbins、Monro（1951）：A Stochastic Approximation Method，Ann. Math. Statist. 22:400–407](https://doi.org/10.1214/aoms/1177729586)
7. [Polyak（1964）：Some methods of speeding up the convergence of iteration methods（动量）](https://doi.org/10.1016/0041-5553(64)90137-5)
8. [Kingma、Ba（2014）：Adam: A Method for Stochastic Optimization，arXiv:1412.6980](https://arxiv.org/abs/1412.6980)
9. [LeCun、Bottou、Orr、Müller（1998）：Efficient BackProp（学习率上限 2/λmax、随机梯度）](http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf)
10. [Hochreiter（1991）：Untersuchungen zu dynamischen neuronalen Netzen（梯度消失）](https://people.idsia.ch/~juergen/SeppHochreiter1991ThesisAdvisorSchmidhuber.pdf)
11. [Bengio、Simard、Frasconi（1994）：Learning long-term dependencies with gradient descent is difficult](https://doi.org/10.1109/72.279181)
12. [Glorot、Bengio（2010）：Understanding the difficulty of training deep feedforward neural networks](https://proceedings.mlr.press/v9/glorot10a.html)
13. [He 等（2015）：Delving Deep into Rectifiers，arXiv:1502.01852](https://arxiv.org/abs/1502.01852)
14. [Brown 等（2020）：Language Models are Few-Shot Learners，arXiv:2005.14165（GPT-3，表 D.1）](https://arxiv.org/abs/2005.14165)
15. [Kaplan 等（2020）：Scaling Laws for Neural Language Models，arXiv:2001.08361（每参数每词元约 6 次）](https://arxiv.org/abs/2001.08361)
16. [Li 等（2018）：Visualizing the Loss Landscape of Neural Nets，arXiv:1712.09913](https://arxiv.org/abs/1712.09913)

## 数据

The network, its training and the relief are the site’s own: a small multilayer perceptron trained in your browser by src/topics/backprop/nn.js, with hand-written backpropagation; the relief is the loss it computes over two of its weights.

## 许可 CC BY-NC 4.0

本页的文字、图片和模型采用 CC BY-NC 4.0 许可：可以免费用于教学和其他非商业用途，可以修改，请注明出自 world.lapla.si。上面列出的第三方素材仍按各自的许可。

https://creativecommons.org/licenses/by-nc/4.0/deed.zh-hans

## 引用这幅图版

拉普拉斯的迷你世界，图版 F17《神经网络怎样学习》，https://world.lapla.si/zh/backprop/，CC BY-NC 4.0，2026-10-17 更新。
