不等式视角下的策略梯度算法

智数追云人
• 阅读 883
本文首发于:行者AI

强化学习(Reinforcement Learning,RL),也叫增强学习,是指一类从(与环境)交互中不断学习的问题以及解决这类问题的方法。强化学习问题可以描述为一个智能体从与环境的交互中不断学习以完成特定目标(比如取得最大奖励值)。 和深度学习类似,强化学习中的关键问题也是贡献度分配问题[1],每一个动作并不能直接得到监督信息,需要通过整个模型的最终监督信息(奖励)得到,并且有一定的延时性。

本文首先通过简介强化学习基于策略函数的学习方法引出策略梯度,接着通过一般化的公式推论得到策略梯度的最优表达式,最后在排序不等式的视角下解读策略梯度的最优表达式。主要概括为以下两个部分:

  • 策略梯度的最优表达式推导
  • 排序不等式下的策略梯度

1. 策略梯度

智能体的策略(Policy)就是智能体如何根据环境状态 ? 来决定下一步的动作 ?,通常可以分为确定性策略(Deterministic Policy)和随机性策略(Stochastic Policy)两种:

  • 确定性策略是从状态空间到动作空间的映射函数:
    $$\pi: \mathcal{S} \rightarrow \mathcal{A}$$
  • 随机性策略表示在给定环境状态时,智能体选择某个动作的概率分布:
    $$\pi(a \mid s) \triangleq p(a \mid s)$$
    $$\sum_{a \in \mathcal{A}} \pi(a \mid s)=1$$

通常情况下,强化学习一般使用随机性策略。随机性策略可以有很多优点:一是在学习时可以通过引入一定随机性更好地探索环境;二是随机性策略的动作具有多样性,这一点在多个智能体博弈时也非常重要。采用确定性策略的智能体总是对同样的环境做出相同的动作,会导致它的策略很容易被对手预测。

一般来讲,基于值函数的学习方法本质是一种确定性策略;而学习一个策略$\pi_{\theta}(a \mid s)$来最大化期望回报的方法本质是一种随机性策略。这种方法也称为策略搜索(Policy Search)。策略搜索本质是一个优化问题,可以分为基于梯度优化无梯度优化。策略搜索和基于值函数的方法相比,策略搜索可以不需要值函数,直接优化策略。参数化的策略能够处理连续状态和动作,可以直接学出随机性策略。

策略梯度Policy Gradient)就是一种基于梯度优化的强化学习方法。假设$\pi_{\theta}(a \mid s)$是一个关于$\theta$的连续可微函数,我们可以用梯度上升的方法来优化参数$\theta$使得目标函数$\mathcal{J}(\theta)$最大。

目标函数$\mathcal{J}(\theta)$关于策略参数$\theta$的导数为:

$$ \begin{aligned} \frac{\partial \mathcal{J}(\theta)}{\partial \theta} &=\frac{\partial}{\partial \theta} \int p_{\theta}(\tau) G(\tau) \mathrm{d} \tau \\ &=\int\left(\frac{\partial}{\partial \theta} p_{\theta}(\tau)\right) G(\tau) \mathrm{d} \tau \\ &=\int p_{\theta}(\tau)\left(\frac{1}{p_{\theta}(\tau)} \frac{\partial}{\partial \theta} p_{\theta}(\tau)\right) G(\tau) \mathrm{d} \tau \\ &=\int p_{\theta}(\tau)\left(\frac{\partial}{\partial \theta} \log p_{\theta}(\tau)\right) G(\tau) \mathrm{d} \tau \\ &=\mathbb{E}_{\tau \sim p_{\theta}(\tau)}\left[\frac{\partial}{\partial \theta} \log p_{\theta}(\tau) G(\tau)\right] \end{aligned} $$

其中$\frac{\partial}{\partial \theta} \log p_{\theta}(\tau)$为函数$\log p_{\theta}(\tau)$关于$\theta$的偏导数。从最终的式子中可以看出,参数$\theta$优化的方向是使得总回报$G(\tau)$越大的轨迹$\tau$的概率$p_{\theta}(\tau)$也越大。

其中,$\frac{\partial}{\partial \theta} \log p_{\theta}(\tau)$可以进一步分解为:

$$ \begin{aligned} \frac{\partial}{\partial \theta} & \log p_{\theta}(\tau)=\frac{\partial}{\partial \theta} \log \left(p\left(s_{0}\right) \prod_{t=0}^{T-1} \pi_{\theta}\left(a_{t} \mid s_{t}\right) p\left(s_{t+1} \mid s_{t}, a_{t}\right)\right) \\ &=\frac{\partial}{\partial \theta}\left(\log p\left(s_{0}\right)+\sum_{t=0}^{T-1} \log \pi_{\theta}\left(a_{t} \mid s_{t}\right)+\sum_{t=0}^{T-1} \log p\left(s_{t+1} \mid s_{t}, a_{t}\right)\right) \\ &=\sum_{t=0}^{T-1} \frac{\partial}{\partial \theta} \log \pi_{\theta}\left(a_{t} \mid s_{t}\right) \end{aligned} $$

可以看出,$\frac{\partial}{\partial \theta} \log p_{\theta}(\tau)$和状态转移概率无关,只和策略函数相关。

因此,策略梯度$\frac{\partial \partial(\theta)}{\partial \theta}$可以简写为:

$$ \frac{\partial \mathcal{J}(\theta)}{\partial \theta}=\mathbb{E}_{\tau \sim p_{\theta}(\tau)} [\nabla_{\theta} \log \pi_{\theta}\left(a_{t} \mid s_{t}\right)G(\tau)] $$

其中,$\tau$为策略序列,简单理解为状态和动作的上下文序列;$\tau$满足参数$\theta$下的状态转移概率;$G(\tau)$是在策略$\tau$下的总回报。

2. 排序不等式下的策略梯度

排序不等式是数学上的一种不等式。它可以推导出很多有名的不等式,例如:算术几何平均不等式(简称算几不等式)、柯西不等式、切比雪夫总和不等式。排序不等式(sequence inequality,又称排序原理)是高中数学竞赛大纲、新课标普通高中课程标准试验教科书(人民教育出版社)数学(选修4-5第三讲第三节)要求的基本不等式。[2]

排序不等式内容为:排序不等式表述如下,设有两组数$a 1, a 2, \ldots \cdots \cdot a_{n}$和$\mathrm{b}_{1}, \mathrm{b}_{2}, \ldots \ldots \mathrm{b}_{n}$,满足$a_{1} \leq a_{2} \leq \ldots \ldots \leq a_{n}$,$b_{1} \leq b_{2} \leq \ldots \ldots \leq b_{n}$,$c_{1} \leq c_{2} \leq \ldots \ldots \leq c_{n}$是$\mathrm{b}_{1}, \mathrm{b}_{2}, \ldots \ldots \mathrm{b}_{n}$的乱序排列,则有$\left(a_{1} b_{n}+a_{2} b_{n-1}+\ldots \ldots+a_{n} b_{1} \leq a_{1} c_{1}+a_{2} c_{2}+\ldots \ldots+a_{n} c_{n} \leq a_{1} b_{1}+a_{2} b_{2}+\ldots \ldots+a_{n} b_{n}\right.$,
当且仅当$a_{1}=a_{2}=\ldots \ldots=a_{n}$或$b_{1}=b_{2}=\ldots \ldots=b_{n}$时等号成立。

一般为了便于记忆,常记为:反序积和 ≤ 乱序积和 ≤ 顺序积和。(证明过程见参考[2])

因此,对于策略梯度$\frac{\partial \partial(\theta)}{\partial \theta}$:

$$ \frac{\partial \mathcal{J}(\theta)}{\partial \theta}=\mathbb{E}_{\tau \sim p_{\theta}(\tau)} [\nabla_{\theta} \log \pi_{\theta}\left(a_{t} \mid s_{t}\right)G(\tau)] = \mathbb{E}_{\tau \sim p_{\theta}(\tau)}\left[\frac{\partial}{\partial \theta} \log p_{\theta}(\tau) G(\tau)\right] $$

函数$\log p_{\theta}(\tau)$关于$\theta$的偏导数$\frac{\partial}{\partial \theta} \log p_{\theta}(\tau)$是长度为len($\tau$)(表示策略$\tau$的长度)的序列,同时$G(\tau)$也是同长度的序列。对于强化学习来讲,是要最大化策略梯度用以最大化回报

那么对于$\frac{\partial}{\partial \theta} \log p_{\theta}(\tau)$和$G(\tau)$这两个序列的加权积和,何时才是最大的呢?根据排序不等式可得:当$\frac{\partial}{\partial \theta} \log p_{\theta}(\tau)$和$G(\tau)$同序时,策略梯度最大。 同序意味着:如果当前时刻策略网络$\pi_{\theta}\left(a_{t} \mid s_{t}\right)$的最大概率输出动作为$a_{t}$,那么当前动作$a_{t}$同时能获得最大回报$G(\tau[t])$。这符合我们对于策略网络的期望,即我们希望策略网络输出的action每时刻都能使我们设置的reward最大。

3. 参考

[1] 邱锡鹏《NNDL
[2] 百度百科

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
深度学习技术开发与应用
关键点1.强化学习的发展历程2.马尔可夫决策过程3.动态规划4.无模型预测学习5.无模型控制学习6.价值函数逼近7.策略梯度方法8.深度强化学习DQN算法系列9.深度策略梯度DDPG,PPO等第一天9:0012:0014:0017:00一、强化学习概述1.强化学习介绍2.强化学习与其它机器学习的不同3.强化学习发展历史4.强化学习典
DevOpSec DevOpSec
4年前
Linux主机安全配置
1.安全配置规范1.身份鉴别1.账号检查<tableborder"1"cellspacing"0"style"width:426.1pt;"<tbody<tr<tdstyle"width:113.4pt;"<pstyle"marginleft:0pt;"<strong<strong安全配置编号
Stella981 Stella981
3年前
React Hooks实现异步请求实例—useReducer、useContext和useEffect代替Redux方案
<blockquote本文是学习了2018年新鲜出炉的ReactHooks提案之后,针对<strong异步请求数据</strong写的一个案例。注意,本文假设了:<br1.你已经初步了解<codehooks</code的含义了,如果不了解还请移步<ahref"https://reactjs.org/docs/hooksintro.html
Wesley13 Wesley13
3年前
Java面试
<divclass"htmledit\_views"id"content\_views"<pid"maintoc"<strong目录</strong</p<pid"Java%E5%9F%BA%E7%A1%80%EF%BC%9Atoc"style"marginleft:40px;"<ahref"Java%E5%
Wesley13 Wesley13
3年前
Oracle JDK7 bug 发现、分析与解决实战
本文首发于vivo互联网技术微信公众号链接:https://mp.weixin.qq.com/s/8f34CaTpWz5pTHKA0Xeg(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fmp.weixin.qq.com%2Fs%2F8f34CaTpWz5p
Wesley13 Wesley13
3年前
Java 9版本之后Base64Encoder和Base64Decoder无法继续使用解决办法
<divclass"htmledit\_views"id"content\_views"<p在项目开发过程中,因为重装系统,安装了Java10版本,发现sun.misc.Base64Encoder和sun.misc.Base64Decoder无法使用。</p<p<br</p<p<strong原因:</strong</p<p查看
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Wesley13 Wesley13
3年前
(寒假开黑gym)2017
<ahref"https://codeforces.com/gym/101933/"target"\_blank"style"fontsize:24px;"<strong传送门</strong</a付队!(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.
Easter79 Easter79
3年前
Tomcat安装、配置、优化及负载均衡详解
<divid"cnblogs\_post\_body"class"blogpostbody"<p<strong原文地址:https://www.cnblogs.com/rocomp/p/4802396.html</strong</p<p<strong一、常见JavaWeb服务器</strong</p<div<strong&
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
智数追云人
智数追云人
Lv1
春城无处不飞花。
文章
3
粉丝
0
获赞
0