【强化学习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.mzph.cn/pingmian/18592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据分析 - 合并查询

在数据分析中,合并查询(Merge Query)是一个重要的操作,它允许用户将两个或多个数据集(通常是表格)基于某些共同属性(如ID)进行合并,从而获取更丰富的数据视图。以下是关于…

vue+springboot实现echarts数据图统计

①vue项目修改配置 安装依赖: npm i echarts -S 修改路由index.js: import Vue from vue import VueRouter from vue-router import Manager from ../views/Manager.vue // 解决导航栏或者底部导航tabBar中的vue-router在3.0版本以上频繁点击菜单报错…

STL详解(五)——list的使用

文章目录 list的介绍list的使用list的定义方式list的插入和删除push_front和pop_frontpush_back和pop_backinserterase list的迭代器使用begin和endrbegin和rend list的元素获取front和back list的大小控制sizeresizeemptyclear list的操作函数sortspliceremoveremove_ifunique…

「光储充放」一体充电站-一文读懂光储充放充电站

“光储充放”一体充电站作为一种储能充电的新形式渐渐走进人们的生活,全国很多地区都开始陆续投放运营“光储充放”一体充电站,今天的这篇文章,就带大家全面了解“光储充放”这一新型充电站。 头图来源 | 视觉中国 01 政策背景 早在2020年…

集合的交集、并集和差集运算

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 集合最常用的操作就是进行交集、并集、差集和对称差集运算。进行交集运算时使用“&”符号,进行并集运算时使用“|”符号&…

详解 Scala 的函数式编程

一、函数基础 函数式是基于数学理论的函数概念,类似于 y f(x) 1. 函数定义 1.1 语法 /* 函数结构:def funcName(param1 : type1, param2 : type2,...): type { statement }*/ def sum(x : Int, y : Int): Int {return x y }1.2 案例 object Test…

基于振弦采集仪的岩土工程振弦监测技术研究与应用

基于振弦采集仪的岩土工程振弦监测技术研究与应用 岩土工程振弦监测技术是一种基于振弦采集仪的测试方法,用于对岩土体的力学特性进行监测和分析。振弦采集仪是一种先进的测试设备,能够准确测量岩土体中的振动响应,并通过分析振动信号来获取…

mysql中的内连接与外连接

在MySQL中,内连接和外连接是用于从多个表中检索数据的两种不同的连接方式。 内连接(INNER JOIN): 内连接返回两个表之间匹配的行。它只返回两个表中共同匹配的行,如果在一个表中没有匹配到对应的行,则不会显…

学习笔记——数据通信基础——数据通信网络(拓扑结构)

网络拓扑 网络拓扑(Network Topology)是指用传输介质(例如双绞线、光纤等)互连各种设备(例如计算机终端、路由器、交换机等)所呈现的结构化布局。 1、网络拓扑形态 星型网络∶所有节点通过一个中心节点连接在一起。 优点∶容易在网络中增加新的节点。通信数据必须经过中心节点…

python-数据可视化(总)

python-数据可视化 ** 数据可视化 指的是通过可视化表示来探索数据,它与数据挖掘**紧密相关,而数据挖掘指的是使用代码来探索数据集的规律和关联。数据集可以是用一行代码就能表示的小型数字列表,也可以是数以吉字节的数据 最流行的工具之一…

yolox代码详解(从tools/train.py开始扩展,更新中)

一、训练部分相关代码详解 tools/train.py #!/usr/bin/env python3 # -*- coding:utf-8 -*- # Copyright (c) Megvii, Inc. and its affiliates.import argparse import random import warnings from loguru import loggerimport torch import torch.backends.cudnn as cudnn…

HTTP协议的基本了解

一、HTTP-概述 HTTP:Hyper Text Transfer Protocol(超文本传输协议),规定了浏览器与服务器之间数据传输的规则。 http是互联网上应用最为广泛的一种网络协议 。http协议要求:浏览器在向服务器发送请求数据时,或是服务器在向浏览器…

微信小程序显示流格式照片

1.服务端,java代码,用于将图片转为文件流返回给前端 import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths;import org.springframework.core.io.Resource; import org.springframework.core.io.UrlResource; import org.springframework.ht…

7 步解决Android Studio模拟器切换中文输入

详细步骤传送地址:Android Studio 模拟器切换中文输入 目录 01 问题概述 02 模拟器的调试 01 问题概述 大家在使用Android Studio 软件进行项目演示时总会遇到一些输入框需要输入中文汉字的情况,由于AS自带的模拟器基本都是英文,这时就有同…

Dubbo生态之深度分析sentinel的流量控制

1. 深度了解sentinel限流规则参数的含义 博客Dubbo生态之sentinel限流-CSDN博客中有dubbo集成sentinel的demo演示 在sentinel中,限流的直接表现形式就是,在执行Entry nodeA SphU.entry(resourceName)的时候抛出FlowException异常,FlowExce…

Linux学习笔记(二)

一、Linux文件目录 1.命令:tree -L 1 2.挂载命令(例如U盘,需要挂载之后才能访问): mount /dev/cdrom /mnt ls /mnt 3.查看登录信息: last / lastlog 4.修改/查看网络信息 vi /etc/sysconfig/netw…

es索引的性能优化配置

获取所有索引 GET _cat/indices?index* 查看所有模板,如果数据量多的话,可以进行纵向分表,例如按照日期将索引分开,然后通过建模板,配置索引的参数 GET _cat/templates 查看模板详情 GET _template/模板名称 获取集群…

仓库包含 maven { url “https://maven.google.com“ }项目无法正常运行的情况

maven { url "https://maven.google.com" } 在国内是可以使用的,但可能会受到网络环境的影响,导致访问速度较慢或不稳定。为了提高访问速度和稳定性,您可以考虑使用国内的镜像源来替代官方的 Google Maven 仓库。 国内有多个镜像源…

【吊打面试官系列】Java高并发篇 - 死锁的原因?

大家好,我是锋哥。今天分享关于 【死锁的原因?】面试题,希望对大家有帮助; 死锁的原因? 1、是多个线程涉及到多个锁,这些锁存在着交叉,所以可能会导致了一个锁依赖 的闭环。 例如: …

计算机网络7——网络安全1 概述与加密

文章目录 一、网络安全问题概述1、计算机网络面临的安全性威胁2、安全的计算机网络3、数据加密模型 二、两类密码体制1、对称密钥密码体制2、公钥密码体制 随着计算机网络的发展,网络中的安全问题也日趋严重。当网络的用户来自社会各个阶层与部门时,大量…