强化学习的数学原理学习笔记 - 策略梯度(Policy Gradient)

news2024/11/15 15:55:32

文章目录

  • 概览:RL方法分类
  • 策略梯度(Policy Gradient)
    • Basic Policy Gradient
      • 目标函数1:平均状态值
      • 目标函数2:平均单步奖励
      • 🟡PG梯度计算
    • 🟦REINFORCE


本系列文章介绍强化学习基础知识与经典算法原理,大部分内容来自西湖大学赵世钰老师的强化学习的数学原理课程(参考资料1),并参考了部分参考资料2、3的内容进行补充。

系列博文索引:

  • 强化学习的数学原理学习笔记 - RL基础知识
  • 强化学习的数学原理学习笔记 - 基于模型(Model-based)
  • 强化学习的数学原理学习笔记 - 蒙特卡洛方法(Monte Carlo)
  • 强化学习的数学原理学习笔记 - 时序差分学习(Temporal Difference)
  • 强化学习的数学原理学习笔记 - 值函数近似(Value Function Approximation)
  • 强化学习的数学原理学习笔记 - 策略梯度(Policy Gradient)
  • 强化学习的数学原理学习笔记 - Actor-Critic

参考资料:

  1. 【强化学习的数学原理】课程:从零开始到透彻理解(完结)(主要)
  2. Sutton & Barto Book: Reinforcement Learning: An Introduction
  3. 机器学习笔记

*注:【】内文字为个人想法,不一定准确

概览:RL方法分类

图源:https://zhuanlan.zhihu.com/p/36494307
*图源:https://zhuanlan.zhihu.com/p/36494307

策略梯度(Policy Gradient)

在先前的内容中,策略用表(tabular)的形式进行表达,其也可以用函数的形式进行表达(尤其是当状态空间或动作空间连续或非常大时),优势在于降低存储开销和提升泛化能力。

之前的方法(值函数近似)称之为Value-based,而策略梯度(Policy Gradient)和Actor-Critic均为Policy-based。Value-based方法围绕状态值/动作值设计,而Policy-based优化关于策略的目标函数,从而直接得到最优策略。

Basic Policy Gradient

将策略表示为参数化函数: π ( a ∣ s , θ ) \pi(a|s, \theta) π(as,θ),其中 θ ∈ R m \theta \in \mathbb{R} ^m θRm为参数向量, π \pi π是关于 θ \theta θ的函数。
*其他写法: π ( a , s , θ ) \pi(a,s, \theta) π(a,s,θ) π θ ( a ∣ s ) \pi_\theta(a|s) πθ(as) π θ ( a , s ) \pi_\theta(a,s) πθ(a,s)

与tabular representation的区别:

  1. 最优策略:不是能够最大化每个状态值的策略,而是能够最大化特定scalar metrics的策略
  2. 动作概率:不能直接获取,需要进行计算
  3. 策略更新:不能直接更新,需要通过改变参数 θ \theta θ来进行改变

策略梯度方法通过优化指定目标函数 J ( θ ) J(\theta) J(θ),直接得到最优策略:
θ t + 1 = θ t + α ∇ θ J ( θ t ) \theta_{t+1} = \theta_t + \alpha \nabla_\theta J(\theta_t) θt+1=θt+αθJ(θt)
目标函数 J ( θ ) J(\theta) J(θ)通常有以下两种类型:平均状态值 v ˉ π \bar{v}_\pi vˉπ和平均单步奖励 r ˉ π \bar{r}_\pi rˉπ。实际上,当折扣因子 γ < 1 \gamma<1 γ<1时,二者是等价的: r ˉ π = ( 1 − γ ) v ˉ π \bar{r}_\pi = (1- \gamma) \bar{v}_\pi rˉπ=(1γ)vˉπ

目标函数1:平均状态值

平均状态值(average state value / average value):
v ˉ π = ∑ s ∈ S d ( s ) v π ( s ) = E [ v π ( S ) ] \bar{v}_\pi = \sum_{s\in{\mathcal{S}}} d(s) v_\pi(s) = \mathbb{E}[v_\pi(S)] vˉπ=sSd(s)vπ(s)=E[vπ(S)]
其中, d ( s ) ≥ 0 d(s) \geq 0 d(s)0 ∑ s ∈ S d ( s ) = 1 \textstyle\sum_{s\in{\mathcal{S}}} d(s) =1 sSd(s)=1,因此 d ( s ) d(s) d(s)既可以看作是状态 s s s的权重,也可以看作是随机变量 S S S的概率分布。

其他形式: v ˉ π = E [ ∑ t = 0 ∞ γ t R t + 1 ] \bar{v}_\pi = \mathbb{E} \Big[\sum_{t=0}^{\infin} \gamma^t R_{t+1} \Big] vˉπ=E[t=0γtRt+1]

向量形式: v ˉ π = d T v π \bar{v}_\pi = d^T v_\pi vˉπ=dTvπ

在常见的情况下, d d d是取决于 π \pi π的平稳分布,即 d π ( s ) d_\pi(s) dπ(s),其具有以下性质:
d π T P π = d π T d^T_\pi P_\pi = d^T_\pi dπTPπ=dπT
其中, P π P_\pi Pπ是状态转移概率矩阵。

目标函数2:平均单步奖励

平均单步奖励(average one-step reward / average reward)
r ˉ π = ∑ s ∈ S d ( s ) r π ( s ) = E [ r π ( S ) ] \bar{r}_\pi = \sum_{s\in{\mathcal{S}}} d(s) r_\pi(s) = \mathbb{E}[r_\pi(S)] rˉπ=sSd(s)rπ(s)=E[rπ(S)]
其中, S ∼ d π S \sim d_\pi Sdπ d π d_\pi dπ为平稳分布。 r π ( s ) = ∑ a ∈ A π ( a ∣ s ) r ( s , a ) r_\pi(s) = \sum_{a\in\mathcal{A}} \pi(a|s) r(s, a) rπ(s)=aAπ(as)r(s,a)为策略 π \pi π在状态 s s s下取得的平均单步奖励,而 r ( s , a ) = E [ R ∣ s , a ] = ∑ r r p ( r ∣ s , a ) r(s, a) = \mathbb{E} [R|s, a] = \sum_r r p(r | s, a) r(s,a)=E[Rs,a]=rrp(rs,a)

另一种形式:
假设agent遵循一个策略生成了奖励为 ( R t + 1 , R t + 2 , ⋯   ) (R_{t+1}, R_{t+2}, \cdots) (Rt+1,Rt+2,)的trajectory,其平均单步奖励为:
lim ⁡ n → ∞ 1 n E [ ∑ k = 1 n R t + k ∣ S t = s 0 ] \lim_{n\rarr\infin} \frac{1}{n} \mathbb{E} \Big[ \sum_{k=1}^{n} R_{t+k} | S_t = s_0 \Big] limnn1E[k=1nRt+kSt=s0]
其中, s 0 s_0 s0为该trajectory的起始状态。考虑无穷多步的极限,上式等价于【似乎是与平稳随机过程有关,时间平均等于统计平均,不确定】:
lim ⁡ n → ∞ 1 n E [ ∑ k = 1 n R t + k ] = r ˉ π \lim_{n\rarr\infin} \frac{1}{n} \mathbb{E} \Big[ \sum_{k=1}^{n} R_{t+k} \Big] = \bar{r}_\pi limnn1E[k=1nRt+k]=rˉπ

🟡PG梯度计算

策略梯度方法的梯度计算可以统一总结为下式:
∇ θ J ( θ ) = ∑ s ∈ S η ( s ) ∑ a ∈ A ∇ θ π ( a ∣ s , θ ) q π ( s , a ) \nabla_\theta J(\theta) = \sum_{s\in\mathcal{S}} \eta (s) \sum_{a\in\mathcal{A}} \nabla_\theta \pi (a|s, \theta) q_\pi(s, a) θJ(θ)=sSη(s)aAθπ(as,θ)qπ(s,a)
其中:

  • J ( θ ) J(\theta) J(θ)可以为 v ˉ π \bar{v}_\pi vˉπ r ˉ π \bar{r}_\pi rˉπ v ˉ π 0 \bar{v}_\pi^0 vˉπ0
  • = = =可以为相等、约等 ≈ \approx 、成比例 ∝ \propto
  • η \eta η是状态的分布或权重(如上文中的 d π d_\pi dπ

进一步地,可以基于下式计算梯度
∇ θ J ( θ ) = E [ ∇ θ ln ⁡ π ( A ∣ S , θ ) q π ( S , A ) ] \nabla_\theta J(\theta) = \mathbb{E} [\nabla_\theta \ln\pi (A|S, \theta) q_\pi(S, A) ] θJ(θ)=E[θlnπ(AS,θ)qπ(S,A)]
其中, S ∼ η S\sim\eta Sη A ∼ π ( A ∣ S , θ ) A\sim\pi(A|S, \theta) Aπ(AS,θ)。通过随机采样的方式估计期望,则有:
∇ θ J ( θ ) ≈ ∇ θ ln ⁡ π ( A ∣ S , θ ) q π ( S , A ) \nabla_\theta J(\theta) \approx \nabla_\theta \ln\pi (A|S, \theta) q_\pi(S, A) θJ(θ)θlnπ(AS,θ)qπ(S,A)

注意:为了计算对数 ln ⁡ \ln ln,对所有的 s , a , θ s, a,\theta s,a,θ,策略必须满足: π ( a ∣ s , θ ) > 0 \pi(a|s, \theta) > 0 π(as,θ)>0。即:策略必须是随机性(stochastic)的,且为探索性(exploratory)的。(*确定性策略见后续介绍的Actor-Critic中的DPG)
这可以通过softmax实现,将向量从 ( − ∞ , + ∞ ) (-\infin,+\infin) (,+)限界至 ( 0 , 1 ) (0,1) (0,1)。softmax限界后的形式为:
π ( a ∣ s , θ ) = e h ( s , a , θ ) ∑ a ′ ∈ A e h ( s , a ′ , θ ) \pi(a|s, \theta) = \frac{e^{h(s, a, \theta)}}{\textstyle\sum_{a' \in \mathcal{A}} e^{h(s, a', \theta)}} π(as,θ)=aAeh(s,a,θ)eh(s,a,θ)
其中, h ( s , a , θ ) h(s, a, \theta) h(s,a,θ)类似于特征函数,具体由神经网络确定。

推导:
已知 d ln ⁡ x d x = 1 x \frac{\mathrm{d} \ln x}{\mathrm{d} x} = \frac{1}{x} dxdlnx=x1,则 ∇ ln ⁡ f ( x ) = ∇ f ( x ) f ( x ) \nabla \ln f(x) = \frac{\nabla f(x)}{f(x)} lnf(x)=f(x)f(x),故有: ∇ θ ln ⁡ π ( a ∣ s , θ ) = ∇ θ π ( a ∣ s , θ ) π ( a ∣ s , θ ) \nabla_\theta \ln \pi(a|s, \theta) = \frac{\nabla_\theta \pi(a|s, \theta)}{\pi(a|s, \theta)} θlnπ(as,θ)=π(as,θ)θπ(as,θ)
进一步地, π \pi π的梯度可以计算为: ∇ θ π ( a ∣ s , θ ) = π ( a ∣ s , θ ) ∇ θ ln ⁡ π ( a ∣ s , θ ) {\nabla_\theta \pi(a|s, \theta)} = {\pi(a|s, \theta)} \nabla_\theta \ln \pi(a|s, \theta) θπ(as,θ)=π(as,θ)θlnπ(as,θ)
image.png

🟦REINFORCE

策略梯度(PG)方法基于梯度上升方法最大化目标函数:
θ t + 1 = θ t + α E [ ∇ θ ln ⁡ π ( A ∣ S , θ t ) q π ( S , A ) ] \theta_{t+1} = \theta_t + \alpha \mathbb{E} \big[ \nabla_\theta \ln\pi (A|S, \theta_t) q_\pi(S, A) \big] θt+1=θt+αE[θlnπ(AS,θt)qπ(S,A)]

实际中,通过随机采样的方式估计期望与 q π ( s t , a t ) q_\pi(s_t, a_t) qπ(st,at),有:
θ t + 1 = θ t + α ∇ θ ln ⁡ π ( a t ∣ s t , θ t ) q t ( s t , a t ) \theta_{t+1} = \theta_t + \alpha \nabla_\theta \ln\pi (a_t|s_t, \theta_t) q_t(s_t, a_t) θt+1=θt+αθlnπ(atst,θt)qt(st,at)

注意: A ∼ π ( A ∣ S , θ ) A\sim\pi(A|S,\theta) Aπ(AS,θ) a t a_t at的采样依赖于状态 s t s_t st下的策略 π ( θ t ) \pi(\theta_t) π(θt),因此策略梯度是on-policy方法。

估计 q π ( s t , a t ) q_\pi(s_t,a_t) qπ(st,at)有两种方法:

  • 蒙特卡洛(MC):REINFORCE(策略梯度的代表性算法)
  • 时序差分(TD):Actor-Critic系列算法

REINFORCE算法步骤(伪代码):
初始化: π ( a ∣ s , θ ) \pi(a|s, \theta) π(as,θ) γ ∈ ( 0 , 1 ) \gamma \in (0,1) γ(0,1) α > 0 \alpha >0 α>0
目标:最大化 J ( θ ) J(\theta) J(θ)
步骤:在第 k k k次迭代中,选择策略 π ( θ k ) \pi(\theta_k) π(θk)的起始状态 s 0 s_0 s0,设其episode为 { s 0 , a 0 , r 1 , ⋯   , s T − 1 , a T − 1 , r T } \{ s_0, a_0, r_1, \cdots, s_{T-1}, a_{T-1}, r_T \} {s0,a0,r1,,sT1,aT1rT}

  • 在每个时间步 t = 0 , 1 , ⋯   , T − 1 t=0,1,\cdots,T-1 t=0,1,,T1
    • 值更新(蒙特卡洛方法): q t ( s t , a t ) = ∑ k = t + 1 T γ k − t − 1 r k q_t(s_t,a_t) = \textstyle \sum_{k=t+1}^T \gamma^{k-t-1} r_k qt(st,at)=k=t+1Tγkt1rk
    • 策略更新:更新参数 θ t + 1 \theta_{t+1} θt+1,公式见上
      • *注意:蒙特卡洛是offline的,需要整个episode的数据,所以这里更新完参数后不立即使用策略去采集数据
  • θ k = θ T \theta_k = \theta_T θk=θT,在下次迭代中生成下一组episode的数据

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

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

相关文章

硬件工程师软实力提升篇

大家好,这里是大话硬件。 新的一年,你规划好了2024年的学习计划吗? 不知道大家是否还记得2023年1月1日在大话硬件公众号发表的文章《祝大话硬件的同学们元旦快乐!》。如果没印象的话,可以点击蓝色字体阅读。 当时写那篇文章的初衷是因为那时候很多人都在群里说,一年结…

IC验证——perl脚本file_assistant——批量修改文件

1 脚本名称 file_assistant 2 脚本路径 scripts/bin/file_assistant 3 脚本参数说明 次序 参数名 说明 1 file_type (v&#xff1b;sv&#xff1b;c&#xff1b;all) 指定脚本要修改的文件类型&#xff0c;目前支持 .v&#xff1b;.sv&#xff1b;.c&#xff08;后续可…

MISGAN

MISGAN:通过生成对抗网络从不完整数据中学习 代码、论文、会议发表: ICLR 2019 摘要: 生成对抗网络(GAN)已被证明提供了一种对复杂分布进行建模的有效方法,并在各种具有挑战性的任务上取得了令人印象深刻的结果。然而,典型的 GAN 需要在训练期间充分观察数据。在本文中…

mac上部署单体hbase

1. 简介 HBase 是一个开源的、分布式的、版本化的典型非关系型数据库。它是 Google BigTable 的开源实现&#xff0c;并且是 Apache 基金会的 Hadoop 项目的一部分1。HBase 在 Hadoop Distributed File System (HDFS) 上运行&#xff0c;作为一个列式存储非关系数据库管理系统…

[zabbix] 分布式应用之监控平台zabbix的认识与搭建

一、监控系统的相关知识 1.1 监控系统运用的原因 当我们需要实时关注与其相关的各项指标是否正常&#xff0c;往往存在着很多的服务器、网络设备等硬件资源&#xff0c;如果我们想要能够更加方便的、集中的监控他们&#xff0c;zabix可以实现集中监控管理的应用程序 监控的初…

每日算法打卡:蚂蚁感冒 day 13

文章目录 原题链接题目描述输入格式输出格式数据范围输入样例1&#xff1a;输出样例1&#xff1a;输入样例2&#xff1a;输出样例2&#xff1a; 题目分析示例代码 原题链接 1211. 蚂蚁感冒 题目难度&#xff1a;简单 题目来源&#xff1a;第五届蓝桥杯省赛C A/B组 题目描述…

python中的Quene使用方法,包含多线程和多进程

在Python中&#xff0c;队列&#xff08;Queue&#xff09;是一种抽象的数据类型&#xff0c;它遵循先进先出&#xff08;FIFO&#xff09;的原则。队列是一种特殊的线性表&#xff0c;只允许在表的前端&#xff08;front&#xff09;进行删除操作&#xff0c;而在表的后端&…

Web前端 ---- 【Vue3】ref和reactive实现响应式的区别和联系

目录 前言 setup ref 基本数据类型 对象形式 reactive ref和reactive的区别与联系 前言 本文介绍函数ref和函数reactive实现响应式 setup 在介绍ref和reactive之前&#xff0c;先介绍setup,vue3新引入的配置项。在该配置项中&#xff0c;在vue2中的data、methods、comput…

DNS 正/反向解析 主从复制 分离解析

一 DNS概念它作为将域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使人更方便地访问互联网 每一台 DNS 服务器都只负责管理一个有限范围 根域: 全球根服务器节点只有13个,10个在美国&#xff0c;1个荷兰&#xff0c;1个瑞典&#xff0c;1个日本 一级域名&#xff…

stm32学习笔记:DMA

每个DMA通道硬件触发源是不一样的&#xff0c;要使用某个外设的硬件触发源&#xff0c;就必须使用它连接的那个通道 12个独立可配置的通道&#xff1a;DMA1(7个通道)&#xff0c;DMA2(5个通道) 每个通道都支持软件触发和特定的硬件触发 C8T6 DMA资源&#xff1a;DMA1 &#xff…

MSF流量加密

1、背景介绍 在MSF中生成shell&#xff0c;并上线运行时。都是通过http https tcp等协议传输。虽然MSF本身会对流量进行加密&#xff0c;但MSF太出名以致于其加密特征容易被IPS&#xff0c;WAF等可以检测带有攻击的特征的设备拦截或记录。 2、生成 SSL 证书 openssl req -x50…

vue前端开发自学,借助KeepAlive标签保持组件的存活

vue前端开发自学,借助KeepAlive标签保持组件的存活&#xff01;如果不想让组件在切换的时候&#xff0c;被默认操作&#xff08;卸载掉了&#xff09;。他们需要使用这个这个表情哦。 下面给大家看看代码情况。 <template><h3>ComA</h3><p>{{ messag…

Arduino开发实例-AS608光学指纹传感器驱动

AS608光学指纹传感器驱动 文章目录 AS608光学指纹传感器驱动1、AS608光学指纹传感器介绍2、硬件准备及接线3、代码实现3.1 指纹录入3.2 指纹匹配验证1、AS608光学指纹传感器介绍 AS608 光学指纹传感器可用于扫描指纹,它也可以通过串行通信将处理后的数据发送到微控制器。 所有…

浏览器深色模式

1、Edge强制深色模式 1、先在edge里设定成深色模式 设置浏览器中的深色设置 但这种方式设置后很多网站仍是白色的背景 2、实验室设置强制深色 网址栏 输入 edge://flags搜索 dark 选择 enabled 重启 2、Chrome强制深色模式 浏览器输入 Chrome深色设置 chrome://flags/#…

基于WebSocket双向通信技术实现-下单提醒和催单(后端)

学习复盘和总结项目亮点。 扩展&#xff1a;该功能能应用在&#xff0c;各种服务类项目中。&#xff08;例如&#xff1a;酒店、洗脚城等系ERP系中提醒类服务&#xff09; 4. 来单提醒 4.1 需求分析和设计 用户下单并且支付成功后&#xff0c;需要第一时间通知外卖商家。通…

Deit:知识蒸馏与vit的结合 学习笔记(附代码)

论文地址&#xff1a;https://arxiv.org/abs/2012.12877 代码地址&#xff1a;GitHub - facebookresearch/deit: Official DeiT repository 1.是什么&#xff1f; DeiT&#xff08;Data-efficient Image Transformer&#xff09;是一种用于图像分类任务的神经网络模型&#…

软件测试|教你使用Python绘制正多边形

简介 绘制正多边形是Python图形编程的基本任务之一。在本文中&#xff0c;我将为你提供一个使用Python绘制正多边形的详细教程&#xff0c;并提供一个示例代码。我们将使用Python的Turtle库来进行绘制。 步骤1&#xff1a;导入Turtle库 我们需要先安装好Python环境&#xff…

PyTorch Tutorial

本文作为博客“Transformer - Attention is all you need 论文阅读”的补充内容&#xff0c;阅读的内容来自于 https://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.html#recommended-preparation 建议的准备流程。 Deep Learning with PyTorch: …

Linux第21步_取消鼠标中键的复制粘贴功能

在ubuntu18.04操作系统中&#xff0c;选中文本后&#xff0c;若按下鼠标中键&#xff0c;就可以执行复制粘贴&#xff0c;相当于 CtrlshiftC 后又按了 CtrlshiftV。在Linux系统中&#xff0c;基本上都是这么配置的。在windows系统中&#xff0c;我们习惯用Ctrl-C复制&#xff0…

POSTGRESQL中ETL、fdw的平行替换

POSTGRESQL中ETL、fdw的平行替换 01、简介 “ 在我前两次的文章中&#xff0c;说到postgresql对于python的支持&#xff0c;其实很多功能也就可以封装进入的postgresql数据库中去。比如fdw、etl等&#xff0c;本文将以此为叙述点&#xff0c;进行演示展示” 在postgresql数据…