今天我们来用深度强化学习算法 deep Q-learning 玩 CartPole 游戏。
强化学习是机器学习的一个重要分支,通过强化学习我们可以创建一个 agent,让它与环境不断地互动,不断试错,自主地从中学习到知识,进而做出决策。
如图所示,agent
收到环境的状态 state
,做出行动 action
,行动后会得到一个反馈,反馈包括奖励 reward
和环境的下一个状态 next_state
。
这样一轮操作下来,agent 便可以积累经验,并且从中训练,学习该如何根据 state 选择合适的 action 来获得较好的 reward 以获得游戏的最终胜利。
推荐阅读:一文了解强化学习
在强化学习中有一个著名算法 Q-learning:
推荐阅读:什么是 Q-learning
2013 年,Google DeepMind 发表了论文 Playing Atari with Deep Reinforcement Learning,开辟了一个新的领域,深度学习和强化学习的结合,即深度强化学习。 其中介绍了 Deep Q Network,这个深度强化学习网络可以让 agent 仅仅通过观察屏幕就能学会玩游戏,不需要知道关于这个游戏的任何信息。
在 Q-Learning 算法中,是通过一个 Q 函数,来估计对一个状态采取一个行动后所能得到的奖励 Q(s,a),
在 Deep Q Network 中,是用一个神经网络来估计这个奖励。
接下来我们用一个很简单的游戏来看 Deep Q Network 是如何应用的。
CartPole 这个游戏的目标是要使小车上面的杆保持平衡,
state 包含四个信息:小车的位置,车速,杆的角度,杆尖端的速度
agent 的行动 action 包括两种:向左推车,向右推车
- 在每轮游戏开始时,环境有一个初始的状态,
- agent 根据状态采取一个行动
action = agent.act(state)
, - 这个 action 使得游戏进入下一个状态
next_state
,并且拿到了奖励reward,next_state, reward, done, _ = env.step(action)
, - 然后 agent 会将之前的经验记录下来
agent.remember(state, action, reward, next_state, done)
, - 当经验积累到一定程度后,agent 就从经验中学习改进
agent.replay(batch_size)
, - 如果游戏结束了就打印一下所得分数,
没有结束就更新一下状态后继续游戏state = next_state
if __name__ == "__main__":
#