看完本篇文章,你将学到:
- 什么是强化学习;
- 如何将您的任务构建为 RL 问题;
- 强化学习与监督/无监督学习的关系;
- 使用 OpenAI Gym 通过简单的策略运行 RL 演示。
我们如何定义强化学习?
强化学习是机器学习的一个子领域,它教会代理如何在特定环境中从其行动空间中选择行动,以便随着时间的推移最大化奖励。
强化学习有四个基本要素:
- 代理人。 您训练的程序,目的是完成您指定的工作。
- 环境。 代理执行操作的真实或虚拟世界。
- 行动。 智能体做出的动作,它会导致环境中的状态发生变化。
- 奖励。 对动作的评价,可以是正面的也可以是负面的。
强化学习任务建模的真实示例
对强化学习任务建模的第一步是确定 4 个元素是什么,如上所述。一旦定义了每个元素,您就可以将您的任务映射到它们。
以下是一些帮助您培养 RL 直觉的示例。
确定广告在网页上的位置
代理: 决定一个页面适合多少广告的程序。
环境: 网页。
操作: 以下三种之一:(1) 在页面上投放另一个广告;(2) 从页面中删除广告;(3)既不添加也不删除。
奖励: 收入增加时为正;当收入下降时为负。
在这种情况下,代理观察环境并获取其当前状态。状态可以是网页上有多少广告,以及是否还有更多空间。
然后代理选择在每一步采取三个动作中的哪一个。如果编程为在收入增加时获得正奖励,而在收入下降时获得负奖励,则它可以制定有效的政策。
创建个性化学习系统
代理: 决定在线学习目录中接下来显示什么的程序。
环境: 学习系统。
行动: 播放新班级视频和广告。
奖励: 如果用户选择点击呈现的课程视频则为正;如果用户选择点击广告,则获得更大的积极奖励;如果用户离开,则为负。
该程序可以使个性化的班级系统更有价值。用户可以从更有效的学习中获益,系统可以通过更有效的广告获益。
控制步行机器人
Agent: 控制步行机器人的程序。
环境: 现实世界。
动作: 四分之一的动作(1)向前;(2)落后;(还剩3个; (4) 正确。
奖励: 接近目标目的地时为正;当它浪费时间、走错方向或跌倒时,它是消极的。
在最后一个示例中,机器人可以通过根据收到的奖励调整其策略来自学更有效地移动。
有监督、无监督和强化学习:有什么区别?
差异#1:静态与动态
有监督和无监督学习的目标是搜索和学习训练数据中的模式,这是非常静态的。另一方面,强化学习是关于制定一项政策,告诉代理在每一步选择哪个行动——使其更具动态性。
差异#2:没有明确的正确答案
在监督学习中,正确答案由训练数据给出。在强化学习中,并没有明确给出正确答案:相反,代理需要通过反复试验来学习。唯一的参考是它在采取行动后获得的奖励,它告诉代理它何时取得进展或何时失败。
差异 #3:RL 需要探索
强化学习代理需要在探索环境、寻找获得奖励的新方法以及利用它已经发现的奖励来源之间找到适当的平衡。相比之下,有监督和无监督学习系统直接从训练数据中获取答案,而无需探索其他答案。
差异 #4:RL 是一个多决策过程
强化学习是一个多决策过程:它通过完成特定工作所需的时间形成决策链。相反,监督学习是一个单一的决策过程:一个实例,一个预测。
OpenAI Gym 简介
OpenAI Gym是一个用于开发和比较强化学习算法的工具包。它支持从走路到玩Pong或Pinball等游戏的一切教学代理。
OpenAI Gym 为我们提供了游戏环境,我们的程序可以在其中采取行动。每个环境都有一个初始状态。在您的代理采取操作后,状态会更新。
当您的代理观察到更改时,它会使用新状态及其策略来决定下一步采取什么行动。该政策是关键:它是您的计划继续开展工作的基本要素。您的代理学习的策略越好,您从中获得的性能就越好。
这是来自 OpenAI 的游戏 CartPole 的演示。我们可以看到第六行的策略:智能体可以从它的动作空间中随机采取一个动作。
进口健身房env = gym.make("CartPole-v1")
observation = env.reset()
for _ in range (1000):
env.render()
action = env.action_space.sample() # 你的代理在这里(这采取随机行动)
observation, reward, done, info = env.step(action)
如果完成:
observation = env.reset()
env.close()
第二行创建了一个 CartPole 环境。
第三行初始化状态参数。
第 5 行显示游戏。
第 6 行提示具有“随机”策略的操作。
在第 7 行,执行了操作,环境给出了四个返回值:
- 观察: 游戏状态参数。不同的游戏返回不同的参数。在 CartPole 中,总共有四个。第二个参数是杆的角度。
- 奖励: 执行此操作后获得的分数。
- 完成: 游戏结束或未结束。
- 信息: 额外的调试信息。这可能是作弊。
第8行表示游戏是否结束;重新启动它。
强化学习演示
可以按照您喜欢的任何方式对该策略进行编程。它可以基于 if-else 规则或神经网络。这是一个简单的演示,其中包含 CartPole 游戏的最简单策略。
进口健身房def policy( observation ):
angle = observation [2]
如果角度 < 0:
返回0
否则:
返回1env = gym.make("CartPole-v1")
observation = env.reset()
for _ in range (1000):
env.render()
action = policy(observation)
observation, reward, done, info = env.step(行动)
如果完成:
observation = env.reset()
env.close()
当然,policy函数内容可以换成神经网络,以观察参数为输入,action为输出。
结论:
- 强化学习是机器学习的一个子领域,在几个方面与监督/无监督学习平行但不同。
- 因为它需要模拟数据和环境,所以很难应用到实际的业务场景中。
- 然而,它的学习过程对于顺序决策场景来说是自然的,这使得 RL 技术无疑是有前途的。