永远不要再忽略强化训练。

哈Ha! 我将为您呈现由Michel Kana博士撰写的文章“永远不要忽略强化学习”。

与老师一起学习和没有老师一起学习并不是全部。 每个人都知道。 从OpenAI Gym开始。

图片

您要击败世界象棋冠军,西洋双陆棋还是走?

有一种方法可以使您做到这一点-强化训练。

什么是强化学习?


强化学习是指学习如何在环境中做出一致的决定,并获得每个动作所能获得的最大奖励。

他没有老师,只有来自环境的奖励信号。 时间很重要,动作会影响后续数据。 这些条件给有或没有老师的学习带来了困难。

图片

在下面的示例中,鼠标尝试找到尽可能多的食物,并在可能的情况下避免电击。

图片

鼠标很勇敢,可以很轻松地到达有很多奶酪的地方。 总比站着不收任何东西要好。

鼠标不想在每种特定情况下做出最佳决定。 这将需要她付出大量的精神开支,而且这不是普遍的。

强化学习提供了一些神奇的方法,使我们的鼠标能够学习如何避免电击并获得尽可能多的食物。

鼠标是代理。 环境是一个迷宫,墙壁,奶酪和电击枪。 鼠标可以向左,向右,向上,向下移动-这些是动作

图片

老鼠想要奶酪,而不是电击。 奶酪是一种奖励 。 鼠标可以检查环境-这些是观察结果

强化冰训练


让我们将鼠标放在迷宫中,然后移至冰上。 “冬天来了。 当您突然将飞盘扔到湖中时,您和您的朋友在公园里扔飞盘。 基本上,湖中的水被冻结了,但是冰融化了一些孔。 ( 来源

图片

“如果您踩到其中一个洞,您将掉入冰水中。 此外,世界上飞盘的短缺非常严重,因此,您必须在湖边闲逛并寻找驱动器。”

在类似情况下您感觉如何?


这是强化学习的挑战。 该代理控制角色在网格世界中的移动。 有些网格图块是可通过的,而另一些则导致角色掉入水中。 代理因找到通向目标的可行路径而获得奖励。

我们可以使用OpenAI Gym (一种用于开发和比较具有增强功能的学习算法的工具包)来模拟这样的环境。 它提供了对一组标准化环境的访问,例如在我们的示例中,该环境称为Frozen Lake 。 这是可以用几行代码创建的文本媒体。

import gym from gym.envs.registration import register # load 4x4 environment if 'FrozenLakeNotSlippery-v0' in gym.envs.registry.env_specs: del gym.envs.registry.env_specs['FrozenLakeNotSlippery-v0'] register(id='FrozenLakeNotSlippery-v0', entry_point='gym.envs.toy_text:FrozenLakeEnv', kwargs={'map_name' : '4x4', 'is_slippery': False}, max_episode_steps=100, reward_threshold=0.8196 ) # load 16x16 environment if 'FrozenLake8x8NotSlippery-v0' in gym.envs.registry.env_specs: del gym.envs.registry.env_specs['FrozenLake8x8NotSlippery-v0'] register( id='FrozenLake8x8NotSlippery-v0', entry_point='gym.envs.toy_text:FrozenLakeEnv', kwargs={'map_name' : '8x8', 'is_slippery': False}, max_episode_steps=100, reward_threshold=0.8196 ) 

现在,我们需要一种结构,使我们能够系统地处理强化学习的问题。

马尔可夫决策过程


在我们的示例中,代理控制角色在网格世界上的移动,这种环境称为完全可观察的环境。

由于将来的图块不依赖于过去的图块,因此要考虑当前的图块
(我们正在处理一系列随机状态,即具有Markov属性 ),因此我们正在处理所谓的Markov过程

当前状态封装了决定下一步行动所需的一切;无需记住任何内容。

在每个下一个单元格(即情境)上,主体以一定的概率选择导致下一个单元格的行动(即情境),并且环境通过观察和奖励对主体做出响应。

我们在马尔可夫过程中添加奖励函数和折扣系数,得到所谓的马尔可夫奖励过程 。 添加一组动作,我们得到马尔可夫决策过程MDP )。 MDP的组件将在下面更详细地描述。

条件


状态是环境的一部分,是代理商在环境中特定时间点(湖网的状态)观察到的数值表示。 S是起点,G是目标,F是试剂可以站立的固态冰,H是试剂踩在上面时将掉入的孔。 在4 x 4网格环境中有16个状态,在8 x 8环境中有64个状态,下面我们将使用OpenAI Gym绘制4 x 4环境的示例。

 def view_states_frozen_lake(env = gym.make('FrozenLakeNotSlippery-v0')): print(env.observation_space) print() env.env.s=random.randint(0,env.observation_space.n-1) env.render() view_states_frozen_lake() 

动作


该代理有4个可能的动作,在环境中分别表示为0、1、2、3,分别表示左,右,下,上。

 def view_actions_frozen_lake(env = gym.make('FrozenLakeNotSlippery-v0')): print(env.action_space) print("Possible actions: [0..%a]" % (env.action_space.n-1)) view_actions_frozen_lake() 

图片

状态转换模型


状态转换模型描述了当代理基于其当前状态采取行动时环境的状态如何变化。

通常用转移概率描述模型,转移概率表示为大小为N x N的正方形转移矩阵,其中N是模型的状态数。 下图是此类天气条件矩阵的示例。

图片

在冰湖环境中,我们假设湖不滑。 如果我们做对,那么我们肯定会做对。 因此,所有概率都是相等的。

“左”将业务代表1的单元格向左移动,或者如果业务代表位于左边界,则将其留在相同位置。

“右”将其向右移动1个像元,如果座席在右边界,则将其保留在相同位置。

“上移”将业务代表1的单元格向上移动,或者如果业务代表位于上边界,则该代理商将保留在同一位置。

“向下”将代理1单元向下移动,或者如果它位于下边界,则它将留在同一位置。

报酬


在每个状态F中,代理收到0奖励;在状态H中,他收到-1,因为进入该状态后,代理死亡。 当代理商达到目标时,他会获得+1奖励。

由于两个模型(过渡模型和奖励模型)都是确定性函数,因此使环境具有确定性。 \

打折


折扣是一个可选参数,用于控制未来奖励的重要性。 它的取值范围是0到1。此参数的目的是防止总奖励达到无穷大。

当代理商更喜欢立即获得的奖励而不是将来可能收到的奖励时,折扣还可以模拟代理商的行为。

价值


财富的价值是预期的长期收入,但有折扣。

政策(π)


代理用来选择下一个操作的策略称为策略。 在所有可用的政策中,最佳政策是使事件期间收到或预期的报酬最大化。

集数


当代理出现在起始细胞上时开始发作,而当代理落入孔中或到达靶细胞时结束。

让我们形象化


在回顾了马尔可夫决策过程中涉及的所有概念之后,我们现在可以使用OpenAI Gym在16x16环境中对几个随机动作进行建模。 每次,代理都会选择一个随机动作并执行它。 系统计算奖励并显示环境的新状态。

 def simulate_frozen_lake(env = gym.make('FrozenLakeNotSlippery-v0'), nb_trials=10): rew_tot=0 obs= env.reset() env.render() for _ in range(nb_trials+1): action = env.action_space.sample() # select a random action obs, rew, done, info = env.step(action) # perform the action rew_tot = rew_tot + rew # calculate the total reward env.render() # display the environment print("Reward: %r" % rew_tot) # print the total reward simulate_frozen_lake(env = gym.make('FrozenLake8x8NotSlippery-v0')) 

图片

结论


在本文中,我们简要回顾了强化学习的基本概念。 我们的示例提供了OpenAI Gym工具包的介绍,该工具包使您可以轻松地在预先构建的环境中进行实验。

在下一部分中,我们将介绍如何设计和实施政策,使代理商能够采取一系列行动以实现目标并获得击败世界冠军的奖励。

谢谢您的关注。

Source: https://habr.com/ru/post/zh-CN475236/


All Articles