当前位置: 首页 > ds >正文

【RL强化学习】Policy-Based Reinforcement Learning 策略学习

概述

既然是学习算法,那就离不开网络和迭代
策略学习的核心就是用神经网络去逼近真实的策略函数
Usepolicynetworkπ(a∣s;θ)toapproximateπ(a∣s)Use\ policy\ network\ \pi(a \mid s;\theta)\ to\ approximate\ \pi(a \mid s) Use policy network π(as;θ) to approximate π(as)

具体实现

pollicy network主要干四件事:

  1. 接受当前状态
  2. 通过某种网络提取当前状态的特征向量(压缩数据、提取重要信息)
  3. 将当前状态对应的特征向量通过类似于稠密连接、多层感知机等网络,输出策略中包含的所有action的特征数
  4. 最后用softmax对特征数做归一化,得到最终的概率(即当前状态下,决策的概率密度函数)

其中,决策的概率密度函数满足
∑a∈Aπ(a∣s;θ)=1\sum_{a \in \mathcal{A}}\pi(a \mid s;\theta)=1 aAπ(as;θ)=1

在基础概念一章中,我讲过状态价值函数 state-value function,它表示的是在状态 sts_tst下,使用策略π\piπ的回报期望
那么在这里可以将他扩展为
Vπ(st;θ)=EA[Qπ(st,A)]=∑aπ(a∣s;θ)∑s′P(s′∣s,a)[R(s,a,s′)+γVπ(s′;θ)]V_{\pi}(s_t;\theta)=\mathbb{E_A}[Q_{\pi}(s_t, A)]=\sum_{a}\pi(a|s;\theta)\sum_{s'}{P(s'|s,a)}\Bigl[R(s,a,s')+\gamma V_{\pi}(s';\theta)\Bigr]Vπ(st;θ)=EA[Qπ(st,A)]=aπ(as;θ)sP(ss,a)[R(s,a,s)+γVπ(s;θ)]

就此引出策略学习的核心

  • 通过网络的迭代,使得Vπ(st;θ)V_{\pi}(s_t;\theta)Vπ(st;θ)尽可能的大
  • 公式表达:策略期望回报 J(θ)=ES[V(S;θ)]策略期望回报\ J(\theta)=\mathbb{E}_S[V(S;\theta)]策略期望回报 J(θ)=ES[V(S;θ)] , Learn θ\thetaθ that maximizes J(θ)J(\theta)J(θ)
  • 说人话就是:通过优化策略网络参数,使agent无论处于什么状态下,获得的期望回报最大(每个状态下都有对应的状态价值,对所有状态价值进行概率加权求和,就是我们的J(θ)J(\theta)J(θ)
  • 此时J的值仅和网络参数相关,参数越好,agent最终能获得的回报期望就越大

Policy gradient ascent

策略梯度算法
θ←θ+β⋅∂V(s;θ)∂θ\theta \leftarrow \theta + \beta \cdot \frac{\partial V(s;\theta)}{\partial \theta} θθ+βθV(s;θ)
思路:每观测到一个状态sss,都通过上述公式的梯度上升来更新θ\thetaθ
其中,学习率β>0\beta > 0β>0

众所周知,有一个常用的学习算法叫做随机梯度下降,它常用于线性回归,或者一些简单模型的拟合上;那么在这里不使用J对θ\thetaθ的导数,反而使用V对θ\thetaθ的导数的原因与此类似,可以认为V就是对J的一次小批量采样,且具有随机性,用来做学习的效果更好(随机小批量的优点)

另外,关于什么时候梯度上升,什么时候梯度下降
如果认为被求偏导的函数越大越好,那就是梯度上升,比如这里的状态价值函数
如果认为被求偏导的函数越小越好,那就是梯度下降,比如损失函数

Policy gradient

具体推导见这篇文章
这一部分在b站的【强化学习】策略梯度方法-策略梯度定理中,讲的还不错,最后也给出了具体的通项公式:
∇J(θ)≡∂V(s;θ)∂θ=∑x∈S∑k=0∞Pr(s→x,k,π)∑a∂π(a∣x)∂θqπ(x,a),令:η(s)=∑k=0∞Pr(s→x,k,π),μ用于对∑μ做归一化,则有 ∂V(s;θ)∂θ∝∑s∈Sμ(s)⋅∑a∇θπ(a∣s)qπ(s,a),=Eπ[∑a∇π(a∣St)⋅qπ(St,a)]=Eπ[∑aπ(a∣St)∇π(a∣St)π(a∣St)⋅qπ(St,a)]=Eπ[∇π(A∣St)π(A∣St)⋅qπ(St,A)],(∇logπ(At∣St)=∇π(A∣St)π(A∣St))=Eπ[∇logπ(At∣St)⋅qπ(St,A)]=Eπ[Gt⋅∇logπ(At∣St)]\nabla J(\theta)\equiv \frac{\partial V(s;\theta)}{\partial \theta}=\sum_{x \in S}\sum_{k=0}^{\infty}P_r(s\rightarrow x,k,\pi)\sum_a\frac{\partial \pi(a\mid x)}{\partial \theta}q_{\pi}(x,a), \\[0.4cm] 令:\eta(s)=\sum_{k=0}^{\infty}P_r(s\rightarrow x,k,\pi), \mu 用于对\sum \mu做归一化,\\[0.4cm] 则有\ \frac{\partial V(s;\theta)}{\partial \theta}\propto \sum_{s \in S}\mu(s) \cdot \sum_a \nabla_{\theta} \pi(a \mid s)q_{\pi}(s,a), \\[0.4cm] =\mathbb{E}_{\pi}\bigl[\sum_a \nabla \pi(a\mid S_t)\cdot q_{\pi}(S_t,a) \bigr]\\[0.4cm] =\mathbb{E}_{\pi}\bigl[\sum_a \pi(a\mid S_t) \frac{\nabla \pi(a\mid S_t)}{\pi(a\mid S_t)}\cdot q_{\pi}(S_t,a) \bigr]\\[0.4cm] =\mathbb{E}_{\pi}\bigl[\frac{\nabla \pi(A\mid S_t)}{\pi(A\mid S_t)}\cdot q_{\pi}(S_t,A) \bigr], \bigl(\nabla log \pi(A_t|S_t)=\frac{\nabla \pi(A\mid S_t)}{\pi(A\mid S_t)}\bigr) \\[0.4cm] =\mathbb{E}_{\pi}\bigl[\nabla log \pi(A_t|S_t)\cdot q_{\pi}(S_t,A) \bigr]\\[0.4cm] =\mathbb{E}_{\pi}\bigl[G_t \cdot \nabla log \pi(A_t|S_t) \bigr] J(θ)θV(s;θ)=xSk=0Pr(sx,k,π)aθπ(ax)qπ(x,a)令:η(s)=k=0Pr(sx,k,π)μ用于对μ做归一化,则有 θV(s;θ)sSμ(s)aθπ(as)qπ(s,a)=Eπ[aπ(aSt)qπ(St,a)]=Eπ[aπ(aSt)π(aSt)π(aSt)qπ(St,a)]=Eπ[π(ASt)π(ASt)qπ(St,A)],(logπ(AtSt)=π(ASt)π(ASt))=Eπ[logπ(AtSt)qπ(St,A)]=Eπ[Gtlogπ(AtSt)]
其中,第一行是通项公式,第二行是求解梯度方向的最简公式

Pr(s→x,k,π)P_r(s\rightarrow x,k,\pi)Pr(sx,k,π)的意思是,agent遵循策略π\piπ,经过k步,从状态s转移到状态x的概率,它等价于∑aπ(a∣s)p(s′∣s,a)\sum_{a}\pi(a|s)p(s' \mid s,a)aπ(as)p(ss,a),其中∑a\sum_{a}a被隐藏在了使用策略π\piπ的k步里,而k→∞k \rightarrow \inftyk则是为连续策略函数准备的,因为从一个状态过渡到另一个状态可以分解为无数次决策

将连加改期望是因为期望可以通过采样取平均的方式获得数据

注意上述公式中,所有的π\piπ都是关于θ\thetaθ的函数,上面的公式中全都省略了

Calculate Policy Gradient

  • 针对离散系统(离散策略,即策略只能做出有限种action)
    令f(a,θ)=∇θπ(a∣s)qπ(s,a)对每个决策的梯度求和:∂V(s;θ)∂θ=f(a2,θ)+f(a1,θ)⋯+f(an,θ)令f(a,\theta)=\nabla_{\theta} \pi(a \mid s)q_{\pi}(s,a) \\[0.4cm] 对每个决策的梯度求和:\frac{\partial V(s;\theta)}{\partial \theta}=f(a_2,\theta)+f(a_1,\theta)\dots +f(a_n,\theta) f(a,θ)=θπ(as)qπ(s,a)对每个决策的梯度求和:θV(s;θ)=f(a2,θ)+f(a1,θ)+f(an,θ)

  • 针对连续策略
    由于没有办法对一个神经网络做定积分求GtG_tGt,也就是期望,因此我们需要做蒙特卡洛近似,以试探这个期望的具体值

    1. 按照策略函数pipipi,即action的概率密度函数做随机抽样
    2. 将每次抽样的结果a^\hat{a}a^代入g(a^,θ)=∇logπ(a^∣St)⋅qπ(St,a^)g(\hat{a},\theta)=\nabla log \pi(\hat{a}|S_t)\cdot q_{\pi}(S_t,\hat{a})g(a^,θ)=logπ(a^St)qπ(St,a^)
    3. g(a^,θ)g(\hat{a},\theta)g(a^,θ)求期望,就是近似的∂V(s;θ)∂θ\frac{\partial V(s;\theta)}{\partial \theta}θV(s;θ)

    从中也可以看出,g(a^,θ)g(\hat{a},\theta)g(a^,θ)是对∂V(s;θ)∂θ\frac{\partial V(s;\theta)}{\partial \theta}θV(s;θ)一次无偏估计

最后就是用得到的准确/近似梯度去更新网络参数
在这里插入图片描述

最后的问题

我们没有Qπ(s,a)Q_{\pi}(s,a)Qπ(s,a)的具体表达式,因此不能直接求得动作价值函数
通常有两个方案:

  1. 让程序根据策略π\piπ将系统执行到结束,并记录这过程中的所有奖励并求和;
  2. 用另一个网络去拟合Qπ(s,a)Q_{\pi}(s,a)Qπ(s,a),然后直接得出结果 而这就引出了下一个章节Actor-Critic 联合训练
http://www.xdnf.cn/news/15720.html

相关文章:

  • 知网学术不端论文检测查重助手(Windows)
  • [MRCTF2020]PYWebsite
  • Kubernetes (k8s)环境重启Pod方式总结
  • 访问网页的全过程笔记
  • SenseGlove力反馈手套:医疗、生产制造、军事模拟与远程机器人控制新革命
  • 游戏开发中防止“范围蔓延”
  • 部分排序算法的Java模拟实现(复习向,非0基础)
  • 多态,内部类(匿名内部类),常用API(1)
  • 推荐《Python 编程:从入门到实践》之Python编程的基础知识
  • H3CNE综合实验之机器人
  • Swift6.0 - 5、基本运算符
  • vue的provide和inject
  • 对称二叉树、二叉树直径
  • el-input 回显怎么用符号¥和变量拼接展示?
  • Golang 并发快速上手
  • (新手友好)MySQL学习笔记(完):事务和锁
  • 自学中医笔记(一)
  • NO.6数据结构树|二叉树|满二叉树|完全二叉树|顺序存储|链式存储|先序|中序|后序|层序遍历
  • MH32F103A单片机 可兼容替代STMCCT6/RCT6/RBT6,增强型
  • 【Android】TextView的使用
  • 大语言模型幻觉检测:语义熵揭秘
  • webpack将组件vue进行编译混淆,并能正常使用编译之后的文件
  • AR智能巡检:电力运维的数字化变革
  • Ansible 查看PostgreSQL的版本
  • 编译原理第四到五章(知识点学习/期末复习/笔试/面试)
  • 二重循环:输入行数,打印直角三角形和倒直角三角形
  • UE5 相机后处理材质与动态参数修改
  • 创建第二大脑的关键还是方法
  • xss-labs练习
  • Python+Selenium自动化