all_lessons/心理学/07第 8 课 / 共 17 课

第三部分 · 机器如何被塑造

学习:联结、强化,与「预测错了就更新」

大脑学东西,靠的不是「同一件事重复了多少遍」,而是一个更冷酷的标准:这次结果,跟我预想的差了多少。差得越离谱,学得越狠;丝毫不出意外,它一个字都不学。

上一课把我们逼到这里
第 06 课发现:大脑判断靠又快又省的捷径(启发式),于是有系统性偏误——但这些捷径是「够用机器」付出的合理代价,不是 bug。问题随之而来:这些捷径,是天生就刻在脑子里的,还是后天学来的?再往根上问一句——大脑到底是怎么「学」任何东西的?我们整门课讲的都是一台会随经验更新的建构机器,可「随经验更新」这五个字,机制究竟是什么?这一课就把它拆开。
本课路线
(1) 从巴甫洛夫的狗讲起,看最朴素的「学习=把两件事联结起来」;(2) 跳到斯金纳,看行为被结果塑造;(3) 抛出一个反例,戳破「配对次数越多学得越多」这个直觉,逼出本课真正的引擎——预测误差 (prediction error);(4) 写出那条贯穿全课的伪等式,并接上多巴胺的故事;(5) 玩一个「预测误差学习器」,亲眼看曲线为什么在「意外」那一刻才动。

第一种学习:把两件事联结起来(经典条件反射)

1900 年前后,俄国生理学家巴甫洛夫 (Ivan Pavlov) 本来在研究狗的消化,却被一件「副作用」绊住了:狗听到喂食员的脚步声就开始分泌唾液——食物还没端上来。一个本来毫无意义的声音,怎么会勾出生理反应?

他把这件事拆得干干净净。食物天然会引发流口水,这叫非条件反射(不用学,生来就有):

食物(非条件刺激) → 流口水(非条件反应)

然后他在每次喂食前先摇一下铃。铃声本来什么也勾不出来(中性刺激)。但反复「铃 → 食物」配对之后,狗光听到铃声就开始流口水——它学会了:

铃声(条件刺激) → 流口水(条件反应)

这就是经典条件反射 (classical conditioning)。它的朴素版本说:大脑把时间上挨在一起、反复同时出现的两件事,悄悄焊成一条联结。狗学会的不是「铃声好吃」,而是「铃声预告着食物要来了」——请记住这个「预告」,它是本课的伏笔。

原著 / 研究 · 经典条件反射
巴甫洛夫 (Ivan Pavlov) 在 1890 年代到 1900 年代初对狗的唾液分泌做了系统研究,因消化生理的工作获 1904 年诺贝尔生理学或医学奖,并由此奠定经典条件反射的范式。注意一个常被讲错的细节:经典条件反射建立的是反射性、非自愿的反应(流口水、眨眼、恐惧),动物是「被动地」学到一个预告关系——而不是「主动做出某个动作去换好处」。后者是下一节斯金纳的地盘。

第二种学习:行为被结果塑造(操作性条件反射)

巴甫洛夫的狗是被动的:刺激来了,反应自动发生。可生活里大量的学习是另一种——你主动做了一个动作,然后世界给你一个结果,这个结果反过来改你以后做不做这个动作。小孩按一下开关灯亮了,下次还会去按;手碰到烫的炉子,以后离它远远的。

美国心理学家斯金纳 (B. F. Skinner) 把这件事做成了可控的实验。他造了一个箱子(后人称「斯金纳箱」),里面有根杠杆。饿着的老鼠在箱里乱窜,偶然压到杠杆,掉出一粒食物。几次之后,老鼠开始主动、频繁地压杠杆——它的行为被「压杠杆 → 有食物」这个结果塑造了。这叫操作性条件反射 (operant conditioning),一句话概括:

带来好结果的行为 → 以后更常做;带来坏结果的行为 → 以后更少做

斯金纳用「强化 (reinforcement)」和「惩罚 (punishment)」这套语言精确描述结果如何反推行为,还发现了一个反直觉的事实:断断续续、不可预测的奖赏(间歇强化),比每次都给的奖赏更难戒掉——这正是老虎机和无限下拉刷新让人停不下来的底层原理(第 10 课会接着讲奖赏)。

原著 / 研究 · 操作性条件反射
斯金纳 (B. F. Skinner) 在 1930 年代起用「操作箱」系统研究强化对行为的塑造,是行为主义 (behaviorism) 的代表人物。提醒一点(呼应第 01 课):行为主义当年刻意只谈看得见的行为,把「脑子里发生了什么」当黑箱搁置,这换来了科学的严谨,却也留下一个没回答的问题——动物究竟「学到」了什么内部表征?这个问题,正是下一节要撬开的缝。

戳破直觉:学习的引擎不是「配对次数」,是「意外」

到这里,朴素的故事是:「把两件事多配几次,联结就强一点;多奖励几次,行为就固一点。」次数是引擎。这听起来天经地义——可它是错的,至少不完整。下面这个反例(心理学家管它叫「阻断 (blocking)」)一刀就把「次数论」捅穿了:

这里在逼问什么
分两个阶段训练一只动物。第一阶段:反复让「灯 → 电击」配对,动物学会一见灯光就害怕。第二阶段:现在每次同时亮灯响铃,后面照样跟着电击,配对很多很多次。按「次数论」,铃声也跟电击配了这么多次,动物应该也学会怕铃声才对。可它几乎学不会怕铃声。为什么?因为灯光已经把电击预告得明明白白了——铃声没带来任何信息,电击的到来一点也不意外。配对次数足足够多,动物却纹丝不学。这说明:驱动学习的根本不是「同时出现了多少次」,而是「结果有没有出乎预料」。

1972 年,雷斯科拉 (Robert Rescorla) 与瓦格纳 (Allan Wagner) 把这个洞见写成了一条简洁的更新规则,叫 Rescorla–Wagner 模型。它说:一条联结的强度,每次只朝着「实际发生的」与「我此刻预期的」之间的更新一小步——而这个差,就叫预测误差 (prediction error)

新联结强度 ← 旧联结强度 + 学习率 ×(实际结果 − 当前预期)

把这条式子盯几秒,三件事会自己跳出来:

1括号里那个「实际 − 预期」就是预测误差。它(结果比预想的好/强)→ 联结上调;它(结果比预想的差/没来)→ 联结下调。
2一旦预期追上了实际,预测误差归零,括号为 0,更新量为 0——学习自动停下。这就是为什么联结强度的曲线会是一条「先陡升、后变平」的饱和曲线:越接近真相,越没什么可学。
3阻断之谜迎刃而解:第二阶段电击早被灯光预测到了,预期≈实际,预测误差≈0,所以无论铃声陪它配多少次,括号都是 0,铃声一个字也学不进去。意外,才是唯一的老师。

「学习率」是个 0 到 1 之间的小系数,管的是每次朝误差迈多大一步:太小则学得慢、稳;太大则一次意外就过度反应、来回震荡。它只调速度,不改方向——方向永远由预测误差说了算。

回扣引擎:原来 02 的知觉,和这里的学习,是同一招

请回想第 03 课那句话:知觉是大脑的「最佳猜测」,它拿感官信号当证据,预测「外面最可能是什么」。现在把这一课叠上去——你会发现它们是同一台机器的两个动作,咬合得严丝合缝:

知觉(02 课)大脑用现有模型预测下一刻的感官输入,再把预测当成「你看到的现实」端出来。这是模型的「正向使用」。
学习(本课)当实际输入和预测对不上(预测误差≠0),大脑用这个误差反过来修正模型本身。这是模型的「反向更新」。
合起来看一台机器,时刻在干两件事:拿模型去世界,再拿世界的意外去改模型。猜得准就省力地往前滑,猜错了才掏出预测误差、付出代价去更新。这就是引擎本身。

所以「学习」和「知觉」从来不是两个分开的章节,而是同一个「预测—比对—更新」循环的两半。这条暗线(预测误差)在第 00 课就埋下了,本课讲透;它后面还会回来——第 09 课你会看到,连情绪都是大脑对身体信号的一种「预测性解释」,第 14 课你会看到,某些心理障碍正是这个预测系统被长期校歪、把安全也读成了危险。

大脑里真有一个「预测误差」信号吗?多巴胺的故事

Rescorla–Wagner 是个数学模型。可它会不会只是个凑巧拟合数据的公式,大脑里其实没这回事?1990 年代,神经科学家舒尔茨 (Wolfram Schultz) 给出了一个漂亮得让人起鸡皮疙瘩的答案。他记录猴子脑中分泌多巴胺 (dopamine) 的神经元的放电,发现了三种情形:

意外的奖赏训练之初,猴子没料到会有果汁,果汁一来,多巴胺神经元猛烈放电。正的预测误差:「比预想的好!」
被预告的奖赏等猴子学会「铃响 → 有果汁」后,果汁照样来,多巴胺神经元在果汁那一刻却几乎不放电了——放电提前挪到了铃声那一刻。预期≈实际,误差≈0:「果汁?早知道了,没什么可学。」
被预告却没来铃响了,猴子满心期待,果汁却没出现。在本该有果汁的那一刻,多巴胺放电反而跌到基线以下(一个明显的「下挫」)。负的预测误差:「说好的呢?失望,下调预期。」

请把这三条和上面那条伪等式逐一对上:放电的强弱,几乎完美地编码了括号里的「实际 − 预期」。这是本课最重的一锤:长久以来人们以为多巴胺是「快乐分子」「奖赏信号」,舒尔茨证明它编码的不是奖赏本身,而是奖赏的预测误差——是「比预想多了多少惊喜」。所以一个被吃腻、被完全预料到的奖赏,并不会让多巴胺兴奋;而一个意料之外的好消息,哪怕很小,也能点亮它。这也是为什么「想要」会和「喜欢」分家——这个伏笔,留给第 10 课收。

原著 / 研究 · 预测误差与多巴胺
Rescorla & Wagner(1972)提出以预测误差驱动联结学习的形式化模型,至今是学习理论的基石。舒尔茨 (Wolfram Schultz) 及同事(1990 年代)通过记录中脑多巴胺神经元,发现其放电模式与奖赏预测误差 (reward prediction error) 高度吻合——多巴胺编码的是「比预期好/差多少」,而非奖赏的绝对量。这套思想后来直接哺育了人工智能里的强化学习 (reinforcement learning)。这里只陈述被反复验证的核心结论;关于多巴胺还有许多细分功能(如「动机/想要」),第 10 课再展开,不在此越界。

动手:预测误差学习器

下面这个部件按 Rescorla–Wagner 那条式子,一试次一试次地模拟「铃 → 食物」的学习。每按一次「下一试次」,它就更新一步:新强度 ← 旧强度 + 学习率 ×(实际 − 预期)。请你重点盯两件事:曲线在头几次为什么陡升、到后面为什么变平;以及——这是关键——在某个试次点「这次不给食物(惊讶!)」,看曲线那一下为什么会下挫

预测误差学习器:只有意外才驱动学习
蓝线=当前联结强度/预期(狗有多笃定「铃后有食物」),随每个试次更新。灰柱=该试次的预测误差|实际 − 预期|——注意它在头几次最高、之后逐渐缩到几乎为 0(学习随之停下)。拖「学习率」改变每步迈多大;按「不给食物」制造一次负预测误差,看会发生什么。
试次
0
当前预期
0.00
本次预测误差
判定
还没开始

玩完,那个躲不掉的直觉就摆在眼前了:曲线只在「预测误差不为 0」的时候动。头几次铃后有食物,狗本来没料到(误差大),曲线猛蹿;几次之后狗已经笃定了(预期≈实际,误差≈0),再配多少次,曲线都几乎不动——不是它学够了不想学,而是没有意外可学了。而当你点「不给食物」,预期还高高挂着、实际却是 0,括号变成一个大负数,曲线应声下挫——这正是舒尔茨在猴子多巴胺里看到的那个「下挫」。一句话:配对次数不是老师,意外才是。这,就是「随经验更新」这五个字的真正机制。

常见误解

一句话带走
学习=用经验更新模型,而驱动更新的不是「配对了多少次」,而是预测误差:只有当结果出乎预料(实际 ≠ 预期)时,大脑才学;猜准了就一个字也不学。这正是第 03 课那台「拿模型猜世界」的机器的另一半动作——拿世界的意外,反过来改模型。多巴胺里那个编码「比预想好多少」的信号,是它留在大脑里的指纹。
下一步
学习让模型随经验一步步更新——这解释了「成年的大脑怎么变」。可它没回答一个更靠前的问题:一个人从婴儿到成人,这台机器最初是怎么从零、一级一级搭起来的?婴儿一开始连「东西被挡住了还存在」都不懂,这种最基本的建构能力,是装好就有,还是慢慢长出来的?更尖锐地说——有没有一些能力,存在一个错过就再也补不满的「窗口」?→ 第 08 课《发展:一台机器如何从零搭起》会带你看这台机器的「装配过程」,以及那些关上就再难打开的关键期。