当前位置: 首页 > 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渲染在线接口文档页面 第一步&…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

免费数学几何作图web平台

光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...