强化学习(3)

作者: zidea | 来源:发表于2019-09-18 20:50 被阅读0次

​我们用 Q learning 来解决一个实际问题。

搭建环境

我们都知道环境作为强化学习一部分是十分重要部分,可以理解为深度学习的中数据。但是自己编环境是一件很耗时间费力的工作。为了节约我们很多时间让我们更好地专注于训练模型,可以通过第三方库来实现环境的搭建。OpenAI gym 就是这样一个库。提供了很多优秀的模拟环境. 我们的各种 RL 算法都能使用这些环境。

我们都知道环境作为强化学习一部分是十分重要部分,可以理解为深度学习的中数据。但是自己编环境是一件很耗时间费力的工作。为了节约我们很多时间让我们更好地专注于训练模型,可以通过第三方库来实现环境的搭建。OpenAI gym 就是这样一个库。提供了很多优秀的模拟环境. 我们的各种 RL 算法都能使用这些环境。

我们都知道环境作为强化学习一部分是十分重要部分,可以理解为深度学习的中数据。但是自己编环境是一件很耗时间费力的工作。为了节约我们很多时间让我们更好地专注于训练模型,可以通过第三方库来实现环境的搭建。OpenAI gym 就是这样一个库。提供了很多优秀的模拟环境. 我们的各种 RL 算法都能使用这些环境。

env = gym.make("MountainCar-v0")
env.reset()

首先将环境恢复到初始设置,然后将表示一个 episode 结束标识 done 设置 False。

while not done:
image

gym 提供的环境比较直观,一辆小车需要通过强化学习到达右侧小山山顶的小旗位置。左侧小山的斜坡应该是助力的作用。

while not done:

输出结果应是小车 state,小车 state 用小车位置和速度表示。我们根据之前学习内容了解 reward 是关于 state 函数。设计 Q 表面也是按状态划分的,Q 输入是 state 和 action 输出是 Value。

[-0.38738474 -0.0090797 ]

不过这里 state 过多,我们需要重新划分一下 state 来设计一个合理大小的 Q 表。我们需要离散地选取值。

print(env.observation_space.high)

我们输出一下 agent 观察环境的位置和速度的范围。action 取值范围 0 ,1,2。

[0.6  0.07]

我们看一看位置为 0.6 - (-1.2) = 1.8 ,而对于速度为 0.07 - (-0.07) = 0.14 。

DISCRETE_OS_SIZE = [20] * len(env.observation_space.high)

这里 20 我们根据经验得到,这里有点投机取巧。

DISCRETE_OS_SIZE = [20] * len(env.observation_space.high)

输出也就是将取值范围均匀划分 20 区域,然后对于 20 作为一个离散划分为 400 中 state

[0.09  0.007]
import numpy as np

我们看一下基本运算,这段代码可以完全忽略,仅是帮助你理解

设计 Q table 我们我先输出一下每个状态所对应的 reward

print(reward,new_state)

所有 state 都是 -1 ,仅当小车到达小旗位置时候 state 得到 reward 为 0

(-1.0, array([-0.19956175, -0.00089178]))
q_table = np.random.uniform(low=-2,high=0,size=(DISCRETE_OS_SIZE + [env.action_space.n]))

我们 20 * 20 个 3 表示每一个,为什么是 20 * 20 维度也就是分别是速度和位置两个维度,两个维度确定出 400 state 每一个 state 有 3 速度值。t

(20, 20, 3)
def get_discrete_state(state):
discrete_state = get_discrete_state(env.reset())

输出一个 state 为 (8,10) 然后在我们之前创建好正态分布位置的值。

(8, 10)
LEARNING_RATE = 0.1

表示小车学习速率,值越大表示小车学习越快。

#gamma

discount 就是我们之前提及到 gamma 值表示未来的 value 对当前 value 的影响。也就是我们对未来的回报的在意程度。

episode 我们一共要进行 25000 次试验,看一看多少 episode 可以得到我们想要结果。

SHOW_EVERY 因为渲染成本比较高,我们仅每 2000 次进行一次渲染。

随机生产一个 Q table 对于每一个可能 state 的 reward 取值范围 -2 到 1 这是因为只有小旗位置的 reward 为 0 其他都是 -1,这一点之前都已经证明过了。

q_table = np.random.uniform(low=-2,high=0,size=(DISCRETE_OS_SIZE + [env.action_space.n]))
new_state[0] > env.goal_position:

当前 state 状态位置值为 0 时候表示小车已经到底顶点,所以 q_table 值为 0

discrete_state = new_discrete_state

更新当前 state 为新的 new_state,也就是将当前 state 更新下一个 state 然后进入下一轮。

def get_discrete_state(state):
action = np.argmax(q_table[discrete_state])

根据 Q table 的 action 找到对应 value 最大 action 作为该 state 下采取 action。

new_discrete_state = get_discrete_state(new_state)

然后根据 action 我们将得到下一个 state 为 new_state 并且对其进行标准化为 new_discrete_state

 max_future_q = np.max(q_table[new_discrete_state])

这段代码也我们之前公式的体现,也就是 Q learning 的核心。max_future_q 下一个 state 最大估计值,然后 current_q 为当前的值,我们用当前 current_q 值 + (在state得到 reward 加上下一个 state 估计值)这就是 Q learning 公式体现。

import gym

到 2000 时候,强化学习就已经取得到达小旗位置。

image

相关文章

  • 强化学习(3)

    ​我们用 Q learning 来解决一个实际问题。 搭建环境 我们都知道环境作为强化学习一部分是十分重要部分,可...

  • 强化学习在聊天机器人中的应用

    1.深度强化学习在面向任务的对话管理中的应用 2.李纪为:用于对话生成的深度强化学习 3.基于深度强化学习打造聊天...

  • 强化学习笔记(1)--概述

    目录: 强化学习问题 强化学习的组成 智能体的组成 强化学习分类 强化学习一些重要概念 1. 强化学习问题 面向智...

  • 基础

    什么是强化学习? 强化学习是机器学习的一个分支。 机器学习分为监督学习,无监督学习,强化学习。 强化学习简单来说,...

  • 深度强化学习算法SAC:让机器人完成任务只需几个小时!

    全文共1746字,预计学习时长3分钟 在AI领域,深度强化学习(DRL)是个时髦的热词。 深度强化学习使得机器人能...

  • 强化学习随笔(3)

    时刻只与 时刻有关,在这个时刻,在和前面之间 下一个时刻状态只有与这一个时刻状态和行为有关 马尔可夫决策过程 马...

  • 强化学习基础知识详解

    强化学习(Reinforcement Learning) 强化学习基本概念 强化学习四要素:状态(state)、动...

  • 强化学习基础篇(一)强化学习入门

    强化学习基础篇(一)强化学习入门 本文主要基于David Silver的强化学习基础课程进行总结回归梳理强化学习的...

  • Stable-Baselines3

    Stable-Baselines3 Docs - 可靠的强化学习实现¶[https://stable-baseli...

  • 强化学习+关系抽取论文阅读

    2019 层次强化学习做关系抽取 ---12018 强化学习做关系抽取 ---22018 深度强化学习做关系抽...

网友评论

    本文标题:强化学习(3)

    本文链接:https://www.haomeiwen.com/subject/ziakuctx.html