[原创]从强化学习的本质推导到PPO

news2024/12/27 0:23:19

前言

这篇博客很久之前就想做了,一直在拖是因为觉得自己对知识点理解还没有足够的透彻。但是每当去复盘基本概念的时候又很难理清逻辑,所以觉得即便现在半吊子水平,但是也想通过博客记录一下自己肤浅的学习心得,权当是为自己巩固和梳理一遍知识点。

这篇博客主要借鉴了UCB的Pieter Abbeel大佬在youtube上的教学视频的思路,感兴趣的小伙伴可以移步这里 (国内的小伙伴可能需要借助一些魔法工具了hhh),这个系列视频非常简短,只有六个视频,但是包含了大量的概念和理论推导,非常适合新手入门,和了解这个领域的一些基本概念,当你理清了这些基本概念再去看论文,就可以识别出来别人论文中一些新奇的概念是否来自于那些古老而优雅的数学推导了。

强化学习的本质

基本的神经网络学习目标是 m a x ∑ i = 0 ∞ P ( y i ∣ x i , θ ) max \sum^{\infty}_{i=0}P(y_i|x_i, \theta) maxi=0P(yixi,θ),其中 x i x_i xi是输入的sample, y i y_i yi是对应的输出,NN的目标是学一个最优的参数 θ \theta θ使得输入最优地映射为输出。

而强化学习的目标则解释为让智能体学会去做出一系列最优的决策,或者说让智能体学习到一个最优的策略,这个策略可以获得最大的折扣回报的期望。
G o a l : m a x π E [ ∑ t = 0 H γ t ⋅ R ( S t , A t , S t + 1 ) ∣ π ] (1) Goal: \underset{\pi}{\mathrm{max}} E[\sum^{H}_{t=0}\gamma^t \cdot R(S_t, A_t, S_{t+1})|\pi] \tag{1} Goal:πmaxE[t=0HγtR(St,At,St+1)π](1)
其中, γ \gamma γ是折扣率,数值越大代表在计算折扣回报的时候越在意当前的动作对未来的影响。大写的 S , A S, A S,A分别代表状态集合和动作集合。 π \pi π代表策略函数。需要牢记上面的这个是期望折扣回报

因为下面还要介绍一个概念叫做最优价值函数(Optimal Value Function, V ∗ V^* V),我们会发现强化学习中的这些新概念都是具有递进关系的,前面的那个期望折扣回报似乎是一个比较广泛的概念,它并没有限定在什么样的初始状态下开始进行序列决策,但是我们在进行游戏,或者在进行某一项任务的时候总是有一个初始状态的,所以对于我们来说,研究如何使用一个最优的策略函数去最大化给定初始状态的期望折扣回报更有意义,因此最优价值函数被定义为:expected sum of discounted rewards when starting from state s s s and acting optimally:
V ∗ ( s ) = m a x π E [ ∑ t = 0 H γ t ⋅ R ( S t , A t , S t + 1 ) ∣ π , s 0 = s ] (2) V^*(s)=\underset{\pi}{\mathrm{max}} E[\sum^{H}_{t=0}\gamma^t \cdot R(S_t, A_t, S_{t+1})|\pi, s_0=s] \tag{2} V(s)=πmaxE[t=0HγtR(St,At,St+1)π,s0=s](2)
P.S.:这个函数的自变量是只有初始状态 s s s m a x \mathrm{max} max是为了acting optimally

Value Iteration/价值迭代

现在假设我们的状态空间是有限的,我们应该如何计算每种状态的最优价值函数呢?

这是原始频的讲解中在这里提出的一个问题,但是在这之前我认为还缺少一个问题:

我们为什么要算每种状态的最优价值函数呢?

那显然是因为计算最优价值函数对我们是有帮助的,这个函数值代表的是某种状态下的期望折扣回报,所以在我们进行游戏或者某项任务的时候如果提前知道了这个环境中哪个状态的期望折扣回报最大或者比较大,那么我们在做动作的时候就可以倾向于让这些状态发生。比如下图的这种游戏:
在这里插入图片描述
我们让机器人做动作,去吃到右上角的钻石。机器人位于不同的方格就是不同的状态,这个游戏中显然状态空间是有限的,那么如果我们知道机器人位于每个方格时的最优价值函数,那么我们就可以在做动作的时候让机器人尽量往数值大的方格上走。
在这里插入图片描述
最终得到的最优价值函数可以用这个表格的方式展现出来,当我们处于不同的状态时,接下来应该向哪里走就显而易见了。

接下来,那我们就只需要看一下:

如何计算每种状态的最优价值函数呢?

第一个方法就是价值迭代法,公式如下:
V k + 1 ( s ) = m a x a ∑ s ′ P ( s ′ ∣ s , a ) ( R ( s , a , s ′ ) + γ V k ( s ′ ) ) (3) V_{k+1}(s)=\underset{a}{\mathrm{max}}\sum_{s'}P(s'|s,a)(R(s,a,s')+\gamma V_k(s')) \tag{3} Vk+1(s)=amaxsP(ss,a)(R(s,a,s)+γVk(s))(3)
这里的公式大家可能会发现跟前面的公式有所出入,其实只是把期望给拆开了,这个公式里的求和符号替换之前的 E E E,之前的求和符号隐含在迭代 γ V k ( s ′ ) \gamma V_k(s') γVk(s)之中。函数 V V V的下标 k k k就代表走了多少个时间步。当 k = 0 k=0 k=0的时候给定初始状态 s s s,但是你一步也走不了,自然是没有reward的,所以 V 0 ( s ) = 0 V_0(s)=0 V0(s)=0。这样我们只要知道reward知道transition model也就是那个 P ( s ′ ∣ s , a ) P(s'|s,a) P(ss,a),我们就可以从 k = 0 k=0 k=0开始逐渐去求 k → ∞ k \rightarrow \infty k的时候价值函数的值,最终会收敛到最优价值函数的值。

所以对于一个有限状态空间和动作的强化学习任务我们可以使用下面这个伪代码展示的流程去解:

Start with V0(s)=0 for all s.
	For k=1,...,H:
		For all state s in S:
			Vk(s) <- max Equation (3)
			phai_k(s) <- argmax Equation (3)

通过价值迭代我们可以获得最终的最优价值函数以及每个状态相应的最优动作。需要注意的是这里的 π ∗ ( s ) \pi^*(s) π(s)针对每个状态s都是一个固定的动作,所以对于状态空间的探索是有限的。这种情况在探索小的状态空间的时候是没有问题的,因为总共穷举出来的轨迹也是有限的。

对上面这句话的一个直觉的解释:这里的轨迹就是从初始状态开始一直到最终游戏结束这个过程中智能体所做的所有动作,经历的所有状态和所有的rewards合并到一起就是一条轨迹,我们所说的智能体在学习,其实是让它在每条轨迹中学习到新的信息,一条轨迹对于智能体的训练来说是一个sample,更多的sample自然可以让智能体探索到更广泛的空间,学到的东西理论上也越多,而不会仅仅局限于某一种环境中。

讲述到这里其实价值迭代还差一步就是

为什么这个价值迭代一定会converge?

首先我们知道:
V ∗ ( s ) = V^*(s)= V(s)=expected sum of rewards accumulated starting from state s s s, acting optimally for ∞ \infty steps.
V H ( s ) = V_H(s)= VH(s)=expected sum of rewards accumulated starting from state s s s, acting optimally for H H H steps.
然后我们用下面的公式可以表示H之后收集的折扣奖励:
r H + 1 R ( s H + 1 ) + r H + 2 R ( s H + 2 ) + . . . < = r H + 1 R m a x + r H + 2 R m a x + . . . = r H + 1 1 − r R m a x r^{H+1}R(s_{H+1})+r^{H+2}R(s_{H+2})+... <= r^{H+1}R_{max}+r^{H+2}R_{max}+...=\frac{r_{H+1}}{1-r} R_{max} rH+1R(sH+1)+rH+2R(sH+2)+...<=rH+1Rmax+rH+2Rmax+...=1rrH+1Rmax

所以当 H → ∞ H \rightarrow \infty H的时候上面这个式子趋近于0,所以H之后时间步的累积折扣奖励趋近于0,那么 V H ( s ) → V ∗ ( s ) V_H(s) \rightarrow V^*(s) VH(s)V(s)

总结

价值迭代法用于小范围state的策略探索。

Q-Value Iteration

前面讲到的最优价值函数的自变量只有一个状态,然后从这个状态开始acting optimally收集的折扣奖励作为最优价值。但是如果我们从状态s开始想尝试所有的动作,而不仅仅是尝试最优的动作(针对状态s作出的动作),这里我们就要把针对状态s作出的动作a假设为所有可能的动作,相当于我们对于每个状态不再只有一个最优价值函数,而是在该状态下每个动作都有一个价值函数,我们都可以求。

Q-value定义为:expected utility starting from s, taking action a, and (thereafter) acting optimally.

Q ∗ ( s , a ) = ∑ s ′ P ( s ′ ∣ s , a ) [ R ( s , a , s ′ ) + γ m a x a ′ Q ∗ ( s ′ , a ′ ) ] (4) Q^*(s,a)=\sum_{s'}P(s'|s,a)[R(s,a,s')+\gamma \underset{a'}{\mathrm{max}}Q^*(s',a')] \tag{4} Q(s,a)=sP(ss,a)[R(s,a,s)+γamaxQ(s,a)](4)

相比于Optimal Value Function,Q-value可以通过相对更多的信息,比如给定一个状态及其q价值,那我们可以直接判断出那个动作下的q价值是最大的,直接作出动作。但是从价值函数是看不出来当前状态做哪个动作是最大的,你需要遍历所有的状态。

那么解决Q-value和证明其收敛性与之前的价值迭代是一样的这里不再给出具体的证明。
Q k + 1 ∗ ( s , a ) ← ∑ s ′ P ( s ′ ∣ s , a ) [ R ( s , a , s ′ ) + γ m a x a ′ Q k ∗ ( s ′ , a ′ ) ] (5) Q^*_{k+1}(s,a) \leftarrow \sum_{s'}P(s'|s,a)[R(s,a,s')+\gamma \underset{a'}{\mathrm{max}}Q^*_k(s',a')] \tag{5} Qk+1(s,a)sP(ss,a)[R(s,a,s)+γamaxQk(s,a)](5)
在这里插入图片描述

策略迭代法

前面说到价值迭代法在做游戏的时候想要从初始状态s产生一系列最优的动作的话需要遍历所有的状态,求出其最优价值函数。

为了进一步简化价值迭代法,我们又引入了q-value迭代法,q-value中引入了针对当前状态s所作的动作a作为额外的自变量,这样我们在给定状态s的时候,就可以从q(s,a)中找到最大的那个动作a作为最优策略。

这两个方法本质上是相同的,都是需要遍历所有的动作才能找到最大的那个价值,所以policy iteration提出是为了用迭代去替代遍历

Policy iteration分为policy evaluation和policy improvement两步。其中evaluation步骤,我们用价值迭代得到当前策略下的价值函数,去评估当前的policy质量(policy evaluation):
V k π ( s ) ← ∑ s ′ P ( s ′ ∣ s , π ( s ) ) [ R ( s , π ( s ) , s ′ ) + γ V k − 1 π ( s ′ ) ] (6) V^{\pi}_k(s) \leftarrow \sum_{s'}P(s'|s,\pi(s))[R(s,\pi(s),s')+\gamma V^{\pi}_{k-1}(s')] \tag{6} Vkπ(s)sP(ss,π(s))[R(s,π(s),s)+γVk1π(s)](6)
直到其收敛。

通过这个不太准确的“最优价值函数”,我们对policy进行更新 (policy improvement):
π k + 1 ( s ) ← a r g m a x a ∑ s ′ P ( s ′ ∣ s , a ) [ R ( s , a , s ′ ) + γ V π k ( s ′ ) ] (7) \pi_{k+1}(s) \leftarrow \underset{a}{\mathrm{argmax}} \sum_{s'}P(s'|s,a)[R(s,a,s')+\gamma V^{\pi_k}(s')] \tag{7} πk+1(s)aargmaxsP(ss,a)[R(s,a,s)+γVπk(s)](7)
这个迭代是一定会收敛的,因为只要我们的迭代次数足够多,实际上每种策略我们都可以经历一遍,也就是说最终肯定会有 π k + 1 ( s ) = π k s f o r a l l s t a t e s \pi_{k+1}(s)=\pi_k{s} for all state s πk+1(s)=πksforallstates.

所以对于任意的s,我们都可以有:
V π k ( s ) = m a x a ∑ s ′ P ( s ′ ∣ s , a ) [ R ( s , a , s ′ ) + γ V π k ( s ′ ) ] (8) V^{\pi_k}(s) = \underset{a}{\mathrm{max}}\sum_{s'}P(s'|s,a)[R(s,a,s')+\gamma V^{\pi_k}(s')] \tag{8} Vπk(s)=amaxsP(ss,a)[R(s,a,s)+γVπk(s)](8)
这就意味着收敛时的V正是最优价值函数。

总结

总结来说,价值迭代是在迭代迭代最优价值函数的时候就对所有的动作轨迹进行尝试,直接找到最准确的对于当前状态的最优价值函数。

而策略迭代则是每一次用不太准确的最优价值函数去更新策略,一步一步的逼近真正的最优价值函数,从而得到最优策略。

两者并没有本质的区别。

Model-free → \rightarrow Q-learning

之前介绍的两种方法价值迭代策略迭代都属于model-based的方法,因为在他们的公式中都有 P ( s ′ ∣ s , a ) P(s'|s,a) P(ss,a)这一项,这个转换模型在真实的任务中我们通常是未知的,不可以求解的。

此外,前面的两种方法还受限于小尺度的状态空间和动作空间。

因此我们现在多数用的还是model-free的方法。
回忆q-value的迭代中,我们使用的是下面这个公式
Q k + 1 ∗ ( s , a ) ← ∑ s ′ P ( s ′ ∣ s , a ) [ R ( s , a , s ′ ) + γ m a x a ′ Q k ∗ ( s ′ , a ′ ) ] (9) Q^*_{k+1}(s,a) \leftarrow \sum_{s'}P(s'|s,a)[R(s,a,s')+\gamma \underset{a'}{\mathrm{max}}Q^*_k(s',a')] \tag{9} Qk+1(s,a)sP(ss,a)[R(s,a,s)+γamaxQk(s,a)](9)
也可以写作,
Q k + 1 ∗ ( s , a ) ← E s ′ − P ( s ′ ∣ s , a ) [ R ( s , a , s ′ ) + γ m a x a ′ Q k ∗ ( s ′ , a ′ ) ] (10) Q^*_{k+1}(s,a) \leftarrow E_{s'-P(s'|s,a)}[R(s,a,s')+\gamma \underset{a'}{\mathrm{max}}Q^*_k(s',a')] \tag{10} Qk+1(s,a)EsP(ss,a)[R(s,a,s)+γamaxQk(s,a)](10)
这是在求一个期望,所以model-free的方法就是利用sample作为期望的估计以摆脱transition model的限制。
在这里插入图片描述
上面就是tabular的q-value的伪代码,简单来讲就是对每个状态都随机sample一个动作(采用 δ \delta δ-greedy策略,也就概率发生随机采样和选取当前q-value下最优的动作)。

这里视频作者乘其为off-policy learning,我想就是这里的sample action是跟策略无关的sample,作者提到该方法可以可靠地收敛到最优的q-value,这个在理论上有原论文中两页纸的证明,视频中并没有进行讲解,我想暂时我也看不懂所以这边就当作结论线记下来。

此外,我们注意这段伪代码中的这个target其实比较熟悉,它其实就是我们之前提到过的用于更新价值网络的那个TD target,更新后的q-value就是为了更接近这个target。

但是上面这种方法只是解决了转换模型的限制,并没有适应更大的状态空间,因为它还是记录了所有状态下不同动作的q-value,所以它叫做tabular q-learning.

那么为了不用表格去存储q-value,有研究提出了parameterized Q function: Q θ ( s , a ) Q_{\theta}(s,a) Qθ(s,a),也就是用参数 θ \theta θ去"存储"所有的q值。
那么这里我们就从直接迭代优化q-value转变到了迭代优化参数 θ \theta θ,但是注意的是这里的target我们仍然用的TD target:
t a r g e t ( s ′ ) = R ( s , a , s ′ ) + γ m a x a ′ Q θ k ( s ′ , a ′ ) (10) target(s')=R(s,a,s')+\gamma \underset{a'}{\mathrm{max}}Q_{\theta_k}(s',a') \tag{10} target(s)=R(s,a,s)+γamaxQθk(s,a)(10)
参数更新:
θ k + 1 ← θ k − α ∇ θ [ 1 2 ( Q θ ( s , a ) − t a r g e t ( s ′ ) ) 2 ] ∣ θ = θ k (11) \theta_{k+1} \leftarrow \theta_{k}-\alpha \nabla_{\theta}[\frac{1}{2}(Q_{\theta}(s,a)-target(s'))^2]|_{\theta=\theta_k} \tag{11} θk+1θkαθ[21(Qθ(s,a)target(s))2]θ=θk(11)
上面这种方法其实就是DQN
在这里插入图片描述
这个图给了一个double DQN的伪代码,其基本原理其实跟前面的tabular Q-learning是一样的,只不过这里引入了经验回放和double Q network的机制。

经验回放

引入这个机制的原因其实我们可以通过对比之前tabular q-learning的伪代码的区别发现:之前的tabular模式下,每一次对Q-value的迭代是更新了所有的状态下的q值的。但是我们提出DQN就是为了解决大尺度状态空间下无法存储所有的Q-value的问题,所以自然我们不可能让所有的状态都参与到Q网络的参数更新中。

所有我们在迭代的时候会存储一些之前遇到过的transitions,就是图中的这个括号里的这些信息,它包括了从一个状态采取了一个动作然后切换到了下一个状态以及得到的奖励是多少,然后后面参数更新的时候使用一些之前的transitions。我们把之前经历的这些transitions称为经验。

还需要注意的一点是,这里用的是随机采样的一些经验去更新,而不是用前面连续几次的经验。这是因为连续的经验可能高度相关,我们要打破经验之间的关联性,避免数据过拟合某些经验,当然这只是其中一个原因。还有一个原因是作者认为之前的经验也存在价值,比如t=3时候的经验对于t=10的时候也是有价值的。

Double Q Network

而引入double q network的目的,在论文中解释为,为了避免q网络过渡估计的问题。
我们看上图的TD target的计算公式会发现其中的用的 Q − Q^{-} Q网络是比 Q Q Q网络要“慢半拍”的。
因为如果某一条经验是有噪声的,就是不太好的经验导致Q网络更新了,那这个TD target中用Q网络得到的最优动作a显然是不太靠谱的,所以用两个Q网络,其中一个网络慢于另一个更新就可以一定程度上避免这种情况发生。

总结

关于q-learning比较有经典且代表性的算法就是DDQN。DDQN主要是学习一个Q网络,它的输入是当前状态和动作输出是从当前状态开始,采取动作a之后的每一步都是optimal action的情况下所获得的折扣回报的期望,这个也是q-value的意义。网络的成本函数是缩小q-value和TD target之间的距离。

那么在训练结束后,我们就得到了最终的q function,那么在给定状态s之后,我们就可以计算那个q(s,a)是最大的从而找到针对当前状态的最优动作。

策略梯度算法

DQN通常被认为具有较高的数据效率但是训练不够稳定,并且最终确定动作用得是 a r g m a x \mathrm{argmax} argmax,这只能操作与离散的动作,对于连续的动作求极值很难。

因此研究人员想用一个简单的网络针对当下的状态直接输出动作,这个网络就叫做策略网络。
所以这个网络的输入就是当前状态,输出就是动作概率分布。

接下来我们来明确这个网络的成本函数:
假设让 τ \tau τ代表一个state-action序列 s 0 , u 0 , . . . , s H , u H s_0, u_0, ..., s_H, u_H s0,u0,...,sH,uH
R ( τ ) = ∑ t = 0 H R ( s t , u t ) R(\tau)=\sum^{H}_{t=0}R(s_t, u_t) R(τ)=t=0HR(st,ut)这个代表这个序列的奖励总和,我们称之为一条轨迹的奖励总和。
然后我们引入策略网络的目标函数:
U ( θ ) = E ( ∑ t = 0 H R ( s t , u t ) ; π θ ) U(\theta)=E(\sum^{H}_{t=0}R(s_t, u_t); \pi_{\theta}) U(θ)=E(t=0HR(st,ut);πθ)
其中 π θ \pi_{\theta} πθ代表策略网络,比如 u 0 = π θ ( s 0 ) u_0=\pi_{\theta}(s_0) u0=πθ(s0),给定一个状态 s 0 s_0 s0产生一个动作 u 0 u_0 u0
所以上面这个公式的含义就是在当前的策略网络参数下所有可能出现的轨迹的奖励总和的期望,也可以写成下面这个形式:
U ( θ ) = ∑ τ P ( τ ; θ ) R ( τ ) U(\theta)=\sum_{\tau}P(\tau;\theta)R(\tau) U(θ)=τP(τ;θ)R(τ),其中 P ( τ ; θ ) P(\tau;\theta) P(τ;θ)就是在当前的策略网络下出现轨迹 τ \tau τ的概率。所以策略网络反映的动作概率分布产生的最优轨迹概率越高则我们的目标函数就会越大,所以我们期望更新参数 θ \theta θ以最大化目标函数。

采用梯度算法更新参数:
在这里插入图片描述
从最后的这个求梯度的公式来看,显然遍历所有的轨迹是不现实的,因此通常的做法是采用经验估计的方法去近似这个梯度,如下图所示,也就是随机挑选m条轨迹求平均。
在这里插入图片描述
因为我们是最大化目标函数 U ( θ ) U(\theta) U(θ),所以使用梯度上升。那么这里的奖励R如果是大于0的,就相当于我们在提升一条带有好的奖励的轨迹,如果reward是小于0的,那么相当于把负的reward的轨迹的概率给降低。这是对这个策略梯度公式的直觉上的理解。

进一步的我们把梯度公式中的log部分拆开:
在这里插入图片描述
会发现最终梯度的计算跟transition model没有关系,因为我们是对参数求导而transition model与策略网络的参数无关,所以它的导数是0. 至此,我们明白了策略梯度算法为何属于model-free的方法。

error correct in the paper “Deep Progressive Reinforcement Learning for Skeleton-based Action Recognition”

这里我们把这个梯度带回我们目标函数的梯度公式中会发现会发现这个策略梯度公式跟上次汇报提到的策略梯度的形式很像,如下图是上次汇报中提到的那篇文章所用的策略梯度公式,我们忽略符号上的不一致,会发现差别其实只是在这篇论文中他在做经验估计的时候只用了一条轨迹,而我们前面推导的策略梯度是用了多条随机轨迹去做策略梯度的经验估计,所以它这里的公式12其实有一点问题,加号应该改成减号,正如它文字中所说的,它定义的loss function是带了负号的策略梯度,所以在参数更新公式中应该是梯度下降,这样才与通常策略梯度算法中的梯度上升是匹配的:
截图自论文“Deep Progressive Reinforcement Learning for Skeleton-based Action Recognition”

Baseline substraction and actor-critic

总结一下,策略网络以给定状态为输入,输出一个动作概率分布,训练的目标是找的一组参数 θ \theta θ让这组参数下可以获得的不同轨迹的奖励总和的期望最大,就是让这组参数下最优轨迹的概率最大。而前面介绍的策略梯度理论上已经可以用来更新网络参数,使其实现预定的目标。但是后面还有了actor-critic的结构,也就是在策略网络的基础上引入了一个价值网络。

所以这一小节,我会推导从naive的策略梯度如何到了actor-critic,这里通过了一系列比较有意思的数学推导得到了最终的结果,但是在视频中并没有进行严格的推导,所以我这里也是讲解比较intuition层面的推导逻辑。

前面的这个策略梯度有两个问题,这个梯度是sample了一条轨迹或者几条轨迹算出来的,而不是一个期望,所以会引入noise,导致这样计算的梯度方差可能比较大,也就是说它计算的不准。
第二个问题是,前面我们在intuition的层面上对策略梯度进行的解释是:增加reward大于0的轨迹的概率,减小reward小于0的轨迹的概率。这样就引入一个问题,很有可能某些任务上我的reward是没有负值的,所以这样的策略梯度对于好的轨迹的提升或者对于坏的轨迹的抑制作用就不是很明显。所以能不能我对轨迹的奖励设置一个baseline,然后我去增加大于这个baseline的轨迹的概率,然后抑制小于这个baseline的轨迹的概率,所以如下图所示我们可以得到了新的策略梯度。对于第一个问题,从直觉上理解,我们让原始的reward减去了一个baseline b相当于减小了奖励的大小,一定程度上限制了梯度的方差。(当然这里应该有更严格的数学证明,但是视频中暂时没有讲。)
在这里插入图片描述
后面还有一步操作是移除与当前动作 u t u_t ut无关的奖励项,这进一步缩小了奖励值所以进一步降低了梯度估计的方差。
在这里插入图片描述
然后我们发现下面这个公式的第一项有点像Q-value,差了个折扣率,那我们就加上折扣率,让它就边为q-value,这样括号里的值又减小了一些,那梯度估计的方差也可以变小一些。至于括号里的第二项,就更加明显了,这个就是value function价值函数。

总结一下,从基本的策略梯度到actor-critic主要经历了baseline的引入,引入baseline是为了让平均线以上的轨迹出现的概率更高同时抑制平均线一下的轨迹出现概率,避免出现奖励值只有大于0的情况下,基本的策略梯度会对所有轨迹都进行概率提升导致优秀的轨迹出现的不明显。此外,引入baseline还可以降低sample-based的策略梯度估计的方差。

引入baseline那么我们就要对baseline进行估计,这里的baseline不能与动作有关,所以baseline仅依赖与状态 s t s_t st,所以我们用价值函数充当baseline,然后把策略梯度括号里的这第一项进一步的用Q-value替代。所以我们需要一个额外的价值网络去估计价值函数,所以整个的带有价值网络的网络更新流程可以简述为下图。图中主要表示了价值网络的参数我们是通过TD target进行更新的,后面这一项是为了让更新前后的参数不要相差特别多。而策略网络的参数我们就通过前面推导的策略梯度进行更新。
在这里插入图片描述

TRPO

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/845742.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ParallelCollectionRDD [0] isEmpty at KyuubiSparkUtil.scala:48问题解决

ParallelCollectionRDD [0] isEmpty at KyuubiSparkUtil.scala:48问题解决 这个问题出现在使用Kyubi Spark Util处理ParallelCollectionRDD的过程中&#xff0c;具体是在KyubiSparkUtil.scala文件的第48行调用isEmpty方法时出现的。该问题可能是由以下几个原因引起的&#xff1…

C语言文件操作笔记

目录 1.文件 1.1 文件名 1.2 文件类型 1.3 文件缓冲区 1.4 文件指针 1.5 文件的打开和关闭 1.6 文件的顺序读写 1.6.1 fputc():向指定的文件中写入一个字符 1.6.2 fgetc():从指定的文件中读取一个字符 1.6.3 fgets():从指定的流 stream 读取一行 1.6.4 puts():向标准…

华为发布数字资产继承功能

在华为开发者大会2023&#xff08;HDC.Together&#xff09;上&#xff0c;华为常务董事、终端BG CEO、智能汽车解决方案BU CEO余承东正式发布了数字资产继承功能&#xff0c;HarmonyOS提供了安全便捷的数字资产继承路径。 在鸿蒙世界中&#xff0c;我们每个人在每台设备、应用…

开箱报告,Simulink Toolbox库模块使用指南(二)——MATLAB Fuction模块

文章目录 前言 MATLAB Fuction模块 采样点设置 FFT 求解 分析和应用 总结 前言 见《开箱报告&#xff0c;Simulink Toolbox库模块使用指南&#xff08;一&#xff09;——powergui模块》 MATLAB Fuction模块 MATLAB Fuction模块是在Simulink建模仿真或生成代码时&#x…

扩散模型实战(三):扩散模型的应用

推荐阅读列表&#xff1a; 扩散模型实战&#xff08;一&#xff09;&#xff1a;基本原理介绍 扩散模型实战&#xff08;二&#xff09;&#xff1a;扩散模型的发展 扩散只是一种思想&#xff0c;扩散模型也并非固定的深度网络结构。除此之外&#xff0c;如果将扩散的思想融入…

【并发编程】无锁环形队列Disruptor并发框架使用

Disruptor 是苹国外厂本易公司LMAX开发的一个高件能列&#xff0c;研发的初夷是解决内存队列的延识问顾在性能测试中发现竟然与10操作处于同样的数量级)&#xff0c;基于Disruptor开发的系统单线程能支撑每秒600万订单&#xff0c;2010年在QCn演讲后&#xff0c;获得了业界关注…

软件单元测试

单元测试目的和意义 对于非正式的软件&#xff08;其特点是功能比较少&#xff0c;后续也不有新特性加入&#xff0c;不用负责维护&#xff09;&#xff0c;我们可以使用debug单步执行&#xff0c;内存修改&#xff0c;检查对应的观测点是否符合要求来进行单元测试&#xff0c…

操作指南 | 如何使用Chainlink喂价功能获取价格数据

Chainlink的去中心化预言机网络中的智能合约包含由运行商为其他智能合约&#xff08;DApps&#xff09;使用或截取所持续更新的实施价格数据。其中有两个主要架构&#xff1a;喂价和基础要求模型。此教程将会展现如何在Moonbeam、Moonriver或是Moonbase Alpha测试网上使用喂价功…

使用一个python脚本抓取大量网站【1/3】

一、说明 您是否曾经想过抓取网站&#xff0c;但又不想为像Octoparse这样的抓取工具付费&#xff1f;或者&#xff0c;也许您只需要从网站上抓取几页&#xff0c;并且不想经历设置抓取脚本的麻烦。在这篇博文中&#xff0c;我将向您展示我如何创建一个工具&#xff0c;该工具能…

2023爱分析·信创云市场厂商评估报告:中国电子云

01 研究范围定义 信创2.0时代开启&#xff0c;信创进程正在从局部到全面、从细分到所有领域延展。在这个过程中&#xff0c;传统的系统集成,也在逐步向信创化、数字化及智能化转变。随着信创产业的发展&#xff0c;企业需要更多的技术支持和服务&#xff0c;而传统的系统集成已…

Laravel 框架资源嵌套.浅嵌套.自定义表单伪造.CSRF 保护 ④

![请添加图片描述](https://img-blog.csdnimg.cn/154d035aa4db42df99f3b01fbf287e46.gif#pic_center)作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; THINK PHP &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&a…

暗黑版GPT流窜暗网 降低犯罪门槛

随着AIGC应用的普及&#xff0c;不法分子利用AI技术犯罪的手段越来越高明&#xff0c;欺骗、敲诈、勒索也开始与人工智能沾边。 近期&#xff0c;专为网络犯罪设计的“暗黑版GPT”持续浮出水面&#xff0c;它们不仅没有任何道德界限&#xff0c;更没有使用门槛&#xff0c;没有…

【Linux命令行与Shell脚本编程】第十六章 Shell函数

Linux命令行与Shell脚本编程 第一章 文章目录 Linux命令行与Shell脚本编程六.函数6.1.脚本函数基础6.1.1.创建函数6.1.2.使用函数 6.2.函数返回值6.2.1.默认的退出状态码6.2.2.使用return命令6.2.3.使用函数输出 6.3.函数中使用变量6.3.1.向函数传递参数6.3.2.在函数中处理变量…

【jvm】jvm整体结构(hotspot)

目录 一、说明二、java代码的执行流程三、jvm的架构模型3.1 基于栈式架构的特点3.2 基于寄存器架构的特点 一、说明 1.hotspot vm是目前市场上高性能虚拟机的代表作之一 2.hotspot采用解释器与即时编译器并存的架构 3.java虚拟机是用来解释运行字节码文件的&#xff0c;入口是字…

微服务技术栈(1.0)

微服务技术栈 认识微服务 单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打成一个包部署 优点&#xff1a; 架构简单部署成本低 缺点&#xff1a; 耦合度高 分布式架构 分布式架构&#xff1a;根据业务功能对系统进行拆分&#xff0c…

深度学习和OpenCV的对象检测(MobileNet SSD图像识别)

基于深度学习的对象检测时,我们主要分享以下三种主要的对象检测方法: Faster R-CNN(后期会来学习分享)你只看一次(YOLO,最新版本YOLO3,后期我们会分享)单发探测器(SSD,本节介绍,若你的电脑配置比较低,此方法比较适合R-CNN是使用深度学习进行物体检测的训练模型; 然而,…

新西兰跨境电商购物网站多语言翻译系统快速开发

搭建一个新西兰跨境电商购物网站的多语言翻译系统&#xff0c;可以按照以下步骤进行快速开发&#xff1a; 步骤1&#xff1a;确定需求和目标 首先&#xff0c;你需要明确你的网站需要支持哪些语言&#xff0c;并确定你想要实现的多语言翻译系统的具体功能和目标。 步骤2&…

unity如何手动更改脚本执行顺序

在Unity中&#xff0c;脚本的执行顺序是由脚本的执行顺序属性决定的。默认情况下&#xff0c;Unity根据脚本在项目中的加载顺序来确定它们的执行顺序。然而&#xff0c;你可以手动更改脚本的执行顺序&#xff0c;以下是一种方法&#xff1a; 在Unity编辑器中&#xff0c;选择你…

【云原生】kubectl命令的详解

目录 一、陈述式资源管理方式1.1基本查看命令查看版本信息查看资源对象简写查看集群信息配置kubectl自动补全node节点查看日志 1.3基本信息查看查看 master 节点状态查看命名空间查看default命名空间的所有资源创建命名空间app删除命名空间app在命名空间kube-public 创建副本控…

Unity背包系统与存档(附下载链接)

下载地址: https://download.csdn.net/download/qq_58804985/88184776 视频演示: 功能: 拖动物品在背包中自由移动,当物品拖动到其他物品上时,和其交换位置.基于EPPlus的背包数据与位置保存 原理: 给定一个道具池表格与一个背包表格 道具池表格负责存储所有道具的信息 背…