强化学习之策略学习

策略学习的意思是通过求解一个优化问题,学出最优策略函数或它的近似(比如策略网络)。

首先把策略学习描述成一个最大化问题。

推导策略梯度

利用不同的方法近似策略梯度,得到两种训练策略网络的方法

策略网络

策略函数 π 是个条件概率质量函数

输入状态的动作,输出一个0-1之间的概率值。我们在每一个状态s下,利用策略函数计算每个动作的概率值,然后随机抽样得到动作a,让Agent执行动作a。

如何得到这样一个策略函数?

最有效还是用神经网络去近似π函数,这样的神经网络称为策略网络。

θ 表示神经网络的参数;一开 始随机初始化 θ,随后利用收集的状态、动作、奖励去更新 θ。

策略网络的目标函数

复习一些基本内容

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

在 t 时刻,Ut 是随机变量,它的不确定性来自于未来未知的状态和动作。

动作价值函数的定义是:

条件期望把 t 时刻状态 st 和动作 at 看做已知观测值,把 t + 1 时刻后的状态和动作看做 未知变量,并消除这些变量。

状态价值函数的定义是:

状态价值既依赖于当前状态 st,也依赖于策略网络 π 的参数 θ。

  • 当前状态 st 越好,则 Vπ(st) 越大,也就是回报 Ut 的期望越大。
  • 策略 π 越好(即参数 θ 越好),那么 Vπ(st) 也会越大。

对于一个好的策略π ,其对所有的状态S,状态价值Vπ(st)的均值都应该很大

所以我们定义目标函数

所以问题就转化为求解 θ,使得 J(θ) 最大。

策略梯度方法

具体的证明略,只说其思想及结论。

已知要求解策略目标函数,就是要求出 最大化J(θ)的θ。

于是利用J(θ)对θ求导,得到dJ(θ)/dθ,称作策略梯度

近似策略梯度

有了策略梯度以后,但是还是解不出这个期望,所以得用一些方法去近似求解策略梯度中的期望。

比如之前在Q-Learning中就使用了蒙特卡洛近似去求解Q*。

有了随机梯度之后,我们可以用随机梯度上升来更新θ,使目标函数 J(θ)逐渐增长:

用实际观测值s,a去近似S和A,这样还不够,我们计算不出来g(s, a; θ),因为我们不知道动作价值函数Qπ(s,a)。

在对动作价值函数Qπ(s,a)求近似:

  • 使用实际观测的回报u,近似Qπ(s,a) —— REINFORCE
  • 使用神经网络q(s,a;w),近似Qπ(s,a) —— Actor-Critic

REINFORCE

简单推导

训练流程

Actor-Critic

Actor-Critic 方法中用一个神经网络近似动作价值函数 Qπ(s, a),这个神经网络叫做 “价值网络”,记为 q(s, a; w),其中的 w 表示神经网络中可训练的参数。价值网络的输入是状态 s,输出是每个动作的价值。

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

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

简单推导

Actor-Critic 翻译成“演员—评委”方法。策略网络 π(a|s; θ) 相当于演员,它基于状 态 s 做出动作 a。价值网络 q(s, a; θ) 相当于评委,它给演员的表现打分,量化在状态 s 的情况下做出动作 a 的好坏程度。

为什么不直接把奖励 R 反馈给策略网络(演员)?

需要注意的是:策略学习的目标函数 J(θ) 是回报 U 的期望,而不是奖励 R 的期望;注意回报 U 和奖励 R 的区别。虽然能观测到当前的奖励 R,但是它对价值网络是毫无意义的;训练策略网络(演员)需要的是回报 U,也就是未来所有奖励的加权和。价值网络(评委)能够估算出回报 U 的期望,因此能帮助训练策略网络(演员)。

训练策略网络(演员)

但是需要注意的是,这样更新会使评委的打分越来越高,策略网络会更加去迎合评委的喜好。

训练价值网络(评委)

训练流程

用目标网络改进价值网络

在价值网络中,我们提到Q学习和SARSA中都存在自举现象,可以使用目标网络缓解自举造成的偏差。

我们可以用目标网络去计算TD目标,缓解偏差。

Baseline

直接基于策略梯度公式对Qπ做近似得到的两个方法:REINFORCE和Actor-Critic方法效果通常不行。

但是只要用Qπ(S, A) − b 替换掉 Qπ,其中b是不依赖于动作A的任意函数,就能得到不错的效果。

其中:b 称为 动作价值函数 Qπ(S, A) 的基线(baseline)。

基于baseline之后,策略梯度可以近似为以下:

只要b不依赖于A,b的取值都不影响随机梯度的期望。

但b对随机梯度有影响,用不同的b会得到不同的方差。

如果b很接近Qπ(s, a) 关于 a 的均值,那么方差会比较小。所以 b = Vπ(s) 是很好的基线

带baseline的reinforce算法

我们用一个神经网络v(s,w)来近似状态价值函数Vπ(s),用实际观测值u替代动作价值函数Q_π(S,A)。

这样,g(s,a,θ)就被近似成了:

更新策略网络参数:

需要注意的是,此处价值网络得到的价值只是为了降低方差,实际帮助策略网络改进参数的是实际观测到的回报u。

算法推导

训练流程

Advantage Actor-Critic (A2C)

针对之前得到的带baseline的策略梯度做蒙特卡洛近似得到:

将公式中的Q_π(s,a) - V_π(s)称作优势函数,该方法被称作:Advantage Actor-Critic,缩写 A2C。

A2C和带baseline的reinforce的神经网络结构都和不带baseline的一样,关键在于使用不同的方法来训练两个神经网络。

算法推导

简述推导过程就是:

价值网络

Vπ(st)近似为价值网络v(st;w)对其做TD目标,得到t+1时刻对的估计:

这样v(st; w)yt 都是对动作价值 Vπ(st) 的估计,但是yt有部分基于真实的观测,所以我们认为ytv(st; w)更加可靠,所以用yt来做为v(st; w)的target,让v(st; w)网络逼近为yt

定义损失函数:

损失函数梯度:

参数更新:

策略函数

类似,利用贝尔曼公式将Qπ(s,a)替换为期望

再对期望做蒙特卡洛近似:

前面定义有TD目标和TD误差:

于是有了g:

训练流程

用目标网络改进训练

只是将价值网络计算vt和vt+1分成两个网络进行计算。

高级技巧

  • TRPO 置信域策略优化方法

  • Entropy Regulation 熵正则