DQN的理解

DQN的理解

DQN的理解和代码示例1

DQN的理解和代码示例2

img

这里写图片描述

假设从经验池中随机取出数据:

(s1,a1,r1,s2,False),

(s7,a7,r7,s8,False),

(s18,a18,r18,s19,Flase)。

  • 目标值网络这边:在第一条数据中,把下一状态s2输出到神经网络中,将输出该状态下,各个动作对应的Q值,记作Q1_next。比如Q1_next=(0.5,0.6,0.9,0.2),意思是s2状态下执行a1的Q值为0.5,执行a2的Q值为0.6,执行a3的Q值为0.9,执行a4的Q值为0.2。这对应着第一张图目标值网络对应的输出。
  • 当前值网络这边:第一条数据中,把当前状态s1输入当前值网络,也会输出该状态下各个动作对应的Q值,然后通过贪婪策略选择Q值最大的那一个动作作为a1,图一中最大的Q值记为Q(s, a; θ),图二中记为Q(ai) 。这和 当前网络与环境交互时选择动作 是吻合的。
  • DQN误差函数里面:首先计算Q1_target = r1 + gama*Max(Q1_next) ,然后计算loss_1 =( Q1_target - Q1(s, a; θ) )^2。进而梯度下降方向传播来更新网络参数 θ。
  • 同样,将第二条、第三条的下一状态都输入目标值网络,得到相应的Q7_next, Q18_next。
### DQN算法的概念和基本原理 #### 1. 强化学习背景 强化学习是一种机器学习方法,其中代理(agent)通过与环境互动来学习如何执行任务。代理的目标是在一系列决策过程中最大化累积奖励。为了实现这一目标,代理需要不断调整自己的行为策略(policy),以便在未来获得更多的奖励。 #### 2. 深度Q网络(DQN)概述 深度Q网络(Deep Q-Network, DQN)[^1] 是一种结合了深度学习和Q-learning的强化学习算法。传统Q-learning利用表格形式存储各个状态下采取不同动作所能得到的最大预期回报(Q-value),但在面对复杂多变的状态空间时效率低下甚至不可行。而DQN则采用神经网络作为函数近似器(function approximator),用来预测给定状态下的最优行动对应的长期收益期望值——即所谓的Q值。 #### 3. 关键技术要点 - **经验重放缓冲区**(Experience Replay Buffer): 存储过往经历的数据集,从中随机抽取样本进行训练可以打破数据之间的关联性,提高泛化能力并防止过拟合。 - **固定Q目标**(Fixed-Q Targets): 使用两个相同的网络结构分别扮演评估者(evaluator)角色(更新参数)和服务端(target network),后者定期同步前者权重但保持不变一段时间,以此稳定TD误差计算过程中的波动问题[^2]. - **ε-greedy探索机制**: 平衡贪婪选择当前已知最佳选项(greedy action selection) 和偶尔尝试未知路径(random exploration)之间关系的一种方式,在初期更多依赖于随机操作随着迭代次数增加逐渐倾向于选取更优解。 ```python import random from collections import deque import numpy as np import torch import torch.nn.functional as F class DQN(object): def __init__(self, state_dim, action_dim, learning_rate=0.001, reward_decay=0.9, e_greedy=0.9, replace_target_iter=300, memory_size=500, batch_size=32): self.state_dim = state_dim self.action_dim = action_dim # 初始化其他超参... # 构建eval_net和target_net模型架构... def choose_action(self, observation): if np.random.uniform() < self.epsilon: actions_value = self.eval_net.forward(observation).detach().numpy() action = np.argmax(actions_value) else: action = np.random.randint(0, self.n_actions) return action def store_transition(self, s, a, r, s_): transition = np.hstack((s, [a, r], s_)) index = self.memory_counter % MEMORY_CAPACITY self.memory[index, :] = transition self.memory_counter += 1 def learn(self): sample_index = np.random.choice(MEMORY_CAPACITY, BATCH_SIZE) b_memory = self.memory[sample_index, :] ... ``` 上述代码片段展示了基于PyTorch框架构建的一个简化版DQN类定义及其核心功能模块的选择动作逻辑、记忆库管理以及学习流程的一部分.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值