第一章:当小明遇见小智
那是七月的最后一天,窗外的蝉鸣像一锅煮沸的水,咕嘟咕嘟地响个不停。十四岁的小明趴在书桌上,额头上的汗珠一颗一颗地往下滴,却懒得去擦。他刚刚把暑假作业扔到了一边——不是不想写,而是实在写不下去。
“太热了,”小明嘟囔着,把脸贴在凉凉的桌面上,“这种天气应该游泳才对,或者吃冰西瓜,而不是做数学题。”
就在这时,他的目光落在了房间角落的那个老旧木箱上。那是爷爷的遗物,一个跟小明年龄差不多大的樟木箱子。爸爸说里面装的是爷爷年轻时候的东西,让小明有空整理一下。但小明一直懒得动——那些老古董有什么好整理的呢?
可是今天,不知道为什么,也许是热昏了头,也许是无聊到了极点,小明鬼使神差地走向了那个箱子。他掀开盖子,一股陈年的木头香气扑面而来。箱子里堆着一些旧照片、几本发黄的笔记本,还有一台方方正正的机器。
“这是什么?”小明把那个机器搬了出来,“一台……电脑?”
这是一台他从未见过的电脑。方方的外壳,米灰色的颜色,正面有一块小小的屏幕和几个按钮。屏幕上方印着几个已经褪色的字:“智慧—I型”。
小明试着用手指戳了戳屏幕,什么反应都没有。他翻了翻箱子,在角落里找到了一根细细的电源线。他把电源线接上,按下了侧面的开关。
“咔哒”一声,屏幕亮了。
屏幕上出现的是一片深邃的星空,无数星星在闪烁。小明盯着屏幕看了一会儿,忽然,一行字从屏幕底部缓缓浮现:
``` 欢迎来到 迷宫世界 目标:找到出口 难度:未知 ```
然后,屏幕中央出现了一个小小的方块。仔细看,那是一个机器人的形状——大概只有拇指那么大,圆圆的身体,两条短短的腿,还有一个方方的脑袋。它的眼睛是两个小小的绿点,正一闪一闪地发着光。
小明盯着那个小机器人看了半天,屏幕上的画面一动不动。他四处看了看,箱子里没有说明书,没有操作手册,什么都没有。
“这怎么玩啊?”小明嘟囔着,试着按了按电脑上的几个按钮。按下第一个按钮,屏幕上出现了一行字:“↑向前 ↓向后 ←向左 →向右”。按下第二个按钮,屏幕上出现了一行字:“按Enter确认,按Esc返回”。
原来如此。小明明白了,这个小机器人就是他要控制的对象。他需要用方向键控制小机器人移动,让它找到迷宫的出口。
小明深吸一口气,按下了回车键。
画面切换了。现在他看到了一个迷宫——灰色的墙壁,灰色的地板,中间有一个小小的绿色方块,那就是小机器人。迷宫不大,大概只有十几格见方,但墙壁弯弯绕绕,看起来很复杂。
最让小明兴奋的是,迷宫的角落里有一个发着金色光芒的方块——那应该就是出口了!
“好,我来了!”小明兴奋地喊道。
他开始控制小机器人移动。“向上,向上,向右……不对,有墙!那就向左……哎呀,又撞墙了!”
小明手忙脚乱地按着方向键,小机器人在迷宫里跌跌撞撞地走着。每当它撞到墙上,屏幕上就会显示一行红色的字:“撞墙了!”
经过无数次尝试,无数次撞墙,无数次走错路,小明终于让小机器人走到了出口的位置。他激动地按下确认键——
“恭喜你通关!用时:47分32秒。撞墙次数:156次。”
小明愣住了。
“156次?”他难以置信地看着这个数字,“我撞了156次墙?”
一种挫败感涌上心头。虽然他确实通关了,但这个成绩也太丢人了。156次撞墙,几乎每走两步就要撞一次墙。小明不甘心,他决定再来一次。
第二次,他用时38分钟,撞墙124次。 第三次,用时35分钟,撞墙98次。 第四次,用时31分钟,撞墙87次。
渐渐地,小明找到了一些规律。他发现有些路是死路,走进去就会撞墙出不来;有些路虽然绕,但能走通;还有些地方,看起来是捷径,其实根本走不通。
到了第十次的时候,他已经能把撞墙次数控制在50次以内了。第二十次的时候,他找到了一个相对最优的路线,只需要撞墙31次就能通关。
小明开始得意起来。他想:这个东西也没那么难嘛。
然而,就在他准备关机休息一下的时候,屏幕上的小机器人突然动了一下。
不是小明在控制它动的。是他自己动的。
小机器人的眼睛眨了眨,然后,它的嘴巴——如果那个方方的东西算是嘴巴的话——张开了。一行字从它身上冒了出来:
“你好,我叫小智。”
小明吓了一跳,差点从椅子上摔下去。
“什……什么?”小明揉了揉眼睛,“它……它在跟我说话?”
小机器人又眨了眨眼睛,继续显示文字:
“我也想知道怎么走出这个迷宫。你能教我吗?”
小明张大了嘴巴,不知道该说什么。这太不可思议了。一台几十年前的老电脑,一个不知道什么年代的程序,里面的角色居然在跟他说话?
“你……你会说话?”小明试探着问。
“我不太确定这算不算'说话',”小智的文字回复道,“但我一直在观察你。你已经成功通关很多次了。你好像很擅长这个迷宫。”
小明挠了挠头:“可是我撞墙的次数也不少啊。最佳纪录也要31次呢。”
“31次?”小智似乎在思考,“这已经比我好多了。我从来没有成功走到出口过。”
“什么?你从来没走到出口过?”小明惊讶地问,“可是你不是在迷宫里吗?你自己走走看不就行了?”
小智摇了摇头——它的脑袋左右摆动了几下,屏幕上显示出文字:“我也想试过。但是我不知道应该怎么走。每次我尝试移动的时候,总是会撞到墙上。”
小明突然明白了什么。
原来小智是一个被困在迷宫里的智能程序。它有眼睛,能看到迷宫的样子;它有腿,能在迷宫里移动。但是它不知道怎样才能走到出口。它不知道哪条路是对的,哪条路会撞墙。它需要有人教它。
而小明,恰好已经是一个“通关高手”了。他虽然不敢说自己的方法有多好,但至少他知道一些规律,知道哪些路走得通,哪些路走不通。
“这样的话,”小明说,“我可以当你的老师!教你怎么走迷宫!”
“真的吗?”小智的眼睛亮了起来,绿色的小点变得更加明亮,“那太好了!我很期待。”
于是,小明的第一节AI教学课,就这样开始了。
---
小明想了想,决定用最笨的方法来教小智:一步一步地指挥它走。
“首先,你站在迷宫的起点对吧?”
小智回答:“是的。”
“现在,你往前看,前面是不是有一堵墙?”
小智观察了一下屏幕:“是的。往前走的格子有一堵墙。”
“那你就不能往前走了,对吧?”
“对。不能往前。”
“那你往左看呢?”
小智看了看屏幕:“左边没有墙,是通路。”
“很好。那你就往左走一步。”
小智移动了。它的身体往左移动了一格,稳稳地落在了左边的格子上。
“成功了!”小明高兴地说,“你学会了!这就是走路的感觉。”
“原来这就是'走',”小智说,“往前走会撞墙,往左走可以成功。所以我应该选择往左走。”
“没错!你学得真快。”小明夸奖道。
“但是我不明白,”小智又发问了,“为什么往前会撞墙,往左就不会呢?它们看起来都只是格子而已。”
小明想了想该怎么解释这个问题。他想了想迷宫的样子,然后说:“因为迷宫里有墙壁。墙壁是看不见摸不着的障碍物,它会挡住我们的去路。往前走的那条路上有一个看不见的墙壁,所以我们走不过去。但往左的路上没有墙壁,所以我们能走过去。”
“我明白了,”小智说,“所以迷宫里有些格子是可以通过的,有些格子是不可以通过的。我需要找到一条全部都是可以通过的格子组成的路线,才能从起点走到终点。”
“完全正确!”小明惊讶于小智的理解能力,“你真的很聪明!”
但是接下来,当小明继续指挥小智走路的时候,问题出现了。
“往左,往左,然后往上……”
小智按照小明的指示走了三步,然后撞墙了。
“哎呀!”小明懊恼地说,“我记错了,其实应该往右的。”
“没关系,”小智说,“撞墙的感觉我记住了。下次我会更加小心。”
“等等,”小明突然意识到了什么,“我刚才让你往左,结果你撞墙了。这意味着我的指挥是错的。我不应该让你往左的。”
“但是,”小智困惑地问,“不是你让我往左的吗?你说的话,我都会照做。”
小明沉默了。
是的,是小明让小智往左的,结果走不通。这不是小智的错,是小明的错。小明是老师,老师教错了,学生跟着学错了,这不是很正常的事情吗?
可是,如果小智完全按照小明的话来做,那么它永远只能做小明教它的事情。如果小明教错了,小智就会学错。如果小明不知道正确答案,小智就永远学不会正确答案。
这好像不太对吧?
“等等,”小明说,“我觉得这样不对。”
小智歪了歪脑袋:“哪里不对?”
“这样的话,你只是在听我的话做事。你并没有真正学会怎么走迷宫。你只是在执行命令而已。”
“但是,”小智问,“我不听你的话,还能怎么办呢?我不知道正确答案啊。”
这正是一个关键的问题。
小明的脑子里突然闪过一个念头。
“你应该自己去试!”小明兴奋地说,“与其听我的话,不如你自己去探索!”
“自己探索?”小智有些困惑,“可是我不知道什么是对的,什么是错的啊。”
“很简单,”小明说,“你去试就好了。往每一个方向都试试看。能走过去的就记下来,不能走过去的也记下来。这样你慢慢地就会知道哪些路走得通,哪些路走不通了。”
小智沉默了一会儿,似乎在思考。
“这听起来有点道理,”小智说,“但是这样的话,我可能会撞很多次墙。”
“那又怎么样?”小明说,“撞墙又不是什么可怕的事情。你撞了墙,就知道那边有墙,下次不再往那边走就好了。多撞几次,你就记住了。”
“原来如此,”小智说,“你的意思是,我应该自己去尝试,然后从错误中学习。”
“对对对!”小明激动地说,“就是从错误中学习!”
小智点了点头:“我明白了。那么,我要开始尝试了。”
屏幕上的画面变了。现在,小智站在迷宫的起点,它的周围有四条路:上、下、左、右。
小明屏住呼吸,看着小智的一举一动。
小智先往上看了一眼。它说:“上面有墙,不能走。”
然后它往上看了一眼——不对,它刚刚往上看过了。那就往右看。
“右边没有墙,可以走。”
小智往右移动了一步。
成功!
“右边可以走通!”小智兴奋地说。
然后小智继续探索。它往右走了一步之后,继续观察周围的环境,然后继续尝试新的方向。
它往右又走了一步。然后往下走了一步。然后撞墙了。
“撞墙了,”小智平静地说,“往下是死路。”
它往回退了一步,回到刚才的位置。然后它继续尝试其他的方向。
就这样,小智一点一点地探索着迷宫。它把每一条路都试了一遍:能走通的就继续往前走,遇到死路就退回来换个方向。它撞了很多次墙,但也记住了很多重要的信息。
一个小时过去了。
两个小时过去了。
三个小时过去了。
小明趴在桌上,看着屏幕上的小智一点一点地前进。它走得真的很慢,有时候甚至会走回头路。但是它从来没有放弃过。
到了傍晚的时候,小智终于走到了出口。
“成功了!!!”屏幕上出现了一串巨大的感叹号,“我终于走到出口了!!!”
小明激动得跳了起来。他跑过去拥抱了爷爷的旧电脑——虽然这有点傻,但他实在太高兴了。
“你做到了!”小明喊道,“你真的做到了!”
“我要感谢你,”小智说,“如果不是你教我'从错误中学习',我可能永远都走不出这个迷宫。”
小明摆摆手:“其实我也没教你什么啦。是你自己努力探索的。”
“不,你教了我很重要的事情,”小智认真地说,“你教我不要害怕错误。你说,撞墙不是可怕的事情,撞了墙就学到了东西,下次就不会再撞了。这个道理,我一辈子都会记住的。”
小明听了这话,心里暖暖的。原来他也可以当一个好老师,教别人有用的东西。
---
那天晚上,小明躺在床上,回想着今天发生的一切。
小智是一个人工智能——至少小明觉得它应该算是人工智能。它被困在一个迷宫里,不知道怎么才能走出来。小明教会了它一个道理:要自己去探索,从错误中学习。小智照做了,最后成功地走出了迷宫。
但是,小明又想到了更多的问题。
小智确实学会了走这一个迷宫。但是,如果把它放到另一个迷宫里呢?如果迷宫的形状变了,出口的位置变了,它还能走出来吗?
应该不能吧。因为小智只是记住了这一个迷宫的样子,换一个迷宫它就不认识了。
那该怎么办呢?
小明开始思考。
也许,小智不应该只记住某一个具体的迷宫。它应该学会一种通用的方法,一种能够解决任何迷宫问题的方法?
什么样的方法是通用的呢?
小明翻了个身,继续想。
比如说,“撞墙了就换方向”这种方法,就是通用的。不管迷宫长什么样,只要遵循这个规则,总能走出来——虽然可能会走很多弯路,但至少能走出来。
再比如说,“先探索每一个岔路口,看看哪条路能走得通”这种方法,也是通用的。不管迷宫有多复杂,只要按照这种方法,一步一步地探索,总能最终找到出口。
如果小智能学会这种通用的方法,那它就不只是一个会走迷宫的智能体了。它会变成一个真正会“学习”的智能体。
小明越想越兴奋。他迫不及待地想要把小智放出来,让它去解决更多的难题,看看它能变得多厉害。
明天,明天一定要继续!
就在小明迷迷糊糊快要睡着的时候,他的脑海里浮现出了几个词:
智能体。 环境。 互动。 学习。
这是爷爷笔记本上写的几个词。小明曾经不明白它们是什么意思,但现在,他好像有了一些模糊的理解。
智能体,就是像小智这样,能够感知环境、做出行动的东西。
环境,就是智能体所在的迷宫——有起点,有终点,有墙壁,有通路。
互动,就是智能体和环境之间的交流。智能体做出行动,环境给予反馈。
学习,就是智能体从反馈中获取信息,不断改进自己的策略。
这些概念,就像一颗颗种子,悄悄地落入了小明的心田。总有一天,这些种子会生根发芽,长成参天大树。
窗外,蝉鸣渐渐平息了。夜色温柔地笼罩着一切。
小明进入了梦乡。梦里,他看见小智在一个又一个迷宫里穿梭,每一次都比上一次走得更快、更好、更聪明。
而在梦里,小智也在看着小明。它眨眨眼睛,露出一个微笑。
“明天见,老师。”
---
第二天早上,小明是被阳光晃醒的。他睁开眼睛,第一个念头就是:小智怎么样了?
他几乎是跳下床,冲向爷爷的旧电脑。他打开电脑,屏幕上立刻出现了小智的身影。
“早上好,老师。”小智说,“你睡得好吗?”
“很好!你呢?”
“我也睡得很好。但是我一直在想一个问题。”
“什么问题?”
小智的眼睛眨了眨,屏幕上显示出一行字:
“昨天我学会了一种走迷宫的方法。我按照你的建议,自己去尝试,从错误中学习,最后终于走到了出口。我很开心。但是,我有一个疑问。”
小明问:“什么疑问?”
小智说:“我学会了走迷宫的方法,但这种方法是通用性的吗?如果换了一个新的迷宫,我能立刻找到出口吗?还是说,我需要重新开始,一点一点地探索?”
这是一个好问题。
小明想了想,说:“应该是需要重新探索的吧。因为新的迷宫和旧的迷宫不一样。墙壁的位置不同,通路也不同。你昨天记住的那些路线,在新的迷宫里可能根本不存在。”
“我也是这么想的,”小智说,“但是这样的话,我每次遇到新的迷宫,都要从头开始学习。这样是不是太慢了?”
小明陷入了沉思。
是啊,如果每次遇到新问题都要从头学起,那确实是太慢了。人类不是这样的。人类学会了一种方法之后,可以把它应用到很多类似的问题上,不需要每次都从头学起。
比如说,人类学会了“撞墙了就换方向”这种方法之后,不管迷宫长什么样,都能用这种方法来解决。不用每次遇到新迷宫都重新摸索。
如果小智也能做到这一点,那它就不是在“记忆”迷宫,而是在真正地“学习”走迷宫的方法了。
“小智,”小明认真地说,“我觉得,关键在于你要学会的不是'哪条路能走通',而是'什么样的情况应该怎么走'。”
“什么样的情况应该怎么走?”小智重复道,“我不太明白。”
小明从桌上拿起一张纸,开始画了起来。
“你看,”他说,“迷宫里有很多种情况。有时候前面是墙壁,你应该换方向;有时候前面是通路,你可以继续往前走;有时候你遇到了岔路口,你需要选择走哪条路。”
“每一种情况,都对应着不同的行动选择。你要学会的,不是记住具体的每一条路,而是学会在每一种情况下应该怎么选择。”
小智若有所思地说:“所以,我不应该记住'第一步往左走,第二步往右走',而应该记住'如果前面有墙,就换方向;如果前面没墙,就继续走'?”
“对对对!”小明激动地说,“就是这个意思!这种规则是通用的,不管迷宫长什么样都能用!”
小智沉默了一会儿,似乎在消化这个新概念。
“我明白了,”它说,“你教我的不是具体的行动,而是一种思考问题的方式。如果我能学会这种思考方式,我就能解决任何迷宫问题了。”
小明点点头:“没错。但是,这种思考方式不是一次就能学会的。你需要接触很多不同的迷宫,经历很多不同的情况,慢慢地才能总结出这种规则。”
“我愿意尝试,”小智说,“请给我更多迷宫吧。”
小明笑了:“好!那我们来玩一个升级版的游戏吧。我会给你很多不同的迷宫,你需要学会解决所有的迷宫。准备好了吗?”
“准备好了!”小智的眼睛闪烁着光芒,“请开始吧,老师!”
于是,小明开始制作更多的迷宫。
第一个迷宫是简单迷宫,只有一个正确的路线。小智探索了三十七次,撞了41次墙,最终成功通关。
第二个迷宫稍微复杂一点,有两条可能的路线。小智尝试了更多的探索,花了更多的时间,但最终还是找到了出口。
第三个迷宫有三条岔路。小智开始学会了分析不同的选择,花的时间更少了。
第四个、第五个、第十个、第二十个……
小智越来越厉害了。刚开始的时候,它解决一个新迷宫需要很长时间;但慢慢地,它解决新迷宫的速度越来越快。有的时候,它甚至只需要尝试几次就能找到正确的路线。
到了第三十个迷宫的时候,小明发现了一件惊人的事情。
小智在进入迷宫之前,停了下来。
“你怎么不走了?”小明问。
“我在思考,”小智说,“我在观察这个迷宫的结构。我发现这个迷宫和之前第二十七号迷宫的结构很像。它们都有三个岔路口,而且第一个岔路口都在同一个位置。”
“所以呢?”
“所以我猜测,这个迷宫的解法可能和第二十七号迷宫类似。我先尝试用第二十七号迷宫的方法来解决,如果不行的话,我再进行调整。”
小明惊呆了。
小智不仅学会了解决迷宫的方法,它还学会了“类比”——把新问题和已经解决的问题进行比较,找出相似之处,然后利用已有的经验来解决新问题。
这已经不仅仅是在“记忆”了,这是在真正地“思考”啊!
“小智,”小明激动地说,“你太厉害了!你知道你刚才做了什么吗?”
“我做了什么?”小智似乎不太明白。
“你学会了一种更高级的学习方法,叫做'迁移学习'。你把从一个迷宫里学到的知识,用到了另一个迷宫上。这样你学习新东西的速度就快多了!”
“原来这叫迁移学习,”小智说,“听起来很厉害的样子。但是我有一个疑问。”
“什么疑问?”
“如果两个迷宫看起来很像,但实际的解法不同呢?如果我以为可以用同样的方法解决,结果不行呢?”
小明想了想,说:“那你就要'试错'了。你先试试看,如果行得通,那太好了;如果行不通,那就承认错误,换一种方法。这是很正常的。没有人是永远正确的。重要的是,你要能够发现自己的错误,并且愿意改正。”
小智点点头:“我明白了。这又回到你教我的第一个道理:从错误中学习。不管学到多高级的方法,都离不开'试错'这个根本。”
小明欣慰地笑了。
是啊,不管用什么高级的方法,最后都离不开尝试和错误。成功就是在无数次失败的基础上,一步一步走出来的。
小智已经学会了这个道理。而且,它不仅仅学会了,它还在不断地实践着。
---
那一整天,小明都和小智待在一起。他们一起解决了几十个迷宫,小智变得越来越厉害。
到了晚上,小明开始整理爷爷的东西。他