从奖励到最优决策:动作价值函数与价值学习

从奖励到最优决策:动作价值函数与价值学习

价值学习

本文旨在详细介绍价值学习的基本理论与算法,并通过具体示例帮助你理解从动作价值函数到深度Q网络(DQN)的整体流程。

一、动作价值函数

基础概念

  • 奖励 R R R:
    agent每作出一个动作,环境都会更新,并且会给出一个奖励 R R R,每一个奖励 R R R都依赖于前一个状态和动作。
  • 回报(return) U t U_t Ut:
    回报依赖从 T T T时刻开始的所有的动作和所有的状态

U t = R t + γ R t + 1 + γ 2 R t + 2 + γ 3 R t + 3 + ⋯ + γ T − t R T U_t = R_t + \gamma R_{t+1} + \gamma^2 R_{t+2} + \gamma^3 R_{t+3} + \dots + \gamma^{T-t} R_T Ut=Rt+γRt+1+γ2Rt+2+γ3Rt+3++γTtRT

回报的特点:

  • 长期回报:一个状态 s s s的回报 U t U_t Ut,是所有 t t t时刻的奖励的和,所以 U t U_t Ut是一个长期的回报。回报 U t U_t Ut依赖从 T T T时刻开始的所有的动作和所有的状态
  • 动作的随机性:动作的随机性,即在状态 s s s下,采取动作 a a a的概率是不确定的。动作的随机性来自策略 π \pi π的抽样。

P [ A = a ∣ S = s ] = π ( a ∣ s ) \mathbb{P}[ A = a | S = s ] = \pi(a | s) P[A=aS=s]=π(as)

  • 状态的随机性:状态的随机性来自状态转移函数 p p p,新的状态市场函数 p p p中抽样得到的

P [ S = s ′ ∣ S = s , A = a ] = p ( s ′ ∣ s , a ) \mathbb{P}[ S = s' | S = s, A = a ] = p(s' | s, a) P[S=sS=s,A=a]=p(ss,a)

  • 总体随机性: 动作和状态都是随机的,因此 U t U_t Ut也是一个随机变量。

U t U_t Ut求期望得到动作价值函数

因为回报 U t U_t Ut是一个随机变量,我们要消除它的随机性,只留下 s t s_t st a t a_t at两个变量,我们可以对它求期望。所以 U t U_t Ut的期望值可以表示为:
Q π ( s t , a t ) = E [ U t ∣ S t = s t , A t = a t ] Q_\pi(s_t,a_t) = \mathbb{E}[U_t | S_t = s_t, A_t = a_t] Qπ(st,at)=E[UtSt=st,At=at]

这样我们就得到动作价值函数(Action-Value Function).
动作价值函数只和策略 π \pi π、当前的状态和动作( s t s_t st a t a_t at)有关

动作价值函数的意义

动作价值函数可以反映出当前状态 s t s_t st下,采取动作 a t a_t at的好坏程度(期望)。

最优动作价值函数(Optimal Action-Value Function)

要想消除策略 π \pi π对动作价值函数的随机性,我们可以定义一个最优动作价值函数(Optimal Action-Value Function),对 Q π Q_\pi Qπ求最大化:

Q ∗ ( s , a ) = m a x π Q π ( s t , a t ) Q^* (s, a) = {max}_\pi Q_\pi (s_t, a_t) Q(s,a)=maxπQπ(st,at)

最优动作价值函数是一个最优的动作价值函数,它表示了当前状态 s t s_t st下,采取动作 a t a_t at的最优情况,它与策略 π \pi π无关。要使agent在当前状态 s t s_t st下采取动作 a t a_t at,得到的回报 U t U_t Ut最多就是 Q ∗ ( s t , a t ) Q^* (s_t, a_t) Q(st,at)

Q ∗ Q^* Q函数可以指导agent做决策,它可以为所有的动作打分,并且选择分数最高的作为动作。

如何理解 Q ∗ Q^* Q函数

我们可以理解 Q ∗ Q^* Q函数,它表示了当前状态 s t s_t st下,采取动作 a t a_t at的平均回报,你可以把它当作一个先知,它可以告诉你每一支股票的期望收益。

二、价值学习的基本思想

虽然 Q ∗ Q^* Q函数非常厉害,但是实际上我们并没有 Q ∗ Q^* Q函数,我们只能通过学习得到 Q ∗ Q^* Q函数。我们可以通过学习一个函数来近似 Q ∗ Q^* Q函数。这就是价值学习的基本思想。

Deep Q-Network(DQN)

使用一个深度学习的神经网络来近似 Q ∗ Q^* Q函数。

我们可以使用一个函数来代表这个神经网络
Q ( s , a ; W ) → Q ∗ ( s , a ) Q(s,a;W) \rightarrow Q^* (s,a) Q(s,a;W)Q(s,a)

其中:

  • W: 神经网络的参数
  • s: 神经网络的输入,状态。
  • 神经网络的输出是很多数值,这些数值是对每个可能的动作的打分。

举个例子,在超级玛丽中,游戏可以有三个动作,分别是向左,向右,向上。
我们将游戏的一帧通过卷积、特征提取输入到DQN中,然后得到三个动作的打分。

  • 向上: 2000
  • 向右: 1000
  • 向右: 1000

很明显这时我们应该采取的动作是向上。

DQN玩游戏的具体流程

一个使用深度Q网络(DQN)来玩电子游戏的基本流程。流程从当前状态开始,通过选择动作、接收奖励、更新状态,不断循环进行。以下是详细的步骤描述:

  1. 开始于当前状态:流程从当前状态 S t S_t St 开始。

  2. 选择动作:在状态 S t S_t St 下,通过最大化Q值函数 Q ( S t , a ; w ) Q(S_t, a; \mathbf{w}) Q(St,a;w) 来选择一个动作 a t a_t at。这里的 w \mathbf{w} w 表示Q值函数的参数。

  3. 执行动作并观察结果:执行动作 a t a_t at 后,状态转移函数 P P P观察到下一个状态 S t + 1 S_{t+1} St+1 和获得的奖励 r t r_t rt。奖励可以用来更更新参数

  4. 更新状态:状态更新到 S t + 1 S_{t+1} St+1

  5. 重复选择动作:在新的状态 S t + 1 S_{t+1} St+1 下,再次通过最大化Q值函数来选择动作 a t + 1 a_{t+1} at+1

  6. 继续循环:这个过程不断重复,即在每个新的状态 S t + 2 , S t + 3 , … S_{t+2}, S_{t+3}, \ldots St+2,St+3, 下,都通过最大化Q值函数来选择最优动作 a t + 2 , a t + 3 , … a_{t+2}, a_{t+3}, \ldots at+2,at+3,,并观察到相应的奖励 r t + 1 , r t + 2 , … r_{t+1}, r_{t+2}, \ldots rt+1,rt+2,。知道游戏结束

  7. 状态转移:每个状态 S t + 1 , S t + 2 , S t + 3 , … S_{t+1}, S_{t+2}, S_{t+3}, \ldots St+1,St+2,St+3, 都是根据当前状态和动作,通过概率分布 p ( ⋅ ∣ S t , a t ) p(\cdot | S_t, a_t) p(St,at) 来确定的。

这个流程展示了如何通过不断学习和选择最优动作来最大化累积奖励,这是强化学习中DQN算法的核心思想。

如何训练DQN——TD算法(Temporal Difference Algorithm,时差算法)

实际问题类比

假如我想要从广州坐高铁到西安,我们可以先使用 Q ( W ) Q(W) Q(W)函数进行预测。假设预测值为q = 15小时 ,注意此时模型还在训练,预测的值可能是完全错误的,然后我们实际坐车是y = 10个小时,这样我们就得到一个误差,我们希望这个误差越小越好。

  • 得到损失
    L o s s = 1 2 ( q − y ) 2 Loss = \frac{1}{2}(q - y)^2 Loss=21(qy)2

  • 梯度
    ∂ L ∂ w = ∂ L ∂ q ∂ q ∂ w = ( q − y ) ∂ Q ( w ) ∂ w \frac{\partial L}{\partial w} = \frac{\partial L}{\partial q} \frac{\partial q}{\partial w} = (q - y) \frac{\partial Q(w)}{\partial w} wL=qLwq=(qy)wQ(w)

  • 梯度下降
    w t + 1 = w t − α ∂ L ∂ w ∣ w = w t w_{t+1} = w_t - \alpha \frac{\partial L}{\partial w} |_{w = w_t} wt+1=wtαwLw=wt

提出问题:上述算法必须完成整个旅途才能对模型做一次更新,假如没有完成全程,如何进行更新

假如我从广州做到西安,使用 Q ( W ) Q(W) Q(W)函数进行预测。预测值为q = 15小时 ,但是我坐了三个个小时到了武汉,中途下车不去西安,这时我该如何进行更新模型呢?

我到了武汉,还可以使用 Q ( W ) Q(W) Q(W)函数进行预测,预测值为q = 10小时

  • 模型最初的预测: Q ( W ) Q(W) Q(W) = 15小时
  • 我们可以使用武汉的时间进行更新模型的预测: Q ( W ) Q(W) Q(W) = 3小时(实际的时间) + 10小时(再进行预测的时间 = 13小时,我们将这个值称为TD target

TD target与最开始预测的q 同样也有一个误差,我们也可以利用这个误差进行更新模型。

TD target y = 13 y = 13 y=13
Loss : L o s s = 1 2 ( Q ( w ) − y ) 2 Loss = \frac{1}{2}(Q(w) - y)^2 Loss=21(Q(w)y)2

梯度 ∂ L ∂ w = ( 15 − 13 ) ∂ Q ( w ) ∂ w \frac{\partial L}{\partial w} = (15 - 13) \frac{\partial Q(w)}{\partial w} wL=(1513)wQ(w)

梯度下降
w t + 1 = w t − α ∂ L ∂ w ∣ w = w t w_{t+1} = w_t - \alpha \frac{\partial L}{\partial w} |_{w = w_t} wt+1=wtαwLw=wt

这个算法就是时差算法,它通过不断更新模型来最小化损失函数,从而提高模型的预测性能。

换成是强化学习也是同样的道理,我们不需要完成游戏全程也能更新参数。

并据此更新模型参数。

三、将TD算法应用到DQN中

再上述例子中,我们可以发现有以下的等式;

T 西安 → 广州 ≈ T 西安 → 武汉 + T 武汉 → 广州 T_{西安 \rightarrow{广州}} \approx T_{西安 \rightarrow{武汉}} + T_{武汉 \rightarrow{广州}} T西安广州T西安武汉+T武汉广州

其中 T 西安 → 广州 T_{西安 \rightarrow{广州}} T西安广州是模型预测的, T 西安 → 武汉 T_{西安 \rightarrow{武汉}} T西安武汉是实际时间, T 武汉 → 广州 T_{武汉 \rightarrow{广州}} T武汉广州是再进行预测的时间。

那么在深度强化学习中,也应该有一个等式。

Q ( s t , a t ; W ) ≈ R t + γ Q ( s t + 1 , a t + 1 ; W ) Q(s_t,a_t;W) \approx R_t + \gamma Q(s_{t+1},a_{t+1};W) Q(st,at;W)Rt+γQ(st+1,at+1;W)

模型的输出 Q ( s t , a t ; W ) Q(s_t,a_t;W) Q(st,at;W)是对回报 E ( U t ) \mathbb{E}(U_t) E(Ut)做出的估计,
模型的输出 Q ( s t + 1 , a t + 1 ; W ) Q(s_{t+1},a_{t+1};W) Q(st+1,at+1;W)是对回报 E ( U t + 1 ) \mathbb{E}(U_{t+1}) E(Ut+1)做出的估计,

所以:
Q ( s t , a t ; W ) ≈ E ( R t + γ Q ( s t + 1 , a t + 1 ; W ) ) Q(s_t,a_t;W) \approx \mathbb{E}(R_t + \gamma Q(s_{t+1},a_{t+1};W)) Q(st,at;W)E(Rt+γQ(st+1,at+1;W))

更新过程:

  • 开始的预测 Prediction: Q ( S t , a t ; w t ) Q(S_t, a_t; \mathbf{w}_t) Q(St,at;wt).
  • TD target:
    y t = r t + γ ⋅ Q ( S t + 1 , a t 1 + ; w t ) = r t + γ ⋅ max ⁡ a Q ( S t + 1 , a ; w t ) . y_t = r_t + \gamma \cdot Q(S_{t+1}, a_{t1+}; \mathbf{w}_t) = r_t + \gamma \cdot \max_a Q(S_{t+1}, a; \mathbf{w}_t). yt=rt+γQ(St+1,at1+;wt)=rt+γamaxQ(St+1,a;wt).
  • Loss: L t = 1 2 [ Q ( S t , a t ; w ) − y t ] 2 L_t = \frac{1}{2} [Q(S_t, a_t; \mathbf{w}) - y_t]^2 Lt=21[Q(St,at;w)yt]2.
  • 梯度更新Gradient descent: w t + 1 = w t − α ⋅ ∂ L t ∂ w ∣ w = w t \mathbf{w}_{t+1} = \mathbf{w}_t - \alpha \cdot \frac{\partial L_t}{\partial \mathbf{w}} \big|_{\mathbf{w}=\mathbf{w}_t} wt+1=wtαwLt w=wt.

通过这种方式,TD算法能够逐步减小预测误差,进而提高模型的预测性能,并帮助智能体在不断更新中趋向最优策略

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

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

相关文章

智能手表该存什么音频和文本?场景化存储指南

文章目录 为什么需要“场景化存储”?智能手表的定位手机替代不了的场景碎片化的场景存储 音频篇:智能手表该存什么音乐和音频?运动场景通勤场景健康场景 文本篇:哪些文字信息值得放进手表?(部分情况可使用图…

液态神经网络技术指南

一、引言 1.从传统神经网络到液态神经网络 神经网络作为深度学习的核心工具,在图像识别、自然语言处理、推荐系统等领域取得了巨大成功。尤其是卷积神经网络(CNN)、循环神经网络(RNN)、长短期记忆网络(LS…

hive通过元数据库删除分区操作步骤

删除分区失败: alter table proj_60_finance.dwd_fm_ma_kpi_di_mm drop partition(year2025,month0-3,typeADJ); 1、查询分区的DB_ID、TBL_ID – 获取数据库ID-26110 SELECT DB_ID FROM DBS WHERE NAME ‘proj_60_finance’; – 获取表ID-307194 SELECT TBL_ID FR…

1990-2019年各地级市GDP数据

1990-2019年各地级市GDP数据 1、时间:1990-2019年 2、来源:城市年鉴 3、指标:行政区划代码、年份、省份、城市、经度、纬度、地区生产总值(万元) 4、范围:250地级市 5、指标解释:地区生产总值(Gross R…

沧州铁狮子

又名“镇海吼”,是中国现存年代最久、形体最大的铸铁狮子,具有深厚的历史文化底蕴和独特的艺术价值。以下是关于沧州铁狮子的详细介绍: 历史背景 • 铸造年代:沧州铁狮子铸造于后周广顺三年(953年)&#…

《Java八股文の文艺复兴》第十一篇:量子永生架构——对象池的混沌边缘(终极试炼·完全体)

Tags: - Java高并发 - 量子架构 - 混沌工程 - 赛博修真 - 三体防御 目录: 卷首语:蝴蝶振翅引发的量子海啸 第一章:混沌初开——对象池的量子涅槃(深度扩展) 第二章:混沌计算——对象复活的降维打击&…

Java面试34-Kafka的零拷贝原理

在实际应用中,如果我们需要把磁盘中的某个文件内容发送到远程服务器上,那么它必须要经过几个拷贝的过程: 从磁盘中读取目标文件内容拷贝到内核缓冲区CPU控制器再把内核缓冲区的数据复制到用户空间的缓冲区在应用程序中,调用write…

TF-IDF忽略词序问题思考

自从开始做自然语言处理的业务,TF-IDF就是使用很频繁的文本特征技术,他的优点很多,比如:容易理解,不需要训练,提取效果好,可以给予大规模数据使用,总之用的很顺手,但是人…

SQL122 删除索引

alter table examination_info drop index uniq_idx_exam_id; alter table examination_info drop index full_idx_tag; 描述 请删除examination_info表上的唯一索引uniq_idx_exam_id和全文索引full_idx_tag。 后台会通过 SHOW INDEX FROM examination_info 来对比输出结果。…

Langchat平台知识库测试

平台介绍: LangChat是Java生态下企业级AIGC项目解决方案,集成RBAC和AIGC大模型能力,帮助企业快速定制AI知识库、企业AI机器人。 支持的AI大模型:Gitee AI / 阿里通义 / 百度千帆 / DeepSeek / 抖音豆包 / 智谱清言 / 零一万物 /…

Vue3 Composition API 深度开发指南

Vue3 Composition API 深度开发指南 响应式系统核心解析 1.1 响应式原理解构 Vue3 基于 Proxy 实现响应式追踪,其核心流程为: const reactiveHandler {get(target, key, receiver) {track(target, key) // 依赖收集return Reflect.get(target, key, …

基于自回归模型的酒店评论生成

《DeepSeek大模型高性能核心技术与多模态融合开发(人工智能技术丛书)》(王晓华)【摘要 书评 试读】- 京东图书 我们使用新架构的模型完成情感分类,可以看到,使用注意力机制可以很好地对特征进行抽取从而完成二分类的情感分类任务…

关于转置卷积

🧠 具体讲解神经网络中的转置卷积(Transposed Convolution) 🧭 1. 转置卷积的动机:为什么我们需要它? 标准卷积通常会降低特征图的空间尺寸(比如从 64x64 → 32x32),这对…

JavaScript 模块化详解( CommonJS、AMD、CMD、ES6模块化)

一.CommonJS 1.概念 CommonJS 规范概述了同步声明依赖的模块定义。这个规范主要用于在服务器端实现模块化代码组 织,但也可用于定义在浏览器中使用的模块依赖。CommonJS 模块语法不能在浏览器中直接运行;在浏览器端,模块需要提前编译打包处理…

TCP BBR 的优化

前段时间,老板发了篇资料,下面是我学习的相关记录整理。 https://aws.amazon.com/cn/blogs/china/talking-about-network-optimization-from-the-flow-control-algorithm/ PS:ubuntu24默认使用的tcp控制算法。还是 cubic sysctl net.ipv4.tc…

什么是异步?

什么是异步? 异步是一个术语,用于描述不需要同时行动或协调就能独立运行的流程。这一概念在技术和计算领域尤为重要,它允许系统的不同部分按自己的节奏运行,而无需等待同步信号或事件。在区块链技术中,异步是指网络中…

SSM婚纱摄影网的设计

🍅点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 SS…

石头剪刀布游戏

自己写的一个石头剪刀布游戏&#xff0c;如果有需要更改的地方请指出 #define _CRT_SECURE_NO_WARNINGS // scanf_s编写起来太过于麻烦&#xff0c;直接把这个警告关掉&#xff0c;便于编写。 #include <stdio.h> #include <stdlib.h> #include <time.h> //…

大数据系列之:Kerberos

大数据系列之&#xff1a;Kerberos 基本概念工作流程安全特性应用场景总结加密原理Kerberos认证流程更改您的密码授予账户访问权限票证管理Kerberos 票据属性使用 kinit 获取票据使用 klist 查看票据使用 kdestroy 销毁票据.k5identity 文件描述 Kerberos 是一种网络认证协议&a…

WPF 免费UI 控件HandyControl

示例效果和代码 直接可以用 Button 按钮 | HandyOrg 1.安装 , 输入 HandyControl 2.<!--配置HandyControl--> <!--配置HandyControl--> <ResourceDictionary Source"pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/> …