深度强化学习--Deep Q Network(using tensorflow)

本文介绍了深度强化学习中的Deep Q Network(DQN),它结合Q-learning和神经网络解决状态过多导致的存储问题。DQN的两大核心机制是Experience replay和Fixed Q-targets,前者通过记忆库实现经验复用,后者通过两个神经网络参数的冻结来避免过度相关。文章还详细讲述了DQN的实现过程,包括神经网络结构和TensorFlow的应用。
摘要由CSDN通过智能技术生成


前言

总结记录深度强化学习算法Deep Q Network
参考自莫凡python

在这里插入图片描述


一、什么是Q-learning

Q-Learning
α-学习效率 γ-衰减率 ε-贪婪度
r-环境所对应回报
s-状态
s_-下一状态
a-行为
Q(s,a)-Q表(某状态下采取某行为的价值)

ε:每次执行时,会有ε的概率选择Q表当中的最优项,1-ε的概率选择随机项(用于学习)。
γ:越高,效果越有远见,不会只看到近期的回报。

Q(s,a) += α[r + γQ(s_,a).max - Q(s,a)]
在这里插入图片描述

二、什么是Deep Q Network

之前传统的强化学习算法,比如:Q-learning,Sarsa等方法都是用表格的方式去存储每一个状态的state,和在这个state每个action所拥有的Q值。局限性在于如果实际问题中的state过多,计算机内存无法满足存储要求。
于是Deep Q Network将传统的强化学习算法神经网络结合.我们可以将状态和动作当成神经网络的输入, 然后经过神经网络分析后得到动作的 Q 值, 这样我们就没必要在表格中记录 Q 值, 而是直接使用神经网络生成 Q 值. 还有一种形式的是这样, 我们也能只输入状态值, 输出所有的动作值, 然后按照 Q learning 的原则, 直接选择拥有最大值的动作当做下一步要做的动作.

三、DQN的两大利器

在这里插入图片描述

1.Experience replay

Experience replay是指DQN可以建立记忆库用于存储之前学习过的一些经历,Q-learning是一种off-policy的算法,可以学习过去的或者是别人的经历。所以每次 DQN 更新的时候, 我们都可以随机抽取一些之前的经历进行学习. 随机抽取这种做法打乱了经历之间的相关性, 也使得神经网络更新更有效率.

2.Fixed Q-targets

Fixed Q-targets 也是一种打乱相关性的机理, 如果使用 fixed Q-targets, 我们就会在 DQN 中使用到两个结构相同但参数不同的神经网络, 预测 Q 估计 的神经网络具备最新的参数, 而预测 Q 现实 的神经网络使用的参数则是很久以前的.
Q估计神经网络参数是随着学习的进行不断更新的,而Q现实的参数是被冻结的,我们可以设定参数,固定在X次更新之后,将Q估计中的参数覆盖Q现实中的参数。

在这里插入图片描述

四、DQN算法

NULL
在Q-learning算法的基础上增加了以下特点:
记忆库 (用于重复学习)
神经网络计算 Q 值
暂时冻结 q_target 参数 (切断相关性)

五、DQN的实现(using tensorflow)

1.run_this.py

首先import所需模块

from maze_env import Maze
from RL_brain import DeepQNetwork

DQN与环境的交互

def run_maze():
    step = 0    # 用来控制什么时候学习
    for episode in range(300):
        # 初始化环境
        observation = env.reset()

        while True:
            # 刷新环境
            env.render()

            # DQN 根据观测值选择行为
            action = RL.choose_action(observation)

            # 环境根据行为给出下一个 state, reward, 是否结束本轮回合
            observation_, reward, done = env.step(action)

            # DQN 存储记忆(观测值,动作,回报,下一轮的观测值)
            RL.store_transition(observation, action, reward, observation_)

            # 控制学习起始时间和频率 (先累积一些记忆,填充记忆库,再开始学习)
            if (step > 200) and (step % 5 == 0):
                RL.learn()

            # 将下一个 state_ 变为 下次循环的 state
            observation = observation_

            # 如果终止, 就跳出循环
            if done:
                break
            step += 1   # 总步数

    # end of game
    print('game over')
    env.destroy()


if __name__ == "__main__":
    env = Maze()
    RL = DeepQNetwork(env.n_actions, env.n_features,
                      learning_rate=0.01,		#神经网络学习效率
                      reward_decay=0.9,		#回报的衰变(γ)
                      e_greedy=0.9,		#贪婪度
                      replace_target_iter=200,  # 每 200 步替换一次 target_net 的参数
                      memory_size=2000, # 记忆上限
                      # output_graph=True   # 是否输出 tensorboard 文件
                      )
    env.after(100, run_maze)
    env.mainloop()
    RL.plot_cost()  # 观看神经网络的误差曲线

2.RL_brain.py

1)DQN类的整体框架

class DeepQNetwork:
    # 建立两个结构相同参数不同的神经网络
    def _build_net(self):

    # 初始值
    def __init__(self):

    # 存储记忆
    def store_transition(self, s, a, r, s_):

    # 选行为
    def choose_action(self, observation):

    # 学习
    def learn(self):

    # 看看学习效果 
    def plot_cost(self):

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值