强化学习之策略学习
强化学习之策略学习
策略学习的意思是通过求解一个优化问题,学出最优策略函数或它的近似(比如策略网络)。
首先把策略学习描述成一个最大化问题。
推导策略梯度
利用不同的方法近似策略梯度,得到两种训练策略网络的方法
策略网络
策略函数 π 是个条件概率质量函数
输入状态的动作,输出一个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π
的估计:
这样v(st; w)
和 yt
都是对动作价值 Vπ(st)
的估计,但是yt
有部分基于真实的观测,所以我们认为yt
比v(st; w)
更加可靠,所以用yt
来做为v(st; w)
的target,让v(st; w)
网络逼近为yt
。
定义损失函数:
损失函数梯度:
参数更新:
策略函数
类似,利用贝尔曼公式将Qπ(s,a)
替换为期望
再对期望做蒙特卡洛近似:
前面定义有TD目标和TD误差:
于是有了g:
训练流程
用目标网络改进训练
只是将价值网络计算vt和vt+1分成两个网络进行计算。
高级技巧
TRPO 置信域策略优化方法
Entropy Regulation 熵正则