基于模型与无模型强化学习
当机器人通过反复试错来学习如何行动时,大致有两种风格,区别在于它是否在脑中建立起一幅“世界会如何回应我动作”的图景。无模型的机器人完全跳过这幅图景:它只管尝试各种动作,看看结果是好是坏,再一点点把自己的习惯往“能换来更多奖励”的方向挪——就像一个孩子学骑自行车,纯靠摇晃、摔倒、再调整,从不去想其中的物理原理。基于模型的机器人则先学出一个小小的内部模拟器——一个能预测“如果我这样做、那样做会发生什么”的模型——然后用这个模型预先规划、挑出好的动作,就像棋手在落子之前先在脑中推演好几步。
两种风格都在权衡同样的两件事:它需要多少真实世界里的练习,以及它在行动时要做多少计算。无模型学习简单而稳健,但对经验的胃口可能大得吓人——机器人也许要尝试上百万次,这在飞快的模拟器里没问题,可放到会磨损、会损坏的真实硬件上,就既痛苦又缓慢。基于模型的学习通常要省样本得多,因为每一点经验同时也在喂养那个内部模型,而这个模型随后可以被几乎免费地反复重放、反复规划许多遍;它的弱点是:只要学到的模型有哪怕一点点偏差,机器人就可能自信满满地规划出一套漂亮动作,结果在现实中失败。
实际中,机器人学并不在两者间二选一,而是把它们糅合起来。一种常见做法是:先用有限的真实数据学出一个粗略的世界模型,用它来做规划或预训练一个策略,然后再用少量无模型的试错来打磨这个策略,让它不再依赖模型犯的错。弄清一套系统更偏向哪种风格,能帮你看懂它为什么会有那样的表现:无模型系统突然失败,往往只是因为它从没见过那个情境;而基于模型的系统失败,则多半是被它想象出来的世界里的某个缺陷给误导了。
要教一只机械臂翻煎饼:无模型的做法就是不停地翻,把漂亮的落盘奖励出来,直到这套动作定型;基于模型的做法则先学会煎饼大致会怎么飞,再规划出那个应该让它正好落盘的手腕一抖。
同一个目标,两条路径:要么盲目地反复练,要么先学会世界如何反应、再去规划。
这两个标签描述的是一套学习系统“如何搭建”,而不是它“是否成功”;许多强大的机器人系统都是混合式的——既学一个模型,又仍然依靠大量直接的试错。