迷你世界Laplace 人工智能 / 图版 F17 — 人工智能

神经网络怎样学习

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

向下滚动

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 上一起算。玻璃杆里的光是示意:亮度是这根杆此刻送过去的信号或梯度的大小。

几个常见的误解

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

常见问题 · 4
学习率太大会怎样?

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

04步子多大
反向传播是谁提出的?

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

08反向传播
什么是梯度消失?

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

10越传越弱
训练 GPT-3 用了多少计算?

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

11为什么能做大

资料来源

  1. Rumelhart、Hinton、Williams(1986):Learning representations by back-propagating errors,Nature 323:533–536
  2. Linnainmaa(1976):Taylor expansion of the accumulated rounding error,BIT 16:146–160(1970 年硕士论文的倒推求导)
  3. Griewank(2012):Who Invented the Reverse Mode of Differentiation?,Documenta Mathematica(倒推求导的历史;梯度的代价)
  4. Werbos(1982):Applications of advances in nonlinear sensitivity analysis(1974 年博士论文的方法用于神经网络)
  5. Lemaréchal(2012):Cauchy and the gradient method(柯西 1847)
  6. Robbins、Monro(1951):A Stochastic Approximation Method,Ann. Math. Statist. 22:400–407
  7. Polyak(1964):Some methods of speeding up the convergence of iteration methods(动量)
  8. Kingma、Ba(2014):Adam: A Method for Stochastic Optimization,arXiv:1412.6980
  9. LeCun、Bottou、Orr、Müller(1998):Efficient BackProp(学习率上限 2/λmax、随机梯度)
  10. Hochreiter(1991):Untersuchungen zu dynamischen neuronalen Netzen(梯度消失)
  11. Bengio、Simard、Frasconi(1994):Learning long-term dependencies with gradient descent is difficult
  12. Glorot、Bengio(2010):Understanding the difficulty of training deep feedforward neural networks
  13. He 等(2015):Delving Deep into Rectifiers,arXiv:1502.01852
  14. Brown 等(2020):Language Models are Few-Shot Learners,arXiv:2005.14165(GPT-3,表 D.1)
  15. Kaplan 等(2020):Scaling Laws for Neural Language Models,arXiv:2001.08361(每参数每词元约 6 次)
  16. Li 等(2018):Visualizing the Loss Landscape of Neural Nets,arXiv: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 许可:可以免费用于教学和其他非商业用途,可以修改,请注明出自 world.lapla.si。上面列出的第三方素材仍按各自的许可。

引用这幅图版

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

嵌入与 API

延伸观看

  • 3Blue1Brown · 哔哩哔哩 在 哔哩哔哩 打开
  • 3Blue1Brown · 哔哩哔哩 在 哔哩哔哩 打开
  • 3Blue1Brown · YouTube · 英语 在 YouTube 打开

播放器来自 哔哩哔哩 / YouTube,按下播放后才加载。

人工智能 · 全部图版