循环:观察、行动、获得奖励、重复
想象一下,你要教一个人骑自行车,却从不解释该怎么骑——你只是让他蹬车、看他摇晃,并在他多坚持一会儿时喊一声“好!”。试得多了,他的身体自然就摸索出了其余的诀窍。这正是强化学习(RL)的精神:与其一步步地给机器人写程序,不如让它从自身行动的后果中学习。
整个过程是一个不断重复的紧密循环。机器人先观察自己的处境(关节在哪里、身体倾倒得有多快),再通过向电机发送指令来行动,然后获得奖励——一个表示那一刻好坏的数字。接着它再次观察,循环继续转动。每一圈都是一次微小的实验。
在每个观察下决定采取哪个行动的,是控制策略——可以把它想成机器人的“反射”。一开始,这套策略是随机而笨拙的。奖励信号会慢慢重塑它:带来更高奖励的行动变得更可能被采用,其余的则逐渐淡出。
实例演练:四足机器人学走路
我们用一台四足机器人把这件事讲具体些——一台狗一般大小、正在尝试四足运动的机器。我们希望它能平稳地向前走而不摔倒。我们不会手工编写步态,而是让强化学习自己“长”出一种步态。前面提到的两样原料——奖励与策略——现在合到了一起。
一切都取决于奖励函数。我们对向前移动给予正奖励,对动作生硬或浪费能量给予小惩罚,对摔倒给予大惩罚。这一套配方被运用上百万次,便“教会”了行走——没有人去描述一步该怎么迈。
- 观察:把关节角度、身体倾角和速度读入策略。
- 行动:策略为全部十二个腿部关节输出目标力矩。
- 评分:奖励函数把此刻的前进量减去各项惩罚后加总。
- 更新:微调策略,让高奖励的行动更可能出现;然后重复。
起初,机器人会不停地扑倒、绊跤——这没关系。摔跤就是数据。整个训练过程被一种核心张力所塑造:探索与利用的权衡。机器人既要不断尝试新奇的动作(探索)以发现更好的做法,又要依靠已经奏效的方式(利用)。任何一端偏得太多,学习都会停滞。
课程式学习:先易后难,逐步加码
这里有个陷阱。如果你一上来就把未经训练的机器人高速扔到崎岖地形上,它每一次都会摔倒。奖励永远糟糕透顶,因此无从学起——每次尝试看起来都一样烂,策略始终找不到立足点。训练还没开始就停滞了。
解决办法是课程式学习:像一位好教练那样,按由易到难的顺序来教。先在平地上以较慢的目标速度起步,这样即使是笨拙的尝试,偶尔也能挣到一点奖励。等机器人站稳了,再温和地提高难度——更快的速度,然后是斜坡,再然后是碎石。每一阶段都能从上一阶段够得着,于是策略身边总有一个“稍微更好”的动作可抓。
这和我们先教孩子加法、再教代数是同一个道理。技能是层层叠加的。一台先在平地上掌握了平衡的机器人,会把这份平衡带进更崎岖的世界——地面一变就得重新学怎么站稳的窘境,它不会再遇到。
为什么不直接在真机上学?
到这里,一个显而易见的问题浮现出来:既然试错管用,何不就在真机上跑那上百万次尝试?老实说,在真实硬件上纯靠试错,既慢得让人心疼,又确实很危险。
慢,是因为真实世界只能以“每秒一秒”的速度运行——几百万次尝试可能要花上数月。危险,是因为正在学习的机器人会“故意”失败:它会摔倒、猛撞自己的关节、扯拽线缆。真实电机会过热,齿轮会磨损,而早期的策略可能猛地一窜,损坏机器人或伤到旁人。物理过程没法快进,而坏掉的硬件很贵。
正因如此,如今大多数机器人强化学习都在机器人仿真器里进行——那是一款物理“电子游戏”,上千个虚拟机器人可以并行地跌跌撞撞,比真实时间还快,且没有任何零件会损坏。难处在于,仿真器永远不是现实的完美复制,所以一套在仿真里走得漂漂亮亮的策略,到了真机上可能踉踉跄跄。弥合这道鸿沟,正是从仿真到现实的迁移要解决的问题,也是下一篇指南的主题。