强化学习算法笔记之【Q-learning算法和DQN算法】

cnblogs 2024-10-18 11:43:00 阅读 94

强化学习算法笔记之【Q-learning算法和DQN算法】

强化学习笔记第1篇,讲解Q-learning算法和DPG算法。

感兴趣的可以参考或者复刻。

强化学习笔记之【Q-learning算法和DQN算法】


前言:

强化学习领域,繁冗复杂的大段代码里面,核心的数学公式往往只有20~40行,剩下的代码都是为了应用这些数学公式而服务的

这可比遥感图像难太多了,乱七八糟的数学公式看得头大

本文初编辑于2024.10.5

CSDN主页:https://blog.csdn.net/rvdgdsva

博客园主页:https://www.cnblogs.com/hassle


Q-learning算法

需要先看:

Deep Reinforcement Learning (DRL) 算法在 PyTorch 中的实现与应用【Q-learning部分】

7个最流行的强化学习算法实战案例(附 Python 代码)【Q-learning部分】【不要看这个的DQN部分,里面用的是单网络】


\[q[current\underline{~}state, action] = \\q[current\underline{~}state, action] + learning\underline{~}rate \times (reward + gamma\times max(q[next\underline{~}state]) - q[current\underline{~}state, action])

\]

  • 上述公式为Q-learning算法中的Q值更新公式

  • Q-learning算法中的Q值更新公式参数解释:
  1. Q[CurrentState, Action]: 这是在当前状态(CurrentState)下,采取特定动作(Action)所对应的Q值。Q值代表了在给定状态下采取该动作的预期累积回报。

  2. LearningRate (α): 学习率是一个介于0和1之间的参数,用来控制新信息(即当前的经验和估计的未来回报)对Q值更新的影响。较高的学习率会使得新经验更快速地影响Q值,而较低的学习率则会使得Q值更新更加平滑,减小波动。

  3. reward: 这是在执行动作(Action)后获得的即时奖励。它用于衡量该动作的好坏,与环境的反馈直接相关。

  4. gamma (γ): 折扣因子是一个介于0和1之间的参数,用于确定未来奖励的重要性。γ越接近1,智能体越重视未来的奖励;γ越接近0,智能体则更关注眼前的即时奖励。

  5. max(Q[NextState]): 这是在下一个状态(NextState)中所有可能动作的Q值中的最大值。它表示在下一个状态下预计能获得的最大未来回报。

\[Action = argmax(Q[CurrentState])

\]

  • 通过上述公式进行Action的选择

个人理解:Q-learning是off-policy算法。reward是现在的行为可见的确定的收益,gamma*max(Q[NextState])是预计的未来的总收益(不包括现在,即reward),Q[CurrentState, Action]是预计的现在的总收益(包括现在,即reward),此点参考【强化学习】 时序差分TD error的通俗理解,方程的右侧表示Q值的更新。它使用了目前的Q值,加上基于当前获得的奖励和预计的未来奖励的调整。这个调整部分是基于时序差分(即 TD-errors)学习的原则。

DQN算法

需要先看:

Deep Reinforcement Learning (DRL) 算法在 PyTorch 中的实现与应用【DQN部分】【代码中有take_action函数】

【深度强化学习】(1) DQN 模型解析,附Pytorch完整代码【代码实现部分】【代码中DQN网络缺少take_action函数,结合上文看吧】


\[q\underline{~}values = q\underline{~}network(state)\\ next\underline{~}qvalues= target\underline{~}network(next\underline{~}state)\\q\underline{~}target = reward + (1 - done) \times gamma \times next\underline{~}qvalues.max()\\loss = MSELoss(q\underline{~}values, q\underline{~}target)

\]

  • 上述公式为深度 Q 网络(DQN)算法中的Q值更新公式

\[q\underline{~}values = q\underline{~}network(state)

\]

  • 通过上述公式进行Action的选择,注意这里用的是q_network而不是target_network

大白话解释:

state和action为经验池里面提取的batch,不是某一时刻的state和action

DQN实例化为q_network,输入state对应输出q_values,action也是这个网络给出的

DQN实例化为target_network,输入next_state对应输出next_q_values

next_q_values实例化为q_targets

q_values和q_targets进行q_network的参数更新


  • 深度 Q 网络(DQN)算法中的Q值更新公式参数解释:
  1. target[action]: 这是当前状态下,执行特定动作 action 的目标 Q 值。我们希望通过更新这个 Q 值来使其更接近真实的 Q 值。
  2. reward: 这是在当前状态下执行 action 所得到的即时奖励。
  3. done: 这是一个布尔值,表示当前状态是否是终止状态。如果 done 为 1(或 True),表示已经到达终止状态,那么后续不再有奖励;如果为 0(或 False),则表示还有后续状态和奖励。
  4. self.gamma: 这是折扣因子(通常在 0 到 1 之间),用于控制未来奖励对当前决策的影响。较高的折扣因子意味着更关注未来的奖励。
  5. next_q_values.max(): 这是在下一个状态中所有可能动作的 Q 值的最大值,表示在下一个状态下能获得的最佳期望奖励。

个人理解:DQN采用双网络,是off-policy算法。一个训练网络仅使用当前数据,对一种state采取最优的action,需要频繁更新。一个目标网络使用历史数据,采取总体最优action,不需要频繁更新。相较于Q-learning,使用Q函数代替了Q矩阵的作用,在状态很多时Q矩阵难以处理,Q函数擅长对复杂情况进行建模。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。