强化学习:试错出真知
前情提要 在第 15 篇《运动控制入门:让机械臂不抖不撞》里,我们讲到控制器(比如 PID)做的是"给了目标就追"的活儿:你告诉机械臂"把手伸到 A 点",它就用一套调节办法稳稳伸过去、不抖不撞。但有个更根本的问题没解决——那个"目标 A 点"是谁定的?机械臂该先往左还是先往右、先抓还是先抬,这套"该往哪追"的策略又从哪来?PID 不会自己长出目标。本篇就补上这个空缺:当没人手把手教、连标准答案都不存在时,机器人能不能靠"自己试、自己改"长出一个好策略。
想象你第一次把小孩抱上自行车,你没法把"怎么保持平衡"翻译成一句指令塞进他脑子。你只能让他上车、扶一把、摔了再试。摔多了,他慢慢知道:身体往左歪时就该把车把往左带一点。机器人学本事,很多时候也是这条路子——没有老师逐帧示范,只有"摔了"和"对了"两种模糊信号,它得自己在一次次试错里把路走通。这就是强化学习想解决的事。
一句话概括:强化学习就是让智能体(也就是那个学本事的主角)待在一个环境里,自己动手做动作,环境给它一个奖励(好动作加分、坏动作扣分),它再根据这个分数回头改自己的做事方式,下次争取拿更多分。注意这里没有"标准答案本"——没人告诉它每一步具体该怎么做,它只知道最后结果好不好。就像训练小狗,你不会解释"坐下"的肌肉原理,只在它屁股着地时给块零食;狗慢慢把"听到指令就蹲下"和"有零食"连在一起。
这和传统"喂答案"的学习不一样。平时教模型认猫狗,是给它一万张标好"这是猫"的图,它照着对答案抄。可机器人学走路、学抓杯子,世界上根本没有一本"标准动作说明书"——你没法把"完美步态"逐帧标出来。强化学习的聪明处正在于此:它不需要你给答案,只要你能判断"做得好不好"(奖励),它自己反推"怎么做好"。换句话说,把"评价"这件事交给环境,把"求解"交给机器人自己。
整个过程可以画成一个循环:
智能体先"看"环境处于什么状态(比如机器人看到自己离目标还有多远),然后"选"一个动作(迈左脚还是迈右脚),环境因这个动作发生变化,并反馈一个奖励,智能体拿奖励去"更新策略"——也就是调整今后在类似状态下更可能选哪些动作。这个新策略又会影响下一回的状态,循环往复。
这里冒出一个所有学试错的主角都要面对的难题:探索还是利用?"利用"是说,既然我已知某招挺灵,就一直用它最稳;"探索"是说,我还得偶尔试试没把握的招,万一有更厉害的招没被发现呢。全程只利用,可能永远困在"还行"里,错过真正的最优解;全程只探索,又永远在瞎撞、拿不到分。好的学习节奏是前期多探索、慢慢把探索收拢到利用上,像人学走路先满地乱爬、站稳后才敢撒手跑。
举个生活里的对照:你常去的那家面馆挺合胃口(这是利用),但城市里可能藏着更好吃的店,只是你得愿意偶尔拐进没去过的巷子(这是探索)。只吃老面馆,你永远不知道更好吃的在哪儿;只乱探店,你又总在踩雷、饿着肚子。机器人面对的就是同一道选择题,而且它得用"分数"自己拿捏分寸:探索太多太慢、利用太多太死,找到一个平衡才长得最快。
那机器人靠什么判断"哪招更好"?这里有两个朴素概念。一个是策略:它就是一张"看到情况 A 就做动作 B"的本能反应表,好策略就是长期下来平均能拿更多奖励的那张表。另一个是价值函数:它给每个状态或每个动作估一个"身价"——不是看眼前这一下得几分,而是看从这一刻往后接着走,总共能捞到多少分。打个比方,下棋时吃对方一个子眼前加分,但真正懂棋的人看的是"这步之后整盘胜算涨了多少"。强化学习就是让机器人同时打磨这两样:把策略调得越来越聪明,把每个局面的价值估得越来越准。
举个最朴素的例子帮你看清这个循环:把机器人放进一个方格迷宫,终点藏着一块"发光奖励点",中途有些格子是坑、踩到就扣分。它一开始乱走,撞几次坑就学到"那个格子别去";某次偶然绕过障碍吃到奖励,它就把"从起点往右再往下"这条路的价值估高。多试几轮后,它不再瞎逛,而是稳稳抄近路直奔发光点——这就是策略和价值一起被"试"出来的结果。
值得特别提醒的是:奖励常常是随机的。同一招在相似情形下,有时环境给正分、有时给零分,并不是每次都一模一样。所以机器人不能拿"某一次"的结果当真理,它得看"长期平均"——这恰好又绕回我们在数学系列第 4 篇《概率与统计:测量到底在赌什么》里聊过的想法:单次测量有波动,真正该信的是期望、是反复试出来的平均趋势。机器人学的是"期望上更划算"的策略,而不是"某一次碰巧得分"的巧合。把这点想通,强化学习里很多看似玄乎的设计就都有了落点。
还有一点直觉很重要:机器人看重的不是眼前这一下的分数,而是"往后还能累计多少"。就像下棋,宁可眼下不吃子也要占个好位置,因为它估得到后面能赢更多。所以好策略常是"先忍一步、后赚大的",而不是"每步都贪最显眼的分"。强化学习里常说的"折扣",其实就是这个意思——离得越远的奖励,分量稍微打点折,但远处的好局依然值得现在先忍着。
当然,试错也不是万能药。真实机器人每试一次都耗时、耗电、还可能摔坏零件,没法像游戏里那样无限重开;而且如果奖励设计得不好——比如只奖励"走得远"却没奖励"别撞墙"——机器人可能长出些滑稽的歪招。所以工程上常先在仿真里海量试错,再把学到的策略搬到真机,再用前一篇讲的运动控制去把动作执行得又稳又准。
说到底,强化学习补上了具身智能里最关键的一块:目标与策略不是天上掉下来的,而是从"试—得分—改"的循环里一点点长出来的。它和运动控制是搭档——控制负责把选好的动作漂亮地做出来,强化学习负责决定该选什么动作、往哪个方向追。
下一回,我们进入第 17 篇《模仿学习:照着人做》。自己摸索虽好,可效率太慢:要让机器人叠衣服、端杯子,光靠摔几百次太奢侈。那有没有更省事的办法——直接"抄"高手的示范?这一篇就讲,人做一遍、录下来,机器人怎么从这段示范里提炼出自己的策略,以及它和本篇"自己试"的思路如何互补、又各自有什么短板。
读后小测
3 句话复述 强化学习让机器人待在环境里自己试动作、拿奖励、再回头改策略,没人给标准答案。它要平衡"探索新招"和"利用老招",靠长期平均奖励挑出好策略、估准每个局面的价值。奖励有随机性,所以机器人信的是期望而非单次结果,这点和数学系列第 4 篇讲的概率思想一脉相承。
1 件动手小事 打开任意一款有"吃豆人"或"贪吃蛇"之类的小游戏,先故意乱按十次只求存活,再刻意只重复你觉得最稳的一招,体会一下"瞎探索"和"死用老办法"各自卡在哪;然后想想:要是给每次吃到东西记一分、撞墙扣一分,你该怎么调自己的按键策略才最划算?