当前位置: 首页 > news >正文

【强化学习05】从Q学习到深度Q学习

深度Q学习(Deep Q-Learning, DQN)是将深度学习与Q学习结合起来的一种强化学习方法,利用神经网络来近似Q值函数,解决传统Q学习在大规模或连续状态空间中的局限性。下面详细解释DQN的机理。

背景知识

Q学习

Q学习是一种值函数法,它通过学习Q值(状态-动作值)来评估在某个状态下执行某个动作的长期回报。Q学习更新Q值的核心公式为:

Q ( s , a ) ← Q ( s , a ) + α [ r + γ max ⁡ a ′ Q ( s ′ , a ′ ) − Q ( s , a ) ] Q(s, a) \leftarrow Q(s, a) + \alpha \left[ r + \gamma \max_{a'} Q(s', a') - Q(s, a) \right] Q(s,a)Q(s,a)+α[r+γmaxaQ(s,a)Q(s,a)]

其中:

  • s s s a a a分别是当前状态和动作。
  • r r r是即时奖励。
  • s ′ s' s是执行动作 a a a后的下一个状态。
  • α \alpha α是学习率。
  • γ \gamma γ是折现因子。
深度神经网络

深度神经网络(DNN)是一种多层神经网络,能够从大量数据中学习复杂的特征表示。DNN在图像识别、自然语言处理等领域表现优异。

深度Q学习(DQN)

DQN的核心思想是使用深度神经网络来近似Q值函数,即用神经网络参数 θ \theta θ表示Q值函数 Q ( s , a ; θ ) Q(s, a; \theta) Q(s,a;θ)

关键组件
  1. 经验回放(Experience Replay)

    • 存储代理在环境中经历的每一个转换(状态,动作,奖励,下一个状态)到一个固定大小的经验池中。
    • 从经验池中随机抽取小批量(mini-batch)样本进行训练,打破样本间的相关性,提高训练的稳定性。
  2. 目标网络(Target Network)

    • 使用两个神经网络:一个是当前Q网络(Q-Network),另一个是目标Q网络(Target Q-Network)。
    • 目标Q网络的参数 θ − \theta^- θ定期复制当前Q网络的参数 θ \theta θ,减少训练的不稳定性。
DQN算法步骤
  1. 初始化

    • 初始化经验回放池 D D D
    • 初始化Q网络参数 θ \theta θ
    • 初始化目标Q网络参数 θ − = θ \theta^- = \theta θ=θ
  2. 重复以下步骤直到收敛

    1. 环境交互

      • 根据当前策略(例如 ε-greedy 策略)在状态 s s s下选择动作 a a a
      • 执行动作 a a a,观察即时奖励 r r r和下一个状态 s ′ s' s
      • 将转换 ( s , a , r , s ′ ) (s, a, r, s') (s,a,r,s)存储到经验回放池 D D D中。
    2. 经验回放

      • 从经验池中随机抽取一个小批量样本 ( s i , a i , r i , s i ′ ) (s_i, a_i, r_i, s'_i) (si,ai,ri,si)
      • 计算目标Q值 y i y_i yi
        y i = { r i if s i ′ is terminal r i + γ max ⁡ a ′ Q ( s i ′ , a ′ ; θ − ) otherwise y_i = \begin{cases} r_i & \text{if$s'_i$is terminal} \\ r_i + \gamma \max_{a'} Q(s'_i, a'; \theta^-) & \text{otherwise} \end{cases} yi={riri+γmaxaQ(si,a;θ)ifsiis terminalotherwise
      • 通过最小化均方误差(MSE)损失函数更新Q网络参数 θ \theta θ
        L ( θ ) = E ( s i , a i , r i , s i ′ ) ∼ D [ ( y i − Q ( s i , a i ; θ ) ) 2 ] L(\theta) = \mathbb{E}_{(s_i, a_i, r_i, s'_i) \sim D} \left[ \left( y_i - Q(s_i, a_i; \theta) \right)^2 \right] L(θ)=E(si,ai,ri,si)D[(yiQ(si,ai;θ))2]
    3. 更新目标网络

      • 每隔固定的步数,将Q网络参数复制到目标网络:
        θ − = θ \theta^- = \theta θ=θ

深度Q学习与时序差分

在深度Q学习(DQN)中,时序差分方法用于更新Q值,而Q值是通过神经网络进行近似的。时序差分在DQN中的应用体现在以下几个方面:

目标Q值的计算

在传统的Q学习中,Q值的更新依赖于贝尔曼方程,通过TD误差进行更新:

δ = r + γ max ⁡ a ′ Q ( s ′ , a ′ ) − Q ( s , a ) \delta = r + \gamma \max_{a'} Q(s', a') - Q(s, a) δ=r+γmaxaQ(s,a)Q(s,a)

在DQN中,这一思想被保留并应用于神经网络的训练中。我们使用目标网络来计算目标Q值,这样可以更稳定地进行更新。

TD误差在DQN中的具体实现
  1. 经验回放(Experience Replay)

    • 从经验池中随机抽取一小批样本 ( s i , a i , r i , s i ′ ) (s_i, a_i, r_i, s'_i) (si,ai,ri,si)
  2. 计算目标Q值(Target Q-Value)

    • 对于每个样本,计算目标Q值 y i y_i yi
      y i = { r i if s i ′ is terminal r i + γ max ⁡ a ′ Q ( s i ′ , a ′ ; θ − ) otherwise y_i = \begin{cases} r_i & \text{if$s'_i$is terminal} \\ r_i + \gamma \max_{a'} Q(s'_i, a'; \theta^-) & \text{otherwise} \end{cases} yi={riri+γmaxaQ(si,a;θ)ifsiis terminalotherwise
    • 这里, θ − \theta^- θ是目标网络的参数, θ \theta θ是当前Q网络的参数。
  3. 计算TD误差(TD Error)

    • TD误差 δ \delta δ由以下公式计算:
      δ i = y i − Q ( s i , a i ; θ ) \delta_i = y_i - Q(s_i, a_i; \theta) δi=yiQ(si,ai;θ)
  4. 更新Q网络参数

    • 通过最小化损失函数 L ( θ ) L(\theta) L(θ)来更新Q网络的参数 θ \theta θ
      L ( θ ) = E ( s i , a i , r i , s i ′ ) ∼ D [ ( y i − Q ( s i , a i ; θ ) ) 2 ] L(\theta) = \mathbb{E}_{(s_i, a_i, r_i, s'_i) \sim D} \left[ \left( y_i - Q(s_i, a_i; \theta) \right)^2 \right] L(θ)=E(si,ai,ri,si)D[(yiQ(si,ai;θ))2]
    • 这实际上是在最小化TD误差的平方和。

优势和挑战

优势
  • 处理高维状态空间:DQN利用神经网络能够处理高维度和复杂状态空间。
  • 减少样本相关性:经验回放池通过随机抽取样本打破了数据的时间相关性。
  • 稳定性:目标网络通过减少训练目标的频繁变化提高了训练的稳定性。
挑战
  • 超参数调优:DQN需要仔细调优超参数(如学习率、折现因子、经验池大小等)。
  • 训练时间:训练神经网络需要大量的计算资源和时间。
  • 探索效率:在复杂环境中,ε-greedy策略可能导致探索效率低下。

总结

深度Q学习(DQN)通过结合深度神经网络和Q学习,能够在复杂和高维度的状态空间中进行有效的强化学习。关键技术包括经验回放和目标网络,这些技术显著提高了训练的稳定性和效率。尽管面临一些挑战,但DQN在许多强化学习任务中表现出色,特别是在游戏和模拟环境中。

http://www.lryc.cn/news/357240.html

相关文章:

  • FPGA实现多路并行dds
  • ArcgisPro3.1.5安装手册
  • 三大主流框架
  • 【C++】:vector容器的底层模拟实现迭代器失效隐藏的浅拷贝
  • 必看项目|多维度揭示心力衰竭患者生存关键因素(生存分析、统计检验、随机森林)
  • centos安装Redis
  • 继承与多态2
  • 在RT-Thread下为MPU手搓以太网MAC驱动-3
  • Cocos Creator 2D物理引擎的使用详解
  • 618局外人抖音:别人挤压商家“拼价格”,它默默联合商家“抢用户”?
  • 【Unity AR开发插件】五、运行示例程序
  • JavaScript className 类名属性操作
  • 做场外个股期权怎么询价
  • Databend 开源周报第 146 期
  • Android12.0 SIM卡语言自适应
  • 滴滴一季度营收同比增长14.9%至491亿元 经调整EBITA盈利9亿元
  • C语言 指针——指针变量的定义、初始化及解引用
  • 详解 Spark 的运行架构
  • 盲盒小程序开发,为市场带来的新机遇
  • stm32学习-流水灯
  • GIGE 协议摘录
  • 服务器的远程桌面无法连接,服务器远程桌面无法连接问题处理教程
  • 【机器学习300问】105、计算机视觉(CV)领域有哪些子任务?
  • 安卓手机APP开发__超宽带(UWB)通信
  • 儿童股骨干骨折用儿童悬吊如何进行康复
  • vscode plantuml插件安装使用(windows)
  • Linux内核编译流程3.10
  • OSPF多区域组网实验(华为)
  • 解密MySQL二进制日志:深度探究mysqlbinlog工具
  • 妙解设计模式之策略模式