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

文章目录

  • 概览: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.hqwc.cn/news/334244.html

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

相关文章

正则表达式Regex

是什么&#xff1a;一句话&#xff0c;正则表达式是对字符串执行模式匹配的技术。 从一段字符串中提取出所有英文单词、数字、字母和数字。 如果采用传统方法&#xff1a;将字符串的所有字符分割成单个&#xff0c;根据ASCII码判断&#xff0c;在一定范围内就是字母&#xff…

Fiddler工具 — 10.Statistics(统计)面板

1、Statistics介绍 Statistics 页签显示当前用户选择的 Sessions 的汇总信息&#xff0c;包括&#xff1a;选择的 Sessions 总数、发送字节数、接收字节数、响应类型的汇总表、世界各地通过不同请求方式所需的时间等。 Statistics 分页还会统计请求和响应的其他一些信息,如&a…

QT qss文件设置样式

方式一 &#xff08;单个&#xff09; 方式二 &#xff08;全局&#xff09; 所有按钮都会采用这个样式。 方式三 &#xff08;qss文件&#xff09; 创建资源文件 创建qss文件&#xff08;Button.qss&#xff09; 引用qss文件 QApplication a(argc, argv);QString qss;QFile…

【漏洞复现】锐捷RG-UAC统一上网行为管理系统信息泄露漏洞

Nx01 产品简介 锐捷网络成立于2000年1月&#xff0c;原名实达网络&#xff0c;2003年更名&#xff0c;自成立以来&#xff0c;一直扎根行业&#xff0c;深入场景进行解决方案设计和创新&#xff0c;并利用云计算、SDN、移动互联、大数据、物联网、AI等新技术为各行业用户提供场…

Selenium自动化程序被检测为爬虫,怎么屏蔽和绕过

Selenium 操作被屏蔽 使用selenium自动化网页时&#xff0c;有一定的概率会被目标网站识别&#xff0c;一旦被检测到&#xff0c;目标网站会拦截该客户端做出的网页操作。 比如淘宝和大众点评的登录页&#xff0c;当手工打开浏览器&#xff0c;输入用户名和密码时&#xff0c…

Java后端开发——SSM整合实验

文章目录 Java后端开发——SSM整合实验一、常用方式整合SSM框架二、纯注解方式整合SSM框架 Java后端开发——SSM整合实验 一、常用方式整合SSM框架 1.搭建数据库环境&#xff1a;MySQL数据库中创建一个名称为ssm的数据库&#xff0c;在该数据库中创建一个名称为tb_book的表 …

2024年美国大学生数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

【算法系列 | 12】深入解析查找算法之—斐波那契查找

序言 心若有阳光&#xff0c;你便会看见这个世界有那么多美好值得期待和向往。 决定开一个算法专栏&#xff0c;希望能帮助大家很好的了解算法。主要深入解析每个算法&#xff0c;从概念到示例。 我们一起努力&#xff0c;成为更好的自己&#xff01; 今天第12讲&#xff0c;讲…

在wsl中安装miniconda

下载安装包 打卡miniconda的官网https://docs.conda.io/projects/miniconda/en/latest/,下载下来安装包&#xff0c;或者直接在乌班图中运行命令wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.2-0-Linux-x86_64.sh,等待下载完毕 安装 到下载目录下执行命令…

vue中鼠标拖动触发滚动条的移动

前言 在做后端管理系统中&#xff0c;像弹窗或大的表单时&#xff0c;经常会有滚动条的出现&#xff0c;但有些时候如流程、图片等操作时&#xff0c;仅仅使用鼠标拖动滚动条操作不太方便&#xff0c;如果使用鼠标拖拽图片或容器来触发滚动条的移动就比较方便了 功能设计 如…

【STM32F103】RCC复位和时钟控制

前言 之前介绍外设的时候总是没有提到RCC&#xff0c;但其实我们使用STM32的外设之前都需要做的一步就是打开外设时钟。原本想着没什么可说的&#xff0c;就是用什么外设的时候就在开头加一行代码打开外设时钟就好了。直到最近写到了TIM定时器&#xff0c;我才开始觉得应该说一…

Python解析参数的三种方法

今天我们分享的主要目的就是通过在 Python 中使用命令行和配置文件来提高代码的效率 Let’s go! 我们以机器学习当中的调参过程来进行实践&#xff0c;有三种方式可供选择。第一个选项是使用 argparse&#xff0c;它是一个流行的 Python 模块&#xff0c;专门用于命令行解析&…