第1章 消失的宝藏:一个闯关游戏引发的疑问 / Chapter 1 The Lost Treasure: A Puzzle from a Maze Game
七月的风裹着樟木的潮气钻进阁楼窗缝时,林晓正扒在旧木箱边缘翻找爷爷留下的旧物。木箱里塞满了泛黄的编程竞赛证书、磨得掉漆的 Game Boy 卡带,还有台外壳磨得发白的掌上游戏机,屏幕上还贴着歪歪扭扭的贴纸,写着“迷宫探险家”四个字——那是爷爷当年参加全国青少年编程大赛的二等奖奖品,比林晓的年龄还大两岁。游戏机的按键磨得发滑,绿色的LCD屏幕亮起来的时候还闪了两下,爷爷的手轻轻按在开机键上,指腹的茧子蹭过掉漆的塑料壳:“当年我为了拿这个奖,在微机室里待了整整一个月,就为了写个能走随机迷宫的AI。”
屏幕上的迷宫是随机生成的,灰色的砖墙围出弯弯曲曲的通道,终点处闪着发光的金币图标,每走一步都会弹出分数提示。林晓觉得自己玩迷宫的经验丰富,幼儿园的时候就能通关最简单的纸质迷宫,这掌上游戏肯定也不难。她给自己总结了固定路线:“进迷宫先右转三次,遇到死路就退两步左转,直走到底肯定到终点。”结果第一次按路线走,右转三次之后是堵死的高墙,左转之后还是墙,再左转直接掉进了陷阱里,屏幕上跳出来鲜红的“扣50分!”,气得她把游戏机往床上一扔:“什么破游戏,根本走不通!”
爷爷笑着咬了一口冰西瓜,汁水顺着下巴流下来:“你爷爷我当年拿这个奖的时候,也卡了整整三天,一开始也想写固定路线,结果每次比赛抽的迷宫都不一样,刚写好的路线,换个地图就全废了。”他点了点屏幕上随机生成的墙,“你看这迷宫,墙的位置、陷阱的位置、宝藏的位置每次都不一样,你不可能把所有路线都写死,就像你教人走路,不可能把所有路面的情况都教一遍,遇到新的路还是不会走。”
林晓是初中生,刚学过一点Python编程,第一个想法就是写规则:“不就是if else嘛,前方有墙就右转,有路就直走,遇到陷阱就后退,肯定能走通。”她当天就抱着笔记本电脑写了一百多行代码,把各种情况都列进去:前方是墙怎么转,左边是墙怎么转,右边是墙怎么转,遇到陷阱怎么退,结果往游戏机里一导,AI走第一步就撞在墙上,转了三圈之后直接卡死在原地,一步都动不了。
“我都把所有规则都写进去了,怎么还不会走?”林晓气得拍键盘。 “你写的规则都是你遇到的情况,”爷爷把西瓜皮扔进垃圾桶,“迷宫的可能性太多了,最小的10x10迷宫,可能的路线数量是$10^{20}$量级,比银河系里的恒星数量还多,你不可能把所有情况都列完。这种把所有规则写死的编程,就像你教机器人扫地,写‘前方有障碍物就左转’,结果机器人遇到沙发左转,遇到桌子也左转,最后绕着桌子转一辈子都扫不完地,规则太死,遇到你没考虑到的情况就傻了。”
林晓又想到老师讲过的监督学习(Supervised Learning):给AI一堆带标准答案的例子,让它照着学。那她就找1000张迷宫地图,每张都标好正确的路线,让AI背下来,不就行了吗?她算了算,哪怕每天标10张,也要三个多月,而且如果迷宫里有新的陷阱、新的障碍,之前没标过的,AI还是不知道怎么走。监督学习就像老师给你划考试重点
监督学习就像老师给你划了整本数学书的重点,结果考试的时候出个从来没见过的题型,你还是不会做。林晓上周刚吃过这个亏:期中考试前,数学老师把平时作业里的100道题全划了重点,她熬夜把答案全背下来了,结果考试最后一道大题是全新的几何模型,全班只有三个人做出来,林晓对着空白的答题卡发了十分钟呆,最后只能写个“解:设未知数x”,半分没拿到。她当时就想,要是老师能把所有可能的题型都划一遍就好了,可数学题的可能性太多了,光是初中几何的辅助线做法就有上百种,根本不可能划完。对应到迷宫AI上,10x10的小迷宫,可能的路径数量高达$10^{20}$量级,比银河系中恒星的总数(约$10^{11}$到$10^{12}$颗)还多上亿倍,更别说爷爷这个掌上游戏机里的迷宫是15x15的随机生成地图,墙、陷阱、宝藏的位置每次刷新都不一样,她就是把眼睛看瞎了,也不可能把所有可能的地图都标上正确路线。
林晓当天就抱着笔记本电脑蹲在书桌前,找了网上公开的100张迷宫地图,一张一张用画图工具标出正确路线,每标一张眼睛就酸一分,贴了满书桌的打印纸,熬到半夜两点才标完100张。她信心满满地把标注数据喂给AI模型,结果测试新地图的时候,AI要么直接撞墙,要么在原地打转,连第一步都走不出去。她气得把打印纸全扯下来扔进垃圾桶:“我都把答案都给AI了,怎么还不会走?”爷爷靠在门框上啃西瓜,指了指游戏机屏幕上刚刷新出来的新迷宫:“你给的100张地图,连所有可能地图的$10^{-18}$都不到,就像你只学了100道数学题,就去考奥数,肯定不及格啊。监督学习最核心的问题就是:你得先有所有情况的‘标准答案’,可现实里很多问题根本没有标准答案,或者标准答案多到不可能列完。”
爷爷是退休的嵌入式系统工程师,年轻时在汽车厂做自动驾驶路径规划的,对这些再清楚不过。他放下西瓜皮,擦了擦手上的汁水,从书柜里翻出一本泛黄的相册,里面夹着他当年在工厂里拍的照片:机械臂在生产线上抓不同形状的汽车零件,旁边摆着一台笨重的电脑,屏幕上跳着绿色的代码。“你看这个机械臂,”爷爷点了点照片里的机械臂,“当年我们做这个项目的时候,一开始也想过写死规则:遇到方形零件就用A夹具,遇到圆形就用B夹具,遇到长条形的就用C夹具。结果到了生产线上一看,零件形状有上千种,还有歪着放的、叠在一起的、沾了油的,你根本不可能把所有规则都写全。我们也试过监督学习,拍了10万张零件的照片,标好位置和形状喂给AI,结果遇到之前没拍过的异形零件,AI直接抓瞎,把零件碰掉到地上,整条生产线都得停。后来我们换了个思路:不让AI背答案,让它自己试。抓对了零件,就给系统一个‘正奖励’,相当于告诉它‘你这次做对了’;抓错了、碰掉零件了,就给一个‘负奖励’,相当于‘你这次做错了,下次改’。让它自己跟零件互动,试了上百万次,最后不管什么形状的零件,它都能一次抓准,比人工写的规则准10倍。”
这种让AI自己跟环境互动,根据得到的反馈调整自己的行为,不用提前写死规则、也不用提前给标准答案的学习方式,就是强化学习(Reinforcement Learning, RL),也叫“增强学习”或“再励学习”,是机器学习里最像人类和动物学习方式的一类。林晓听得眼睛都直了,她之前以为AI学习只有两种方式:一种是程序员把所有规则写死,比如家里的智能扫地机器人,写死“前方有障碍物就左转”;另一种是监督学习,比如她之前用来写作文的AI,喂了几十万篇范文,才能写出通顺的文章。她从来没想过还有第三种方式:不用给答案,只要告诉AI做对了还是做错了,它自己就能学会。
“那强化学习是不是就是让AI瞎试?”林晓追问。 爷爷笑了:“当然不是,瞎试的话,试到天荒地老也学不会。强化学习的核心是‘有目的的试错’,它会记住自己做的每个动作之后得到的奖励,下次遇到同样的情况,就更倾向于做之前得到过正奖励的动作,避开得到过负奖励的动作。就像你小时候学走路,摔倒了会疼(负奖励),站稳了能走到妈妈身边拿到糖(正奖励),你摔两次就知道下次这个地方不能这么走,慢慢就学会走路了,不用爸妈把每一步怎么迈都教给你。你之前养的那只小仓鼠‘团团’,你教它跑迷宫的时候,是不是一开始也是瞎跑?你只在终点放瓜子,它偶尔跑到终点吃到瓜子(正奖励),慢慢就会少走死路,最后能跑出最短的路线?这就是最天然的强化学习,你不需要告诉它每一步怎么走,只要给它反馈,它自己就学会了。”
要搞清楚强化学习到底和之前的两种方式有什么不一样,我们不妨把三种学习方式的核心逻辑、优缺点、适合场景放在一起对比,用你熟悉的闯迷宫任务当例子,一看就明白:
```mermaid graph TD A[AI学习方式对比(以闯迷宫为例)] --> B[固定规则编程] A --> C[监督学习] A --> D[强化学习] %% 固定规则编程分支 B --> B1[核心逻辑:程序员把所有规则写死<br/>比如“前方有墙就右转,有路就直走”] B --> B2[需要人工标注:所有可能的规则<br/>比如所有路况对应的转向逻辑] B --> B3[适应能力:极差<br/>迷宫随机刷新就完全失效] B --> B4[适合场景:规则完全固定的简单任务<br/>比如计算器、红绿灯、最简单的扫地机器人] B --> B5[闯迷宫表现:<br/>林晓第一次写的代码,走3步就卡死在原地] %% 监督学习分支 C --> C1[核心逻辑:AI背标准答案<br/>比如喂1000张带正确路线的迷宫地图] C --> C2[需要人工标注:所有训练数据的正确答案<br/>比如每张地图的正确路线] C --> C3[适应能力:一般<br/>遇到没见过的地图就失效] C --> C4[适合场景:有大量标注数据的任务<br/>比如人脸识别、垃圾邮件分类、AI写作文] C --> C5[闯迷宫表现:<br/>喂100张地图后,新地图一步都走不出去] %% 强化学习分支 D --> D1[核心逻辑:AI自己试错,根据反馈调整<br/>比如
七月的风裹着樟木的潮气钻进阁楼窗缝时,林晓正扒在旧木箱边缘翻找爷爷留下的旧物。木箱里塞满了泛黄的编程竞赛证书、磨得掉漆的 Game Boy 卡带,还有台外壳磨得发白的掌上游戏机,屏幕上还贴着歪歪扭扭的贴纸,写着“迷宫探险家”四个字——那是爷爷当年参加全国青少年编程大赛的二等奖奖品,比林晓的年龄还大两岁。游戏机的按键磨得发滑,绿色的LCD屏幕亮起来的时候还闪了两下,爷爷的手轻轻按在开机键上,指腹的茧子蹭过掉漆的塑料壳:“当年我为了拿这个奖,在微机室里待了整整一个月,就为了写个能走随机迷宫的AI。”
屏幕上的迷宫是随机生成的,灰色砖墙围出弯弯曲曲的通道,终点处闪着发光的金币图标,每走一步都会弹出分数提示。林晓觉得自己玩迷宫的经验丰富,幼儿园的时候就能通关最简单的纸质迷宫,这掌上游戏肯定也不难。她给自己总结了固定路线:“进迷宫先右转三次,遇到死路就退两步左转,直走到底肯定到终点。”结果第一次按路线走,右转三次之后是堵死的高墙,左转之后还是墙,再左转直接掉进了陷阱里,屏幕上跳出来鲜红的“扣50分!”,气得她把游戏机往床上一扔:“什么破游戏,根本走不通!”
爷爷笑着咬了一口冰西瓜,汁水顺着下巴流下来:“你爷爷我当年拿这个奖的时候,也卡了整整三天,一开始也想写固定路线,结果每次比赛抽的迷宫都不一样,刚写好的路线,换个地图就全废了。”他点了点屏幕上随机生成的墙,“你看这迷宫,墙的位置、陷阱的位置、宝藏的位置每次都不一样,你不可能把所有路线都写死,就像你教人走路,不可能把所有路面的情况都教一遍,遇到新的路还是不会走。”
林晓是初中生,刚学过一点Python编程,第一个想法就是写规则:“不就是if else嘛,前方有墙就右转,有路就直走,遇到陷阱就后退,肯定能走通。”她当天就抱着笔记本电脑写了一百多行代码,把各种情况都列进去:前方是墙怎么转,左边是墙怎么转,右边是墙怎么转,遇到陷阱怎么退,结果往游戏机里一导,AI走第一步就撞在墙上,转了三圈之后直接卡死在原地,一步都动不了。
“我都把所有规则都写进去了,怎么还不会走?”林晓气得拍键盘。 “你写的规则都是你遇到的情况,”爷爷把西瓜皮扔进垃圾桶,“迷宫的可能性太多了,最小的10x10迷宫,可能的路线数量是$10^{20}$量级,比银河系里的恒星数量还多,你不可能把所有情况都列完。这种把所有规则写死的编程,就像你教机器人扫地,写‘前方有障碍物就左转’,结果机器人遇到沙发左转,遇到桌子也左转,最后绕着桌子转一辈子都扫不完地,规则太死,遇到你没考虑到的情况就傻了。”
林晓又想到老师讲过的监督学习(Supervised Learning):给AI一堆带标准答案的例子,让它照着学。那她就找1000张迷宫地图,每张都标好正确的路线,让AI背下来,不就行了吗?她算了算,哪怕每天标10张,也要三个多月,而且如果迷宫里有新的陷阱、新的障碍,之前没标过的,AI还是不知道怎么走。监督学习就像老师给你划了整本数学书的重点,结果考试的时候出个从来没见过的题型,你还是不会做。林晓上周刚吃过这个亏:期中考试前,数学老师把平时作业里的100道题全划了重点,她熬夜把答案全背下来了,结果考试最后一道大题是全新的几何模型,全班只有三个人做出来,林晓对着空白的答题卡发了十分钟呆,最后只能写个“解:设未知数x”,半分没拿到。她当时就想,要是老师能把所有可能的题型都划一遍就好了,可数学题的可能性太多了,光是初中几何的辅助线做法就有上百种,根本不可能划完。对应到迷宫AI上,10x10的小迷宫,可能的路径数量高达$10^{20}$量级,比银河系中恒星的总数(约$10^{11}$到$10^{12}$颗)还多上亿倍,更别说爷爷这个掌上游戏机里的迷宫是15x15的随机生成地图,墙、陷阱、宝藏的位置每次刷新都不一样,她就是把眼睛看瞎了,也不可能把所有可能的地图都标上正确路线。
林晓当天就抱着笔记本电脑蹲在书桌前,找了网上公开的100张迷宫地图,一张一张用画图工具标出正确路线,每标一张眼睛就酸一分,贴了满书桌的打印纸,熬到半夜两点才标完100张。她信心满满地把标注数据喂给AI模型,结果测试新地图的时候,AI要么直接撞墙,要么在原地打转,连第一步都走不出去。她气得把打印纸全扯下来扔进垃圾桶:“我都把答案都给AI了,怎么还不会走?”爷爷靠在门框上啃西瓜,指了指游戏机屏幕上刚刷新出来的新迷宫:“你给的100张地图,连所有可能地图的$10^{-18}$都不到,就像你只学了100道数学题,就去考奥数,肯定不及格啊。监督学习最核心的问题就是:你得先有所有情况的‘标准答案’,可现实里很多问题根本没有标准答案,或者标准答案多到不可能列完。”
爷爷是退休的嵌入式系统工程师,年轻时在汽车厂做自动驾驶路径规划的,对这些再清楚不过。他放下西瓜皮,擦了擦手上的汁水,从书柜里翻出一本泛黄的相册,里面夹着他当年在工厂里拍的照片:机械臂在生产线上抓不同形状的汽车零件,旁边摆着一台笨重的电脑,屏幕上跳着绿色的代码。“你看这个机械臂,”爷爷点了点照片里的机械臂,“当年我们做这个项目的时候,一开始也想过写死规则:遇到方形零件就用A夹具,遇到圆形就用B夹具,遇到长条形的就用C夹具。结果到了生产线上一看,零件形状有上千种,还有歪着放的、叠在一起的、沾了油的,你根本不可能把所有规则都写全。我们也试过监督学习,拍了10万张零件的照片,标好位置和形状喂给AI,结果遇到之前没拍过的异形零件,AI直接抓瞎,把零件碰掉到地上,整条生产线都得停。后来我们换了个思路:不让AI背答案,让它自己试。抓对了零件,就给系统一个‘正奖励’,相当于告诉它‘你这次做对了’;抓错了、碰掉零件了,就给一个‘负奖励’,相当于‘你这次做错了,下次改’。让它自己跟零件互动,试了上百万次,最后不管什么形状的零件,它都能一次抓准,比人工写的规则准10倍。”
这种让AI自己跟环境互动,根据得到的反馈调整自己的行为,不用提前写死规则、也不用提前给标准答案的学习方式,就是强化学习(Reinforcement Learning, RL),也叫“增强学习”或“再励学习”,是机器学习里最像人类和动物学习方式的一类。林晓听得眼睛都直了,她之前以为AI学习只有两种方式:一种是程序员把所有规则写死,比如家里的智能扫地机器人,写死“前方有障碍物就左转”;另一种是监督学习,比如她之前用来写作文的AI,喂了几十万篇范文,才能写出通顺的文章。她从来没想过还有第三种方式:不用给答案,只要告诉AI做对了还是做错了,它自己就能学会。
“那强化学习是不是就是让AI瞎试?”林晓追问。 爷爷笑了:“当然不是,瞎试的话,试到天荒地老也学不会。强化学习的核心是‘有目的的试错’,它会记住自己做的每个动作之后得到的奖励,下次遇到同样的情况,就更倾向于做之前得到过正奖励的动作,避开得到过负奖励的动作。就像你小时候学走路,摔倒了会疼(负奖励),站稳了能走到妈妈身边拿到糖(正奖励),你摔两次就知道下次这个地方不能这么走,慢慢就学会走路了,不用爸妈把每一步怎么迈都教给你。你之前养的那只小仓鼠‘团团’,你教它跑迷宫的时候,是不是一开始也是瞎跑?你只在终点放瓜子,它偶尔跑到终点吃到瓜子(正奖励),慢慢就会少走死路,最后能跑出最短的路线?这就是最天然的强化学习,你不需要告诉它每一步怎么走,只要给它反馈,它自己就学会了。”
要搞清楚强化学习到底和之前的两种方式有什么不一样,我们不妨把三种学习方式的核心逻辑、优缺点、适合场景放在一起对比,用你熟悉的闯迷宫任务当例子,一看就明白:
```mermaid graph TD A[AI学习方式对比(以闯迷宫为例)] --> B[固定规则编程] A --> C[监督学习] A --> D[强化学习] %% 固定规则编程分支 B --> B1[核心逻辑:程序员把所有规则写死<br/>例:“前方有墙就右转,有路就直走”] B --> B2[人工成本:需要穷举所有可能的规则<br/>10x10迷宫需覆盖10^20种路况,不可能完成] B --> B3[适应能力:极差<br/>迷宫随机刷新即完全
要搞清楚强化学习到底和之前的两种方式有什么不一样,我们不妨把三种学习方式的核心逻辑、人工成本、适应能力、适合场景放在一起对比,用你熟悉的闯迷宫任务当例子,一看就明白:
```mermaid graph TD A[AI学习方式对比(以闯迷宫为例)] --> B[固定规则编程] A --> C[监督学习] A --> D[强化学习] %% 固定规则编程分支 B --> B1[核心逻辑:程序员将所有规则写死<br/>例:“前方有墙则右转,有路则直走”] B --> B2[人工成本:需穷举所有可能的规则<br/>10×10迷宫需覆盖$10^{20}$种路况,完全不可能完成] B --> B3[适应能力:极差<br/>迷宫随机刷新即完全失效] B --> B4[适合场景:规则完全固定的简单任务<br/>如计算器、红绿灯、基础扫地机器人] B --> B5[闯迷宫表现:<br/>林晓首次编写的代码,3步即卡死在原地] %% 监督学习分支 C --> C1[核心逻辑:AI背诵标准答案<br/>例:喂入1000张带正确路线的迷宫地图] C --> C2[人工成本:需标注所有训练数据的正确答案<br/>10×10迷宫需标注超$10^{20}$种可能地图,完全不可能完成] C --> C3[适应能力:一般<br/>遇到未标注的新地图即失效] C --> C4[适合场景:有大量标注数据的任务<br/>如人脸识别、垃圾邮件分类、AI写作] C --> C5[闯迷宫表现:<br/>喂入100张地图后,新地图连第一步都无法走通] %% 强化学习分支 D --> D1[核心逻辑:AI自主试错,根据反馈调整策略<br/>例:在迷宫里随机走,吃到金币加分,撞墙扣分,自主学习路线] D --> D2[人工成本:仅需设计奖励规则