1.6 强化学习
假设一个没有孩子的单身汉,临时受托去照顾朋友年仅3岁的女儿。他不知道这个小姑娘喜欢吃什么。
第一天晚上,他想给小姑娘做一些比较简单的食物,最终决定做黄油意大利面。小姑娘很喜欢!但是吃了一周的黄油意大利面之后,他们都吃腻了,于是男人往面里加了一些奶酪。小姑娘也很喜欢!最终,他们吃腻了黄油意大利面和奶酪意大利面,于是在某天晚上,他尝试做了香蒜沙司面,但小姑娘一口都不愿意吃。于是,他又重新做起了意大利面——这次使用了纯番茄酱,但小姑娘还是不吃。试过了各种各样的意大利面,他开始尝试用酸奶油来为她做一份烤土豆。
就这样,我们的“新厨师”尝试了各种各样的菜谱,一种又一种地加以改变,试图开发一份小姑娘会喜欢的菜单,他得到的唯一反馈是:要么小姑娘吃,要么小姑娘不吃。
这种学习方法称为强化学习(参见“参考资料”的[Champandard02]和[Sutton17])。
我们可以将厨师重新命名为智能体(agent),将小姑娘重新命名为环境,这样我们就可以使用更加通用的术语来描述上述烹饪故事。智能体可以做决策和采取行动(是故事中的“厨师”),而环境则是宇宙中除智能体外的一切事物(是故事中的小姑娘)。环境在每次行动之后都会给智能体一个反馈(feedback)(或者一个奖励信号),用于描述这个行动产生的结果有多好。在对操作进行评估的同时,这一反馈还会告诉智能体环境是否发生了更改。如果发生了更改,那么环境现在是什么样子。这种抽象描述的价值在于,我们可以描绘出许多智能体和环境的组合,如图1.20所示。
图1.20 在强化学习中,我们想象一个智能体(可以做决策和采取行动)和一个环境(宇宙中除了智能体外的一切事物),智能体采取行动后,环境以奖励信号的形式发送反馈
强化学习不同于监督学习,因为数据没有标签,虽然从错误中学习这一总体思路是相同的,但是作用的机制不同。
相比之下,在监督学习中,由系统生成一个结果(通常是一个类别或一个预测值),然后我们将其与所提供的正确结果进行比较;而在强化学习中,是没有正确结果的,因为数据没有标签,而是通过反馈来告诉我们做得有多好。这种反馈可能只是少许信息,告诉我们刚刚完成的行动是“好”还是“坏”;也可能会深入、细致地用所有可能进行的描述方式来告诉我们刚刚完成的行动所导致的环境变化,包括任何后续的变化。如何用最有效的方式来利用反馈是强化学习算法的核心。
比如,自动驾驶的汽车可能是一个智能体,而环境则是由它行驶的街道上的其他人组成的。汽车通过观察行驶过程中发生的事情来进行学习,并且更倾向于学习那些遵守法律并保护每个人安全的行为。再如,舞蹈俱乐部的DJ就是智能体,而喜欢或不喜欢DJ播放的音乐的舞者就是环境。
本质上,对于任何给定的智能体,环境都是宇宙中除智能体外的其他一切事物。因此,每个智能体的环境都是独一无二的,就像在多人游戏(或其他活动)中,每个玩家所看到的世界都是由他们自己(智能体)、其他所有人和事物(环境)组成的,而每个玩家都是他们自己的智能体,同时也是其他人环境中的一部分。
在强化学习中,我们会在一个环境中创建智能体,然后让这个智能体通过尝试各种行动并从环境中得到反馈来学习要做什么。这里可能存在一个目标状态(如进球得分,抑或找到隐藏的宝藏),也可能我们的目标只是达到一个成功、稳定的状态(例如,俱乐部里开心的舞者或是车辆在城市街道上自动驾驶)。
总体思路是这样的:智能体先采取一个行动,环境接纳了这个行动并且通常会做出相应的改变来响应这个行动;然后环境会向智能体发送一个奖励信号,告诉它这个操作有多好或有多坏(或者没有影响)。
奖励信号通常只是一个数字,越大的正数代表这一行为越好,而越小的负数则可以被视为惩罚。
与监督学习算法不同的是,奖励信号不是一个标签,也不是一个指向特定“正确答案”的指针。我们不如说它只是一个测量值,用于度量行为如何利用某个标准来改变环境和智能体本身,这个标准才是我们所关心的。