强化学习学习总结(四)——DQN

本文介绍了DQN算法,通过神经网络解决维度灾难问题,利用经验回放缓冲区进行重复学习,采用双网络结构冻结目标网络参数,是Q学习的扩展。文章详细阐述了算法更新过程、神经网络的应用以及思维决策的各个步骤。
摘要由CSDN通过智能技术生成

一、def

        如果我们的state与action很多,就如打砖块游戏,每个时间不同的砖块排列跟剩余都是不同的state,就会导致维度灾难。使用神经网络来 估算 这个 state 的值, 这样就不需要一张表了.

更新方式

二、算法更新

1、初始化replay memory D 容量为N 
2、用一个深度神经网络作为Q值网络,初始化权重参数 
3、设定游戏片段总数M 
4、初始化网络输入,大小为84*84*4,并且计算网络输出 
5、以概率ϵ随机选择动作at或者通过网络输出的Q(max)值选择动作at 
6、得到执行at后的奖励rt和下一个网络的输入 
7、根据当前的值计算下一时刻网络的输出 
8、将四个参数作为此刻的状态一起存入到D中(D中存放着N个时刻的状态) 
9、随机从D中取出minibatch个状态 (随即采样) 
10、计算每一个状态的目标值(通过执行at后的reward来更新Q值作为目标值) 
11、通过SGD更新weight

 

整个算法乍看起来很复杂, 不过我们拆分一下, 就变简单了. 也就是个 Q learning 主框架上加了些装饰.

这些装饰包括:

  • 记忆库 (用于重复学习)
  • 神经网络计算 Q 值
  • 暂时冻结 q_target (现实)参数 (切断相关性)
rom maze_env import Maze
from RL_brain import DeepQNetwork

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

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

            # action
            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 文件
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值