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

深度强化学习(王树森)笔记04

深度强化学习(DRL)

本文是学习笔记,如有侵权,请联系删除。本文在ChatGPT辅助下完成。

参考链接

Deep Reinforcement Learning官方链接:https://github.com/wangshusen/DRL

源代码链接:https://github.com/DeepRLChinese/DeepRL-Chinese

B站视频:【王树森】深度强化学习(DRL)

豆瓣: 深度强化学习

文章目录

  • 深度强化学习(DRL)
  • Actor-Critic Method
    • 视频
      • Value Network and Policy Network
      • Train the Neural Networks
      • Summary
      • 价值网络
      • 算法推导
      • 训练流程
      • 用目标网络改进训练
      • 本章总结
    • 后记

Actor-Critic Method

Actor-Critic方法把价值学习和策略学习结合起来。

视频

下面是视频的学习笔记

Value Network and Policy Network

离散状态下状态价值函数可以写成: V π ( s ) = ∑ a π ( a ∣ s ) ⋅ Q π ( s , a ) . V_{\pi}(s)=\sum_{a}\pi(a|s)\cdot Q_{\pi}(s,a). Vπ(s)=aπ(as)Qπ(s,a).

但是其中策略函数 π ( a ∣ s ) \pi(a|s) π(as)和动作价值函数 Q π ( s , a ) Q_{\pi}(s,a) Qπ(s,a)都不知道,可以分别用两个神经网络进行近似,这两个神经网络分别称为策略网络和价值网络,在表述形式上里面分别添加了一个 θ \theta θ w w w参数,表示的是神经网络的参数。

策略网络控制agent运动,是actor,相当于是运动员;价值网络不控制agent运动,它负责给agent打分,是critic,相当于裁判。

在这里插入图片描述

分别看一下这两个神经网络

策略网络actor,它只有一个输入state,输出是所有action的概率分布。

在这里插入图片描述

价值网络critic,有两个输入,分别是state和action;输出是一个标量,表示的是对actor的打分。

在这里插入图片描述

同时学习一个策略和一个值函数就是actor-critic方法。

Train the Neural Networks

训练 π \pi π网络是提高actor的平均分,即让状态价值函数V函数的值更大;让价值网络q来当裁判,给actor的表现打分,更新它的参数 w w w是为了让它的打分越来越精准。通过两个网络,让运动员的得分越来越高,裁判的打分越来越精准。

在这里插入图片描述

通过以下五个步骤来对 θ \theta θ w w w参数进行更新

  1. Observe the state s t . s_t. st.
  2. Randomly sample action α t \color{red}{\alpha_t} αt according to π ( ⋅ ∣ s t ; θ t ) . \pi(\cdot|s_t;\mathbf{\theta}_t). π(st;θt).
  3. Perform a t \color{red}{a_t} at and observe new state s t + 1 s_{t+1} st+1 and reward r t . r_t. rt.
  4. Update w (in value network) using temporal difference (TD).
  5. Update θ \mathbf{\theta} θ (in policy network) using policy gradient.

在这里插入图片描述

使用时间差分TD算法更新价值网络q,让裁判打分更准

损失函数是预测q和target y t y_t yt之间差的平方

在这里插入图片描述

使用策略梯度算法更新策略网络 π \pi π,让运动员得分更高

下图中的V是状态价值函数,相当于运动员所有动作的平均分

策略梯度是状态价值函数V关于 θ \theta θ的导数

定义g是 l o g π log\pi logπ θ \theta θ的导数乘以q,这里q是裁判的打分

策略梯度等于对函数g求期望,消掉动作A。

g函数是策略梯度的无偏估计,用g函数代替策略梯度

然后使用随机梯度上升算法来更新 θ \theta θ的值。

在这里插入图片描述

ChatGPT:补充梯度的概念

在数学和计算机科学中,梯度是一个向量,表示一个多元函数在某一点上的变化率和变化的方向。对于一个具有多个输入变量的函数,梯度给出了该函数对每个输入变量的偏导数。

考虑一个函数 ( f ( x 1 , x 2 , … , x n ) f(x_1, x_2, \ldots, x_n) f(x1,x2,,xn)),其梯度记为 ( ∇ f \nabla f f) 或者 ( ∂ f ∂ x \frac{\partial f}{\partial \mathbf{x}} xf),其中 ( ∇ \nabla ) 是 nabla 符号,表示梯度运算,( x = [ x 1 , x 2 , … , x n ] \mathbf{x} = [x_1, x_2, \ldots, x_n] x=[x1,x2,,xn]) 是输入变量的向量。梯度是一个向量,其每个分量是函数对相应输入变量的偏导数。

∇ f = [ ∂ f ∂ x 1 , ∂ f ∂ x 2 , … , ∂ f ∂ x n ] \nabla f = \left[ \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \ldots, \frac{\partial f}{\partial x_n} \right] f=[x1f,x2f,,xnf]

梯度的方向是函数在某一点上变化最快的方向,而梯度的模(长度)表示变化率。如果梯度的模较大,意味着函数在该点的变化较为剧烈。

在优化问题中,梯度的使用很常见。梯度下降算法就是一种基于梯度的优化方法,通过迭代更新参数,使得目标函数逐渐趋向最小值。梯度上升算法则是类似的优化方法,用于最大化目标函数。

总的来说,梯度是一个重要的数学概念,特别在优化、机器学习和深度学习等领域有广泛的应用。

整个Actor-Critic Method的框图

在这里插入图片描述

整个算法的流程共有9步,这里是前5步,主要复习以下TD 目标。

r t + γ ⋅ q t + 1 r_t + \gamma \cdot q_{t+1} rt+γqt+1是TD target,时间差分算法里面的(TD目标表示了在当前时刻 t 的奖励 r t r_t rt 加上未来奖励的折扣。这个目标被用于更新值函数,通过比较当前值函数的估计和这个目标,可以调整值函数的参数以逐渐提高估计的准确性。)

在这里插入图片描述

Actor-Critic算法流程:更新价值网络(critic)是梯度下降,更新策略网络(actor)是梯度上升。

在这里插入图片描述

上面第9步中用 q t q_t qt更新,也可以用 δ t \delta_t δt来更新。两种方法都是对的。

Summary

总结一下Actor-Critic方法中Actor和 Critic的作用

在训练中,agent是被策略网络控制的,价值网络打分提供反馈;训练后,agent还是被策略网络控制,但此时价值网络(critic)就没用了。

在这里插入图片描述

怎样训练两个网络:

策略网络是策略梯度来训练。用梯度上升,让状态价值函数V的值增加,这就意味着运动员的平均分提高。

价值网络是用TD算法来训练。TD算法要用到价值网络的预测 q t q_t qt(价值网络对期望回报的估计)以及TD target(也是对期望回报的估计,由于它用到真实的奖励 r t r_t rt,所以它的估计比 q t q_t qt更靠谱, y t y_t yt作为TD target,相当于监督学习中的标签),对损失函数关于价值网络函数的参数 w w w求导得到梯度,然后用梯度下降,让估计 q t q_t qt更接近TD target 也就是 y t y_t yt

在这里插入图片描述

为什么用损失函数对 w w w求导?ChatGPT的回答:

在机器学习中,使用损失函数对模型参数(例如权重 ( w w w))求导的目的是通过梯度下降或其他优化算法来更新模型参数,以最小化或最大化损失函数。这是因为损失函数衡量了模型在训练数据上的性能,我们的目标是使模型在训练数据上表现得越好越好。

考虑一个典型的机器学习问题,其中我们有输入特征 (X) 和对应的目标变量 ( Y Y Y),我们的模型通过一些参数 (w) 进行参数化,表示为 ( Y = f ( X ; w ) Y = f(X; w) Y=f(X;w))。我们的目标是找到最优的参数 (w),使得模型预测的 (Y) 与真实的目标 (Y) 之间的差距最小。

这个差距通常通过损失函数(也叫目标函数)来定义,表示为 ( L ( Y , f ( X ; w ) ) L(Y, f(X; w)) L(Y,f(X;w)))。梯度下降的思想是沿着损失函数下降最快的方向更新参数,直至找到使损失最小化的参数。

为了更新参数,我们需要计算损失函数关于参数 (w) 的梯度(导数)。梯度是一个向量,其中每个分量表示损失函数关于相应参数的偏导数。通过梯度下降,我们按照梯度的反方向更新参数,使得损失函数逐渐减小。

具体来说,对于参数 (w),我们使用链式法则计算损失函数关于 (w) 的梯度,并使用这个梯度来更新 (w)。这个过程反复进行,直到达到停止条件(例如达到最大迭代次数或梯度变化很小)。

总之,使用损失函数对参数 (w) 求导的目的是优化模型,使其在训练数据上的性能达到最优。

策略梯度方法用策略梯度 ∇ θ J ( θ ) \nabla_{\theta}J(\theta) θJ(θ)更新策略网络参数 θ \theta θ,从而增大目标函数。前面推导出策略梯度 ∇ θ J ( θ ) \nabla_{\theta}J(\theta) θJ(θ) 的无偏估计,即下面的随机梯度:

g ( s , a ; θ ) ≜ Q π ( s , a ) ⋅ ∇ θ ln ⁡ π ( a ∣ s ; θ ) . \boldsymbol{g}(s,a;\boldsymbol{\theta}) \triangleq Q_\pi(s,a) \cdot \nabla_{\boldsymbol{\theta}}\ln\pi(a|s;\boldsymbol{\theta}). g(s,a;θ)Qπ(s,a)θlnπ(as;θ).

但是其中的动作价值函数 Q π Q_\mathrm{\pi} Qπ 是未知的,导致无法直接计算 g ( s , a ; θ ) g(s,a;\theta) g(s,a;θ)。上一节的 REINFORCE 用实际观测的回报近似 Q π Q_\mathrm{\pi} Qπ, 本节的 actor-critic 方法用神经网络近似 Q π Q_\mathrm{\pi} Qπ

价值网络

Actor-critic 方法用一个神经网络近似动作价值函数 Q π ( s , a ) Q_\pi(s,a) Qπ(s,a), 这个神经网络叫做“价值网络”, 记为 q ( s , a ; w ) q(s,a;\boldsymbol{w}) q(s,a;w),其中的 w w w 表示神经网络中可训练的参数。价值网络的输入是状态 s s s, 输出是每个动作的价值。动作空间 A A A 中有多少种动作,那么价值网络的输出就是多少维的向量,向量每个元素对应一个动作。举个例子,动作空间是 A = { 左,右,上 } A= \{ 左,右,上\} A={左,右,上},

q ( s , 左;  w ) = 219 , q ( s , 右;  w ) = − 73 , q ( s , 上;  w ) = 580. \begin{aligned}&q(s,\text{ 左; }\boldsymbol{w})&=&219,\\&q(s,\text{ 右; }\boldsymbol{w})&=&-73,\\&q(s,\text{ 上; }\boldsymbol{w})&=&580.\end{aligned} q(s, w)q(s, w)q(s, w)===219,73,580.

神经网络的结构见图 7.2。

在这里插入图片描述

虽然价值网络 q ( s , a ; w ) q(s,a;\boldsymbol{w}) q(s,a;w) 与之前学的 DQN 有相同的结构,但是两者的意义不同,训练算法也不同。

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

算法推导

Actor-critic 翻译成“演员一评委”方法。策略网络 π ( a ∣ s ; θ ) \pi(a|s;\theta) π(as;θ) 相当于演员,它基于状态 s s s 做出动作 a a a。价值网络 q ( s , a ; w ) q(s,a;\boldsymbol{w}) q(s,a;w) 相当于评委,它给演员的表现打分,评价在状态 s s s 的情况下做出动作 a a a的好坏程度。策略网络(演员)和价值网络(评委)的关系如图7.3所示。

在这里插入图片描述

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

训练策略网络 (演员)

策略网络 (演员) 想要改进自己的演技,但是演员自己不知道什么样的表演才算更好,所以需要价值网络(评委) 的帮助。在演员做出动作 a a a 之后, 评委会打一个分数 q ^ ≜ q ( s , a ; w ) \widehat{q}\triangleq q(s,a;\boldsymbol{w}) q q(s,a;w),并把分数反馈给演员,帮助演员做出改进。演员利用当前状态 s s s, 自己的动作 a a a, 以及评委的打分 q ^ \widehat{q} q , 计算近似策略梯度,然后更新自己的参数 θ \theta θ(相当于改变自己的技术)。通过这种方式,演员的表现越来越受评委的好评,于是演员的获得的评分 q ^ \widehat{q} q 越来越高。

训练策略网络的基本想法是用策略梯度 ∇ θ J ( θ ) \nabla_{\theta}J(\theta) θJ(θ) 的近似来更新参数 θ \theta θ。之前我们推导过策略梯度的无偏估计:

g ( s , a ; θ ) ≜ Q π ( s , a ) ⋅ ∇ θ ln ⁡ π ( a ∣ s ; θ ) . \boldsymbol{g}(s,a;\boldsymbol{\theta})\:\triangleq\:Q_{\pi}\big(s,a\big)\:\cdot\:\nabla_{\boldsymbol{\theta}}\ln\pi\big(a\:\big|\:s;\:\boldsymbol{\theta}\big). g(s,a;θ)Qπ(s,a)θlnπ(a s;θ).

价值网络 q ( s , a ; w ) q(s,a;\boldsymbol{w}) q(s,a;w) 是对动作价值函数 Q π ( s , a ) Q_{\pi}(s,a) Qπ(s,a) 的近似,所以把上面公式中的 Q π Q_{\pi} Qπ 替换成价值网络,得到近似策略梯度:

g ^ ( s , a ; θ ) ≜ q ( s , a ; w ) ⏟ 评委的打分 ⋅ ∇ θ ln ⁡ π ( a ∣ s ; θ ) . ( 7.11 ) \begin{array}{rcl}\widehat{\boldsymbol{g}}(s,a;\boldsymbol{\theta})&\triangleq&\underbrace{q(s,a;\boldsymbol{w})}_\text{评委的打分}\cdot\nabla_{\boldsymbol{\theta}}\ln\pi(a\mid s;\boldsymbol{\theta}).\end{array}\quad{(7.11)} g (s,a;θ)评委的打分 q(s,a;w)θlnπ(as;θ).(7.11)

最后做梯度上升更新策略网络的参数:

θ ← θ + β ⋅ g ^ ( s , a ; θ ) . ( 7.12 ) \theta\leftarrow\theta+\beta\cdot\widehat{\boldsymbol{g}}(s,a;\boldsymbol{\theta}).\quad{(7.12)} θθ+βg (s,a;θ).(7.12)

注: 用上述方式更新参数之后,会让评委打出的分数越来越高,原因是这样的。状态价值函数 V π ( s ) V_{\pi}(s) Vπ(s) 可以近似成为:

v ( s ; θ ) = E A ∼ π ( ∣ s ; θ ) [ q ( s , A ; w ) ] . v(s;\boldsymbol{\theta})\:=\:\mathbb{E}_{A\sim\pi(\boldsymbol{|}s;\boldsymbol{\theta})}\Big[q(s,A;\boldsymbol{w})\Big]. v(s;θ)=EAπ(s;θ)[q(s,A;w)].

因此可以将 v ( s ; θ ) v(s;\theta) v(s;θ) 看做评委打分的均值。不难证明,公式 (7.11) 中定义的近似策略梯度 g ^ ( s , a ; θ ) \widehat{\boldsymbol{g}}(s,a;\boldsymbol{\theta}) g (s,a;θ) 的期望等于 v ( s ; θ ) v(s;\boldsymbol{\theta}) v(s;θ) 关于 θ \theta θ 的梯度:

∇ θ v ( s ; θ ) = E A ∼ π ( ⋅ ∣ s ; θ ) [ g ^ ( s , A ; θ ) ] . \nabla_{\boldsymbol{\theta}v}(s;\boldsymbol{\theta})\:=\:\mathbb{E}_{A\sim\pi(\cdot|s;\boldsymbol{\theta})}\Big[\widehat{\boldsymbol{g}}(s,A;\boldsymbol{\theta})\Big]. θv(s;θ)=EAπ(s;θ)[g (s,A;θ)].

因此,用公式 7.12 中的梯度上升更新 θ \theta θ,会让 v ( s ; θ ) v(s;\theta) v(s;θ) 变大,也就是让评委打分的均值更高。

训练价值网络(评委)

通过以上分析,我们不难发现上述训练策略网络(演员)的方法不是真正让演员表现更好,只是让演员更迎合评委的喜好而已。因此,评委的水平也很重要,只有当评委的打分 q ^ \widehat{q} q 真正反映出动作价值 Q π Q_\pi Qπ,演员的水平才能真正提高。初始的时候,价值网络的参数 w w w 是随机的,也就是说评委的打分是瞎猜。可以用 SARSA 算法更新 w w w,提高评委的水平。每次从环境中观测到一个奖励 r r r,把 r r r 看做是真相,用 r r r 来校准评委的打分。

第 5.1 节已经推导过 SARSA 算法,现在我们再回顾一下。在 t t t 时刻,价值网络输出

q ^ t = q ( s t , a t ; w ) , \widehat q_{t}\:=\:q(s_{t},a_{t};\:\boldsymbol{w}), q t=q(st,at;w),

它是对动作价值函数 Q π ( s t , a t ) Q_\pi(s_t,a_t) Qπ(st,at) 的估计。在 t + 1 t+1 t+1 时刻,实际观测到 r t , s t + 1 , a t + 1 r_t,s_{t+1},a_{t+1} rt,st+1,at+1, 于是可以计算 TD 目标

y t ^ ≜ r t + γ ⋅ q ( s t + 1 , a t + 1 ; w ) , \widehat{y_{t}}\:\triangleq\:r_{t}+\gamma\cdot q\big(s_{t+1},a_{t+1};\:\boldsymbol{w}\big), yt rt+γq(st+1,at+1;w),

它也是对动作价值函数 Q π ( s t , a t ) Q_\pi(s_t,a_t) Qπ(st,at) 的估计。由于 y ^ t \widehat{y}_t y t 部分基于实际观测到的奖励 r t r_t rt,我们认为 y ^ t \widehat{y}_t y t q ( s t , a t ; w ) q(s_t,a_t;\boldsymbol{w}) q(st,at;w) 更接近事实真相。所以把 y ^ t \widehat{y}_t y t 固定住,鼓励 q ( s t , a t ; w ) q(s_t,a_t;\boldsymbol{w}) q(st,at;w) 去接近 y ^ t \widehat{y}_t y t。SARSA 算法具体这样更新价值网络参数 w w w。定义损失函数:
L ( w ) ≜ 1 2 [ q ( s t , a t ; w ) − y ^ t ] 2 . L(\boldsymbol{w})\triangleq\frac{1}{2}\Big[q\big(s_t,a_t;\boldsymbol{w}\big)-\widehat{y}_t\Big]^2. L(w)21[q(st,at;w)y t]2.

q ^ t ≜ q ( s t , a t ; w ) \widehat{q}_t\triangleq q(s_t,a_t;\boldsymbol{w}) q tq(st,at;w)。损失函数的梯度是:

∇ w L ( w ) = ( q ^ t − y ^ t ) ⏟ TD 误差  δ t ⋅ ∇ w q ( s t , a t ; w ) . \nabla_{\boldsymbol{w}}\:L\big(\boldsymbol{w}\big)\:=\:\underbrace{\big(\widehat{q}_{t}-\widehat{y}_{t}\big)}_{\text{TD 误差 }\delta_{t}}\:\cdot\nabla_{\boldsymbol{w}}\:q\big(s_{t},a_{t};\boldsymbol{w}\big). wL(w)=TD 误差 δt (q ty t)wq(st,at;w).

做一轮梯度下降更新 w : w: w:

w ← w − α ⋅ ∇ w L ( w ) . w\:\leftarrow\:w\:-\:\alpha\cdot\nabla_{\boldsymbol{w}}L(\boldsymbol{w}). wwαwL(w).
这样更新 w w w 可以让 q ( s t , a t ; w ) q(s_t,a_t;\boldsymbol{w}) q(st,at;w) 更接近 y ^ t \widehat{y}_t y t。可以这样理解 SARSA: 用观测到的奖励 r t r_t rt 来“校准”评委的打分 q ( s t , a t ; w ) q(s_t,a_t;\boldsymbol{w}) q(st,at;w)

训练流程

下面概括 actor-critic 训练流程。设当前策略网络参数是 θ n o w \theta_\mathrm{now} θnow,价值网络参数是 w n o w w_\mathrm{now} wnow
执行下面的步骤,将参数更新成 θ n e w \theta_\mathrm{new} θnew w n e w w_\mathrm{new} wnew:

  1. 观测到当前状态 s t s_t st,根据策略网络做决策 : a t ∼ π ( ⋅ ∣ s t ; θ n o w ) :a_t\sim\pi(\cdot|s_t;\theta_\mathrm{now}) :atπ(st;θnow)​, 并让智能体执行动作 a t a_t at
  2. 从环境中观测到奖励 r t r_t rt 和新的状态 s t + 1 s_{t+1} st+1
  3. 根据策略网络做决策 : a ~ t + 1 ∼ π ( ⋅ ∣ s t + 1 ; θ n o w ) :\tilde{a}_{t+1}\sim\pi(\cdot|s_{t+1};\theta_{\mathrm{now}}) :a~t+1π(st+1;θnow),但不让智能体执行动作 a ~ t + 1 \tilde{a}_{t+1} a~t+1
  4. 让价值网络打分:

q ^ t = q ( s t , a t ; w n o w ) 和 q ^ t + 1 = q ( s t + 1 , a ~ t + 1 ; w n o w ) \widehat q_{t}\:=\:q\big(s_{t},a_{t};\:\boldsymbol{w_{\mathrm{now}}}\big)\quad\text{和}\quad\widehat q_{t+1}\:=\:q\big(s_{t+1},\tilde{a}_{t+1};\:\boldsymbol{w_{\mathrm{now}}}\big) q t=q(st,at;wnow)q t+1=q(st+1,a~t+1;wnow)

  1. 计算 TD 目标和 TD 误差:

y ^ t = r t + γ ⋅ q ^ t + 1 和 δ t = q ^ t − y ^ t . \widehat y_{t}\:=\:r_{t}+\gamma\cdot\widehat q_{t+1}\quad\text{和}\quad\delta_{t}\:=\:\widehat q_{t}-\widehat y_{t}. y t=rt+γq t+1δt=q ty t.

  1. 更新价值网络:

w n e w ← w n o w − α ⋅ δ t ⋅ ∇ w q ( s t , a t ; w n o w ) . w_{\mathrm{new}}\:\leftarrow\:w_{\mathrm{now}}\:-\:\alpha\cdot\delta_{t}\cdot\nabla_{\boldsymbol{w}}q\big(s_{t},a_{t};\:\boldsymbol{w_{\mathrm{now}}}\big). wnewwnowαδtwq(st,at;wnow).

  1. 更新策略网络:

θ n e w ← θ n o w + β ⋅ q ^ t ⋅ ∇ θ ln ⁡ π ( a t ∣ s t ; θ n o w ) . \theta_{\mathrm{new}}\:\leftarrow\:\theta_{\mathrm{now}}\:+\:\beta\cdot\widehat{q}_{t}\cdot\nabla_{\boldsymbol{\theta}}\ln\pi(a_{t}\:|\:s_{t};\:\boldsymbol{\theta}_{\mathrm{now}}). θnewθnow+βq tθlnπ(atst;θnow).

用目标网络改进训练

第 6.2 节讨论了 Q 学习中的自举及其危害,以及用目标网络 (target network) 缓解自举造成的偏差。SARSA 算法中也存在自举一一即用价值网络自己的估值 q ^ t + 1 \widehat{q}_{t+1} q t+1 去更新价值网络自己;我们同样可以用目标网络计算 TD 目标,从而缓解偏差。把目标网络记作 q ( s , a ; w − ) q(s,a;\boldsymbol{w}^-) q(s,a;w),它的结构与价值网络相同,但是参数不同。使用目标网络计算 TD 目标,那么 actor-critic 的训练就变成了:

  1. 观测到当前状态 s t s_t st,根据策略网络做决策 : a t ∼ π ( ⋅ ∣ s t ; θ n o w ) :a_t\sim\pi(\cdot|s_t;\theta_\mathrm{now}) :atπ(st;θnow), 并让智能体执行动作 a t a_t at

  2. 从环境中观测到奖励 r t r_t rt 和新的状态 s t + 1 s_{t+1} st+1

  3. 根据策略网络做决策 : a ~ t + 1 ∼ π ( ⋅ ∣ s t + 1 ; θ n o w ) :\tilde{a}_{t+1}\sim\pi(\cdot|s_{t+1};\theta_{\mathrm{now}}) :a~t+1π(st+1;θnow),但是不让智能体执行动作 a ~ t + 1 \tilde{a}_{t+1} a~t+1

  4. 让价值网络给 ( s t , a t ) (s_t,a_t) (st,at) 打分:

q ^ t = q ( s t , a t ; w n o w ) . \widehat q_{t}\:=\:q(s_{t},a_{t};\:\boldsymbol{w_{\mathrm{now}}}). q t=q(st,at;wnow).

  1. 让目标网络给 ( s t + 1 , a ~ t + 1 ) (s_{t+1},\tilde{a}_{t+1}) (st+1,a~t+1) 打分:

q ^ t + 1 − = q ( s t + 1 , a ~ t + 1 ; w n o w ~ ) . \widehat q_{t+1}^{-}\:=\:q\big(s_{t+1},\tilde{a}_{t+1};\:\tilde{w_{\mathrm{now}}}\big). q t+1=q(st+1,a~t+1;wnow~).

  1. 计算 TD 目标和 TD 误差:

y ^ t − = r t + γ ⋅ q ^ t + 1 − 和 δ t = q ^ t − y ^ t − . \widehat y_{t}^{-}\:=\:r_{t}+\gamma\cdot\widehat q_{t+1}^{-}\quad\text{和}\quad\delta_{t}\:=\:\widehat q_{t}-\widehat y_{t}^{-}. y t=rt+γq t+1δt=q ty t.

  1. 更新价值网络:

w n e w ← w n o w − α ⋅ δ t ⋅ ∇ w q ( s t , a t ; w n o w ) . w_{\mathrm{new}}\:\leftarrow\:w_{\mathrm{now}}-\:\alpha\cdot\delta_{t}\cdot\nabla_{\boldsymbol{w}}q\big(s_{t},a_{t};\:\boldsymbol{w}_{\mathrm{now}}\big). wnewwnowαδtwq(st,at;wnow).

  1. 更新策略网络:

θ n e w ← θ n o w + β ⋅ q ^ t ⋅ ∇ θ ln ⁡ π ( a t ∣ s t ; θ n o w ) . \theta_{\mathrm{new}}\:\leftarrow\:\theta_{\mathrm{now}}\:+\:\beta\cdot\widehat{q}_{t}\cdot\nabla_{\boldsymbol{\theta}}\ln\pi(a_{t}\:|\:s_{t};\:\boldsymbol{\theta}_{\mathrm{now}}). θnewθnow+βq tθlnπ(atst;θnow).

  1. τ ∈ ( 0 , 1 ) \tau\in(0,1) τ(0,1) 是需要手动调整的超参数。做加权平均更新目标网络的参数:

w n e w − ← τ ⋅ w n e w + ( 1 − τ ) ⋅ w n o w − . w_{\mathrm{new}}^{-}\:\leftarrow\:\tau\cdot w_{\mathrm{new}}\:+\:\left(1-\tau\right)\cdot\boldsymbol{w_{\mathrm{now}}^{-}}. wnewτwnew+(1τ)wnow.

本章总结

  • 可以用神经网络 π ( a ∣ s ; θ ) \pi(a|s;\theta) π(as;θ) 近似策略函数。策略学习的目标函数是 J ( θ ) = E S [ V π ( S ) ] J(\theta)=\mathbb{E}_S[V_\pi(S)] J(θ)=ES[Vπ(S)], 它的值越大,意味着策略越好。

  • 策略梯度指的是 J ( θ ) J(\theta) J(θ) 关于策略参数 θ \theta θ 的梯度。策略梯度定理将策略梯度表示成

g ( s , a ; θ ) ≜ Q π ( s , a ) ⋅ ∇ θ ln ⁡ π ( a ∣ s ; θ ) \boldsymbol{g}(s,a;\boldsymbol{\theta})\:\triangleq\:Q_{\pi}(s,a)\:\cdot\:\nabla_{\boldsymbol{\theta}}\ln\pi(a\:|\:s;\:\boldsymbol{\theta}) g(s,a;θ)Qπ(s,a)θlnπ(as;θ)

的期望。

  • REINFORCE 算法用实际观测的回报 u u u 近似 Q π ( s , a ) Q_\pi(s,a) Qπ(s,a) , 从而把 g ( s , a ; θ ) g(s,a;\theta) g(s,a;θ) 近似成:

g ~ ( s , a ; θ ) ≜ u ⋅ ∇ θ ln ⁡ π ( a ∣ s ; θ ) . \tilde{\boldsymbol{g}}(s,a;\boldsymbol{\theta})\triangleq\:u\:\cdot\:\nabla_{\boldsymbol{\theta}}\ln\pi(a\:|\:s;\:\boldsymbol{\theta}). g~(s,a;θ)uθlnπ(as;θ).

REINFORCE 算法做梯度上升更新策略网络: θ ← θ + β ⋅ g ~ ( s , a ; θ ) \theta\leftarrow\theta+\beta\cdot\tilde{\boldsymbol{g}}(s,a;\boldsymbol{\theta}) θθ+βg~(s,a;θ)

  • Actor-critic 用价值网络 q ( s , a ; w ) q(s,a;\boldsymbol{w}) q(s,a;w) 近似 Q π ( s , a ) Q_{\pi}(s,a) Qπ(s,a), 从而把 g ( s , a ; θ ) g(s,a;\boldsymbol{\theta}) g(s,a;θ) 近似成:

g ^ ( s , a ; θ ) ≜ q ( s , a ; w ) ⋅ ∇ θ ln ⁡ π ( a ∣ s ; θ ) \widehat{\boldsymbol{g}}(s,a;\boldsymbol{\theta})\:\triangleq\:q(s,a;\boldsymbol{w})\:\cdot\:\nabla_{\boldsymbol{\theta}}\ln\pi(a\:|\:s;\:\boldsymbol{\theta}) g (s,a;θ)q(s,a;w)θlnπ(as;θ)

Actor-critic 用 SARSA 算法更新价值网络 q q q, 用梯度上升更新策略网络 : θ ← θ + β ⋅ g ^ ( s , a ; θ ) :\theta\gets\theta+\beta \cdot \widehat{\boldsymbol{g}}(s,a;\boldsymbol{\theta}) :θθ+βg (s,a;θ)

后记

截至2024年1月27日17点25分,学习完强化学习中的Actor-Critic算法。

相关文章:

深度强化学习(王树森)笔记04

深度强化学习(DRL) 本文是学习笔记,如有侵权,请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接:https://github.com/wangshusen/DRL 源代码链接:https://github.c…...

openssl3.2/test/certs - 074 - CT entry

文章目录 openssl3.2/test/certs - 074 - CT entry概述笔记setup074.shsetup074_sc1.shsetup074_sc2.shsetup074_sc3.shEND openssl3.2/test/certs - 074 - CT entry 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 setup074.sh #! /bin/bash# \file setup074.sh# o…...

Angular组件(一) 分割面板ShrinkSplitter

Angular组件(一) 分割面板ShrinkSplitter 前言 分割面板在日常开发中经常使用,可将一片区域,分割为可以拖拽整宽度或高度的两部分区域。模仿iview的分割面板组件,用angular实现该功能,支持拖拽和[(ngModel)]双向绑定的方式控制区…...

抖音详情API:视频内容获取与解析技巧

一、引言 抖音是一款广受欢迎的短视频分享平台,每天都有大量的用户在抖音上分享自己的生活点滴和创意作品。对于开发者而言,如何获取并解析抖音上的视频内容,是一项极具挑战性的任务。本文将详细介绍抖音详情API,以及如何使用它来…...

SpringBoot中实现阿里云OSS对象存储

背景 在业务中我们往往需要上传文件如图片,文件上传,是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛,我们经常发抖音、发朋友圈都用到了文件上传功能。 实现文件…...

大型语言模型 (LLM)全解读

一、大型语言模型(Large Language Model)定义 大型语言模型 是一种深度学习算法,可以执行各种自然语言处理 (NLP) 任务。 大型语言模型底层使用多个转换器模型, 底层转换器是一组神经网络。 大型语言模型是使用海量数据集进行训练…...

Unity - gamma space下还原linear space效果

文章目录 环境目的环境问题实践结果处理要点处理细节【OnPostProcessTexture 实现 sRGB 2 Linear 编码】 - 预处理【封装个简单的 *.cginc】 - shader runtime【shader需要gamma space下还原记得 #define _RECOVERY_LINEAR_IN_GAMMA】【颜色参数应用前 和 颜色贴图采样后】【灯…...

Rabbitmq调用FeignClient接口失败

文章目录 一、框架及逻辑介绍1.背景服务介绍2.问题逻辑介绍 二、代码1.A服务2.B服务3.C服务 三、解决思路1.确认B调用C服务接口是否能正常调通2.确认B服务是否能正常调用A服务3.确认消息能否正常消费4.总结 四、修改代码验证1.B服务异步调用C服务接口——失败2.将消费消息放到C…...

专业120+总分400+海南大学838信号与系统考研高分经验海大电子信息与通信

今年专业838信号与系统120,总分400,顺利上岸海南大学,这一年的复习起起伏伏,但是最后还是坚持下来的,吃过的苦都是值得,总结一下自己的复习经历,希望对大家复习有帮助。首先我想先强调一下专业课…...

如何区分 html 和 html5?

HTML(超文本标记语言)和HTML5在很多方面都存在显著的区别。HTML5是HTML的最新版本,引入了许多新的特性和元素,以支持更丰富的网页内容和更复杂的交互。以下是一些区分HTML和HTML5的关键点: 新特性与元素:H…...

Ps:将文件载入堆栈

Ps菜单:文件/脚本/将文件载入堆栈 Scripts/Load Files into Stack 将文件载入堆栈 Load Files into Stack脚本命令可用于将两个及以上的文件载入到同一个 Photoshop 新文档中。 载入的每个文件都将成为独立的图层,并使用其原始文件名作为图层名。 Photos…...

【格密码基础】:补充LWE问题

目录 一. LWE问题的鲁棒性 二. LWE其他分布选择 三. 推荐文献 四. 附密码学人心中的顶会 一. LWE问题的鲁棒性 robustness,翻译为鲁棒性 已有的论文表明,及时敌手获取到部分关于秘密和error的信息,LWE问题依旧是困难的,这能…...

【C++入门到精通】特殊类的设计 |只能在堆 ( 栈 ) 上创建对象的类 |禁止拷贝和继承的类 [ C++入门 ]

阅读导航 引言一、特殊类 --- 不能被拷贝的类1. C98方式:2. C11方式: 二、特殊类 --- 只能在堆上创建对象的类三、特殊类 --- 只能在栈上创建对象的类四、特殊类 --- 不能被继承的类1. C98方式2. C11方法 总结温馨提示 引言 在面向对象编程中&#xff0…...

VMware虚拟机部署Linux Ubuntu系统

本文介绍基于VMware Workstation Pro虚拟机软件,配置Linux Ubuntu操作系统环境的方法。 首先,我们需要进行VMware Workstation Pro虚拟机软件的下载与安装。需要注意的是,VMware Workstation Pro软件是一个收费软件,而互联网中有很…...

RFID标签:数字时代的智能身份

在数字时代,RFID标签(Radio-Frequency Identification)成为物联网(IoT)中不可或缺的一环。作为一种小巧却功能强大的设备,RFID标签在各个领域的应用不断扩展,为我们的生活和工作带来了新的可能性…...

《动手学深度学习(PyTorch版)》笔记3.2

注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过。…...

elasticsearch8.x版本docker部署说明

前提,当前部署没有涉及证书和https访问 1、环境说明,我采用三个节点,每个节点启动两个es,用端口区分 主机角色ip和端口服务器Amaster192.168.2.223:9200服务器Adata192.168.2.223:9201服务器Bdata,master192.168.2.224:9200服务器Bdata192.1…...

使用scyllaDb 或者cassandra存储聊天记录

一、使用scyllaDb的原因 目前开源的聊天软件主要还是使用mysql存储数据,数据量大的时候比较麻烦; 我打算使用scyllaDB存储用户的聊天记录,主要考虑的优点是: 1)方便后期线性扩展服务器; 2)p…...

Visual Studio如何修改成英文版

1、打开 Visual Studio Installer 2、点击修改 3、找到语言包,选择需要的语言包,而后点击修改 4、等待下载 5、 安装完成后启动Visual Studio 6、在工具-->选项-->环境-->区域设置-->English并确定 7、重启 Visual Studio,配置…...

gin中使用swagger生成接口文档

想要使用gin-swagger为你的代码自动生成接口文档,一般需要下面三个步骤: 按照swagger要求给接口代码添加声明式注释,具体参照声明式注释格式。使用swag工具扫描代码自动生成API接口文档数据使用gin-swagger渲染在线接口文档页面 第一步&…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

Java 加密常用的各种算法及其选择

在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

面试高频问题

文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...

统计学(第8版)——统计抽样学习笔记(考试用)

一、统计抽样的核心内容与问题 研究内容 从总体中科学抽取样本的方法利用样本数据推断总体特征(均值、比率、总量)控制抽样误差与非抽样误差 解决的核心问题 在成本约束下,用少量样本准确推断总体特征量化估计结果的可靠性(置…...

OPENCV图形计算面积、弧长API讲解(1)

一.OPENCV图形面积、弧长计算的API介绍 之前我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天我们主要结合轮廓检测的API去计算图形的面积,这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能,常用的API…...

java+webstock

maven依赖 <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.3.5</version></dependency><dependency><groupId>org.apache.tomcat.websocket</groupId&…...

MyBatis-Plus 常用条件构造方法

1.常用条件方法 方法 说明eq等于 ne不等于 <>gt大于 >ge大于等于 >lt小于 <le小于等于 <betweenBETWEEN 值1 AND 值2notBetweenNOT BETWEEN 值1 AND 值2likeLIKE %值%notLikeNOT LIKE %值%likeLeftLIKE %值likeRightLIKE 值%isNull字段 IS NULLisNotNull字段…...