提交 78341a3d 编写于 作者: F friedhelm

5-9

上级 fc0d3de3
......@@ -13,13 +13,61 @@
a.这个点可以是控制一个机械狗的程序。在此例中,环境就是真实的世界,这个点通过许多的传感器例如摄像机或者传感器来观察,它可以通过给电机驱动信号来行动。它可以被编程设置为如果到达了目的地就得到正奖励,如果浪费时间,或者走错方向,或摔倒了就得到负奖励。
b.这个点可以是控制MS.Pac-Man的程序。在此例中,环境是Atari游戏的仿真,行为是9个操纵杆位(上下左右中间等等),观察是屏幕,回报就是游戏点数。
c.相似地,这个点也可以是棋盘游戏的程序例如:GO游戏。
d.
e.
d.这个点也可以不用去控制一个实体(或虚拟的)去移动。例如它可以是一个智能程序,当它调整到目标温度以节能时会得到正奖励,当人们需要自己去调节温度时它会得到负奖励,所以这个点必须学会预见人们的需要。
e.这个点也可以去观测股票市场价格以实时决定买卖。奖励的依据显然为挣钱或者赔钱。
![图16-1](../images/chapter_16/16-1.png)
其实没有正奖励也是可以的,例如一个点在迷宫内移动,它每分每秒都得到一个负奖励,所以它要尽可能快的找到出口!还有很多适合强化学习的领域,例如自动驾驶汽车,在网页上放广告,或者控制一个图像分类系统让它明白它应该关注于什么。
## 策略搜索
被这个点使用去觉得它行为的算法叫做策略。例如,策略可以是一个把观测当输入,行为当做输出的神经网络。
![图16-2](../images/chapter_16/16-2.png)
这个策略可以是你能想到的任何算法,它甚至可以不被确定。举个例子,例如,考虑一个真空吸尘器,它的奖励是在30分钟内捡起的灰尘数量。它的策略可以是每秒以概率P向前移动,或者以概率1-P随机地向左或向右旋转。旋转角度将是-R和+R之间的随机角度,因为该策略涉及一些随机性,所以称为随机策略。机器人将有一个不稳定的轨迹,它保证它最终会到达任何可以到达的地方,并捡起所有的灰尘。问题是:30分钟后它会捡起多少灰尘?
你怎么训练这样的机器人?你可以调整两个策略参数:概率P和角度范围R。一个想法是这些参数尝试许多不同的值,并选择执行最佳的组合(见图16-3)。这是一个策略搜索的例子,在这种情况下使用野蛮的方法。然而,当策略空间太大(通常情况下),以这样的方式找到一组好的参数就像在一个巨大的草堆中寻找一根针。
另一种搜寻策略空间的方法是遗传算法。例如你可以随机创造一个包含100个策略的第一代基因,随后杀死80个坏策略,随后让20个幸存策略繁衍4代。一个后代只是它父辈基因的复制品加上一些随机变异。幸存的策略加上他们的后代共同构成了第二代。你可以继续以这种方式迭代代,直到找到一个好的策略。
![图16-3](../images/chapter_16/16-3.png)
另一种方法是使用优化技术,通过评估关于策略参数的奖励的梯度,然后通过跟随梯度向更高的奖励(梯度上升)调整这些参数。这种方法被称为策略梯度(PG),我们将在本章后面详细讨论。例如,回到真空吸尘器机器人,你可以稍微增加P并评估这是否增加了机器人在30分钟内拾起的灰尘的量;如果它相对应增加P,或者减少P。我们将使用Tensorflow来实现PG算法,但是在这之前我们需要为这个点创造一个生存的环境,所以现在是介绍OpenAI的时候了。
## OpenAI的介绍
强化学习的一个挑战是,为了训练这个点,首先需要有一个工作环境。如果你想设计一个可以学习Atari游戏的程序,你需要一个Atari游戏模拟器。如果你想设计一个步行机器人,那么环境就是真实的世界,你可以直接在这个环境中训练你的机器人,但是这有其局限性:如果机器人从悬崖上掉下来,你不能仅仅点击“撤消”。你也不能加快时间;增加更多的计算能力不会让机器人移动得更快。一般来说,同时训练1000个机器人是非常昂贵的。简而言之,训练在现实世界中是困难和缓慢的,所以你通常需要一个模拟环境,至少需要引导训练。
OpenAI gym是一个工具包,它提供各种各样的模拟环境(Atari游戏,棋盘游戏,2D和3D物理模拟等等),所以你可以训练,比较,或开发新的RL算法。
让我们安装OpenAI gym。可通过pip安装:
$ pip install --upgrade gym
接下来打开Python shell或Jupyter笔记本创建您的第一个环境:
```python
>>> import gym
>>> env = gym.make("CartPole-v0")
[2016-10-14 16:03:23,199] Making new env: MsPacman-v0
>>> obs = env.reset()
>>> obs array([-0.03799846, -0.03288115, 0.02337094, 0.00720711])
>>> env.render()
```
![图16-4](../images/chapter_16/16-4.png)
![图16-1](../images/chapter_16/16-1.png)
![图16-1](../images/chapter_16/16-1.png)
![图16-1](../images/chapter_16/16-1.png)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册