强化学习(一)——基本概念及DQN

1 基本概念

  • 智能体 agent ,做动作的主体,(大模型中的AI agent)

  • 环境 environment:与智能体交互的对象

  • 状态 state ;当前所处状态,如围棋棋局

  • 动作 action:执行的动作,如围棋可落子点

  • 奖励 reward:执行当前动作得到的奖励,(大模型中的奖励模型)

  • 策略 policy: π ( a ∣ s ) \pi(a|s) π(as) 当前状态如何选择action,如当前棋局,落子每个点的策略

  • 回报(累计奖励) return : 是从当前时刻开始到本回合结束的所有奖励的总和, U t = R t + γ R t + 1 + γ 2 R t + 2 + γ 3 R t + 3 . . . . U_t=R_t+\gamma R_{t+1}+\gamma^2R{t+2}+\gamma^3R{t+3} .... Ut=Rt+γRt+1+γ2Rt+2+γ3Rt+3....

  • 折扣回报 𝛾:

  • 动作价值函数: Q π ( s t , a t ) = E [ U t ∣ S t = s t , A t = a t ] Q_\pi (s_t,a_t)=E[U_t|S_t=s_t,A_t=a_t] Qπ(st,at)=E[UtSt=st,At=at]

  • 最优动作价值函数: Q ∗ ( s t , a t ) = m a x π Q π ( s t , a t ) Q^*(s_t,a_t)=max_\pi Q_\pi(s_t,a_t) Q(st,at)=maxπQπ(st,at)

  • 状态价值函数: V π ( s t ) = E A [ Q π ( s t , A ) ] V_\pi (s_t)=E_A[Q_\pi(s_t,A)] Vπ(st)=EA[Qπ(st,A)]

2 DQN

折扣回报: U t = R t + γ R t + 1 + γ 2 R t + 2 + γ 3 R t + 3 . . . . U_t=R_t+\gamma R_{t+1}+\gamma^2R{t+2}+\gamma^3R{t+3} .... Ut=Rt+γRt+1+γ2Rt+2+γ3Rt+3....
动作价值函数: Q π ( s t , a t ) = E [ U t ∣ S t = s t , A t = a t ] Q_\pi (s_t,a_t)=E[U_t|S_t=s_t,A_t=a_t] Qπ(st,at)=E[UtSt=st,At=at]
最优动作价值函数: Q ∗ ( s t , a t ) = m a x π Q π ( s t , a t ) Q^*(s_t,a_t)=max_\pi Q_\pi(s_t,a_t) Q(st,at)=maxπQπ(st,at)

核心公式:时间差分算法

Q ( s t , a t ; w ) = r t + γ max ⁡ a ∈ A Q ( s t + 1 , a ; w ) Q(s_t,a_t;w)=r_t+\gamma \max _{a\in A}Q(s_{t+1},a;w) Q(st,at;w)=rt+γmaxaAQ(st+1,a;w)
证明:略

公式解读及注意事项:
输入:( s t , a t , r t , s t + 1 s_t,a_t,r_t,s_{t+1} st,at,rt,st+1
左边项 Q ( s t , a t ; w ) Q(s_t,a_t;w) Q(st,at;w) : 是神经网络在t时刻的预测
右边 r t r_t rt是当前奖励值, max ⁡ a ∈ A Q ( s t + 1 , a ; w ) \max _{a\in A}Q(s_{t+1},a;w) maxaAQ(st+1,a;w)
目标:使左右两边误差最小。

DQN 是对最优动作价值函数 Q⋆ 的近似。DQN 的输入是当前状态 st,输出是每个动作的 Q 值。DQN 要求动作空间 A 是离散集合

DQN高估问题:

1 最大化导致高估, 上式中总是取最大值,会导致高估
2 自举导致高估 上式中目标函数也用自己,使用自己估计自己,会导致高估
因此可以对目标函数进行以下改进。

目标函数分析:

Q ( s t , a t ; w ) = r t + γ max ⁡ a ∈ A Q ( s t + 1 , a ; w ) Q(s_t,a_t;w)=r_t+\gamma \max _{a\in A}Q(s_{t+1},a;w) Q(st,at;w)=rt+γmaxaAQ(st+1,a;w)

  • a .左右两边可以使用统一个Q函数
    b. 左右两边使用不同Q函数
    在这里插入图片描述

c. 左右两边使用不同Q函数,且target 的 Q t a r g e t ( s t + 1 , a ; w ) Q_{target}(s_{t+1},a;w) Qtarget(st+1,a;w) 的a 来自第一个函数 max ⁡ a ∈ A Q 1 ( s t + 1 , a ; w ) \max _{a\in A}Q_1(s_{t+1},a;w) maxaAQ1(st+1,a;w)
在这里插入图片描述

  • 高估解决办法:
    b 策略可以减少自举带来的高估
    c 策略一定程度上能减少最大化带来的高估,因为用第一个Q函数中的a,在 Q t a r g e t Q_{target} Qtarget中总是小于等于最大值的 max ⁡ a ∈ A Q t a r g e t ( s t + 1 , a ; w ) \max _{a\in A}Q_{target}(s_{t+1},a;w) maxaAQtarget(st+1,a;w) (DDQN方法)

3 核心代码实现DQN,DDQN

DQN 如下代码,

self.model为Q函数
self.model_target为目标Q函数,
s_batch :当前状态
a_batch:当前执行动作
r_batch: 奖励
d_batch ; 是否游戏结束
next_s_batch; 执行动作a_batch后,到下一个状态

self.model在当前状态s_batch下得到每个状态的Q值,选择a_batch对应的Q值,即为当前Q值
self.target_model 在下一步状态next_s_batch下,取self.target_model 最大值对应到a的值(DDQN,是在self.target_model中取self.model最大值对应a的值)。


    def compute_loss(self, s_batch, a_batch, r_batch, d_batch, next_s_batch):
        # Compute current Q value based on current states and actions.
        qvals = self.model(s_batch).gather(1, a_batch.unsqueeze(1)).squeeze()
        # next state的value不参与导数计算,避免不收敛。
        next_qvals, _ = self.target_model(next_s_batch).detach().max(dim=1)
        loss = F.mse_loss(r_batch + self.discount * next_qvals * (1 - d_batch), qvals)
        return loss

DDQN

与上面唯一区别是:使用Q1函数中的a
在这里插入图片描述

    def compute_loss(self, s_batch, a_batch, r_batch, d_batch, next_s_batch):
        # Compute current Q value based on current states and actions.
       Q1=self.model(s_batch)
       qvals =Q1 .gather(1, a_batch.unsqueeze(1)).squeeze()
       a_target =Q1argmax()
        # next state的value不参与导数计算,避免不收敛。
        next_qvals = self.target_model(next_s_batch).detach().gather(1, a_target).squeeze()
        loss = F.mse_loss(r_batch + self.discount * next_qvals * (1 - d_batch), qvals)
        return loss

   def get_action(self, obs):
        qvals = self.model(obs)
        return 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/211802.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CRM系统是怎样帮助销售流程自动化的?

销售业绩是衡量企业经营的重要指标,也是销售人员一直要达成的目标。销售业绩能否提高取决于销售人员的能力、客户服务水平,还需要借助有效的工具。CRM系统就是这样的一款软件。企业如何提高销售业绩?不妨试试CRM销售流程自动化。 CRM如何实现…

【从删库到跑路 | MySQL总结篇】事务详细介绍

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】🎈 本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论区讨论💌 目录 一、事务…

JavaScript 数据结构

JavaScript 数据结构 目录 JavaScript 数据结构 一、标识符 二、关键字 三、常量 四、变量 每一种计算机编程语言都有自己的数据结构,JavaScript脚本语言的数据结构包括:标识符、常量、变量、保留字等。 一、标识符 标识符,说白了&…

使用gcloud SDK 管理和部署 Cloud run service

查看cloud run 上的service 列表: gcloud run services list > gcloud run services listSERVICE REGION URL LAST DEPLOYED BY LAST DEPL…

【QT】Windows环境下,cmake引入QML

这里使用的QT库为5.7版本。 1、添加环境变量 QT库根目录环境变量 QTDIR QT库平台插件环境变量 QT_PLUGIN_PATH QML支持环境变量 QML2_IMPORT_PATH (该环境变量仅在需要使用QML时添加) QT库动态库环境变量,bin目录下包含了QT程序运行所需的dl…

常见的攻击防护

只做模拟机器使用,不使用真实机器 目录 一、 DHCP饿死和防护应对措施.................................. 1 1, 实验拓扑:...................................................... 2 2, 实验配置............................…

AD23等间距拉线、布线的方法

U M 键进行多根走线, 多根走线想保持10个mil 我可以直接按table键,弹出Multi-Routing ponent,项的Bus Spadng输入框中填充10个mil,新走线产生10个mil的等间距 保持最小的一个规则,可以去到6mil线距。 在拉线操作过程中&#…

详解Spring中BeanPostProcessor在Spring工厂和Aop发挥的作用

😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783…

TCP连接为什么是三次握手,而不是两次和四次

答案 阻止重复的历史连接同步初始序列号避免资源浪费 原因 阻止重复的历史连接(首要原因) 考虑这样一种情况: 客户端现在要给服务端建立连接,向服务端发送了一个SYN报文段(第一次握手),以表示请…

Mininet学习记录(常用命令+创建网络拓扑+OpenDaylight显示拓扑结构)

目录 1.Mininet简介2.Mininet常用命令2.1创建网络拓扑常用参数2.2常用的内部交换命令 3.创建网络拓扑的三种方式3.1通过命令行创建3.2通过miniedit可视化界面创建3.3通过python脚本创建 4.问题总结 1.Mininet简介 Mininet 是由一些虚拟的终端节点 (end-hosts) 、交换机、路由器…

【STM32】TIM定时器

第一部分:定时器基本定时的功能; 第二部分:定时器的输出比较功能; 第三部分:定时器输入捕获的功能; 第四部分:定时器的编码接口。 1 TIM简介 TIM(Timer)定时器&#…

【数据库】数据库基于封锁机制的调度器,使冲突可串行化,保障事务和调度一致性

封锁使可串行化 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更…

《地理信息系统原理》笔记/期末复习资料(8. 数字高程模型)

目录 8. 数字高程模型 8.1 概述 8.1.1 数字高程模型概念 8.1.2 数字高程模型特点 8.2 DEM数据分布特征 8.2.1 格网状数据 8.2.2 离散数据 8.3 DEM的表示方法 8.3.1 数学方法 8.3.2 图形方法 8.3.3 DEM三维表达方法 8.4 TIN的生成方法 8.4.1 人工方法 8.4.2 程序自…

Android drawable layer-list右上角红点,xml布局实现,Kotlin

Android drawable layer-list右上角红点&#xff0c;xml布局实现&#xff0c;Kotlin <?xml version"1.0" encoding"utf-8"?> <layer-list xmlns:android"http://schemas.android.com/apk/res/android"><itemandroid:id"id…

Vue3获取阴历/农历日期

安装插件 pnpm add chinese-lunar-calendar引入阳历/阴历切换函数 import {getLunar} from chinese-lunar-calendarexport function lunarDate(pDate){const year pDate.getFullYear()const month pDate.getMonth() 1const day pDate.getDate()const result getLunar(yea…

VMware安装Debian12.2作为服务器(无桌面)

[TOC]VMware安装Debian12.2作为服务器&#xff08;无桌面&#xff09; 下载Debian系统 官方网站&#xff1a;https://www.debian.org/index.zh-cn.html 创建新的虚拟机 打开VMware Workstation&#xff0c;点击创建新的虚拟机 向导虚拟机类型选择 一般我会选择典型&…

记录华为云服务器(Linux 可视化 宝塔面板)-- 防火墙篇

文章目录 前言安装防火墙防火墙设置防火墙操作1.设置开机启动防火墙2.查看防火墙开放哪些端口3.重载防火墙配置&#xff08;修改配置后重新启动才生效&#xff09;4.查看防火墙状态5.开启防火墙6.关闭防火墙 若遇到无法开启查询已开放的端口查询端口是否开放&#xff08;80&…

6-70.复数的加减运算(运算符重载)

###复数加减&#xff08;运算符重载&#xff09; 声明一个复数类CComplex&#xff08;类私有数据成员为double型的real和image&#xff09; 定义构造函数&#xff0c;用于指定复数的实部与虚部。 重载<<运算符&#xff0c;以格式realimage i的格式输出当前对象&#xf…

Eaxyx 让圆球跟随鼠标移动

如果出现2023&#xff0c;代表配置成功: 进入Eaxy官方网站&#xff0c;点击文档&#xff1a; 选择 函数->绘图函数->initgraph: 可以看见initgraph&#xff08;&#xff09;函数有如下三个参数: 现在我们想生成一个1280*720大小的窗口&#xff1a; 我们需写如下代码: 但…

2_企业级Nginx使用-day1

#企业级Nginx使用-day1 学习目标和内容 1、能够了解Nginx的信号参数 2、能够进行平滑升级Nginx 3、能够配置server虚拟机 4、能够部署上线项目到LNMP架构中 5、能够了解Nginx的常用官方模块 6、能够了解日志相关使用 一、重装和升级 在实际业务场景中&#xff0c;需要使用软件…