📕 第1章 深度学习与机器学习
📄 一句话概括

深度学习不是一路向上的,它起过三次、落过两次。 1958 年的感知器是第一波,1969 年一本小册子证明了单层连 XOR 都做不了,研究经费随之冻结; 1986 年反向传播把「多层」救回来,2012 年 AlexNet 把错误率一次砍掉十一个百分点, 第三波才算站稳。 这一节把年份和原因排成一条线,并亲手跑一遍当年那个致命的 XOR 实验: AND 第 6 轮全对,XOR 从第 3 轮起就卡在 4 个错,跑到第 200 轮也不动。

📝 本节和前面几节的关系

上一节从结构上说了「深度学习是什么」,这一节从时间上说了「它怎么来的」。 两节读完,第 4 章拆感知器时你就知道作者为什么要花整整一节讲 XOR。 这一节里出现的年份与错误率都是公认数字,可以当常识记。

一、三起两落

把这条线压成一张表,起伏就很清楚:每一次起来都是「有了新方法」, 每一次落下几乎都是同一句话——说得比做得到多。

时期 转折点 为什么起 为什么落
1950 年代 感知器 第一个能从样本里调权重的机器 ——
1969 《Perceptrons》 —— 证明单层做不了 XOR,经费冻结
1980 年代 反向传播 多层终于能算梯度 数据少、算力弱、梯度消失
2006 逐层预训练 深层网络找到了能训的起手式 效果仍有限
2012 AlexNet 数据、显卡、ReLU 三样凑齐 (至今仍在爬)

表里最值得看的是 1969 那一行:那不是一次技术失败,是一次论证。一本 112 页的书, 让一个方向冷了十几年。

二、1969:一条直线做不到的事

感知器的判别规则是:w·x + b 大于 0 判 +1,否则判 -1。 二维输入时,这条式子就是平面上的一条直线。 XOR 要求 (0,0) 与 (1,1) 判一类、(0,1) 与 (1,0) 判另一类。 把四个点画出来,两类在对角线上交错——任何一条直线都只能切出一种结果,切不出这种交错。 Minsky 和 Papert 做的事不止于此:他们证明的是「单层感知器能表示的函数类太小」, 而且当时没人知道多层该怎么训。缺陷加上「训不动」,两个问题一起把门关上了。

三、1986:把梯度传回去

多层网络的问题一句话:知道输出错了,但不知道中间那几层各自该背多少责任。 反向传播给的答案是把误差按链锁律一层层往回传,每一层拿到自己那份梯度,各自往下走一步。 这件事其实就是 4.7 节要手推的那套公式。 为什么 1986 年才流行?因为链锁律本身不新,缺的是「把它写成一个能跑的程序」以及一个足够响的演示。 Rumelhart、Hinton、Williams 那篇 Nature 短文干的就是这个。

四、2012:三样东西凑齐

1986 到 2012 中间还有二十多年,不是没人做,是做不出效果。三个短板各缺一块: 数据——ImageNet 有 120 万张带标注的训练图,之前的数据集只有几万张; 算力——用显卡跑矩阵乘,比 CPU 快十几倍; 可训性——ReLU 换掉 sigmoid,梯度不再轻易消失,深层才训得动。 AlexNet 那一年的数字值得记住:top-5 错误率 15.3%,第二名 26.2%。不是小步超越,是断层。 三年后的 ResNet 把这个数压到 3.57%。

五、动手 Demo:亲手跑一遍 1969 年那个实验

感知器的学习规则只有三行:判对了什么都不做,判错了就把权重往正确方向推一点——w 加 0.1×y×x, b 加 0.1×y。 用同一份代码跑两个任务:AND(三个 -1 一个 +1)和 XOR(对角线两个 +1)。 每轮扫完全部 4 个样本,记下这一轮错几个。

def perceptron(data, rounds):
    w = np.zeros(2); b = 0.0
    hist = []
    for _ in range(rounds):
        bad = 0
        for xs, ys in data:
            pred = 1.0 if w @ xs + b > 0 else -1.0
            if pred != ys:                 # 只改判错的那一条
                w = w + 0.1 * ys * xs
                b = b + 0.1 * ys
                bad += 1
        hist.append(bad)                   # 记下这一轮错了几个
    return hist

AND = [((0.0, 0.0), -1.0), ((0.0, 1.0), -1.0),
       ((1.0, 0.0), -1.0), ((1.0, 1.0),  1.0)]
XOR = [((0.0, 0.0), -1.0), ((0.0, 1.0),  1.0),
       ((1.0, 0.0),  1.0), ((1.0, 1.0), -1.0)]

h_and = perceptron(AND, 20)
h_xor = perceptron(XOR, 20)

实跑输出:

--------------------------------------------------------------------
深度学习的历史 —— 感知器的两次生死
--------------------------------------------------------------------

  年份  事件                          一句话
  --------------------------------------------------------------------------------------
  1958  Rosenblatt 发表感知器         第一个能「学」的机器,报纸说它终将学会走路说话
  1969  Minsky & Papert 出书          证明单层连 XOR 都做不了,经费随之冻结
  1986  Rumelhart 等推广反向传播      多层终于能训,第二次热潮起来
  1998  LeCun 的 LeNet-5              卷积网络读银行支票上的手写数字
  2006  Hinton 的深度置信网预训练     「深度」这个词开始站得住
  2012  AlexNet                       ImageNet 错误率从 26.2% 掉到 15.3%
  2015  ResNet                        152 层,错误率 3.57%,低于人类 5.1%

  轮     1     2     3     4     5     20
  -----------------------------------------
  AND    1     3     3     2     1     0
  XOR    2     3     4     4     4     4

  表里是每一轮里「判错的样本个数」(一轮扫完全部 4 个样本)。
  **AND 第 6 轮首次全对,之前几轮会来回抖——**
  **因为权重是按样本顺序一个个改的,改到后面会把前面刚改对的又推翻。**
  **XOR 从第 3 轮起就卡在 4 个错,再跑 200 轮也一样——它不是没训够,是画不出来。**

  原因一句话:单层感知器的判别边界是 w·x + b = 0,一条直线。
  XOR 要求 (0,0) 与 (1,1) 一边、(0,1) 与 (1,0) 另一边,一条直线做不到。
  这就是 1969 年那本书的核心论证,也是第一次寒冬的起点。

AND 第 6 轮首次全对,而前几轮是这样的:1、3、3、2、1、0。 先变差再变好,因为权重是按样本顺序一个个改的,改到后面会把前面刚改对的又推翻。 XOR 从第 3 轮起就卡在 4 个错——四个样本全判错,而且再跑多少轮都不动。 它不是在原地打转,是每一次修正都被下一次抵消,权重来回摆,落不到任何一组能分开的值上。 把这件事说透:这不是学习率没调好、也不是轮数不够。单层感知器的参数空间里,压根不存在一组 w、 b 能让 XOR 的四个点全判对——搜索再久也是在空集里搜。 1969 年那本书的攻击点就在这里。要跨过去,只能加层;要加层,就得有反向传播。 这两件事连起来,才是 1986 年那次复兴的真正内容。

30 秒实验

  1. 把学习率从 0.1 改成 1.0,XOR 还是 4 个错吗?改成 0.01 呢?
  2. 给 XOR 的每个点加第三个输入恒为 1,单层感知器能学会吗?为什么?
  3. 把 AND 的样本顺序倒过来跑,第 6 轮全对这个结果会变吗?

常见误区

  1. 以为 1969 年那次是因为「算力不够」。 不是。 那是一次数学论证:单层的表示能力不足,加算力也变不出一个不存在的解。
  2. 以为反向传播是 1986 年发明的。 链锁律在微积分里早就有, 1986 年的贡献是把它组织成能训练多层网络的算法并做出可信的演示。
  3. 以为深度学习 2012 年才「突然」有效。 算法框架在 1980 年代就基本齐了,缺的是数据、 显卡和 ReLU 这三样工程条件。
自测三问(点开对答案) 1. 为什么单层感知器画不出 XOR 的边界? —— 因为它的判别边界是 w·x + b = 0,永远是一条直线(高维里是超平面)。 XOR 的两类点在平面上交错排列,任何一条直线都分不开。 2. AND 的误差为什么先变大再变到 0? —— 因为权重是逐个样本更新的:修好后面的样本,可能把前面刚修好的又弄错。 反复几轮之后,才收敛到一组四个样本都满足的权重。 3. 2012 年那次突破,缺的三样东西是什么? —— 大规模带标注数据(ImageNet)、能跑矩阵乘的显卡、以及让深层训得动的 ReLU。 三样缺一,AlexNet 都出不来。

历史讲完了,回到当下:如果现在要开始做机器学习,第一步该搞清楚什么? 下一节把「监督、非监督、强化」三种学习方式和「训练、验证、测试」这套评估规矩一次讲清。

相关笔记