1 介绍
Q-learning、SARSA 等算法都是基于值的学习方法。基于值的方法主要用于离散动作空间。如果动作空间是连续的,离散化可能会导致精度下降或增加计算复杂度。基于值的方法通常要求对每个状态-动作对估计值函数,这限制了策略的复杂性和灵活性。为了使强化学习适用于连续的动作空间,策略梯度被设计了出来。
DQN 算法输出的是所有行为的 Q-Value。如果用于连续的动作空间,我们可以让 DQN中的网络直接输出行为。但随之而来的问题是:如何学习?学习就是训练网络,那么就需要设计损失函数。可以采用如下损失函数,也就是最大化奖励的期望。
第三节有相关的详细介绍和推导。
2 设计思想
- 直接优化策略:
策略梯度方法通过优化策略参数来直接最大化期望回报。这种方法可以自然地处理连续动作空间,因为策略参数化通常不依赖于离散化动作。 - 灵活的策略表示:
策略梯度方法可以使用复杂的函数逼近(如神经网络)来表示策略,使其能够捕捉复杂的策略行为。这种灵活性使得策略梯度方法能够处理高维状态和动作空间。 - 无须显式建模环境:
策略梯度方法不需要对环境的动态进行显式建模,而是通过与环境的交互直接学习和优化策略。这使得它们在环境模型不可用的情况下也能有效工作。 - 强化探索:
策略梯度方法通过策略优化促进更广泛的探索。它们通过调整策略的参数来增加对有潜力的动作的探索,这有助于发现更好的策略。 - 处理长期回报:
策略梯度方法能够处理长期回报的优化,因为它们直接优化期望回报函数,可以更好地处理长期奖励的延迟性。
总结来说,策略梯度方法通过直接优化策略函数、处理高维和连续动作空间的复杂性,以及强化探索等优势,克服了基于值方法的一些限制,使其在许多实际应用中表现得更加有效和灵活。
3 梯度推导
建议先了解神经网络、梯度下降。
首先约定一下符号。学习过程开始后,智能体观察环境所获得状态记为
s
1
s_{1}
s1,然后根据当前状态
s
1
s_{1}
s1,采取行为
a
1
a_{1}
a1。行为作用到环境,导致状态发生变化,记为
s
1
s_{1}
s1 变为
s
2
s_{2}
s2。同时环境反馈奖励 。这是第一轮学习。
第二轮中,智能体观察到状态
s
2
s_{2}
s2,采取行为
a
2
a_{2}
a2,获得奖励
r
2
r_{2}
r2,状态由
s
2
s_{2}
s2 变为
s
3
s_{3}
s3。后续循环这个过程,数字表示轮次。
则一整个学习过程可记为:
τ
\tau
τ 中共有 T 次操作。
如果以打手机游戏为例,s 为屏幕像素,r 为释放技能或走位,击杀基于奖励 r 为 10,赢得游戏给予奖励 1000,输掉游戏给予奖励 -1000。
τ
\tau
τ 为一局游戏的整个过程。
记第 n 局游戏为:
τ
n
\tau^{n}
τn
要学习什么呢?学习根据当前状态,判断采取尽可能好的行为的能力。可以通过神经网络或其他算法采取行动。那么这里就需要学习你所使用的算法中的参数,这里统一把参数记为
θ
\theta
θ。简单起见,我们就以多层感知机(MLP) 作为决策模型,那么
θ
\theta
θ就是:
学习目标是使得奖励最大化。下面公式也就是学习目标,或称为损失函数:
解释一下这个公式。
θ
\theta
θ 为当前参数数值;
P
(
τ
∣
θ
)
P(\tau|\theta)
P(τ∣θ) 为打出游戏状况为
τ
\tau
τ 的概率;
R
(
τ
)
R(\tau)
R(τ) 为
τ
\tau
τ 中获得的奖励总和,即
r
1
+
r
2
+
.
.
.
r_{1}+r_{2}+...
r1+r2+... 。那么根据数学期望知,当前智能体打完所有的可能的游戏对局情况
τ
\tau
τ,所得到的平均奖励可记为:
但是一般情况下,不可能让智能体打完所有的对局情况的,所以这个公式没办法计算。退一步讲,我们可以使用大数定律。即,让智能体打 N 局游戏,N 足够大,那么就近似为平均奖励为:
我们的目标就是让这个平均奖励尽可能大。那么这个函数可以理解为损失函数,我们需要通过调整
θ
\theta
θ 对这个函数进行优化。
怎么做呢?我们可以使用梯度下降来更新参数
θ
\theta
θ。即求解如下:
接下来推导一下如何更新 θ:
假设我们当前已经学习了若干组
τ
\tau
τ,每一组会有若干个
τ
\tau
τ。我们以组为单位进行训练,也就是每次训练时,会有若干个
τ
\tau
τ 参与。
对于每一组,
θ
\theta
θ 更新公式为:
其中,η 是学习率,
∇
\nabla
∇ 为梯度。
那么梯度怎么求?如下:
这个梯度公式不难理解。由于只有
P
(
τ
∣
θ
)
P(\tau|\theta)
P(τ∣θ) 中包含
θ
\theta
θ,因此
∇
\nabla
∇ 可以直接挪到
P
(
τ
∣
θ
)
P(\tau|\theta)
P(τ∣θ) 前。
然后我们进而求解
∇
P
(
τ
∣
θ
)
\nabla P(\tau|\theta)
∇P(τ∣θ):
这里转化为 log 形式,方便后面将乘法转换为加法,方便求解。
进一步我们知:
我们上面说不可能让智能体打完所有的对局情况,因此:
到这一步,怎么求
∇
P
(
τ
n
∣
θ
)
\nabla P(\tau^{n}|\theta)
∇P(τn∣θ) ?我们可按照全概率公式先将
P
(
τ
n
∣
θ
)
P(\tau^{n}|\theta)
P(τn∣θ) 展开。我们这里简单一些,展开如下:
按照全概率公式展开的话,并不是这样的。为了避免太复杂,我们这里考虑每次状态变化不受行为影响,完全独立,来简化一下。
然后我们知道:
最后整理一下:
然后我们就可以更新
θ
\theta
θ 了,也就是说我们可以使用强化学习来学习模型了。