强化学习笔记:policy learning

1 policy network VS value-based network

 

 2  policy network的目标函数

记回报 U t 是从 t 从时刻开始的所有奖励之和。
U t 依赖于 t 时刻开始的所有状态和动作:

动作价值函数t 时刻状态 st 和动作 at 看做已知观测值,把 t + 1 时刻后的状态和动作看做

未知变量,求期望:

 状态价值函数t 时刻状态 st 看做已知观测值,t时刻的action是服从策略的随机变量,对其求期望

 于是policy network的目标函数为:

这个目标函数排除掉了状态 S 的因素,只依赖于策略网络 π 的参数 θ
策略越好,则 J ( θ ) 越大。所以策略学习可以描述为这样一个优化问题:

 和强化学习笔记:Policy-based Approach_UQI-LIUWJ的博客-CSDN博客一样,我们对目标函数进行梯度上升,更新参数

其中被称为策略梯度

 其中通过推导,可以得到策略梯度为:

但如果状态S服从马尔可夫链的话,前面这一项系数可以去掉,于是有: 

注:这种形式和​​​​​​​E_S[\sum_\alpha\frac{\partial \pi_\theta(a|s)}{\partial \theta}Q_{\pi_\theta}(s,a)]是一样的

E_S[E_{A\sim\pi(\cdot|S;\theta)}\frac{\partial ln\pi_\theta(a|s)}{\partial \theta}Q_{\pi_\theta}(s,a)]=E_S[\sum_\alpha\pi_\theta(a|s) \frac{\partial ln\pi_\theta(a|s)}{\partial \theta}Q_{\pi_\theta}(s,a)]

=E_S[\sum_\alpha\pi_\theta(a|s) \frac{1}{\pi_\theta(a|s)}\frac{\partial \pi_\theta(a|s)}{\partial \theta}Q_{\pi_\theta}(s,a)]

 =E_S[\sum_\alpha\frac{\partial \pi_\theta(a|s)}{\partial \theta}Q_{\pi_\theta}(s,a)]​​​​​​​

 2.1 稍为不严谨的证明

把策略网络 π ( a | s ; θ ) 看做动作的概率密度函数。状态价值函数V_\pi(s)可以写成:

状态价值V_\pi(s)关于 θ 的梯度可以写作:

第二步可行是因为求导的对象θ和连加的对象a 不同 

应用链式法则,公式7.1可以进一步写成:

上面公式最右边一项 x 的分析非常复杂,不严谨的证明可以把他去掉(或者说,第二项影响不大)

 

根据目标函数的定义:

 第二项影响不大,所以不严谨的证明中可以把他去掉

所以 

2.2 策略梯度的近似

通过前面的推导和证明,我们知道:

解析求出这个期望是不可能的,因为我们并不知道状态 S 概率密度函数;即使我们知道 S 的概率密度函数,能够通过连加或者定积分求出期望,我们也不愿意这样做,因为连加或者定积分的计算量非常大。
我们可以用蒙特卡洛近似策略梯度中的期望:

每次从环境中观测到一个状态 s ,它相当于随机变量 S 的观测值。然后再根据当前的策略网络(策略网络的参数必须是最新的)随机抽样得出一个动作:
计算随机梯度,作为 \nabla_\theta J(\theta)的无偏估计:

 

所以我们可以用随机梯度上升来更新θ:

 但是这种方法仍然不可行,我们计算不出 g(s, a; θ), 原因在于我们不知道动作价值函数Q_\pi(s,a)

在后面两节中,我们用两种方法对Q_\pi(s,a) 做近似:
  • 一种方法是 REINFORCE,用实际观测的回报 u 近似Q_\pi(s,a)
  • 另一种方法是 Actor-Critic,用神经网络 q(s, a; w) 近似Q_\pi(s,a)

3 REINFORCE

在2.2 中,我们推导出\nabla_\theta J(\theta)的无偏估计

但是其中的动作价值函数Q_\pi(s,a)未知,导致无法算出g(s, a; θ)。

REINFORCE进一步对Q_\pi(s,a)进行蒙特卡洛近似,把他替换成回报u。

 3.1 简化的推导

3.1.0 引理:策略梯度的连加形式

 3.1.1 推导

  

我们对3.1.0的引理进行蒙特卡洛近似,有:

进一步对g(s_t,a_t;\theta_{now})近似,有:

 3.2 训练流程

强化学习笔记:Policy-based Approach_UQI-LIUWJ的博客-CSDN博客中所说的是一样的了:

REINFORCE 是一种 同策略 (On-Policy) 方法,要求行为策略 (Behavior Policy) 与目标
策略 (Target Policy) 相同,两者都必须是策略网络 π ( a | s ; θ now)
所以 经验回放不适用于 REINFORCE

采样的数据就只会用一次。你把这些数据采样起来,然后拿去更新参数,这些数据就丢掉了。接着再重新采样数据,才能够去更新参数

4 Actor-critic

在上一节中,我们使用实际的回报ut来近似Q_\pi(s,a)

这一节中,我们使用神经网络来近似Q_\pi(s,a)

4.1 价值网络

价值网络q(s,a;w)和DQN有相同的结构,但是二者意义不同,训练方式也不同

  • 价值网络是对动作价值函数Q_\pi(s,a)的近似。而 DQN 则是对最优动作价值函数 Q(s, a) 的近似。
  • 价值网络的训练使用的是 SARSA 算法,它属于同策略,不能用经验回放。对 DQN 的训练使用的是 Q 学习算法,它属于异策略,可以用经验回放。

4.2 算法推导

  • 策略网络 π(a|s; θ) 相当于演员,它基于状态 s 做出动作 a
  • 价值网络 q(s, a; w) 相当于评委,它给演员的表现打分,量化在状态 s 的情况下做出动作 a 的好坏程度。

 4.2.1 为什么不直接把奖励R反馈给策略网络?

为什么不直接把奖励 R 反馈给策略网络,而要用价值网络这样一个“中介”呢?
  • 原因是这样的。策略学习的目标函数 J(θ) 是回报 U 的期望,而不是奖励 R 的期望
  • 注意回报 U 和奖励 R 的区别。
  • 虽然能观测到当前的奖励 R,但是它对策略网络是毫无意义的;训练策略网络需要的是回报 U,而不是奖励 R
  • 价值网络能够估算出回报 U 的期望,因此能帮助训练策略网络
     

4.2.2 训练策略网络

  • 在策略网络做出动作a之后,价值网络会给一个分数q(s,a;w)
  • 策略网络利用当前状态s,自己的动作a,以及价值网络的打分q(s,a;w),计算近似策略梯度
  • 然后用梯度上升更新参数

 

4.2.3 训练价值网络

  • 我们需要让价值网络反应出真实的Q_\pi
  • 可以使用SARSA更新w
  • 每一次从环境中观测到一个奖励r,用这个r来校准价值网络的打分 

  • 在t时刻,价值网络输出\hat{q_t}=q(s_t,a_t;w),这个是对动作价值函数Q_\pi(s_t,a_t)的估计
  • 在t+1时刻,观测到的是(r_t,s_{t+1},a_{t+1}),所以可以计算TD目标

 

  • 这也是对动作价值函数Q_\pi(s_t,a_t)的估计,我们希望二者接近,所以有:
  • 进行梯度下降更新

 不难看出,也就是强化学习笔记:Sarsa算法_UQI-LIUWJ的博客-CSDN博客_sarsa算法

 中的流程

4.3 actor-critic整理训练流程

设当前策略网络参数是\theta_{now},价值网络参数是w_{now}

  • 8 执行\tilde{a}_{t+1},进行下一轮更新

4.4 用目标网络改进训练

由于sarsa中也存在自举的问题,所以我们可以使用目标网络来缓解自举带来的偏差

那么此时,流程变成:

上面这几步和不用目标网络一样 

 这两步是引入目标网络后不一样的地方了

 

 

 上面这几步和不用目标网络一样 

 

  这步是引入目标网络后不一样的地方

5 关于经验回放的一个疑问(欢迎讨论)

在学习了DPG确定策略梯度后,有一个小问题想和大家探讨一下:就是像SARSA这样的同策略,就算是用了经验回放,会有很大的影响嘛?

因为我更新sarsa的五元组里面(s_t,a_t,r_t,s_{t+1},\widetilde{a_{t+1}}),受到策略\pi影响的就是(a_t,\widetilde{a_{t+1}})s_t是已知,(r_t,s_{t+1})是和环境交互的结果,与策略\pi关系不大。

策略\pi输出的是基于s_t的action的一个概率分布。换句话说,不管 策略\pi 的参数是什么,某一个动作a都能取到,只不过是取到的概率的不同。

那么这样的话,我agent实时交互得到动作(a_t,\widetilde{a_{t+1}})和使用过去的经验(a_t,\widetilde{a_{t+1}}),有什么区别嘛?(因为  策略\pi 参数的变动,影响的也只是取到 动作(a_t,\widetilde{a_{t+1}}) 的概率,不代表 \pi 参数更新后,(a_t,\widetilde{a_{t+1}})取不到啊。。。)

那这样的话,我像SARSA这样的同策略模型,也不是不可以使用经验回放?

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Spark SQL是Apache Spark中的一个模块,它提供了一种基于结构化数据的编程接口。Spark SQL可以让用户使用SQL语句来查询数据,也可以让用户使用DataFrame API来进行数据处理和分析。Spark SQL支持多种数据源,包括Hive、JSON、Parquet等。Spark SQL还提供了一些高级功能,如支持用户自定义函数、支持分布式机器学习算法等。Spark SQL的目标是让用户能够方便地使用Spark进行数据处理和分析,同时提供高性能和可扩展性。 ### 回答2: Spark SQL是一个基于Spark平台的关系型数据处理引擎,它支持使用SQL语句和数据框架操作数据,可以轻松处理结构化和半结构化的数据。它可以从多个数据源中读取数据,包括Hive、JSON、Parquet、ORC等。通过Spark SQL,用户可以方便地使用SQL查询语言来分析和处理数据,大大降低了开发和组织数据流的难度。 Spark SQL主要有两种执行模式:SQL查询和DataFrame操作。其中SQL查询基于Hive的SQL语法解析器,支持HiveQL中的大多数语言特性(如UDF、窗口函数等)。在执行计划生成时,Spark SQL采用了Spark的计算引擎,支持各种Spark算子的优化,以便最大程度地提高查询性能。 另一种操作模式是使用DataFrame API,它可以灵活地进行数据转换和处理,并提供了类似于SQL的语法。与SQL查询不同,DataFrame API通过静态检查和编译器优化来避免由SQL查询引起的语法错误和潜在性能问题。 除了这两种基本的操作模式外,Spark SQL还提供了一些高级特性,如嵌套查询、表和视图、共享变量等。这些特性扩展了Spark SQL的功能,使得它可以更加灵活地进行数据处理和查询。 Spark SQL是Spark的重要组成部分,它在数据存储和处理方面提供了很多便利。通过最大程度地利用Spark引擎的优势,Spark SQL能够处理海量数据,并将其转换为有用的信息。这使得Spark SQL成为实现数据分析、机器学习和人工智能的重要工具之一。 ### 回答3: Spark SQL是一种基于Spark平台的数据处理引擎,它提供了高度优化的查询引擎和优秀的支持SQL语句的API。它允许用户使用SQL语句查询来处理大规模数据集,同时仍然支持复杂数据类型和计算。Spark SQL支持数据源,包括Parquet,Avro,JSON等一系列结构化的和半结构化的数据源。 Spark SQL在历史上是一个单独的模块,在Spark 2.0之后,它已经成为Spark的核心组件之一,可以直接在Spark核心API中使用,包括作为一个RDD库或DataFrame/DataSet的API。 Spark SQL的优点如下: 1. 它可以向受过传统SQL培训的用户展示更高级别,更强大的API。 2. 它提供数据集和RDD的良好互操作性。Spark SQL可以通过未被优化的RDD/DataSet API访问同一数据。 3. 它支持Spark的执行引擎以加速查询处理。 使用Spark SQL的时候,可以根据需要选择编程语言,如Scala,Java,Python,SQL等。在Spark核心API中,Spark SQL提供了两种API来处理结构化数据: 1. DataFrame API:DataFrame是具有许多操纵数据的功能的分布式数据集,类似于数据库中的表。 2. Dataset API:Dataset是Scala和Java API,它是类型安全的,并且提供与RDD API相同的API,但比RDD具有更好的性能和可读性。 Spark SQL是Spark生态系统中重要的组成部分之一。在处理大规模数据时,使用Spark SQL可以方便地利用Spark的强大功能,提高处理效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值